Papyrus: Questpropertys werden nicht gesetzt.

Anjar

Neuankömmling
Hi,

folgendes Problem. Habe eine Quest, an der ein Script mit einigen Variablen dranhängt, erstellt. Diese Variablen wurden als Propertys deklariert und sollen jetzt von einem Objectscript aus gesetzt werden. Das heißt, das es vier Objekte gibt, die gefunden werden sollen. Jedesmal wenn eines der Objekte aktiviert wird soll eine der Propertys um 1 raufgezählt werden und eine zweite Property auf 1 gesetzt werden.

Hier mal die beiden Scripte. Zuerst das Questscript.

Code:
Scriptname DSIControlScript extends Quest 

INT PROPERTY DeadCountNchuantZel AUTO 
INT PROPERTY EryDead AUTO
INT PROPERTY KragDead AUTO
INT PROPERTY StaubDead AUTO
INT PROPERTY StrommDead AUTO

Und jetzt noch das Script das auf den Objekten liegt:

Code:
Scriptname DSIErjsBookScript extends ReferenceAlias  

DSIControlScript PROPERTY DSIControlQst AUTO



BOOL DoOnce = TRUE

event OnActivate(ObjectReference obj)

    if (obj == game.GetPlayer() && DoOnce)
        DSIControlQst.DeadCountNchuantZel = DSIControlQst.DeadCountNchuantZel + 1
        DSIControlQst.EryDead = 1

    
        if (GetOwningQuest().GetStage() == 10)
            GetOwningQuest().SetStage(20)
        endif
        
        DoOnce = FALSE
    endif
    
endevent

Das Objektscript funktioniert soweit das zumindest keine Fehlermeldung mehr beim kompilieren kommt und auch die Queststage einwandfrei gesetzt wird. Nur die Variablen weigern sich eben beharrlich gesetzt zu werden. Ich bin schon fast am verzweifeln.
Wäre schön wenn jemand mir mal sagen könnte warum das Setzen der Variablen nicht funktioniert. Mir fällt einfach nichts mehr dazu ein. :)

mfg
 
Das sollte daran liegen, dass Du die Quest nicht als "Conditional" gesetzt hast. Sollte so aussehen:

Code:
Scriptname DSIControlScript extends Quest conditional
 
Hab ich schon versucht. Funktionierte auch nicht.

Habe ja eigentlich vor die Werte der Propertys als Conditions für die Queststages zu nehmen. Hat auch insofern funktioniert dass ich sie zumindest schon mal auswählen konnte. Aber so ohne Werte nutzen die mir irgendwie nichts. :roll:
 
Hi,

mal eine kurze Zwischenfrage zu dem Thema:

Was macht der Zusatz "conditional" denn genau und was hat das mit den Werten der Propertys zu tun?
Ich dachte, den Zugrif auf die Werte der Propertys erlangt man durch das Schlüsselwort "Auto" (legt automatisch getter- und setter Methoden an)..

Müsste es dann nicht so etwas wie DSIControlQst.DeadCountNchuantZel.GetValue() geben?
 
@Anjar

hast du daran gedacht, dem Property des Objekt-Skripts im CK einen Wert zuzuweisen? Es sollte nur DSIControlQst auswählbar sein. Man muss den Wert im CK aber dennoch zuweisen, anderenfalls lässt sich nicht auf die Variablen des Questskripts zugreifen.
 
  • Like
Reaktionen: Anjar
Hi,

mal eine kurze Zwischenfrage zu dem Thema:

Was macht der Zusatz "conditional" denn genau und was hat das mit den Werten der Propertys zu tun?
Ich dachte, den Zugrif auf die Werte der Propertys erlangt man durch das Schlüsselwort "Auto" (legt automatisch getter- und setter Methoden an)..

Müsste es dann nicht so etwas wie DSIControlQst.DeadCountNchuantZel.GetValue() geben?

Durch das kompilieren des Scripts und zusätzlichem deklarieren der Propertys als Conditional können die Propertys zum setzen von Conditions z. B. in Dialogen oder Questbucheinträgen genutzt werden. Ansonsten ist es nicht möglich Propertys zum Setzen von Conditions zu nutzen.

Beispiel:
Code:
Scriptname DSIControlScript extends Quest [COLOR=#ff0000]Conditional[/COLOR]
 
INT PROPERTY DeadCountNchuantZel AUTO
INT PROPERTY EryDead AUTO
INT PROPERTY KragDead AUTO [COLOR=#ff0000]Conditional
[/COLOR]INT PROPERTY StaubDead AUTO
INT PROPERTY StrommDead AUTO
Jetzt kann man bei den Conditions unter "GetVMQuestVariable" die Property KragDead auswählen und nutzen. Und zwar nur diese. Die anderen sind weiterhin nicht auswählbar weil sie nicht als Conditional deklariert wurden. Das gleiche sollte auch mit Propertys in Objektscripten funktionieren. Zumindest gibt es auch die Funktion GetVMScriptVariable.

GetQuestVariable bzw. GetScriptVariable scheinen dagegen nicht mehr zu funktionieren.

@Brausebart

Hatte ich nicht gemacht. Wußte, ganz ehrlich gesagt, nicht dass man das muss. Ich dachte dass die Werte automatisch eingetragen werden. Habe ich zumindest aus einem Tutorial dass die Engine intelligent genug ist den korrekten Wert zu finden wenn der Name der Property mit einem existierenden Objekt übereinstimmt. Na ja, war wohl nicht ganz so oder ich habe nur was falsch verstanden. Habe es jetzt auf jeden Fall korrigiert und was dazu gelernt. :)
 
Zuletzt bearbeitet: