@@ -491,6 +491,11 @@ class Settings:
491491 npc_flashlight_combat_factor : float = 1.0 # FlashlightCombatUseChance je Rang (Deckel 1.0)
492492 npc_flashlight_on_hour : int = 22 # AIGlobals FlashlightTimeOfDayOn
493493 npc_flashlight_off_hour : int = 5 # AIGlobals FlashlightTimeOfDayOff
494+ # --- Speichern (SaveLoadVariables / AutoSaveVariables, beide unbinarisiert) ---
495+ manual_save_slots : int = 31 # SavesLimit.Manual (0 = unbegrenzt)
496+ quick_save_slots : int = 3 # SavesLimit.Quick
497+ auto_save_slots : int = 10 # SavesLimit.Auto
498+ autosave_interval_min : float = 10.0 # AutoSaveIntervalTime (Vanilla 600 s)
494499 # --- Munition (global ueber alle Munitionstypen) ---
495500 ammo_damage_factor : float = 1.0
496501 ammo_piercing_factor : float = 1.0 # verstaerkt die AP-Charakteristik
@@ -2325,6 +2330,38 @@ def _holdbreath_patch(gd: GameData, s: Settings) -> dict:
23252330 return {"DefaultHoldBreathParams" : cfg }
23262331
23272332
2333+ def _saveload_patch (gd : GameData , s : Settings ) -> dict :
2334+ """SaveLoadVariables (unbinarisiert wie CoreVariables): SavesLimit je
2335+ Speichertyp (Vanilla Manual 31 / Quick 3 / Auto 10; 0 = unbegrenzt).
2336+ Nexus "Bode's Unlimited Saves", Recherche 05.09.2026. Live gelesen,
2337+ nur Abweichungen geschrieben."""
2338+ node = gd .saveload .children .get ("DefaultConfig" )
2339+ limits = node .children .get ("SavesLimit" ) if node else None
2340+ if limits is None :
2341+ return {}
2342+ cfg : dict = {}
2343+ for key , wanted in (("Manual" , s .manual_save_slots ),
2344+ ("Quick" , s .quick_save_slots ),
2345+ ("Auto" , s .auto_save_slots )):
2346+ raw = limits .values .get (key )
2347+ if raw is not None and wanted >= 0 and _neq (float (wanted ), parse_number (raw )):
2348+ cfg [key ] = str (int (round (wanted )))
2349+ return {"DefaultConfig" : {"SavesLimit" : cfg }} if cfg else {}
2350+
2351+
2352+ def _autosave_patch (gd : GameData , s : Settings ) -> dict :
2353+ """AutoSaveVariables (unbinarisiert): AutoSaveIntervalTime in Sekunden
2354+ (Vanilla 600 = 10 min). Der Regler arbeitet in Minuten."""
2355+ node = gd .autosave .children .get ("DefaultConfig" )
2356+ raw = node .values .get ("AutoSaveIntervalTime" ) if node else None
2357+ if raw is None or s .autosave_interval_min <= 0 :
2358+ return {}
2359+ wanted = s .autosave_interval_min * 60.0
2360+ if not _neq (wanted , parse_number (raw )):
2361+ return {}
2362+ return {"DefaultConfig" : {"AutoSaveIntervalTime" : str (int (round (wanted )))}}
2363+
2364+
23282365def _corevars_patch (gd : GameData , s : Settings ) -> dict :
23292366 cfg : dict = {}
23302367 if _neq (s .repair_cost_factor , 1.0 ):
@@ -3007,6 +3044,8 @@ def add(path: str, patches: dict):
30073044 add (f"ObjHoldBreathParamsPrototypes/ObjHoldBreathParamsPrototypes_patch_{ n } .cfg" ,
30083045 _holdbreath_patch (gd , s ))
30093046 add (f"CoreVariables.cfg_patch_{ n } .cfg" , _corevars_patch (gd , s ))
3047+ add (f"SaveLoadVariables.cfg_patch_{ n } .cfg" , _saveload_patch (gd , s ))
3048+ add (f"AutoSaveVariables.cfg_patch_{ n } .cfg" , _autosave_patch (gd , s ))
30103049 add (f"StashPrototypes/StashPrototypes_patch_{ n } .cfg" , _stash_patch (gd , s ))
30113050 # Drei Builder teilen sich die Generator-Datei (Mengen, Waffen-Zustand,
30123051 # Haendler-Bestand) und teils denselben PossibleItems-Eintrag -> mergen
@@ -3190,6 +3229,14 @@ def f(name, factor, vanilla=1.0):
31903229 lines .append (f"NPC flashlights on from { int (s .npc_flashlight_on_hour )} :00" )
31913230 if _neq (s .npc_flashlight_off_hour , 5 ):
31923231 lines .append (f"NPC flashlights off at { int (s .npc_flashlight_off_hour )} :00" )
3232+ if _neq (s .manual_save_slots , 31 ):
3233+ lines .append (f"Manual save slots { int (s .manual_save_slots )} " )
3234+ if _neq (s .quick_save_slots , 3 ):
3235+ lines .append (f"Quick save slots { int (s .quick_save_slots )} " )
3236+ if _neq (s .auto_save_slots , 10 ):
3237+ lines .append (f"Autosave slots { int (s .auto_save_slots )} " )
3238+ if _neq (s .autosave_interval_min , 10.0 ):
3239+ lines .append (f"Autosave every { s .autosave_interval_min :g} min" )
31933240 f ("Ammo damage" , s .ammo_damage_factor )
31943241 f ("Ammo armor piercing" , s .ammo_piercing_factor )
31953242 f ("Ammo armor damage" , s .ammo_armor_damage_factor )
0 commit comments