World of Gothic Archiv > NWN-Hilfe
Script erkennt Zauberspruch nicht?
Seite 1 von 1  1 
25.05.2003, 10:11 #1
Gangster No.1
Beiträge: 315
Script erkennt Zauberspruch nicht?
Hi there!

Hab da ein kleines Script geschrieben. Sinn und Zweck ist, dass der Charakter dafür belohnt wird, wenn er 'normale' Tiere (Bären, Wölfe, usw) nicht tötet sondern mit Zaubersprüchen wie Monster festhalten, Furcht oder Schlaf außer Gefecht setzt. Und so sieht das Script aus:
code\:
/* OnSpellCastAt */
#include "NW_I0_GENERIC"
void main()
{
/* determine if spellcaster is a PC, return if not */
object oCaster = GetLastSpellCaster();
if (!GetIsPC(oCaster)) return;

/* determine if creature already was the target of a spell, return if yes */
object oTarget = OBJECT_SELF;
int iMultipleSpell = GetLocalInt(oTarget, GetTag(OBJECT_SELF));
if (iMultipleSpell == TRUE) return;

/* determine what spell was cast on the creature */
int iLegalSpellFlag;
int iSpell = GetLastSpell();

/* determine if the spell cast is a 'harmless' spell, if yes then iLegalSpellFlag = TRUE,
otherwise iLegalSpellFlag = FALSE
*/
switch (iSpell)
{
default: iLegalSpellFlag = FALSE; break;
case SPELL_HOLD_MONSTER: iLegalSpellFlag = TRUE; break;
case SPELL_HOLD_ANIMAL: iLegalSpellFlag = TRUE; break;
case SPELL_SLEE iLegalSpellFlag = TRUE; break;
case SPELL_FEAR: iLegalSpellFlag = TRUE; break;
}

/* if the spell is legal send a message to the PC and give him/her XP */
if (iLegalSpellFlag == TRUE)
{
string sAnimalName = GetName(OBJECT_SELF);
string sMessage = "You've been rewarded for sparing the " + sAnimalName + "'s life.";
SendMessageToPC(oCaster, sMessage);
GiveXPToCreature(oCaster, 100);

/* and this function makes sure, none of the PCs get XP for casting a spell on the same creature again */
SetLocalInt(oTarget, GetTag(OBJECT_SELF), TRUE);
}
}
Das Script ansich funktioniert auch anstandslos, mit einer Ausnahme: der Schlaf-Zauber wird von dem Script nicht registriert! Ich kann mehrere Schlaf-Sprüche auf ein Tier zaubern, ich erhalte aber keine Belohnung. Spreche ich dann aber einen anderen Zauber auf das selbe Tier, dann erhalte ich die Belohnung.

Ich dachte erst, dass das evtl. damit zusammenhängt, dass man mit dem Schlf-Zauber nicht direkt auf eine Kreatur zielen muß, sondern ihn auch in der Nähe der Kreatur 'platzieren' kann. Allerdings ist Furcht in der Beziehung genauso - man muß ihn nicht auf die Kreatur selbst zielen, aber man kann. Allerdings funktionert der Furcht-Zauber anstandslos. Spaßeshalber hab ich in das SWITCH-Statement auch mal Feuerball, Stinkende Wolke und Eissturm aufgenommen - auch da erhielt der Charakter seine Belohung.

Kann mir jemand erklären, warum der Schlaf-Zauber nicht registriert wird? Will man nämlich die Idee des 'Tiere-Verschonens' konsequent umsetzen, so ist der Schlaf-Zauber vor allem für niedrigstufige Charaktere überaus wichtig.

THANX IN ADVANCE!


___________________________

"I'm innocent!"[/font]
25.05.2003, 10:28 #2
Alamar
Beiträge: 4.050

Isses vielleicht möglich, dass der Schlafzauber anders genannt wird? Also nicht SLEEP?
25.05.2003, 10:34 #3
Gangster No.1
Beiträge: 315

Nö, der heißt definitiv so (hab sämtliche SPELL_* Konstanten durchforstet). Außerdem wäre dann die Variable/Konstante SPELL_SLEEP nicht definiert und der Compiler würde meckern - tut er aber (Gott sei Dank) nicht.
Seite 1 von 1  1