PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Händler-Inventar Reset



Boïndil
27.07.2011, 10:36
Halo, Leute,
ich schraube ofters an Händler-Inventaren rum, z.B. habe ich Railway-Spikes Caliber hinzugefügt und das Gleisgewehr in meine Armory übernommen.
Natürlich möchte ich das jewils auch gerne testen, aber offensichtlich bin ich voll im verdammten Händler-Glitch, wo das Inventar seit Spiel-Beginn nicht erneuert. Ich habe da teilweise grob geänderte Inventare, aber es werden im besten Fall gelöschte Items entfernt, aber ansonsten bleibt das einfach so.

Die iMerchantRespawnDay-Variablen sollten eigentlich auf 1 sein.
Was mich aber wirklich ankotzt ist, dass auch meines neues Script nicht funktioniert, das ich extra wegen diesem Bug erstellt habe. Das ist eine Quest, die alle zwei Tage alle wichtigen Händler per ResetInventory erneuern sollte.
Die Message wird ausgegeben, also sollten die Zeilen von NPCRef.ResetInventory laufen.
Offensichtlich geht der Trick rum, dass man warten und vor dem Händler speichern, anschliessend ins Haupt-Menu oder neu starten soll, indem man den Save richtig lädt.
Das hat sogar ein Mal funktioniert, nur leider kann ich das nicht repetieren, ich kann mehrmals drei Tage warten und RestInventory ausführen, aber das nützt alles nichts.


Gibt es da noch eine weitere Lösung?

Grüsse
Boïndil

Screeling
27.07.2011, 10:52
hmm von Sripten hab ich weniger ahnung, hast du die Respawn Variable verkürzt? Weil Vanilla NV ist ja immer Mittwochs die neubetankung der Händler.

Boïndil
27.07.2011, 13:40
Eigentlich sollten die nach den Einstellungen jeden Tag erneuern.
Das von Mittwoch wusste ich nicht, bist du sicher? Oder ist das nicht einfach ein 3-Tage-Intervall, der ab und zu buggy ist?

Screeling
27.07.2011, 15:41
hab nochmal eben aufm Wiki nachgesehen nur Gunrunners ist Mittwochs und Sonntags.

aber vieleicht hilft der eintrag ausm Wiki :

Zitat:

The player randomly can find all the weapon mods for the Varmint Rifle, the 9mm pistol, and the .357 magnum revolver in his shop inventory. If no mods are available, wait for the store to restock (3 game days). You might have to buy a previous mod for a new one to be stocked.

Boïndil
27.07.2011, 16:06
Hab es ja schon immer geahnt, dass man für ein Fallout, das innerhalb der Parameter laufen soll, öfter mal ein Abrakadabra oder Gebet braucht ;)

Boïndil
20.08.2011, 13:54
Bin wieder oder immer noch am Händler-Inventar, diesmal in DC.

Diesmal wollte ich es richtig machen, nach Büchlein (http://geck.bethsoft.com/index.php/Adding_items_to_vendors): Händler werden durch zusätzliche Container in der VendorChestCell, die ihnen gehören, mit Inventar versorgt.
Da ich mich auf Gamebryo NULL verlasse, läuft auch hier zusätzlich die Quest, die alle drei Tage per Script das Händler-Inventar resetet und mir dazu eine Meldung ausgibt.
Aber wenn jetzt jemand denkt, dass das so funktioniert, irrt er, die g***verdammten Händler reseten zwar das Inventar, interessieren sich aber einen Sch**, welche Truhe ihnen gehört. Was in geänderten Ammo-Listen drin ist, wird ja auch ersetzt, nur meine Truhen nicht.

Man könnte denken, dass ich langsam wüsste, wie ich mein System in den Griff kriege. Da wird nichts überschrieben, die Händler können das verkaufen, was ich ihnen zuweise, der Container ist persistent und auf Respawn.
Ich meine, was soll ich denn noch tun? :auh

Aaaaaimbot
20.08.2011, 14:31
Jeder Händler kann nur einen VendorContainer haben, so viel ich weiß. Du könntest ins Inventar des betreffenden Händlers höchstens Unterlisten einfügen. Wem die Truhen "gehören", ist völlig egal: Der NPC (also dessen Referenz) muß unter "Merchant Container" den Container ausgewählt haben, aus dem er verkaufen soll. Alternativ geht aber auch, daß man "SetMerchantContainer" auf den NPC benutzt (der muß dazu eine Persistent Reference sein): so ist das z.B. bei Cutter in Paradise Falls gelöst. Und ja, ich weiß, ich red hier mit nem Mörder, der PF immer einfach gedankenlos hochnimmt :P, aber die hat auf jeden Fall je nach Gesprächsoptionen des Spielers entweder den Container mit den Stimpaks oder den mit den Drogen, und das wird eben durch "SetMerchantContainer" gelöst.

Boïndil
20.08.2011, 15:12
"for new NPCs, you can also double click on the NPC in the Render Window and select the chest in the Merchant Container tab (this is probably already assigned for existing NPCs): select the VendorChestsCell in the first dropdown, then your chest reference (yourNPCVendorChestRef) in the second dropdown."

Ich interpretierte das so, dass man auch Container selbst zuweisen kann und zwar mit dem Ziel kompatibel zu anderen Mods zu sein. Wieviele Container unterstützt werden, kann ich aus dem ganzen Text nicht ersehen.

Wieso hat sich überhaupt jemand die Mühe genommen, dieses weitere unbrauchbare Tutorial niederzuschreiben, wenn es so nicht geht? Dann kann ich das ja wie üblich per Overwrite machen, denn das hier stimmt ja ebenfalls überhaupt nicht:
AddItemToLeveledList (http://geck.bethsoft.com/index.php/AddItemToLeveledList) LeveledItem ObjectToAdd iLevel:int iCount:int fHealthPercent100:float:
"ObjectToAdd parameter can be a baseobject or a leveled item list" :auh
Nimmt ja wohl keiner an, dass ich fünfundert Zeilen Code schreibe, um 500 einzelne Items zuzweisen.

Edit:
Ich habe mir überlegt, wie ich dynamisch Inhalte in einem festen Rythmus in einen Merchant-Container verschieben kann, sodass ich bombenfest den richtigen Respawn habe, ohne andere Mods zu beinflussen. Die beste Lösung könnte ein Hack sein:

In einer Null-Zelle baue ich statt einem Merchant-Container einen Dummy-NPC mit einem Händler-Inventar ein.
Dann resete ich alle drei Tage per Quest-Script den NPC und den Händler und verschiebe anschliessend das Inventar mit "RemoveAllItems NPCRef MerchantRef" zum Händler.
Das erscheint mir im Moment die einzige gangbare Lösung, die nicht haufenweise Code erfordert und/oder als Overwrite Listen anderer Mods beinflusst.

Aaaaaimbot
20.08.2011, 20:06
Ich interpretierte das so, dass man auch Container selbst zuweisen kann und zwar mit dem Ziel kompatibel zu anderen Mods zu sein. Wieviele Container unterstützt werden, kann ich aus dem ganzen Text nicht ersehen.
Wenn man sich das Ganze im GECK mal anschaut, sieht man, daß jeder NPC nur einen Merchant Container haben kann... Probier das doch mal aus! Wähl Moira oder nen anderen Verkäufer im Renderfenster an: unter "Merchant Container" steht dann vermutlich "VendorContainerMoiraBrownREF" oder so. Da kann immer nur einer stehen.


Wieso hat sich überhaupt jemand die Mühe genommen, dieses weitere unbrauchbare Tutorial niederzuschreiben, wenn es so nicht geht? Dann kann ich das ja wie üblich per Overwrite machen, denn das hier stimmt ja ebenfalls überhaupt nicht:
AddItemToLeveledList LeveledItem ObjectToAdd iLevel:int iCount:int fHealthPercent100:float:
"ObjectToAdd parameter can be a baseobject or a leveled item list"
Nimmt ja wohl keiner an, dass ich fünfundert Zeilen Code schreibe, um 500 einzelne Items zuzweisen.
Achtung: Wenn man "AddItemToLeveledList" benutzt, läßt sich das nie mehr rückgängig machen, sondern wird permanent im Spiel gespeichert. Aber was daran nicht stimmen soll, erschließt sich mir nicht, bei mir funktioniert der Befehl ordnungsgemäß...


In einer Null-Zelle baue ich statt einem Merchant-Container einen Dummy-NPC mit einem Händler-Inventar ein.
Dann resete ich alle drei Tage per Quest-Script den NPC und den Händler und verschiebe anschliessend das Inventar mit "RemoveAllItems NPCRef MerchantRef" zum Händler.
Das erscheint mir im Moment die einzige gangbare Lösung, die nicht haufenweise Code erfordert und/oder als Overwrite Listen anderer Mods beinflusst.
"AddItem" auf den normalen Verkaufscontainer eines NPCs anwenden, vielleicht? Und das, was dazugefügt wird, wär dann nämlich Deine eigene Liste von Items, die der NPC im Inventar haben soll.

Boïndil
20.08.2011, 20:45
Ich meinte eigentlich "RemoveAllItems NPCRef MerchantContainerRef"

Es geht mir darum, dass ich garantiert keine einzelnen Item zuweise, denn das sind zuviele. Bei der obigen Lösung ist es an sich egal, ob der Container eigentlich ein NPC ist, das gibt ja nicht mehr Arbeit. Aber ich habe den Vorteil der absoluten Kontrolle über den Respawn per NPCRef.ResetInventory.

Was ich vor längerer Zeit versuchte war:
AddItemToLeveledList VendorXXXLvlList MyVendorStuffLvlList
Und das ging offensichtlich im Gegensatz zu dem, wass da steht nicht. Dass das anschliessend im Save gespeichert ist, macht das sowieso eher unbrauchbar.

Man kann einem Container ja einen Besitzer zuordnen und ich verstand das Tutorial so, dass das auch eine Methode ist.

Boïndil
22.08.2011, 12:11
So, habe das mit dem Script mit konfigurierbarem Intervall und garantiertem Respawn ohne Einfluss auf andere Mods überdacht und bin zu folgendem Entwurf gekommen:


scn ArmoryQuestScript

float RestoreInterval
ref MerchantRef
ref ContainerRef

Begin GameMode

; Haendler Reset
If GameDaysPassed >= RestoreInterval

; Weapons, Ammo
Set ContainerRef To ArmoryGunsAmmoRef

; - Fallout NV --------------------
Set MerchantRef To DocMitchellREF
ContainerRef.ResetInventory
MechantRef.ResetInventory
ContainerRef.RemoveAllItems MechantRef 0

Set MerchantRef To MiguelRef
ContainerRef.ResetInventory
MechantRef.ResetInventory
ContainerRef.RemoveAllItems MechantRef 0

; - Fallout 3 --------------------
; Set MerchantRef To MoiraBrownRef
; ContainerRef.ResetInventory
; MechantRef.ResetInventory
; ContainerRef.RemoveAllItems MechantRef 0


; Outfits
Set ContainerRef To ArmoryOutfitsRef

ShowMessage ArmoryMsgMerchantRestore
Set RestoreInterval To GameDaysPassed + DWMMerchantRestoreInterval
EndIf

End

ContainerRef sind Dummy-NPCs in einer Null-Zelle, analog der VendorChestCell.
Dies muss ich tun, weil man Container nicht mit ResetInventory auffüllen kann, das geht nur bei NPC.

Wie man sieht, ist das schon auf das einfache kopieren von Spiel zu Spiel vorbereitet, was in einem Overwrite in jedem Spiel passiert.

Es werden natürlich die passenden Items zum richtigen Händler verschoben, das hier ist nur zum zeigen. Was meint ihr?

Edit:
Werde das versuchsweise so umsetzen und zwar noch besser, indem ich Pack-Brahmins verwende :D
So kann ich, wen ich möchte, eine Funktion einbauen, die das Brahmin mit Händler zu mir schickt.

Boïndil
22.08.2011, 17:52
Haaah!! Mit dem Script läufts :D
Wie üblich musste ich einige Wiederstände, ein paar Crashes und Fehleinschätzungen ertragen, aber dann lief es tadellos.

; Quest Generic:

If ResetArmory == 1 || ArmoryResetAll == 1 || GameDaysPassed >= RestoreInterval

Set ArmoryQuestMerchants.ResetMerchants To 1
; Message Merchant Restore
ShowMessage ArmoryMsgMerchantRestore
Set RestoreInterval To GameDaysPassed + ArmoryMerchantRestoreInterval

EndIf

; Quest Merchants:

scn ArmoryScriptQuestMerchants

ref ContainerRef
short ResetMerchants

scn ArmoryScriptQuestMerchants

ref ContainerRef
short ResetMerchants

Begin GameMode

If ResetMerchants == 1

; Fallout 3
; -------------------------------------------------------
; Waffen, Ammo
Set ContainerRef To AmdRefBrahminWeaponsAmmo

MoiraBrownRef.ResetInventory
ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedMoiraBrownRef 0

LuckyHarithRef.ResetInventory
ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestLuckyHarithRef 0

; Gesamte Armory
Set ContainerRef To AmdRefBrahminArmoryAll

JennyStahlRef.ResetInventory
ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedBrassLanternREF 0

; Set MerchantRef To FlakRef
; Set MerchantRef To ShrapnelRef
; Set MerchantRef To ChiefGustavoRef
; Set MerchantRef To BannonRef
; Set MerchantRef To SeagraveHolmesRef
; Set MerchantRef To AnthonyLingRef
; Set MerchantRef To DocHoffRef
; Set MerchantRef To CrazyWolfgangRef
; Set MerchantRef To CrowRef
; Set MerchantRef To DocChurchRef
; Set MerchantRef To DoctorPrestonRef
; Set MerchantRef To CindyCantelliRef


; Fallout New Vegas
; -------------------------------------------------------
; Set MerchantRef To DocMitchellREF
; Set MerchantRef To MiguelRef
; Set MerchantRef To TrudyRef
; Set MerchantRef To VFSGloriaVanGraffREF
; Set MerchantRef To FreesideRalphREF
; Set MerchantRef To FreesideMickREF
; Set MerchantRef To KlamathBobRef
; Set MerchantRef To OldLadyGibsonRef
; Set MerchantRef To PrimmJohnsonNashRef
; Set MerchantRef To DoctorUsanagiRef
; Set MerchantRef To GSChetRef
; Set MerchantRef To NVBlakeREF
; Set MerchantRef To VendortronRef
; Set MerchantRef To PrimmJohnsonNashRef
; Set MerchantRef To MrHoldoutREF
; Set MerchantRef To CliffBriscoeREF
; Set MerchantRef To FortDaleBartonRef
; Set MerchantRef To NCRCFCarterREF
; Set MerchantRef To VRRCArmorerREF
; Set MerchantRef To KellerRef
; Set MerchantRef To vMOLaceyREF

Set ResetMerchants To 0

EndIf

End


Viel kürzer gehts nicht, auch wenn es mir ein Dorn im Auge ist, dass ich jedes Mal wieder ContainerRef.ResetInventory aufrufen muss.

Carnatics
23.08.2011, 07:17
Viel kürzer gehts nicht, auch wenn es mir ein Dorn im Auge ist, dass ich jedes Mal wieder ContainerRef.ResetInventory aufrufen muss.

mal blöd gefragt kann man die händler nicht in ne form list packen ?

dann wär der spass um einiges kürzer ?!?

Boïndil
23.08.2011, 07:49
Habe ich mir natürlich überlegt, aber da ich Händler, Händler-Container und Ursprungscontainer konfigurieren muss, ist der Aufwand mit Formlists nicht kleiner und so habe ich den Vorteil, dass ich ausschliesslich an einem Script rumschrauben kann.
Als Entwickler in jeder vernünftigen Script-Sprache würde man mich nach dem Schweine-Code natürlich entlassen ;)

Hier die letzte Version mit einfacherer Konfiguration:


scn ArmoryScriptQuestMerchants

ref ContainerRef
short ResetMerchants

Begin GameMode

If ResetMerchants == 1

; Fallout 3 Haendler
; -------------------------------------------------------
JennyStahlRef.ResetInventory
LuckyHarithRef.ResetInventory
MoiraBrownRef.ResetInventory
FlakRef.ResetInventory
ShrapnelRef.ResetInventory
ChiefGustavoRef.ResetInventory
BannonRef.ResetInventory
SeagraveHolmesRef.ResetInventory
AnthonyLingRef.ResetInventory
DocHoffRef.ResetInventory
CrazyWolfgangRef.ResetInventory
CrowRef.ResetInventory
DocChurchRef.ResetInventory
DoctorPrestonRef.ResetInventory
CindyCantelliRef.ResetInventory

; Ammo
Set ContainerRef To AmdRefBrahminAmmo

ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedSeagraveHolmesRef 0

; Ammo Special
Set ContainerRef To AmdRefBrahminAmmoSpecial

; Gesamte Armory
Set ContainerRef To AmdRefBrahminArmoryAll

ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedBrassLanternRef 0

; Schusswaffen
Set ContainerRef To AmdRefBrahminGuns

; Schusswaffen, Ammo
Set ContainerRef To AmdRefBrahminGunsAmmo

; Schmuck
Set ContainerRef To AmdRefBrahminJewelry

; Nahkampfwaffen
Set ContainerRef To AmdRefBrahminMelee

; Military-Ruestungen
Set ContainerRef To AmdRefBrahminMilitary

ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedFlakAndShrapnel 0

; Outfits und Schmuck
Set ContainerRef To AmdRefBrahminOutfitsJewelry

ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedBannonRef 0
ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedAnthonyLingRef 0

; Alle Waffen, Ammo
Set ContainerRef To AmdRefBrahminWeaponsAmmo

ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedMoiraBrownRef 0
ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestHarithRef 0
ContainerRef.ResetInventory
ContainerRef.RemoveAllItems VendorChestBuriedFlakAndShrapnel 0

; Fallout New Vegas
; -------------------------------------------------------
; DocMitchellRef.ResetInventory
; MiguelRef.ResetInventory
; TrudyRef.ResetInventory
; VFSGloriaVanGraffRef.ResetInventory
; FreesideRalphRef.ResetInventory
; FreesideMickRef.ResetInventory
; KlamathBobRef.ResetInventory
; OldLadyGibsonRef.ResetInventory
; PrimmJohnsonNashRef.ResetInventory
; DoctorUsanagiRef.ResetInventory
; GSChetRef.ResetInventory
; NVBlakeRef.ResetInventory
; VendortronRef.ResetInventory
; PrimmJohnsonNashRef.ResetInventory
; MrHoldoutRef.ResetInventory
; CliffBriscoeRef.ResetInventory
; FortDaleBartonRef.ResetInventory
; NCRCFCarterRef.ResetInventory
; VRRCArmorerRef.ResetInventory
; KellerRef.ResetInventory
; vMOLaceyRef.ResetInventory

Set ResetMerchants To 0

EndIf

End

Ich muss ja auch nicht jedem Händler neues Inventar zuweisen, für Fallout 3 wars das schon. Ammo wird bei mir in NV ausschliesslich über Caliber verwaltet, d.h. ich muss ja jetzt schon nicht jedem Händler Ammo geben. Da habe ich allerdings das Problem, dass Weapon Mods Expansion, Classic Weapons und Ahztek bereits die Händler versorgen. Das funktioniert ja auch nicht mal so schlecht nebeneinander, nur wirds mühsam, wenn ich auch noch meine Armory dazwischen setzen muss. Mit dem System komme ich problemlos daran vorbei und habe zudem den Vorteil, dass mich keine Bugs beim Inventar-Reset der Händler mehr nerven, wo teilweise zwei Wochen lang nichts gewechselt wird und zwar in beiden Spielen.

Boïndil
26.08.2011, 11:26
Die Frage gehört zwar nur bedingt hier rein, aber um keinen neuen Thread dafür aufzumachen:

Ich habe in einer bestehenden Vanilla-Innenzelle aufgeräumt, neue Lichter und einen Container hinzugefügt.
Die Dinger, die ich verschwinden lassen wollte, habe ich einfach aus der Zelle geschoben.

Das Problem hatte ich auch schon:
Die Zelle weigert sich, irgend eine Änderung anzuzeigen, ausser dem neuen Container.
Da gibt es aber keinen anderen Mod, der daran was ändert.

Habe Tage lang ausserhalb gewartet, habe haufenweise neue Zellen betreten, mehrfach neu geladen, usw.
Offenbar existiert weder ein GECK-Script-Befehl noch einer für die Konsole, um die Zelle zu reseten.

Was macht man da? Einfach weiterzocken und hoffen, dass irgend wann mal ein Reset passiert?

walli
26.08.2011, 12:43
Schonmal einen Char genommen der noch nie in der Zelle war, ggf. einen neuen erstellt und mittels coc einfach mal in die Zelle geportet?

Boïndil
26.08.2011, 13:20
Das wäre eine Idee. Es ist ja nicht unbedingt so, dass ich die Zelle gleich benötige, aber ich wollte natürlich die Änderungen schnell testen.

Na toll, was hätte ich bei den enormen Änderungen auch anders erwartet: ich kann natürlich nicht ohne Crash einen genügend älteren Save laden :auh

Carnatics
27.08.2011, 07:57
dazu kann ich bedingt etwas beitragen

ich hatte mal einen Tenpenytower mod der die wohnung des players überarbeitet hatte
nach dem entfernen dieser mod wahren einzelne möbel nun nichtmehr an der vanilla position sondern immernoch an der mod position

wobei sich doch die frage stellt warum durch die mid möbel neu angeordnet werden und nach entfernen der mod das aber nicht aufgehoben wird

ich vermute mal das sich das wie mit objekten verhält die man aufheben oder aufnehmen und dann wieder droppen kann...da merkt sich das spiel ja auch wo was hingelegt wurde

bleibt also die frage wo speichert das spiel solche informationen ab ? wohl kaum in nem savegame....


aber da es sich bei dir ja um eine zellen änderung handelt die in einer eigenen esm oder esp ausgeführt wird vermute ich das 1.esp file die lade reihenfoge stress macht oder 2.esm file ein fehler bei der angabe des masterfiles vorliegt<--leicht zu beheben in fo3 edit die fallout als masterfile hinzufügen genau den bug hatte ich auch mal als ich aus ner esp ein esm gemacht hatte gruss

Carnatics
27.08.2011, 08:08
work arround

in schritten
1.kopiere die zelle
2. bearbeite die kopie nach deinen wüschen
3. ersetze die vanilla teleport data von der normal zelle zur kopie zelle

vorteile
1 original bleibt erhalten
2. nach der entfernung der mod treten auch keine bugs auf wie in der ersten post von mir beschrieben...

Boïndil
27.08.2011, 08:54
Ich überprüfe natürlich immer alles in FO3Edit und säubere damit regelmässig meine Mods.
Da gibt es keine Fehler, die damit zusammenhängen und da wird auch garantiert nichts überschrieben.

Habe mal probehalber ein Element zur Persistant Reference gemacht, aber auch das macht keinen Unterschied: meine neue Kiste steht da, aber die anderen Objekte bleiben in Vanilla-Position.

Möglicherweise speichert die Engine die Daten der aktuellen Zellen im Speicher trotzdem in einem Save und das möglicherweise nicht nur, wenn was bewegt wurde.

An sich habe ich Purge Cell Buffers in Betrieb, der alle 10 Zellen entlädt. Vielleicht bin ich doch nicht in genug Interiors rein oder vielleicht behindert das gar den normalen Prozess der Engine.
Habe ja auch schon gelesen, dass PCB eigentlich ein Plazebo sei, da es nur das macht, was die Engine sowieso macht.

Edit:
Gerade deinen zweiten Beitrag gesehen. Also ehrlich gesagt, ist mir das denn doch nicht so wichtig, um da Aufwand zu betreiben. Ich vertraue mal daruf, dass ich die Änderungen irgend wann mal zu sehen kriege.