Problem (SSE) Outfit von NPC via Skript ändern

Dultus

Neuankömmling
Moin, ich bin neu hier und habe gehört, es gibt gute Vorschläge, wenn es um Modding geht. :)

Idee von einem Mod ist, dass in jeder Stadt eine Kiste steht, in der man Waffen und Kleidungsstücke hineintun kann und dass die jeweiligen Wachen dieses sofort ausrüsten und auch behalten.
Die Idee war, die OutfitListGuardWhiterun zu ändern, da es ein LeveledItem ist, welches im Outfit verwendet wird.

Idee, wie ich es umsetzen wollte, sah wie folgt aus:

Code:
Scriptname DULTUS_Whiterun_Guardchest extends ObjectReference

LeveledItem Property OutfitListGuardWhiterun auto

Event OnClose(ObjectReference akActionRef)

LeveledItem Null
OutfitListGuardWhiterun = Null
Int iFormIndex = self.GetNumItems()

while iFormIndex > 0
    iFormIndex -= 1
    Form kForm = self.GetNthForm(iFormIndex)
    OutfitListGuardWhiterun.AddForm(kForm, 1, GetItemCount(kForm))
endwhile

endEvent

Das funktioniert aber leider nicht. Die NPCs haben auch nach resetinventory ihr normales equipment und neu gespawnte Wachen über die Konsole auch.

Hat jemand einen Vorschlag?

LG!
 
Verstehe ich das richtig? Du versuchst, das LeveledItem OutfitListGuardWhiterun mit einer Zuweisung von LeveledItem Null zuerst zu leeren, bevor du den Loop machst? Was du aber eigentlich machst ist, die Property OutfitListGuardWhiterun zu leeren. Da Null nicht initialisiert ist, ist der Wert davon None. OutfitListGuardWhiterun = Null ist also gleichbedeutend mit OutfitListGuardWhiterun = None. Damit leerst du eigentlich die Variable, nicht, wie du eigentlich möchtest, die Liste selbst.
Was sagt das Log? Irgendwie vermute ich, dass dieses Script crashen könnte. Ausserdem würde ich mit Debug.Trace im Loop ausgeben, ob es überhaupt einen Loop gibt.
Ausserdem würde ich einen Test machen, damit nur Armor-Items hinzugefügt werden.
If kForm as Armor
X.AddForm(kForm, .......
 
Ähm...
Doofe Frage: Wo definierst du denn den Bezug für die Referenz des gesetzen Containers deines Guardchest für die reingelegten Klamotten? Oo
Ich sehe nur den Klamottenteil für die Püppchen ansich.
was ist denn mit dem guten alten Skriptbefehl:

Int iFormIndex = akContainer.GetNumItems()

Irgendwie fehlt da nen kompletter Teil oder? Egal. Geht mich nix an, ich skripte nich.
 
Verstehe ich das richtig? Du versuchst, das LeveledItem OutfitListGuardWhiterun mit einer Zuweisung von LeveledItem Null zuerst zu leeren, bevor du den Loop machst? Was du aber eigentlich machst ist, die Property OutfitListGuardWhiterun zu leeren. Da Null nicht initialisiert ist, ist der Wert davon None. OutfitListGuardWhiterun = Null ist also gleichbedeutend mit OutfitListGuardWhiterun = None. Damit leerst du eigentlich die Variable, nicht, wie du eigentlich möchtest, die Liste selbst.
Was sagt das Log? Irgendwie vermute ich, dass dieses Script crashen könnte. Ausserdem würde ich mit Debug.Trace im Loop ausgeben, ob es überhaupt einen Loop gibt.
Ausserdem würde ich einen Test machen, damit nur Armor-Items hinzugefügt werden.
If kForm as Armor
X.AddForm(kForm, .......
Richtig. Die Idee war, dass ich OutfitListGuardWhiterun im Grunde lediglich vorher schon leere, damit keine Überbleibsel der normalen Bekleidung übrig bleiben.
Stimmt auch - wenn ich jetzt was anderes hereinlege, sollte das Spiel crashen. Waffen und Items gehören ja eigentlich nicht zum Outfit dazu. Das müsste ich im Hinterkopf behalten.

Wenn ich das Spiel ausführe und die Kiste schließe passiert praktisch nichts. OnClose führt sich mit dem schließen der Kiste normalerweise durch.

@Moorkopp, das Skript liegt auf dem Container selbst. Die Referenz zur Guardchest ist Self.

LG
 
Mit Crash meine ich nicht unbedingt Crash des Games, aber crashen der Funktion. Wenn du nämlich das LeveledItem-Objekt mit none auf Null setzst, dann crashen alle Manipulationen darauf. Ich würde unbedingt die Script-Logs nachlesen, du kannt eigentlich ohne Log gar nicht vernünftig programmmieren. Und das Prooblem hier würde man sehen.

Nach der Dokumentation zu LeveledItem Script kannst du nur zwei Funktionen darauf ausführen. AddForm und Revert, also hinzufügen oder Rest der Liste zurücksetzen auf das, was im CK definiert ist. Ist natürlich Bethesda, es ist völlig normal, dass man irgend was bei irgend was hinzufügen kann, aber nicht wieder entfernen, die schaffen einfach keine Konsistenz in dem Bereich, ein Grund, wieso es SKSE braucht, das aber auch nciht unbedingt Papyrus 100% vervollständigt. Okay, vielleicht bin ich heikel, weil sonst mit C# arbeite, das kaum Wünsche übrig lässt.
Wenn ich dich wäre, würde ich es so lösen, dass die gelevelte Liste im CK nichts oder nur eine Halskette enthält. Dann führt Revert dazu, dass die Liste praktisch leer ist. Wobei du dann natürlich darauf achten musst, dass du die Liste mit einer Init-Quest initialisierst, damit Leute nicht nackt rumlaufen(und das muss passieren, bevor der erste NPC mit diesem Ouitfit geladen ist.
Wenn du nämlich auf das normale Wachen-Outfit neue Kleidung hinzu fügst, dann nehmen die im besten Fall die bessere Ausrüstung und nicht zwingend deine.
Ich behaupte zwar generell, dass das so überhaupt nicht geht, wenn du erwartest, dass du den Container zu machst und alle schlagartig mit den gewünschten Klamotten rumlaufen. Wahrscheinlich gäbe es höchstens beim nächsten Zellenreset einen Wechsel.