Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  FAQFAQ  SuchenSuchen  AnmeldenAnmelden  MitgliederMitglieder  LoginLogin  

Austausch | 
 

 #appendto/#include/Überladung

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
Liech
Fregattenkapitän
Fregattenkapitän


Männlich Alter : 26
Anmeldedatum : 02.02.09

BeitragThema: #appendto/#include/Überladung   Sa Mai 30, 2009 12:14 pm

Hier lernt ihr das sinnvolle benutzen von #include und #appendto

#include

Durch den Befehl #include wird das Script des Objekts der ID die dahinter steht an dieser Stelle angefügt (es sollte oben im Script geschrieben werden)

Beispiel:

Zitat :
ID: OBJ1
Script:
#strict

func Funktion() { Message("Hallo",this());}

Zitat :
ID: OBJ2
Script:
#strict
#include OBJ1

func Funktion(){Message("Welt",this());}

Da das Script an der Stelle angefügt wurde bei dem Include steht sieht das ganze jetzt imaginär so aus:

Zitat :
ID: OBJ2
Script:
#strict
#include OBJ1
func Funktion() { Message("Hallo",this());}

func Funktion(){Message("Welt",this());}

Hier ist jetzt zweimal die selbe Funktion in einem Script (Es können auch neue Funktionen Includiert werden!), wodurch ein kleines Problem entsteht:
Welche soll genutzt werden? Diejenige die am weitesten unten steht wird gewertet, weswegen die nachricht "Welt" ausgibt.
Das ist nützlich wenn man ein Objekt hat, es aber nur in den Grundzügen ändern will und ansonsten übernehmen kann wie z.B. beim schaffen eines Alternativen Clonks. Dort reicht es meist den Standard Clonk als Grundlage zu nutzen.

Hiermal ein Beispiel für einen Kamikaze Clonk mit voller funktionsfähigkeit, bis darauf das er sich auf "Werfen" in die Luft sprengt, solange er nichts in der hand hält.

Zitat :
ID: KACL
Script:
#strict
#include CLNK

func ControlThrow()
{
Kill()
this()->Explode(50);
return(1);
}

Kommen wir mal zu inherited(), was dazu führt das die im Script nächst höhere Funktion (Die überaldene Funktion) ausgeführt wird und der rückgabe wert ihrer zurück gegeben wird. Ein Simples Beispiel demonstriert das mal:
Zitat :

Script:
#strict

func Funktion(){Log("A"); _inherited();}
func Funktion(){Log("B"); _inherited();}
func Funktion(){Log("C"); _inherited();}
func Funktion(){Log("D"); _inherited();}
func Funktion(){Log("E"); _inherited();}
func Funktion(){Log("F"); _inherited();}
resultierende Ausgabe: FEDCBA
Das Funktioniert natürlich auch bei dem Hallo/Welt beispiel weiter oben. Sollte keine Funktion "oben drüber" gefunden werden wird garnichts gemacht. Will man eine fehlermeldung kann man inherited() statt _inherited() benutzen.
Übrigens: Wenn man auchnoch alle Parameter übergeben will, aber zu faul ist diese abzutippen/sie unbekannt sind kann man auch _inherited(...) schreiben.


Multiple Includierungen sind natürlich auch möglich:

Zitat :
#include OBJ1
#include OBJ2

#appendto

Durch den Befehl #appendto wird das Script in der das jeweilige #appendto steht unten an das Script mit der darauffolgenden ID angehängt. Auch appendto sollte immer vor der ersten Script zeile geschrieben werden (aber nach #strict!)

Aus dem
Zitat :
ID: OBJ1
Script:
#strict

func Funktion(){Message("Hallo",this());}

und dem
Zitat :
ID: OBJ2
Script:
#strict
#appendto OBJ1

func Funktion(){Message("Welt",this());}

können wir uns vorstellen das das hier wird
Zitat :
ID: OBJ1
Script:
#strict

func Funktion(){Message("Hallo",this());}
func Funktion(){Message("Welt",this());}
Wobei wieder die unterste Funktion gewertet wird (Welt wird ausgegeben)


