Schonmal darüber geärgert, dass es keine DefCore- und ActMap-Appendtos gibt? Ihr braucht trotzdem einen Timer? So geht's!
Zuerst müsst ihr einen Effektnamen aussuchen. Achtet auf sinnvolle Namesgebung! Ein Effekt namens "bla" macht nicht viel Sinn. In diesem Tutorial nenne ich den Effekt "IntTutorialEffect". Ein vorangestelltes "Int" signalisiert einen internen Effekt. Weiteres in der Doku nachlesen oder auf das nächste Tutorial warten.
Aber beginnen wir! Zuerst wollen wir das Grundgerüst aufsetzen. Für einen reinen, obiektinternen Timer-Effekt, der nach Zerstörung/Entfernung nicht mehr weiter besteht, bietet sich folgendes an:
Dies ist das reine Grundgerüst unseres Timer-Effektes. (Natürlich sind Effekte noch viel vielseitiger - aber dazu später mehr). Jetzt müssen wir nurnoch das Sternchen (*) durch unseren Effektnamen ersetzen und die Anweisungen, die bei jedem Timer-Intervall ausgeführt werden, einfügen. Dabei repräsentiert 'pTarget' das Objekt, das der Timer "trifft", wie bspw. ein Partikeleffekt. Machen wir eine Manaregeneration!
Code:
protected func FxIntTutorialEffectTimer (object pTarget) { //Unser Zielobjekt des Timers regeneriert Mana DoMagicEnergy(1, pTraget); }
Jetzt haben wir aber ein Problem. Der Effekt ist noch gar nicht gestartet! Jetzt müsst ihr euch überlegen, wann der Effekt gestartet werden soll. In diesem Fall werden wir ihn in Initialize() starten - bei der Erstellung des Objektes! Dazu benötigen wir die Funktion "AddEffect (string szEffectName, object pTarget, int iPrio, int iTimerIntervall, object pCmdTarget)". Das scheint auf den ersten Blick sehr kryptisch. Also lasst uns die Parameter aufschlüsseln!
AddEffect (string szEffectName, object pTarget, int iPrio, int iTimerIntervall, object pCmdTarget)
szEffectName: Ist der Effektname, den wir für das Sternchen oben eingesetzt haben. Also in diesem Falle "Int TutorialEffect"
pTarget: Ist das Ziel des Timers. Ihr werdet wohl "this" am häufigsten angeben: Das aufrufende Objekt selbst! Dies ist auch der Parameter 'pTarget' in der Timer-Funktion.
iPrio: Hierzu später mehr. Eine simple, einfache und tolle '1' sollte hier genügen.
iTimerIntervall: Der Intervall des Timers! Dies kennt ihr schon von 'TimerCall' in der DefCore. Der Intervall bestimmt die Zeit, in der die Timer-Funktion regelmäßig aufgerufen wird.
pCmdTarget: Bestimmt das Objekt, in dem wir unsere Timer-Funktion hineingeschrieben haben. Ein "this" sollte hier ebenfall genügen! (Alternativ könnt ihr die Timerfunktion auch im Szenarioscript als 'global' deklarieren und hier '0' angeben)
So sieht unsere Initialize()-Funktion also jetzt aus:
Code:
protected func Inittialize() { //Wir fügen den Effekt "IntTutorialEffect" hinzu, der alle 2 Frames "FxIntTutorialEffectTimer" aufruft, //da wir als Intervall 2 angegeben haben. Dieser Aufruf erfolgt in diesem Objekt. AddEffect("IntTutorialEffect", this, 1, 2, this) }
So. Die Timerfunktion befindet sich perfekterweise schon im Objekt, nun auch die Initialize-Funktion. So sollte das jetzt ungefähr aussehen:
Code:
proetcted func FxIntTutorialEffectTimer (object pTarget) { //Unser Zielobjekt des Timers regeneriert Mana Domagicenergy(1, pTarget); }
protected func Inittialize() { //Wir fügen den Effekt "IntTutorialEffect" hinzu, der alle 2 Frames "FxIntTutorialEffectTimer" aufruft, //da wir als Intervall 2 angegeben haben. Dieser Aufruf erfolgt in diesem Objekt. addeffect("IntTutorialEffect", this, 1, 2, this); }
So. Dies ist das Ende meines Tutorials. Ich hoffe, ihr konntet damit etwas anfangen und eure eigenen, eleganten Timer erstellen.
WICHTIG: In den fertigen Scripts habe ich Fehler eingebaut . Dies wird euch dazu bewegen, nichts außer die Vorlagen zu kopieren. Vorlagen wird auch ein erfahrener Scripter kopieren, um sich Schreibarbeit zu ersparen
Das nächste Tutorial über Effekte zeigt euch, wie ihr eigene Zauber erstellen könnt!
Zuletzt von Flinti am So Okt 04, 2009 12:49 am bearbeitet; insgesamt 5-mal bearbeitet
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Do Mai 21, 2009 10:19 pm
Lustig^^ Inittialize() Das mal zu Initialize() (ohne doppel "t") Endlich check ich mal Effekte! DANKE!
Flinti Kadett
Alter : 30 Anmeldedatum : 07.04.09
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Do Mai 21, 2009 10:20 pm
>In den fertigen Scripts haben sich Fehler eingeschlichen. Dies wird euch dazu bewegen, nichts außer die Vorlagen zu kopieren
Gern geschehen, übrigens!
Flinti Kadett
Alter : 30 Anmeldedatum : 07.04.09
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Do Mai 21, 2009 10:29 pm
Ich habe mich doch bemüht, Fehler einzubauen
Mega Hazard Staatsrat
Alter : 31 Ort : Brunswiek *helllau* Anmeldedatum : 24.01.08
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Fr Mai 22, 2009 1:05 am
Zum Titel möchte ich mal folgendes sagen:
Schedule bzw. ScheduleCall machen das viel einfacher.
Flinti Kadett
Alter : 30 Anmeldedatum : 07.04.09
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Fr Mai 22, 2009 1:47 am
Ist aber letztendlich auch nichts anderes als ein Effekt - außerdem möchte ich hiermit auf mein nächstes Tutorial weiterleiten :-)
Simsi Staatssekretär
Alter : 31 Ort : Vaihingen/Enz Anmeldedatum : 30.03.08
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Fr Mai 22, 2009 11:17 am
Geniale idee mit den fehlern. hab mich zuerst auch geärgert, aber dann hab ichs unten gelesen...
lasst uns auf einen zweiten teil hoffen
Yasu Oberst
Anmeldedatum : 11.12.08
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Mo Jun 29, 2009 2:00 pm
ja gel ... wo bleibt das? Will haben! xD
Flinti Kadett
Alter : 30 Anmeldedatum : 07.04.09
Thema: Re: Effekte - Timer ohne DefCore-Änderungen - Flinti Tutorial 1 Sa Jul 11, 2009 11:46 pm
Hm...wenig Zeit..andere Clonkprojekte...spätestens in 4 Wochen, frühestens in einer...