Fallout 4

Title:      SKK Settlement Attack System console commands and configuration
Platform:   Fallout 4 (PC, XBOX)
Mod File:   SKKSettlementAttackSystem.ESP
Mod Ver:    001 onwards 
Author:     [email protected]
Source:     https://www.nexusmods.com/fallout4/mods/37393
Date:       Feb 2019 


Global Variables that can be set with the console, Papyrus remote script properties via GetFormFromFile, or MCM if you want to write a json thing:


;----------------------------------------------------------------------


SKK_SASEnabled
[0 | *1] Enable or disable attacks. 


SKK_SASAttackInterval
[-1 to 65355] Default 3600. Real time seconds between settlement attacks, the selected value subject to +/- 20% random jitter. Totally Random -1 (15min to 4 hours), do not set to zero.


SKK_SASAttackNow [v006]
[*0 | 1] Over ride attack interval timer ONCE to start an instant attack if workshop conditions are met. After setting the value the trigger ATTACK NOW function call;

cqf SKK_SAS "SKK_SASScript.CleanupAttack" 1


SKK_SASDefensePerSettler
[0 to 65355] Default 6 the defense rating per settler (excluding guards who already produce 6 def) that is added to the workshop defense/safety rating you see on the building screen and in the PipBoy.


SKK_SASDefensePerAttacker
[1 to 65355] Default 6 the defense rating used to calculate each normal attacking lvlActor. Attackers are capped at max 64 for performance.


SKK_SASDefensePerHeavyKnocker
[1 to 65355] Default 36 the defense rating used to calculate each attacking lvlActor with the HeavyKnocker keyword (Deathclaw, Vertibird, Behemoth, Queen) that the player can add to SKK_SASUserAddActorsList. Large attackers are capped at max 6 for performance (render rather than AI).


SKK_SASAttackStrength
[0.5 to 2.0] Default 1.0 multiplier for number of attackers based on settlement defense and settlers.


The number of standard actor attackers is calculated from: 
((WorkshopParent defense rating PLUS (Number of settlers who are not guards TIMES SKK_SASDefensePerSettler)) DIVIDEDBY SKK_SASDefensePerAttacker ) MULTIPLIEDBY SKK_SASAttackStrength
Hard limits Minimum 2 Maximum 64


SKK_SASAttackDifficulty
[50|75|*100|125|150] Sets lvlActor spawn level and health % relative to player using the aiLevelMod LevelList modifier.    


SKK_SASAttackFaction (demised in 012 - use )
[-1 to NumberOfForms] Index of SKK_SASAttackFactionList formlist lvlActor entry to pick, -1 for random. You will not be able to see the index numbers of dynamically added factions to pick (level gated, hostile relationship, DLC installation, imports from SKK_SASUserAddActorsList).

To use a specific faction set all the unlocked factions to disabled in the holotape except for the user added list, add the specific lvlActor form to FormList SKK_SASUserAddActorsList. 


For any of the attack setting changes above to be executed,
call script function (SKK_SAS as SKK_SASScript).CleanupAttack(bForceClean = TRUE), or
console [ cqf SKK_SAS "SKK_SASScript.CleanupAttack" 1 ] 


;---------------------------------------------------------------------- 


SKK_SASAirSupportFactionBypass (v005)
[*0 | 1] Bypass the Vertibird air support player faction membership check. If the base game Vertibird Fast Travel (VFT) is enabled (BoSFastTravelCanUse >0) then air support will be available.


SKK_SASAirSupportTimer (v005)
[1 to 86400] Default 900 real time seconds that a Vertibird support mission will loiter on station before returning to base. Inter mission cooldown is (value *2).  


For any of the air support setting changes above to be executed,
call script function (SKK_SASAirSupport as SKK_SASAirupportScript).CleanupAirSupport(bForceClean = TRUE), or
console [ cqf SKK_SASAirSupport "SKK_SASAirSupportScript.CleanupAirSupport" 1 ]


;----------------------------------------------------------------------


SKK_SASPatrolEnabled (v007)
[*0 | 1] Enable or disable patrols between owned workshops with either (>= 1 settlers) or (>= SKK_SASDefensePerAttacker defense). Implemented by the function call:

Script  (pSKK_SASPatrol as SKK_SASPatrolScript).SwitchPatrol()
Console [ cqf SKK_SASPatrol "SKK_SASPatrolScript.SwitchPatrol" ]


SKK_SASPatrolMarkers (v007)
[0 | *1 | 2] 0 all messages disabled, 1 enable new patrol messages, 2 enable new patrol messages and patrol map markers. This is set by a function call:

Script  (pSKK_SASPatrol as SKK_SASPatrolScript).SwitchPatrolMarkers(Value) 
Console [ cqf SKK_SASPatrol "SKK_SASPatrolScript.SwitchPatrolMarkers" Value ]


;----------------------------------------------------------------------


SKK_SASDisableAttacks
SKK_SASDisableBaseGameAttacks 
[0|*1] Enable or disable irritating [Defend settlement name] base game attacks on workshops. This configures an existing setting on workshops and does not hack the base game in any way. Does not stop Minuteman radiants that include some [Defend] [Build Defenses] [Help defend] attacks (MinRecruitmentAllowRandomAfterPlayerOwned) as the player may be doing MM faction quests, use SKK Workshop Ownership Utilities for this. 

This is set by a function call:

Script pSKK_SAS as SKK_SASScript).DisableBaseGameAttacks()
Console [ cqf SKK_SAS "SKK_SASScript.DisableBaseGameAttacks" ] 


SKK_SASIgnoreFactionRelations (v012)
[*0|1] Ignore the player relationship with each faction so they can be enabled for the random selection pool.


