Neue Zauber

Aus Sternenschweif Wiki
Version vom 24. Juni 2016, 13:36 Uhr von Chrisfirefox (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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:

  1. Klick in die Welt
  2. "Zaubern"
  3. Zauber wählen
  4. 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