Neue Zauber: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Category:Modding Zauber, die bisher keinen "effect"-Bereich in der skills.xml haben, können durch ein Skript modifiziert werden. Dies funktioniert ausschl…“) |
(kein Unterschied)
|
Version vom 24. Juni 2016, 13:36 Uhr
Zauber, die bisher keinen "effect"-Bereich in der skills.xml haben, können durch ein Skript modifiziert werden. Dies funktioniert ausschließlich für die "freie Anwendung" des Zaubers durch den Spieler, also:
- Klick in die Welt
- "Zaubern"
- Zauber wählen
- ggf. Ziel wählen
Solche Zauber können außerdem ausschließlich außerhalb des Kampfes angewendet werden, für Kampfzauber funktioniert dies ebenso nicht.
Um die Kontrolle über die Ausführung zu übernehmen, darf der Zauber KEIN "effect"-Member haben, sondern muss stattdessen ein "script"-Member aufweisen, in dem das Javascript enthalten ist. Dieses script kann beliebige Funktionen enthalten, es muss jedoch entweder eine "function OnPrepare" oder eine "function OnCast" besitzen. Erstere stellt das "Modding Flexibel" dar, letztere das "Modding Light".
Modding Light
<spell intname="hartesschmelze" langid="spell_hartesschmelze" attr1="IN" attr2="CH" attr3="KK" origin="M" group="192" difficulty="0" usebattle="0" usenobattle="1" range="1"> <school orig="A">192</school> <cost>10</cost> <script> <![CDATA[ function OnCast( caster, target, result ) { if( caster == target ) { showMessage( "Kann nicht sich selbst Bezaubern" ); } else if( result.ok ) { showMessage( getName( caster ) + " bringt " + getName( target ) + " zum Zerfließen!" ); } else { showMessage( "Da tut sich nix bei " + getName( caster ) ); } }]]></script> </spell>
In obigem Beispiel wird ein Spruch "hartesschmelze" mit IN/CH/KK definiert, Gruppe "Antimagie" (siehe Loca text_192", nur außerhalb des Kampfes zu definieren, und er benötigt ein Ziel (range="1"), muss also auf jemand anderen als den Zaubernden angewendet werden.
Die Funktion "OnCast" wird mit drei Parametern aufgerufen, ID des Zaubernden (caster), ID des Ziels (target) sowie Ergebnis des Würfelwurfs.
function OnCast( caster, target, result ) { if( caster == target ) { showMessage( "Kann nicht sich selbst Bezaubern" ); } else if( result.ok) { showMessage( getName( caster ) + " bringt " + getName( target ) + " zum Zerfließen!" ); } else { showMessage( "Da tut sich nix bei " + getName( caster ) ); } }
Dieses einfache Beispiel