SKK_SASAutoRepair (v006)  
[*0|1|2] Enable or disable auto repairing (1) workshop resources (like plants) or (2) resources and turrets  after an attack. 10 caps per repair is removed from the player account. Function is skipped if the player is a dead beat hobo scavver with less than 100 caps.  


SKK_SASAttackMarkers
[*0|1] Enable or disable attacker map markers.


SKK_SASForceHolotape
[0|*1] Add config holotape to player inventory if missing at each game load.   


SKK_SASStopAttackOnUnload
[0|*1] Remove hostile actors from the game if their 3d unloads when they are outside the player active area (12K units). If  none are left, attack cleans up.


SKK_SASStopAttackOnTimer
[0|*1] Failsafe 30 real time minute timer to stop and cleanup an attack after the player arrives to start an attack.


;---------------------------------------------------------------------- 


(*) DEFAULT SETTING

To set global variables with the game console use [ set VARIABLE to VALUE ]

All settings are evaluated as each attack cycle triggers. 

Setting a value outside of the preset settings will stop that item from showing as a holotape menu selection.


;---------------------------------------------------------------------- 


;; SKKSettlementAttackSystem defaults console bat file 

set SKK_SASEnabled to 1
set SKK_SASAttackInterval to 900
set SKK_SASDefensePerSettler to 6
set SKK_SASDefensePerAttacker to 6
set SKK_SASDefensePerHeavyKnocker to 36
set SKK_SASAttackStrength to 1           
set SKK_SASAttackDifficulty to 100       
set SKK_SASAttackFaction to -1
set SKK_SASAttackMarkers to 0
set SKK_SASIgnoreFactionRelations to 0;
set SKK_SASDisableBaseGameAttacks to 1
set SKK_SASForceHolotape to 1
set SKK_SASAutorepair to 1
set SKK_SASAttackNow to 0
set SKK_SASStopAttackOnUnload to 1;
set SKK_SASStopAttackOnTimer to 1;
cqf SKK_SAS "SKK_SASScript.CleanupAttack" 1

set SKK_SASAirSupportFactionBypass to 0
set SKK_SASAirSupportTimer to 900
cqf SKK_SASAirSupport "SKK_SASAirSupportScript.CleanupAirSupport" 1

set SKK_SASPatrolEnabled to 1
cqf SKK_SASPatrol "SKK_SASPatrolScript.SwitchPatrol"
cqf SKK_SASPatrol "SKK_SASPatrolScript.SwitchPatrolMarkers" 1

;---------------------------------------------------------------------- 

STANDARD ACTORS

The actor menu enables/disables the use of the following base game actors by dynamically populating SKK_SASHostileList with them if they are hostile to the player at the time of spawning:

lvlBoSSoldier_CombatArmor_Semi
lvlChildrenOfAtom
lvlDeathClaw
lvlFeralGhoul
lvlGunnerMixed
lvlMinuteman
lvlRaiderMixed
lvlRRAgent
lvlSupermutantMixed
lvlSynth
lvlTriggerman
lvlVertibirdOrbit
DLC01LvlBotRaider
DLC04_LvlGang_Disciple
DLC04_LvlGang_Operator
DLC04_LvlGang_Pack
SKK_SASUserAddActorsList contents.

DO NOT edit SKK_SASHostileList ! If you want custom actors disable all the standard actors and only enable the user added actor list.

;---------------------------------------------------------------------- 

ADDING CUSTOM ACTORS 

To add specific or custom actors to the random selection, use xEDIT to add the lvlActorName records (NPC_ signature) to SKK_SASUserAddActorsList Form ID List (the one with the helpful description "Add lvlNPC actors to this list (mod will use regardless of hostility"). 

;---------------------------------------------------------------------- 


SAMPLE MASTERLESS CODE FOR A REMOTE MOD TO TRIGGER AN ATTACK

Function TriggerSettlementAttackSystem() 

If Game.IsPluginInstalled("SKKSettlementAttackSystem.esp")

   GlobalVariable rSKK_SASEnabled = Game.GetFormFromFile(0x00000f9e, "SKKSettlementAttackSystem.esp") as GlobalVariable
   GlobalVariable rSKK_SASAttackNow = Game.GetFormFromFile(0x00012300, "SKKSettlementAttackSystem.esp") as GlobalVariable 
   Quest rSKK_SASQuest = Game.GetFormFromFile(0x00000800, "SKKSettlementAttackSystem.esp") as Quest 

   If (rSKK_SASEnabled != None) && (rSKK_SASEnabled.GetValue() > 0) && (rSKK_SASAttackNow != None) && (rSKK_SASQuest != None) 

      ScriptObject rSKK_SASScript = rSKK_SASQuest.CastAs("SKK_SASScript")
      Bool rAttackRunning = rSKK_SASScript.GetPropertyValue("bAttackRunning") as Bool

      If (rAttackRunning == False) ;comment out to override any existing attacks
         rSKK_SASAttackNow.SetValue(1) 
         Var[] kArgs = new Var[1]
         kArgs[0] = True as Bool ;bForceClean
         rSKK_SASScript.CallFunction("CleanupAttack", kArgs)
      EndIf ;comment out to override any existing attacks

   EndIf

EndIf

EndFunction

If the player is not at a valid workshop location or is busy (incombat, inscene, onmount, sleeping, waiting, inworkbench) nothing will happen which can be tested with [ If (rAttackRunning == False) ] after ~ 3 second wait for scripts to execute time. 

;---------------------------------------------------------------------- 

Article information

Added on

Edited on

Written by

SKKmods