Thema: Imunität Gegen Explosionen Fr Feb 12, 2010 7:28 pm
Ich programmiere Gerade eine art Versuchsclonk und Habe deshalb die frage wie man einen Clonk Immun Gegen Explosionen Machen kann.
mfg AgentR
Umezawa Feldmarschall
Alter : 29 Anmeldedatum : 30.12.08
Thema: Re: Imunität Gegen Explosionen Fr Feb 12, 2010 9:18 pm
Lies dir mal die Effektdoku durch. Fx*Damage ist ein Callback, der bei Schaden aufgerufen wird. Hier kannst du: 1. Die Schadensart abfragen 2. Bei Schaden durch Explosion den Schaden verhindern 3. Die Explosionskräfte rückgängig machen, sprich die Geschwindigkeit des Clonks auf 0 setzten
Ich weiß, die Effektdoku ist sehr lang, aber sie ist gut erklärt und Effekte sind beim skripten sehr nützlich. Und wenn du irgentwas nicht verstehst, kannst du ja nochmal nachfragen.
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Sa Feb 13, 2010 5:49 pm
Ok Danke ich hab mir dass mal durchgelesen aber ich verstehe dass noch nicht so ganz.
Ich würde Dass So machen
protected func initzialise() { AddEfect(keine ahnung was hier hingehört); }
protected func FX_Call_DmgBlast(keine ahnung was hier hingehört) { //keine ahnung was hier hingehört }
Wäre dieses Grundgerüst So richtig (ich weis dass da Rechtschreibfehler drin sind) und was muss ich für "keine ahnung was hier hingehört" schreiben.
Mit freundlichen Grüßen AgentR
Umezawa Feldmarschall
Alter : 29 Anmeldedatum : 30.12.08
Thema: Re: Imunität Gegen Explosionen So Feb 14, 2010 9:06 pm
AddEffect(string szEffectName, object pTarget, int iPrio, int iTimerIntervall, object pCmdTarget, id idCmdTarget, any var1, any var2, any var3, any var4)
szEffectName: Ein Name für den Effekt, z.B. "AntiExplosion" pTarget: Das Objekt, das mit dem Effekt belegt werden soll. Hier der Clonk selbst, also this() iPrio: Die Priorität. Nimm 100 oder so, ist momentan noch nicht so wichtig iTimerIntervall: In diesen Abständen wird die Funktion Fx[Effektname]Timer aufgerufen. Wenn du diese nicht vorgibst, ist das die Zeit, die der Effekt andauert. Hier 0, damit der Effekt erst gelöscht wird, wenn der Clonk weg ist. pCmdTarget/idCmdTarget: Objekt/ID, in dem die Callbacks aufgerufen werden. Hier setzt du pCmdTarget auf this(), denn die Callbacks werden in diesem Clonk getätigt. var1-4: Zusätzliche Parameter. Wird hier nicht gebraucht
Und zum Callback:
Code:
protected func Fx[Effektname(obiges Beispiel: "AntiExplosion")]Damage(object pTarget, int iEffectNumber, int iDmgEngy, int iCause) { //iCause gibt gen Grund an if (iCause=FX_Call_DmgBlast){ SetXDir(0, pTarget);//pTarget gibt das Objekt an, //das von dem Effekt betroffen ist SetYDir(0, pTarget);//Die Geschwindigkeit auf 0 setzten, //um Wegschleudern zu verhindern return (0);//Der zurückgegebene Wert gibt den Schaden an, der durchkommt } return(iDmgEngy);//iDmgEngy gibt den Schaden an, //der normalerweise durchkommt }
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 12:03 am
Also ich habe Dass jetzt so in mein Script eingebaut funktioniert aber nicht
Spoiler:
protected func Initialize() { // Clonks mit Magiephysikal aus fehlerhaften Szenarien korrigieren if (GetID () == CLNK) if (GetPhysical ("Magic", 1)) SetPhysical ("Magic", 0, 1); SetAction("Walk"); SetDir(Random(2)); // Broadcast für Spielregeln GameCallEx("OnClonkCreation", this()); AddEffect("AntiExplosion",this(),100,0,this(),CECL); return(1); }
protected func Fx["AntiExplosion"]Damage(pTarget,iEffectNumber,iDmgEngy,iCause) { //iCause gibt gen Grund an if (iCause == FX_Call_DmgBlast){ SetXDir(0, pTarget);//pTarget gibt das Objekt an, //das von dem Effekt betroffen ist SetYDir(0, pTarget);//Die Geschwindigkeit auf 0 setzten, //um Wegschleudern zu verhindern return (0);//Der zurückgegebene Wert gibt den Schaden an, der durchkommt } return(iDmgEngy);//iDmgEngy gibt den Schaden an, //der normalerweise durchkommt }
mfg AgentR
Umezawa Feldmarschall
Alter : 29 Anmeldedatum : 30.12.08
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 11:33 am
Die [] und "" müssen weg, die hatte ich nur als Zeichen gemacht, das hier was eingesetzt werden muss.
Und bei AddEffect musst pCmdTarget oder idCmdTarget angeben. Da die Aufrufe nur bei vorhandenem Objekt gemacht werden(Wenn der Clonk nicht mehr da ist, brauchst du ihn auch nicht mehr vor Explosionen schützen), würde ich hier nur das Objekt angeben.
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 3:37 pm
Also ich habe dass was ich davon verstanden habe geändert aber es funktioniert immer noch nicht. Könntest du evtl. versuchen dass script eben so umzuschreiben dass es funktioniert?
Mit freundlichen Grüßen AgentR
Umezawa Feldmarschall
Alter : 29 Anmeldedatum : 30.12.08
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 5:35 pm
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 6:53 pm
Beim Starten kommt immer "Error:Syntax Error..."
Spoiler:
protected func Initialize() { // Clonks mit Magiephysikal aus fehlerhaften Szenarien korrigieren if (GetID () == CLNK) if (GetPhysical ("Magic", 1)) SetPhysical ("Magic", 0, 1); SetAction("Walk"); SetDir(Random(2)); // Broadcast für Spielregeln GameCallEx("OnClonkCreation", this()); AddEffect("AntiExplosion",this(),100,0,this()); return(1); }
protected func FxAntiExplosionDamage(pTarget,iEffectNumber,iDmgEngy,iCause) { //iCause gibt gen Grund an if (iCause=FX_Call_DmgBlast){ SetXDir(0, pTarget);//pTarget gibt das Objekt an, //das von dem Effekt betroffen ist SetYDir(0, pTarget);//Die Geschwindigkeit auf 0 setzten, //um Wegschleudern zu verhindern return (0);//Der zurückgegebene Wert gibt den Schaden an, der durchkommt } return(iDmgEngy);//iDmgEngy gibt den Schaden an, //der normalerweise durchkommt }
mfg AgentR
Vadim_Rodin Kadett
Alter : 26 Ort : Scheer Anmeldedatum : 19.01.09
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 7:04 pm
hast du auch den effekt?
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 8:03 pm
Dass untere ist doch der effekt.
Vadim_Rodin Kadett
Alter : 26 Ort : Scheer Anmeldedatum : 19.01.09
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 9:10 pm
ja aber als objekt
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 9:35 pm
Effekte müssen doch in kein Objekt?
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 9:48 pm
Wohin denn?
Umezawa Feldmarschall
Alter : 29 Anmeldedatum : 30.12.08
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 11:29 pm
Effekte müssen in ein Objekt oder eine Definition. Welches das ist, wird ja in AddEffect mit pCmdTarget bzw. idCmdTarget angegeben. Hier ist dieses Objekt ja der Clonk selber, aber man könnte es auch in ein Extraobjekt packen, wenn man Spass daran hat, unnötige Objekte zu erstellen und so das Spiel zu verlangsamen, IDs zu verschwenden und den Code unübersichtlicher zu machen.
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 11:31 pm
Also kann man den effekt auch einfach in das Script des Clonk schreiben?
Vadim_Rodin Kadett
Alter : 26 Ort : Scheer Anmeldedatum : 19.01.09
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 11:43 pm
protected func Initialize() { /* Allerdings sind graue Bonbons doof. Deswegen färben wir das nun ~Braun. Mit Hilfe von SetClrModulation und dem passendem RGB-Wert (eine Farbangabe) geht das ganz einfach. */ SetClrModulation(RGB(51,255,0)); }
public func Activate(object pClonk) { /* Wir schenken dem Clonk etwas Energie. Der erste Parameter gibt die Veränderung des Energiewertes an und der zweite das Objekt, in das die Energie gestopft werden soll. */ DoEnergy(100,pClonk);
//es wäre schöner wenn ein paar Grüne partikel rauskommen ;) CastParticles("PSpark", 50, 40, 0, 0, 50, 70, RGB(4,255,36), RGB(4,255,36));
//Der Gift Effekt AddEffect("Gift",this(),100,0,this());
// Wir geben beim Clonk einen Sound aus, der sich "ClonkMunch" nennt. Damit man erkennt, dass das Bonbon dem Clonk geschmeckt hat :). Sound("ClonkMunch",0,pClonk);
// Danach entfernen wir das Bonbon. Schließlich kann man es nur einmal essen. RemoveObject();
// Und return halt. return(1); }
AgentR Hauptman
Anmeldedatum : 31.01.10
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 11:51 pm
Und wo ist jetzt der Efekt Gift?
Vadim_Rodin Kadett
Alter : 26 Ort : Scheer Anmeldedatum : 19.01.09
Thema: Re: Imunität Gegen Explosionen Mo Feb 15, 2010 11:55 pm
soso ich hab des jetz ganz Geändert.... ich hab des jetzt zu einen lavaImmunitätbonbon gemacht.
Code:
/* Feuerimmunitätszauber */
#strict
public func Activate(pCaster, pCaster2) { // Zauberer ermitteln if (pCaster2) pCaster = pCaster2; // Magie kann man hören, ganz klar ;) Sound("Magic*"); // Effekt starten AddEffect("BanBurnPSpell", pCaster, 180, 1111, 0, GetID()); // Fertig - das Zauberobjekt wird nun nicht mehr gebraucht return(RemoveObject()); }
protected func FxBanBurnPSpellStart(pTarget, iEffectNumber, iTemp) { // Beim Start des Effektes: Clonk löschen, wenn er brennt if (!iTemp) Extinguish(pTarget); return(1); }
protected func FxBanBurnPSpellEffect(szNewEffect, iEffectTarget, iEffectNumber, iNewEffectNumber, var1, var2, var3) { // Feuer abblocken if (WildcardMatch(szNewEffect, "*Fire*")) return(-1); // Alles andere ist OK return(); }
so sollte es eigentlich ein Effekt Flint oder sonst was auch immer aussehen
Umezawa Feldmarschall
Alter : 29 Anmeldedatum : 30.12.08
Thema: Re: Imunität Gegen Explosionen Di Feb 16, 2010 6:57 pm
Ich hab das hier jetzt so verstanden, das eine neue Sorte von Clonks erstellt werden sollte, die von vornherein vor Explosionen sicher sein soll, da in seinem Script ja in Initialize der Magieskill zurückgesetzt wurde, was halt im Clonkscript vorkommt (falls du dies erhalten willst, musst du da übrigens die ID ändern).Da wird der Effekt dann halt direkt im Clonk erstellt.
Falls der Effekt durch ein Bonbon oder ähnliches aktiviert werden soll, hast du Recht, dafür brauch man natürlich eben dieses Objekt, das den Effekt aktiviert.