#appendto sind besonders nützlich wenn man vorhandene Clonks um kleine Script funktionen erweitern will.

Man kann sie genauso wie #include mehrfach benutzen. Es besteht jedoch noch die möglichkeit sie an alle Objekte anzuhängen:

Zitat :
#appendto *

Mit einem Trick für Fortgeschrittene ist es auch möglich sie nur an bestimmte typen von objekten anzuhängen, aber trotzdem keine genaueren zu definieren. Z.b. könnte man alle Clonks durch Werfen sprengen, da es allerdings nahezu unendlich viele (von ritterclonk bis hazardclonk oder superdupermegadoofimbaclonk von wuargh301) gibt ist es soetwas eher ungeschickt:
Zitat :
Script:
#strict

#appendto CLNK
#appendto BLA1
#appendto BLA2
....
und an alle etwas anhöngen:
Zitat :
#appendto *
klappt genauso wenig.

Hier die lösung:
Zitat :
#strict

#appendto *

func Funktion()
{
if(!Bedingung()) return(_inherited(...)); //Muss bei jeder überladenen/benutzen Funktion sein
//Bedingung könnte zb. IsClonk() sein, was alle clonks beträfe
Script(); //beliebiges Script
}


Ich hoffe das half euch einigermaßen etwas recht simples zu verstehen.
Nach oben Nach unten
Benutzerprofil anzeigen
Voltago
Brigadegeneral
Brigadegeneral
avatar

Anmeldedatum : 25.09.09

BeitragThema: Re: #appendto/#include/Überladung   Do Okt 22, 2009 10:39 pm

und was genau bringt jetzt appendto?
Nach oben Nach unten
Benutzerprofil anzeigen
Patta
Großadmiral
Großadmiral
avatar

Männlich Alter : 23
Anmeldedatum : 22.05.09

BeitragThema: Re: #appendto/#include/Überladung   Do Okt 22, 2009 10:53 pm

das hängt das, was du dann als script schreibst an das Objekt an. Beispiel:

#appendto WOOD

func hit() {
Explode(1000);
}

