Zauber sind ganz einfache Objecte man kann sie wie jedes andere Object auch mit CreateObject erstellen und man löst sie mittels Activate(object Caster) aus bzw. der Zauberer Ruft diese Funktion im Zauber aus. Im einfachsten Fall könnte das so Aussehen:
Code:
//Erschaffe einen Clonk var clonk; clonk=CreateObject(CLNK,100,100,-1); //Erschaffe einen Zauber und lasse ihn vom Clonk Zaubern CreateObject(ZauberID,0,0,-1)->Activate(clonk);
Und der Code des Zaubers könnte in diesem Fall so aussehen:
Code:
public func Activate(object Caster){ Sound("Magic*"); return(RemoveObject()); }
Mit diesem tollen Zauber kann der Zauberer ein magisches Geräusch erzeugen. Man kann aber auch beliebige andere dinge in die Funktion schreiben um sinnvolle Ergebnisse zu erzielen dies ist nur ein einfaches Beispiel zur Demonstration.
Damit wären die Grundlagen geschaffen und wir können jetzt an einem richtigen Beispiel lernen wie man überhaupt das Object erstellt.
Zuerst müssen wir ein neues Object machen und den Defcore ändern: Defcore:
Spoiler:
[DefCore] id=TEST //id nach belieben Name=BeispielZauber Version=4,9,5 Category=C4D_Magic //Dies ist die Kategorie für Zauber Zahlenwert: 131072 Width=1 //größe im Spiel ist egal Height=1 //größe im Spiel ist egal Value=30 //Der Wert gibt an wie viel Mana der Zauber später kostet Components=IROC=2; //Bei eingeschalteter AlchemieRegel aus Fantasy sind das die dinge die gebraucht werden in diesem beispiel würde man zwei Steinsplitter für den Zauber brauchen im Fantasy Pack findet man die id's der anderen Zutaten Picture=0,0,64,64
Jetzt kann man noch Beschreibung und das Bild des Zaubers ändern und sich schließlich dem script widmen. Dieser Zauber soll sowohl gezielt als auch nicht gezielt verwendet werden können. Er soll einen Glühenden Hagel aus roten Partikeln in die gewählte richtung schleudern und auch über das Kombosystem Verfügbar sein.Zusätzlich soll er wenn man ein Stück Erde im Inventar hat die Farbe der Partikel zu grün ändern.
So wird das nacher aussehen:
Der script sieht so aus den werden wir gleich stück für stück durchgehen:
Zitat :
/*-- Ein nuer Zauber --*/
#strict 2
//Diese Funktion wird vom Zauberer Aufgerufen public func Activate(object Caster) { //Magisches Geräusch Sound("Magic*"); //prüfen ob der Zauberer Zielen kann if (Caster->~DoSpellAim(this())) return true; //Ansonsten gerade nach oben Zaubern ActivateAngle(0); //und Object löschen RemoveObject(); }
//Diese Funktion wird vom Zauberer Aufgerufen falls er zielen //kann in dem moment wo er den Zauber loslässt public func ActivateAngle(object Caster,int Angle) { //Eine Variable die die Farbe der Partikel speichert var color; color=RGB(180,0,0);
//Falls der Zauberer einen Erdklumpen im Inventar hat if(FindContents(ERTH,Caster)){ //Den Erdklumpen entfernen RemoveObject(FindContents(ERTH,Caster)); //und die Farbe zu grün ändern color=RGB(0,180,0); }
//In einer for schleife Particle erzeugen und in die angegebene Richtung schleudern for(var i=0;i<25;i++) CreateParticle( "PSpark", //Particle vom Typ PSpark erzeugen 0,0, // an der Position des Zaubers Sin(Angle+RandomX(-10,10),10+Random(40)), //am winkel X- -Cos(Angle+RandomX(-10,10),10+Random(40)), //und Y-Geschwindigkeit berechnen 80,color); //größe und Farbe
//Zauber löschen return(RemoveObject()); }
//Diese Funktion muss wahr zurückgeben wenn der Zauber gezielt werden kann public func IsAimerSpell() { return true; } //Der Zauber ist im Kombomenu unter Feuer zu finden public func GetSpellClass(object pMage) { return(FIRE); } //Die Kombo ist Werfen-Werfen-Runter public func GetSpellCombo(pMage) { return ("442"); }
Das meiste erklärt sich durch die Kommentare einige Stellen nenn ich aber nochmal:
if (Caster->~DoSpellAim(this())) return true; Hier wird im Zauberer(Caster) die Funktion DoSpellAim mit dem ZAuber als Parameter aufgerufen, diese gibt true zurück wenn der Zauberer den Zauber zielen konnte ansonsten gibt sie false zurück.Falls sie true zurückgibt wird die Funktion Activate hier amgebrochen(return true;) ansonsten läuft sie weiter.
CreateParticle("PSpark",0,0,Sin(Angle+RandomX(-10,10),10+Random(40)),-Cos(Angle+RandomX(-10,10),10+Random(40))),80,color); Zu den Parametern von CreateParticle kann man folgendes Sagen: 1)Name des Particles als string. Ich nehme PSpark weil der Schwerkraftsunabhändig ist 2&3)X/Y-Position hier 0 damit der Particle direkt über dem Zauber entsteht 4)X-Anfangsgeschwindigkeit wird aus dem Winkel mittels Sin berechnet. Der Winkel wird mittels RandomX leicht manipuliert und die geschwindigkeit mittels Random zufallsabhändig gemacht 5)wie bei Parameter4 nur -Cos weil es die Y-Geschwindigkeit ist 6)Größe des Partikles 80 ist in Ordnung 7)Farbe des Particles hier wird die Variable color eingesetzt die entweder Rot oder Grün darstellt
public func GetSpellClass(object pMage) { return(FIRE); } public func GetSpellCombo(pMage) { return ("442"); } Für das Kombomenu wichtig die erste Funktion legt fest welchem Element der Zauber angehört und die zweite wie die genaue Kombo ist.Für die erste kann man FIRE=Feuer EART=Erde WATR=Wasser und AIR1=Luft als return-Wert nehmen.Für die zweite setzt man einfach eine Dreistellige Zahl ein die die Kombo darstellt 1:Zurück; 2:Runter; 3:Vorwärts; 4:Werfen; 5:Springen; 6:Graben
Das ist dann auch schon alles was zu einem Zauber gehört jetzt sollte man auch andere Zauber selber entwickeln können. Viel Spass.
Burning Thing Brigadegeneral
Alter : 26 Ort : Wien Anmeldedatum : 07.06.09
Thema: Re: Zauber erstellen Mi Jan 06, 2010 7:42 pm
Danke, genau sowas hatte ich mir gewünscht.
Stephan Borgs Kadett
Alter : 29 Ort : Duisburg Meiderich Anmeldedatum : 09.03.10
Thema: Re: Zauber erstellen Di Apr 13, 2010 1:03 pm
//Diese Funktion wird vom Zauberer Aufgerufen public func Activate(object Caster) { //Magisches Geräusch Sound("Magic*"); //prüfen ob der Zauberer Zielen kann if (Caster->~DoSpellAim(this())) return true; //Ansonsten gerade nach oben Zaubern ActivateAngle(0); //und Object löschen RemoveObject(); }
Was ist denn, wenn ich hier RemoveObject weglassen würde? Was wird dadurch überhaupt gelöscht Die Erde ja nicht!
Toastbrot Kadett
Anmeldedatum : 10.03.09
Thema: Re: Zauber erstellen Di Apr 13, 2010 2:20 pm
Der Zauber wird dadurch gelöscht.Denn der ist ja auch nur ein Objekt das den Effect erzeugt und anschließend gelöscht werden muss.
Stephan Borgs Kadett
Alter : 29 Ort : Duisburg Meiderich Anmeldedatum : 09.03.10
Thema: Re: Zauber erstellen Di Apr 13, 2010 3:00 pm
Ja, aber was passiert, wenn mans nicht löscht?
Wipfmagus Konteradmiral
Alter : 28 Anmeldedatum : 06.03.10
Thema: Re: Zauber erstellen Sa Mai 29, 2010 10:28 pm
Dann ist das Zauberobjekt ewig in der Map, und so etwas frisst Performance, ist unschön gescriptet und könnte die Funktionalität anderer - und dieses - Scripts lahmlegen.
Mr. X Feldmarschall
Alter : 27 Ort : Schweiz/Baselland Anmeldedatum : 23.02.10
Thema: Re: Zauber erstellen Fr Jun 11, 2010 3:43 pm
irgendwie geht bei mir der Spoiler zur Defcore nicht
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Zauber erstellen Fr Jun 11, 2010 4:13 pm
Ich bestätige das. Das geht auch i-wie bei allen anderen Spoilnern nichtmehr.. Egal welcher Beitrag. Was isn da faul? :O
NilsZ Admiral
Ort : Mein Rekord: 27 Punkte! :D Anmeldedatum : 07.08.08
Thema: Re: Zauber erstellen Fr Jun 11, 2010 4:22 pm
drückt einfach mal auf quote dann seht ihr was in dem Spoiler drinnen steht.
Till Fähnrich
Alter : 26 Ort : Friedenweiler Anmeldedatum : 12.02.11
Thema: Re: Zauber erstellen Sa Feb 26, 2011 4:30 pm
wie mach ich das der zauber dann auch im editor bei "welche zauber gibt es" da sind?
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Zauber erstellen Sa Feb 26, 2011 4:36 pm
Category Wert richtig setzen. Ein "|C4D_Magic" anhängen sollte genügen.
EDIT: Oh, ich seh grade, das alle Zauber nur Category=C4D_Magic drinnhaben. Also einfach C4D_Magic setzen und mal F5 / F8 drücken zum reload.
Horst Clonk
Alter : 26 Anmeldedatum : 06.07.11
Thema: Re: Zauber erstellen Fr Aug 12, 2011 7:36 pm
Ich wollte den Zauber ausprobieren. Aber auf einmal haben die Icons aller Objekte verrückt gespielt und ein Clonk hatte z.B. einen toten Baum als Icon.
Magus111 Oberst
Alter : 27 Ort : Clonk Planet Anmeldedatum : 01.01.09
Thema: Re: Zauber erstellen Mo Aug 22, 2011 6:26 pm
Du benutzt nicht zufällig CE oder eine andere nicht aktuelle Clonk Version oder?
Hm einfach mal CE neu installieren (vorher szens und key sichern) und schauen obs immernoch da ist. Wenn nicht, dann verrate uns mal die Spezifikationen deines PCs (Prozessor, Grafikkarte, RAM etc).