CNDG
Würden Sie gerne auf diese Nachricht reagieren? Erstellen Sie einen Account in wenigen Klicks oder loggen Sie sich ein, um fortzufahren.


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

 

 #appendto/#include/Überladung

Nach unten 
+6
Tundanér
Elfangor
Mozart
Patta
Voltago
Liech
10 verfasser
AutorNachricht
Liech
Fregattenkapitän
Fregattenkapitän



Männlich Alter : 33
Anmeldedatum : 02.02.09

#appendto/#include/Überladung Empty
BeitragThema: #appendto/#include/Überladung   #appendto/#include/Überladung EmptySa 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
Voltago
Brigadegeneral
Brigadegeneral
Voltago


Anmeldedatum : 25.09.09

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

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


Männlich Alter : 30
Anmeldedatum : 22.05.09

#appendto/#include/Überladung Empty
BeitragThema: Re: #appendto/#include/Überladung   #appendto/#include/Überladung EmptyDo 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
http://sites.google.com/site/clonkprojekte/star-wars
Mozart
Kanzler
Kanzler
Mozart


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

#appendto/#include/Überladung Empty
BeitragThema: Re: #appendto/#include/Überladung   #appendto/#include/Überladung EmptyDo 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
http://www.funamfag.de
Elfangor
General
General
Elfangor


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

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

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


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

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

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


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

#appendto/#include/Überladung Empty
BeitragThema: Re: #appendto/#include/Überladung   #appendto/#include/Überladung EmptyDo 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..
Nach oben Nach unten
http://www.gamer95.npage.de/
Tundanér
Fregattenkapitän
Fregattenkapitän
Tundanér


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

#appendto/#include/Überladung Empty
BeitragThema: Re: #appendto/#include/Überladung   #appendto/#include/Überladung EmptyDo 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
Wipfmagus
Konteradmiral
Konteradmiral
Wipfmagus


Weiblich Alter : 28
Anmeldedatum : 06.03.10

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

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



Männlich Alter : 31
Anmeldedatum : 29.03.10

#appendto/#include/Überladung Empty
BeitragThema: Re: #appendto/#include/Überladung   #appendto/#include/Überladung EmptyDi 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
Gamer
Staatsrat
Staatsrat
Gamer


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

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

Nein geht nicht.. Musst du für jedes Einzeln nen Script machen.
Nach oben Nach unten
http://www.gamer95.npage.de/
Stephan Borgs
Kadett
Kadett
Stephan Borgs


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

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

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



Männlich Alter : 31
Anmeldedatum : 29.03.10

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

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


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

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

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





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

Nach oben Nach unten
 
#appendto/#include/Überladung
Nach oben 
Seite 1 von 1

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