PDA

View Full Version : Verwendung von npc_settofightmode produziert Null items (yINSTANCE_HELP)



Cryp18Struct
27.02.2019, 14:37
Das hier beschriebene Symptom:
https://forum.worldofplayers.de/forum/threads/1534149-RELEASE-Velen-Eine-Modifikation-für-das-Gothic-II-Add-on-DNdR?p=26046422&viewfull=1#post26046422
https://forum.worldofplayers.de/forum/threads/1534149-RELEASE-Velen-Eine-Modifikation-für-das-Gothic-II-Add-on-DNdR?p=26046480&viewfull=1#post26046480

wird wahrscheinlich durch die Funktionen div_setmarkusfightmodeforkidnapping() und div_setcortneyfightmodeforkidnapping() ausgelöst.

func void div_setmarkusfightmodeforkidnapping() {
if(npc_isinfightmode(self, fmode_fist)) {
npc_settofightmode(self, fmode_none);
}
else {
npc_settofightmode(self, fmode_fist);
};
};

1.:
npc_settofightmode(self, fmode_none) ist äquivalent zu npc_settofightmode(self, 0).
Dort einen fmode als Parameter zu übergeben ist falsch, da wird eine item Instanz erwartet.

2.:
Die Verwendung von self ist in diesem Kontext auch falsch. Die beiden Funktionen werden mit AI_Function in die Ai-queue eines NPCs eingereiht und dann später aufgerufen:

ai_function(self, div_setmarkusfightmodeforkidnapping);
Innerhalb einer solchen Funktion ist unmöglich vorherzusehen auf welchen NPC "self" zurzeit zeigt.
Um an den NPC ranzukommen in dessen Ai-Queue diese Funktion eingereiht wurde mit AI_Function kann man so vorgehen:

func void foo(){
var c_npc me; me = _^(ECX); // holt den NPC aus wessen AI_Queque diese Funktion aufgerufen wurde(WENN die Funktion foo() mit AI_Function in die Ai-queue eines NPCs eingereiht wurde)
};

Es gibt möglicherweise noch andere Stellen in den Skripten wo fälschlicherweise self verwendet wird.