würde zus. zum normalen Script des Holzes (falls es eins hat, weiss grad nicht) noch bewirken dass es beim Aufprall explodiert. (ka obs hundertprozentig stimmt, aber ist ja nur n Beispiel.
Nach oben Nach unten
Benutzerprofil anzeigen http://sites.google.com/site/clonkprojekte/star-wars
Mozart
Kanzler
Kanzler
avatar

Männlich Alter : 24
Ort : Vaihingen/Enz
Anmeldedatum : 24.02.08

BeitragThema: Re: #appendto/#include/Überladung   Do Okt 22, 2009 10:58 pm

Abstrakt gesagt:
Du musst nicht ein neues Objekt erfinden wenn du ein altes nur abändern willst, das aber nicht kannst, weil es zB in Objects drin ist oder in anderen großen Objektpaketen
Nach oben Nach unten
Benutzerprofil anzeigen http://www.funamfag.de
Elfangor
General
General
avatar

Männlich Alter : 25
Ort : Mainz
Anmeldedatum : 26.06.08

BeitragThema: Re: #appendto/#include/Überladung   Do Dez 31, 2009 3:07 pm

Kann ich Defcoreinhalte auch appendieren?
Nach oben Nach unten
Benutzerprofil anzeigen http://www.m-w-c.de.vu
Tundanér
Fregattenkapitän
Fregattenkapitän
avatar

Männlich Alter : 22
Ort : Rödental
Anmeldedatum : 03.02.09

BeitragThema: Re: #appendto/#include/Überladung   Do Dez 31, 2009 3:09 pm

Ich denke mal nicht.Man zwar DefCore Werte abfragen,aber nicht includen.
Nach oben Nach unten
Benutzerprofil anzeigen
Gamer
Staatsrat
Staatsrat
avatar

Männlich Alter : 22
Ort : In einem kleinen Dorf in Unterfranken (Bayern)
Anmeldedatum : 10.02.09

BeitragThema: Re: #appendto/#include/Überladung   Do Dez 31, 2009 3:21 pm

Ja, das wurde noch nicht eingebaut. Es gibt zwar Script appendtos aber keine Defcore / Actmap appendto's - was ich seehr schade finde. Keine Ahnung obn das je mal eingebaut wird..

_________________
Star Wars Projekt Homepage: http://sites.google.com/site/clonkprojekte/star-wars

Das Burg Projekt.................................................................... Schaut doch mal im Super-Mario Clonk Editon Forum vorbei!
Nach oben Nach unten
Benutzerprofil anzeigen http://www.gamer95.npage.de/
Tundanér
Fregattenkapitän
Fregattenkapitän
avatar

Männlich Alter : 22
Ort : Rödental
Anmeldedatum : 03.02.09

BeitragThema: Re: #appendto/#include/Überladung   Do Dez 31, 2009 3:27 pm

Theoretisch könnte man das ja regeln, oder? Mit GetDefCoreVal und GetActMapVal. Dann müsste es noch "SetDefCoreVal" und "SetActMapVal" geben, dann könnte man das über den script machen.
Nach oben Nach unten
Benutzerprofil anzeigen
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: Re: #appendto/#include/Überladung   Di März 09, 2010 8:04 pm

Wird OC dieses Feature denn nach bisherigem Planungsstand beinhalten?
Nach oben Nach unten
Benutzerprofil anzeigen
Chaia
Clonk
Clonk


Männlich Alter : 24
Anmeldedatum : 29.03.10

BeitragThema: Re: #appendto/#include/Überladung   Di März 30, 2010 4:39 pm

Kann man eigentlich mehrere appends mit verschiedenem Effekt an verschiedene Dinge in einem Script verbinden?
Z.B.
Zitat :
(...)
#appendto ROCK

protected func Hit()
{
Explode(100);
}

#appendto WOOD

protected func Activate()
{
Explode(10);
}
Nach oben Nach unten
Benutzerprofil anzeigen
Gamer
Staatsrat
Staatsrat
avatar

Männlich Alter : 22
Ort : In einem kleinen Dorf in Unterfranken (Bayern)
Anmeldedatum : 10.02.09

BeitragThema: Re: #appendto/#include/Überladung   Di März 30, 2010 4:42 pm

Nein geht nicht.. Musst du für jedes Einzeln nen Script machen.

_________________
Star Wars Projekt Homepage: http://sites.google.com/site/clonkprojekte/star-wars

Das Burg Projekt.................................................................... Schaut doch mal im Super-Mario Clonk Editon Forum vorbei!
Nach oben Nach unten
Benutzerprofil anzeigen http://www.gamer95.npage.de/
Stephan Borgs
Kadett
Kadett
avatar

Männlich Alter : 23
Ort : Duisburg Meiderich
Anmeldedatum : 09.03.10

BeitragThema: Re: #appendto/#include/Überladung   Di März 30, 2010 9:35 pm

Ist doch auch keine Mühe n neues Script.c zu öffnen, oder?
Nach oben Nach unten
Benutzerprofil anzeigen
Chaia
Clonk
Clonk


Männlich Alter : 24
Anmeldedatum : 29.03.10

BeitragThema: Re: #appendto/#include/Überladung   Di März 30, 2010 10:38 pm

Ne aber man hätte alles der Einfachheit halber alles in einem Script.
Nach oben Nach unten
Benutzerprofil anzeigen
Stephan Borgs
Kadett
Kadett
avatar

Männlich Alter : 23
Ort : Duisburg Meiderich
Anmeldedatum : 09.03.10

BeitragThema: Re: #appendto/#include/Überladung   Di März 30, 2010 11:21 pm

Man kann auch alle Script-dokumente in einen c4g Ordner packen!
Nach oben Nach unten
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: #appendto/#include/Überladung   

Nach oben Nach unten
 
#appendto/#include/Überladung
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Anfänger :: Tutorials-
Gehe zu: