the Sim Settlements forums!

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Question Liberator: Killing a Nuka-World boss causes me to lose all (non-Raider) Outposts

spacefiddle

Well-Known Member
Messages
576
Minutemen Liberator faction pack installed.

Completed Taken for a Ride. Started Grand Tour.
Did NOT get up to Home Sweet Home or Power Play. Have not taken any Commonwealth settlements for Raiders. Have only started clearing the Nuka-World Parks.
Talked to Mackenzie, got Open Season.

Killed Nisha. Instantly got messages "You are no longer allied with <all my Outposts>."
Went to The Castle HQ after Open Season completed.

None of my faction soldiers are accessible to me any more. Generic voice response, instead of inventory access. Attempt to access workshop, "You aren't allied with this settlement." Broken save, rollback only option, I now have no Outposts and no way to claim one.

In the Papyrus logs right after I killed Nisha - first line seems especially suspicious, "
[05/30/2020 - 08:30:29AM] [SSNukaworldPatch:DLC04WorkshopParentScriptExtended <DLC04WorkshopParent (06007BE6)>] clearing player ownership of raider outpost [DLC04:DLC04RedRocketWorkshopScript < (0600BCE7)>]"
:

Code:
[05/30/2020 - 08:30:29AM] [SSNukaworldPatch:DLC04WorkshopParentScriptExtended <DLC04WorkshopParent (06007BE6)>] clearing player ownership of raider outpost [DLC04:DLC04RedRocketWorkshopScript < (0600BCE7)>]
[05/30/2020 - 08:30:29AM] info: [WSFW] Researching all places SetOwnedByPlayer is called.
stack:
    <unknown self>.debug.TraceStack() - "<native>" Line ?
    [ (0600BCE7)].DLC04:DLC04RedRocketWorkshopScript.SetOwnedByPlayer() - "C:\Program Files (x86)\Steam\steamapps\common\Fallout 4\Data\Scripts\Source\User\WorkshopScript.psc" Line 1774
    [DLC04WorkshopParent (06007BE6)].SSNukaworldPatch:DLC04WorkshopParentScriptExtended.ClearRaiderSettlementOwnership() - "C:\Program Files (x86)\Steam\SteamApps\common\Fallout 4\Data\Scripts\Source\User\SSNukaworldPatch\DLC04WorkshopParentScriptExtended.psc" Line 48
    [DLC04RaiderKickout (06027704)].dlc04:dlc04koquestscript.DLC04SendKickOut() - "g:\_F4\DLC04\Art\Raw\Scripts\DLC04\DLC04KOQuestScript.psc" Line 89
    [DLC04RaiderKickout (06027704)].DLC04:Fragments:Quests:QF_DLC04RaiderKickout_01027704.Fragment_Stage_0020_Item_00() - "C:\Users\Paolo\AppData\Local\Temp\PapyrusTemp\DLC04\Fragments\Quests\QF_DLC04RaiderKickout_01027704.psc" Line 69
[05/30/2020 - 08:30:29AM] error: Type mismatch for argument 4.
stack:
    <empty stack>
[05/30/2020 - 08:30:29AM] error: Type mismatch for argument 4.
stack:
    <empty stack>
[05/30/2020 - 08:30:29AM] [SSNukaworldPatch:DLC04WorkshopParentScriptExtended <DLC04WorkshopParent (06007BE6)>] clearing player ownership of raider outpost [workshopscript < (00066EB6)>]
[05/30/2020 - 08:30:29AM] info: [WSFW] Researching all places SetOwnedByPlayer is called.
stack:
    <unknown self>.debug.TraceStack() - "<native>" Line ?
    [ (00066EB6)].workshopscript.SetOwnedByPlayer() - "C:\Program Files (x86)\Steam\steamapps\common\Fallout 4\Data\Scripts\Source\User\WorkshopScript.psc" Line 1774
    [DLC04WorkshopParent (06007BE6)].SSNukaworldPatch:DLC04WorkshopParentScriptExtended.ClearRaiderSettlementOwnership() - "C:\Program Files (x86)\Steam\SteamApps\common\Fallout 4\Data\Scripts\Source\User\SSNukaworldPatch\DLC04WorkshopParentScriptExtended.psc" Line 48
    [DLC04RaiderKickout (06027704)].dlc04:dlc04koquestscript.DLC04SendKickOut() - "g:\_F4\DLC04\Art\Raw\Scripts\DLC04\DLC04KOQuestScript.psc" Line 89
    [DLC04RaiderKickout (06027704)].DLC04:Fragments:Quests:QF_DLC04RaiderKickout_01027704.Fragment_Stage_0020_Item_00() - "C:\Users\Paolo\AppData\Local\Temp\PapyrusTemp\DLC04\Fragments\Quests\QF_DLC04RaiderKickout_01027704.psc" Line 69
 
Yeah, I realize Liberator-Conq players are a subset of a subset of SimSet players, so all the other random weirdness is not urgent - but this one's pretty bad, total showstopper.

Tried some more experimentin' to see if it could be salvaged, but no dice. I've effectively lost everything - all Outposts are now neutral unaligned with no mechanism to reclaim. "Move HQ" shows a blank window, no valid targets, so I can't try to set up at a former Vassal. I'm not even sure what the status of the other settlements is, since they are no longer Vassals OF anything. And my former soldiers no longer accept my control.

I'll revert to a save I made before kicking the whole thing off, and I'll keep that save around, so I'm available to test any new versions if needed.
 
The Nukaworld patch should work regardless of faction pack. If it's not working, it either doesn't work at all, or there's a mod conflict. Has anyone successfully killed the Nukaworld raiders with the patch and avoided losing their Conq outposts?
 
Is it the kind of conflict that would show up if I loaded the patch and suspect mods into xEdit, or is it script-based?

Edit: damn damn damn. I think i found it. Using a mod called' Minutemen Take Over Nuka World," which does some amazing things that should be in the base game -

https://www.nexusmods.com/fallout4/mods/30509?tab=files

For one thing, as Gage keeps saying the place is a "power keg" etc, it causes all three gangs to aggro EACH OTHER as soon as you assassinate one leader. It also lets you summon in a force of Minutemen (or optionally Brotherhood if you're a member). But looking at the script segment i posted originally, I see this in the mod's files:

upload_2020-6-3_16-52-51.png


That's what your patch changes, innit.
And his scripts are loose files, so taking precedence.
 
Last edited:
Okay. I can probably merge these, if the "kickout" is the only conflict.

That mod's fragment decompiled:

;/ Decompiled by Champollion V1.0.6
PEX format v3.9 GameID: 2
Source : D:\STEAM LIBRARY\steamapps\common\Fallout 4\Data\Scripts\Source\User\DLC04\Fragments\Quests\QF_DLC04RaiderKickout_01027704.psc
Modified : 2018-03-12 03:47:10
Compiled : 2018-03-12 03:47:11
User : Paolo
Computer : DESKTOP-3A7LJ0C
/;
ScriptName DLC04:Fragments:Quests:QF_DLC04RaiderKickout_01027704 extends Quest Const hidden

;-- Properties --------------------------------------
ReferenceAlias Property Alias_DLC04KONisha Auto Const mandatory
ReferenceAlias Property Alias_DLC04KOMags Auto Const mandatory
ReferenceAlias Property Alias_DLC04KOWilliam Auto Const mandatory
ReferenceAlias Property Alias_DLC04KOMason Auto Const mandatory
GlobalVariable Property DLC04EnemyGang Auto Const mandatory
Quest Property DLC04PackFights Auto Const mandatory
ObjectReference Property DLC04PackAmphitheaterDisableCaptivesRef Auto Const mandatory
ObjectReference Property DLC04DisciplesFizztopDisablePrisonersRef Auto Const mandatory
Location Property DLC04BradbertonAmphitheaterLocation Auto Const mandatory
Location Property DLC04FizztopMountainLocation Auto Const mandatory
ReferenceAlias Property Alias_DLC04KOPlayer Auto Const mandatory
Quest Property pzjs_OS_Main Auto Const mandatory

;-- Variables ---------------------------------------

;-- Functions ---------------------------------------

Function Fragment_Stage_0100_Item_00()
Self.SetObjectiveDisplayed(50, 1 as bool, False)
EndFunction

Function Fragment_Stage_0050_Item_00()
Quest __temp = Self as Quest
dlc04:dlc04koquestscript kmyQuest = __temp as dlc04:dlc04koquestscript
Self.SetObjectiveCompleted(30, 1 as bool)
kmyQuest.DLC04CountBoss()
EndFunction

Function Fragment_Stage_0255_Item_00()
quest#queststage stageToSet = new quest#queststage
stageToSet.QuestToSet = pzjs_OS_Main
stageToSet.stageToSet = 150
Quest.SetQuestStage(stageToSet)
Self.CompleteAllObjectives()
Self.Stop()
EndFunction

Function Fragment_Stage_0030_Item_00()
Quest __temp = Self as Quest
dlc04:dlc04koquestscript kmyQuest = __temp as dlc04:dlc04koquestscript
Self.SetObjectiveCompleted(10, 1 as bool)
kmyQuest.DLC04CountBoss()
EndFunction

Function Fragment_Stage_0040_Item_00()
Quest __temp = Self as Quest
dlc04:dlc04koquestscript kmyQuest = __temp as dlc04:dlc04koquestscript
Self.SetObjectiveCompleted(20, 1 as bool)
kmyQuest.DLC04CountBoss()
EndFunction

Function Fragment_Stage_0060_Item_00()
Quest __temp = Self as Quest
dlc04:dlc04koquestscript kmyQuest = __temp as dlc04:dlc04koquestscript
Self.SetObjectiveCompleted(40, 1 as bool)
kmyQuest.DLC04CountBoss()
EndFunction

Function Fragment_Stage_0015_Item_00()
If (Alias_DLC04KONisha.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(10, True, False)
EndIf
If (Alias_DLC04KOMags.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(20, True, False)
EndIf
If (Alias_DLC04KOWilliam.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(30, True, False)
EndIf
If (Alias_DLC04KOMason.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(40, True, False)
EndIf
quest#queststage stageToSet = new quest#queststage
stageToSet.QuestToSet = pzjs_OS_Main
stageToSet.stageToSet = 10
Quest.SetQuestStage(stageToSet)
EndFunction

Function Fragment_Stage_0010_Item_00()
; Empty function
EndFunction

Function Fragment_Stage_0020_Item_00()
Quest __temp = Self as Quest
dlc04:dlc04koquestscript kmyQuest = __temp as dlc04:dlc04koquestscript
kmyQuest.DLC04SendKickOut()
If (Alias_DLC04KONisha.GetActorRef().IsDead() == False)
Self.SetObjectiveDisplayed(10, True, False)
EndIf
If (Alias_DLC04KOMags.GetActorRef().IsDead() == False)
Self.SetObjectiveDisplayed(20, True, False)
EndIf
If (Alias_DLC04KOWilliam.GetActorRef().IsDead() == False)
Self.SetObjectiveDisplayed(30, True, False)
EndIf
If (Alias_DLC04KOMason.GetActorRef().IsDead() == False)
Self.SetObjectiveDisplayed(40, True, False)
EndIf
DLC04PackFights.SetStage(75)
If (Alias_DLC04KOPlayer.GetActorRef().IsInLocation(DLC04FizztopMountainLocation) == 0 as bool)
DLC04DisciplesFizztopDisablePrisonersRef.Disable(False)
EndIf
If (Alias_DLC04KOPlayer.GetActorRef().IsInLocation(DLC04BradbertonAmphitheaterLocation) == 0 as bool)
DLC04PackAmphitheaterDisableCaptivesRef.Disable(False)
EndIf
quest#queststage stageToSet = new quest#queststage
stageToSet.QuestToSet = pzjs_OS_Main
stageToSet.stageToSet = 100
Quest.SetQuestStage(stageToSet)
EndFunction

Function Fragment_Stage_0015_Item_01()
If (Alias_DLC04KONisha.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(10, True, False)
EndIf
If (Alias_DLC04KOMags.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(20, True, False)
EndIf
If (Alias_DLC04KOWilliam.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(30, True, False)
EndIf
If (Alias_DLC04KOMason.GetActorRef().IsDead() == 0 as bool)
Self.SetObjectiveDisplayed(40, True, False)
EndIf
quest#queststage stageToSet = new quest#queststage
stageToSet.QuestToSet = pzjs_OS_Main
stageToSet.stageToSet = 10
Quest.SetQuestStage(stageToSet)
EndFunction

Looks like this is where he causes the assassination to kick off the other gangs fighting each other, and sets a stage in his own quest.
 
The Nukaworld patch replaces the script on the nukaworld workshop parent quest (I believe it's DLC04WorkshopParent) so that it can hijack the function that normally disbands all gang outposts and skips it for any that are controlled by a Conqueror faction pack.
 
Huh... then if I'm reading the included files right, they should NOT be conflicting? He doesn't replace that one. So maybe it's not this mod. BRB, it may break things to disable it right before I start a fight, but i'll try.....

UPDATE: Disabled that Minutemen mod, went back to a save before the attack.
Shot Nisha in the face.
Still lost all my Outposts =/.

@kinggath sorry man, let me know if there's anything i can do to help or test further.

upload_2020-6-3_22-44-18.png
 
Last edited:
In DLC04WorkshopParentScriptExtended.psc

Code:
        If (workshopRef.HasKeyword(WorkshopType02))
            Debug.trace(Self as string + " clearing player ownership of raider outpost " + workshopRef as string, 0)
            If (raiderGangValue == 0 && fControllingGang > 0 as float || fControllingGang == raiderGangValue as float)
                workshopRef.SetOwnedByPlayer(False)

Is this the check, where the SetOwned(False) clause is skipped if that comparison fails? It matches what I saw in the logs - there's also those 'type mismatch' errors. This is where i lose the thread - can you cast freely in a comparison like that? Maybe it doesn't like raiderGangValue going from INT to FLOAT...?

Thought I had it before, but that was the dailyupdate function. This seems to be the actual clearownership bit, and it's definitely firing in game so it thinks it's passing whatever check should be exempting Conq/Lib outposts.
 
Last edited:
@kinggath I rolled waaaay back to before kicking off the Nuka-World attack, with the Minutemen mod I suspected disabled. No change, still get the same "raiderkickout" routine firing. So whatever values are behind

If (raiderGangValue == 0 && fControllingGang > 0 as float || fControllingGang == raiderGangValue as float)
workshopRef.SetOwnedByPlayer(False)

it's testing as true and clearing my ownership.
 
Re casting values: when you decompile, it's not the exact code, just an approximation, it frequently recasts things unnecessarily. If that code is accurate in the blocking of the logic, then it looks like I forgot a pretty important pair of parantheses.

Won't be able to do anything about it for a bit, but I will put it on my list when I can get to that computer next.
 
@kinggath in one of our 6 AM code ramblings, E pointed out this patch may never work on an existing save, as the DLC04 quest has already instantiated and could cause errors and Badness on existing saves, if someone installs it after the quest has started, because it extends DLC04's workshopparent. If there's no way around that, might want to add a "new games only" warning to the patch download.
 
Top