[Modding] Trigger "Dead(Player2)" in Dialogen gibt eine WeiDU-Warnung

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.201
Ich möchte in einem Dialog abfragen, ob einer der Begleiter des HC aktuell tot ist.
Insofern habe ich folgende Antwortoption eingefügt:
Code:
IF ~OR(5)
        Dead(Player2)
        Dead(Player3)
        Dead(Player4)
        Dead(Player5)
        Dead(Player6)~ THEN REPLY ~Einige meiner Gefährten sind im Kampf gefallen.~ GOTO some_npc_dead

Im Spiel funktioniert alles reibungslos. Einziges Problem ist, dass WeiDU während der Installation ein "PARSE WARNING" meldet, weil es eine StringRef (in "") erwartet:
Code:
PARSE WARNING at line 156 column 16-28
Near Text: )
    Type mismatch in "Name" argument of [Dead].
    Expecting type "string". Recovering.

Die Installation läuft zwar weiter und schließt erfolgreich ab, aber es stört natürlich trotzdem. Wie kann ich das umgehen?
 

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
Vllt relevant: welche WeiDU-Version? Und hast du schon andere ausprobiert?
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.964
Ich meine mich entsinnen zu können, dass diese Abfrage mit Dead() so nicht geht. Aber Du sagst, im Spiel wird es erkannt?
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Die Warnung würde ich nicht ignorieren, das kann eigentlich nicht funktionieren.

WeiDU macht automatisch einen String aus dem Player2, folglich sucht die Engine nach der Variablen "SPRITE_IS_DEADPlayer2" und nicht nach dem eigentlichen Player2-Objekt. Wenn es aus irgendeinem Grund einen Akteur mit dem Scriptname "Player2" geben sollte und dieser schon tot ist, dann würde die Variable gesetzt sein.
Das ist aber völlig unabhängig von dem "richtigen" Player2.
(Zumindest in der ToB-Version sollte es so sein.)
 

Acifer

Senior Member
Registriert
27.04.2019
Beiträge
2.201
WeiDU macht automatisch einen String aus dem Player2, folglich sucht die Engine nach der Variablen "SPRITE_IS_DEADPlayer2" und nicht nach dem eigentlichen Player2-Objekt.
Vielen Dank für Deine Einschätzung. Meine Hoffnung war, dass die Engine die String "Player2-6" aus irgendeinem Grunde dem Objekt Player2-6 zuordnet, denn überraschenderweise erschien die jeweilige Antwortoption wirklich nur, wenn einer der Player2-6 vorher von mir mittels Strg+Y ins Jenseits geschickt wurde. Aber egal, Du hast vollkommen Recht, so eine WeiDU-Warnung sollte man nicht übergehen.

Ich habe jetzt den Code geändert in:
Code:
IF ~OR(5)
        HPLT(Player2,1)
        HPLT(Player3,1)
        HPLT(Player4,1)
        HPLT(Player5,1)
        HPLT(Player6,1)~ THEN GOTO

...und damit scheint es auch zu klappen.
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Hm, jetzt hast Du aber mein Interesse geweckt, da ich mir nicht erklären kann, warum Dein ursprünglicher Ansatz funktioniert haben soll. :)
Ich hab' mir das gerade kurz mit einem kleinen Beispiel angeschaut und bei mir verhält es sich so, wie von mir erwartet.
(Ich hatte im ersten State von INNKE2.DLG (Winthrop) zusätzlich die Bedingung Dead(Player2) bzw. eigentlich Dead("Player2") eingebaut.)
Auch ein Blick in den Debugger zeigt, dass im Trigger-Code wirklich nur die DV geprüft wird.

Aber egal, die Lösung mittels HPLT() ist meiner Ansicht nach auf jeden Fall besser.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.964
die Bedingung Dead(Player2) bzw. eigentlich Dead("Player2")
Wobei "Dead("Player2")" nach meiner Logik ja wirklich nach einer DV "Player2" schauen würde, und daher den Player2 gar nicht erwischt?
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Wobei "Dead("Player2")" nach meiner Logik ja wirklich nach einer DV "Player2" schauen würde, und daher den Player2 gar nicht erwischt?
Ja, das war ja auch meine Erwartungshaltung.
Aber genau das ist die "Korrektur", die WeiDU bei der Warnung vornimmt: Aus Dead(Player2) wird Dead("Player2").

/Edit:
Wobei, ich hab' das Kompilieren nur mit einer BAF getestet. Vielleicht passiert im DLG etwas anderes.
 

Jastey

Matron Modderholic
Registriert
16.05.2004
Beiträge
12.964
Damke für die Erklärung, ich hatte Deinen Post falsch verstanden.
 
Oben