diff --git a/ansible/roles/podman/defaults/main.yml b/ansible/roles/podman/defaults/main.yml index 32c6725..d212892 100644 --- a/ansible/roles/podman/defaults/main.yml +++ b/ansible/roles/podman/defaults/main.yml @@ -80,7 +80,12 @@ zomboid_max_ram: 24g # The modlist itself lives in vars/zomboid_sophie_mods.yml -- 283 mod IDs and # 256 workshop items vendored from the upstream Sophie 42 preset. -zomboid_preset_version: "sophie-42 @ 2026-07-31" +# +# The modlist is still the upstream preset. The world settings no longer are: +# files/zomboid/sophie/SandboxVars.lua is a snapshot of the running debbzoid +# world taken 2026-08-31, not the preset as shipped. See the seed tasks in +# containers/home/zomboid.yml. +zomboid_preset_version: "sophie-42 mods @ 2026-07-31 / live world settings @ 2026-08-31" # Mods subtracted from the vendored Sophie lists before they reach the INI. # Explicit and reasoned so that re-vendoring a newer preset cannot silently @@ -139,6 +144,19 @@ zomboid_mods_renamed: # between world regenerations. Set true to overwrite it from the templates. zomboid_config_force: false +# Same switch, narrowed to spawnregions.lua and spawnpoints.lua. They are the +# only config a running world re-reads (at every server start, unlike +# SandboxVars, which is read only when the world is created), so a spawn edit +# can be deployed to the live world without a wipe. It is separate from +# zomboid_config_force so that landing one is not an excuse to force the INI and +# SandboxVars over the top of whatever the admins have set in-game. +# +# make deploy TAGS=zomboid-conf -e zomboid_spawn_force=true +# +# The server still has to be restarted, with players offline, before the new +# spawn config is read. +zomboid_spawn_force: false + sshpass_cron_path: "{{ podman_volumes }}/sshpass_cron" caddy_path: "{{ podman_volumes }}/caddy" diff --git a/ansible/roles/podman/files/zomboid/sophie/SandboxVars.lua b/ansible/roles/podman/files/zomboid/sophie/SandboxVars.lua index cb5c9d2..ba08348 100644 --- a/ansible/roles/podman/files/zomboid/sophie/SandboxVars.lua +++ b/ansible/roles/podman/files/zomboid/sophie/SandboxVars.lua @@ -134,47 +134,47 @@ SandboxVars = { -- How long alarm batteries can last for after the power shuts off. Min: -1 Max: 2147483647 Default: 14 AlarmDecayModifier = 14, -- Any food that can rot or spoil. Min: 0.00 Max: 4.00 Default: 0.80 - FoodLootNew = 0.5, + FoodLootNew = 1.2, -- All other items that can be read, including books, fliers, and newspapers. Min: 0.00 Max: 4.00 Default: 0.60 - LiteratureLootNew = 0.4, + LiteratureLootNew = 1.2, -- Books that provide skill XP multipliers. Min: 0.00 Max: 4.00 Default: 0.60 - SkillBookLoot = 0.3, + SkillBookLoot = 1.2, -- Items that teach recipes. Min: 0.00 Max: 4.00 Default: 0.60 - RecipeResourceLoot = 0.35, + RecipeResourceLoot = 1.2, -- Medicine, bandages and first aid tools. Min: 0.00 Max: 4.00 Default: 0.60 - MedicalLootNew = 0.4, + MedicalLootNew = 1.2, -- Fishing Rods, Tents, camping gear etc. Min: 0.00 Max: 4.00 Default: 0.60 - SurvivalGearsLootNew = 0.4, + SurvivalGearsLootNew = 1.2, -- Canned and dried food, beverages. Min: 0.00 Max: 4.00 Default: 0.60 - CannedFoodLootNew = 0.3, + CannedFoodLootNew = 1.2, -- Weapons that are not tools in other categories. Min: 0.00 Max: 4.00 Default: 0.60 - WeaponLootNew = 0.35, + WeaponLootNew = 1.2, -- Also includes weapon attachments. Min: 0.00 Max: 4.00 Default: 1.20 - RangedWeaponLootNew = 0.15, + RangedWeaponLootNew = 2.5, -- Loose ammo, boxes and magazines. Min: 0.00 Max: 4.00 Default: 0.60 - AmmoLootNew = 0.5, + AmmoLootNew = 2.5, -- Vehicle parts and the tools needed to install them. Min: 0.00 Max: 4.00 Default: 0.60 - MechanicsLootNew = 0.4, + MechanicsLootNew = 1.2, -- Everything else. Also affects foraging for all items in Town/Road zones. Min: 0.00 Max: 4.00 Default: 0.80 - OtherLootNew = 0.7, + OtherLootNew = 1.2, -- All wearable items that are not containers. Min: 0.00 Max: 4.00 Default: 0.60 - ClothingLootNew = 0.3, + ClothingLootNew = 1.2, -- Backpacks and other wearable/equippable containers, eg. cases. Min: 0.00 Max: 4.00 Default: 0.60 - ContainerLootNew = 0.2, + ContainerLootNew = 1.2, -- Keys for buildings/cars, key rings, and locks. Min: 0.00 Max: 4.00 Default: 0.40 - KeyLootNew = 0.35, + KeyLootNew = 1.2, -- VHS tapes and CDs. Min: 0.00 Max: 4.00 Default: 0.60 - MediaLootNew = 0.3, + MediaLootNew = 1.2, -- Spiffo items, plushies, and other collectible keepsake items eg. Photos. Min: 0.00 Max: 4.00 Default: 0.60 - MementoLootNew = 0.35, + MementoLootNew = 1.2, -- Items that are used in cooking, including those (eg. knives) which can be weapons. Does not include food. Includes both usable and unusable items. Min: 0.00 Max: 4.00 Default: 0.60 - CookwareLootNew = 0.35, + CookwareLootNew = 1.2, -- Items and weapons that are used as ingredients for crafting or building. This is a general category that does not include items belonging to other categories such as Cookware or Medical. Does not include Tools. Min: 0.00 Max: 4.00 Default: 0.60 - MaterialLootNew = 0.4, + MaterialLootNew = 1.2, -- Items and weapons which are used in both animal and plant agriculture, such as Seeds, Trowels, or Shovels. Min: 0.00 Max: 4.00 Default: 0.60 - FarmingLootNew = 0.3, + FarmingLootNew = 1.2, -- Items and weapons which are Tools but don't fit in other categories such as Mechanics or Farming. Min: 0.00 Max: 4.00 Default: 0.60 - ToolLootNew = 0.4, + ToolLootNew = 1.2, -- [!] It is recommended that you DO NOT change this. [!] Can be used to adjust the number of rolls made on loot tables when spawning loot. Will not reduce the number of rolls below 1. Can negatively affect performance if set to high values. It is highly recommended that this not be changed. Min: 0.10 Max: 100.00 Default: 1.00 RollsMultiplier = 1.0, -- A comma-separated list of item types that won't spawn as ordinary loot. @@ -217,7 +217,7 @@ SandboxVars = { -- 3 = Normal (100 Days) -- 4 = Slow (200 Days) -- 5 = Very Slow (500 Days) - ErosionSpeed = 4, + ErosionSpeed = 3, -- For a custom Erosion Speed. Zero means use the Erosion Speed option. Maximum is 36,500 days (approximately 100 years). Min: -1 Max: 36500 Default: 0 ErosionDays = 0, -- The speed of plant growth. Default = Normal @@ -243,7 +243,7 @@ SandboxVars = { -- 3 = Normal -- 4 = Slow -- 5 = Very Slow - StatsDecrease = 3, + StatsDecrease = 4, -- The abundance of items found in Foraging mode. Default = Normal -- 1 = Very Poor -- 2 = Poor @@ -277,7 +277,7 @@ SandboxVars = { -- 3 = Normal -- 4 = Slow -- 5 = Very Slow - FoodRotSpeed = 3, + FoodRotSpeed = 5, -- How effective a fridge will be at keeping food fresh for longer. Default = Normal -- 1 = Very Low -- 2 = Low @@ -285,7 +285,7 @@ SandboxVars = { -- 4 = High -- 5 = Very High -- 6 = No decay - FridgeFactor = 3, + FridgeFactor = 6, -- When greater than 0, loot will not respawn in zones that have been visited within this number of in-game hours. Min: 0 Max: 2147483647 Default: 0 SeenHoursPreventLootRespawn = 0, -- When greater than 0, after X hours, all containers in towns and trailer parks in the world will respawn loot. To spawn loot a container must have been looted at least once. Loot respawn is not impacted by visibility or subsequent looting. Min: 0 Max: 2147483647 Default: 0 @@ -295,7 +295,7 @@ SandboxVars = { -- Items will not respawn in buildings that players have barricaded or built in. ConstructionPreventsLootRespawn = true, -- A comma-separated list of item types that will be removed after HoursForWorldItemRemoval hours. - WorldItemRemovalList = "Base.Hat, Base.Glasses, Base.Maggots, Base.Slug, Base.Slug2, Base.Snail, Base.Worm, Base.Dung_Mouse, Base.Dung_Rat", + WorldItemRemovalList = "Base.Hat,Base.Glasses,Base.Maggots", -- Number of hours since an item was dropped on the ground before it is removed. Items are removed the next time that part of the map is loaded. Zero means items are not removed. Min: 0.00 Max: 2147483647.00 Default: 24.00 HoursForWorldItemRemoval = 24.0, -- If true, any items *not* in WorldItemRemovalList will be removed. @@ -341,7 +341,7 @@ SandboxVars = { -- 2 = Once -- 3 = Sometimes -- 4 = Often - Helicopter = 2, + Helicopter = 3, -- How often zombie-attracting metagame events like distant gunshots will occur. Default = Sometimes -- 1 = Never -- 2 = Sometimes @@ -351,9 +351,9 @@ SandboxVars = { -- 1 = Never -- 2 = Sometimes -- 3 = Often - SleepingEvent = 1, + SleepingEvent = 2, -- How much fuel is consumed by generators per in-game hour. Min: 0.00 Max: 100.00 Default: 0.10 - GeneratorFuelConsumption = 0.1, + GeneratorFuelConsumption = 0.01, -- The chance of electrical generators spawning on the map. Default = Rare -- 1 = None (not recommended) -- 2 = Insanely Rare @@ -370,9 +370,9 @@ SandboxVars = { -- 4 = Sometimes -- 5 = Often -- 6 = Very Often - AnnotatedMapChance = 4, + AnnotatedMapChance = 5, -- Adds free points during character creation. Min: -100 Max: 100 Default: 0 - CharacterFreePoints = 0, + CharacterFreePoints = 60, -- Gives player-built constructions extra hit points so they are more resistant to zombie damage. Default = Normal -- 1 = Very Low -- 2 = Low @@ -385,7 +385,7 @@ SandboxVars = { -- 2 = Dark -- 3 = Normal -- 4 = Bright - NightDarkness = 3, + NightDarkness = 1, -- The time from dusk to dawn. Default = Normal -- 1 = Always Night -- 2 = Long @@ -401,14 +401,14 @@ SandboxVars = { -- 3 = High InjurySeverity = 2, -- How long, in hours, before dead zombie bodies disappear from the world. If 0, maggots will not spawn on corpses. Min: -1.00 Max: 2147483647.00 Default: 216.00 - HoursForCorpseRemoval = 160.0, + HoursForCorpseRemoval = 216.0, -- The impact that nearby decaying bodies has on the player's health and emotions. Default = Normal -- 1 = None -- 2 = Low -- 3 = Normal -- 4 = High -- 5 = Insane - DecayingCorpseHealthImpact = 4, + DecayingCorpseHealthImpact = 3, -- Whether nearby "living" zombies have the same impact on the player's health and emotions. ZombieHealthImpact = false, -- How much blood is sprayed on floors and walls by injuries. Default = Normal @@ -427,7 +427,7 @@ SandboxVars = { -- If fires spread when started. FireSpread = true, -- Number of in-game days before rotten food is removed from the map. -1 means rotten food is never removed. Min: -1 Max: 2147483647 Default: -1 - DaysForRottenFoodRemoval = -1, + DaysForRottenFoodRemoval = 30, -- If enabled, generators will work on exterior tiles. This will allow, for example, the powering of gas pumps. AllowExteriorGenerator = true, -- Maximum intensity of fog. Default = Normal @@ -453,7 +453,7 @@ SandboxVars = { -- 5 = Often -- 6 = Very Often -- 7 = Always Tries - SurvivorHouseChance = 2, + SurvivorHouseChance = 4, -- The chance of road stories (eg. police roadblocks) spawning. Default = Rare -- 1 = Never -- 2 = Extremely Rare @@ -462,7 +462,7 @@ SandboxVars = { -- 5 = Often -- 6 = Very Often -- 7 = Always Tries - VehicleStoryChance = 3, + VehicleStoryChance = 4, -- The chance of stories specific to map zones (eg. a campsite in a forest) spawning. Default = Rare -- 1 = Never -- 2 = Extremely Rare @@ -471,9 +471,9 @@ SandboxVars = { -- 5 = Often -- 6 = Very Often -- 7 = Always Tries - ZoneStoryChance = 3, + ZoneStoryChance = 4, -- Allows you to select from every piece of clothing in the game when customizing your character - AllClothesUnlocked = false, + AllClothesUnlocked = true, -- If tainted water will show a warning marking it as such. EnableTaintedWaterText = true, -- If vehicles will spawn. @@ -484,7 +484,7 @@ SandboxVars = { -- 3 = Low -- 4 = Normal -- 5 = High - CarSpawnRate = 3, + CarSpawnRate = 4, -- General engine loudness to zombies. Min: 0.00 Max: 100.00 Default: 1.00 ZombieAttractionMultiplier = 1.0, -- Whether found vehicles are locked, need keys to start etc. @@ -496,11 +496,11 @@ SandboxVars = { -- 4 = High -- 5 = Very High -- 6 = Full - InitialGas = 2, + InitialGas = 3, -- If enabled, gas pumps will never run out of fuel FuelStationGasInfinite = false, -- The minimum amount of gasoline that can spawn in gas pumps. Check the "Advanced" box below to use a custom amount. Min: 0.00 Max: 1.00 Default: 0.00 - FuelStationGasMin = 0.0, + FuelStationGasMin = 0.5, -- The maximum amount of gasoline that can spawn in gas pumps. Check the "Advanced" box below to use a custom amount. Min: 0.00 Max: 1.00 Default: 0.80 FuelStationGasMax = 0.8, -- The chance, as a percentage, that individual gas pumps will initially have no fuel. Min: 0 Max: 100 Default: 20 @@ -514,14 +514,14 @@ SandboxVars = { -- 6 = Very Often LockedCar = 4, -- How gas-hungry vehicles are. Min: 0.00 Max: 100.00 Default: 1.00 - CarGasConsumption = 0.8, + CarGasConsumption = 0.5, -- General condition discovered vehicles will be in. Default = Normal -- 1 = Very Low -- 2 = Low -- 3 = Normal -- 4 = High -- 5 = Very High - CarGeneralCondition = 2, + CarGeneralCondition = 3, -- The amount of damage dealt to vehicles that crash. Default = Normal -- 1 = Very Low -- 2 = Low @@ -554,15 +554,15 @@ SandboxVars = { -- 1 = Low -- 2 = Normal -- 3 = High - ChanceHasGas = 1, + ChanceHasGas = 2, -- Whether a player can discover a car that has been cared for after the Knox infection struck. Default = Low -- 1 = None -- 2 = Low -- 3 = Normal -- 4 = High - RecentlySurvivorVehicles = 1, + RecentlySurvivorVehicles = 3, -- If certain melee weapons will be able to strike multiple zombies in one hit. - MultiHitZombies = false, + MultiHitZombies = true, -- Chance of being bitten when a zombie attacks from behind. Default = High -- 1 = Low -- 2 = Medium @@ -681,22 +681,22 @@ SandboxVars = { -- 1 = In and Around Bodies -- 2 = In Bodies Only -- 3 = Never - MaggotSpawn = 2, + MaggotSpawn = 1, -- The higher the value, the longer lightbulbs last before breaking. If 0, lightbulbs will never break. Does not affect vehicle headlights. Min: 0.00 Max: 1000.00 Default: 2.00 - LightBulbLifespan = 2.0, + LightBulbLifespan = 5.0, -- The abundance of fish in rivers and lakes. Default = Poor -- 1 = Very Poor -- 2 = Poor -- 3 = Normal -- 4 = Abundant -- 5 = Very Abundant - FishAbundance = 2, + FishAbundance = 4, -- When a skill is at this level or above, television/VHS/other media will not provide XP for it. Min: 0 Max: 10 Default: 3 LevelForMediaXPCutoff = 3, -- When a skill is at this level or above, scrapping furniture does not provide XP for the relevant skill. Does not apply to Electrical. Min: 0 Max: 10 Default: 0 LevelForDismantleXPCutoff = 0, -- Number of days before old blood splats are removed. Removal happens when map chunks are loaded. 0 means they will never disappear. Min: 0 Max: 365 Default: 0 - BloodSplatLifespanDays = 14, + BloodSplatLifespanDays = 0, -- Number of days before one can benefit from reading previously read literature items. Min: 1 Max: 365 Default: 45 LiteratureCooldown = 45, -- If there are diminishing returns on bonus trait points provided from selecting multiple negative traits. Default = None @@ -728,13 +728,13 @@ SandboxVars = { -- How long it takes for Maximum Diminished Loot Percentage to be reached. Min: 0 Max: 3650 Default: 3650 DaysUntilMaximumDiminishedLoot = 3650, -- Functions as a multiplier when applying muscle strain from swinging weapons or carrying heavy loads. Min: 0.00 Max: 10.00 Default: 0.70 - MuscleStrainFactor = 0.7, + MuscleStrainFactor = 0.5, -- Functions as a multiplier when applying discomfort from worn items. Min: 0.00 Max: 10.00 Default: 0.80 - DiscomfortFactor = 0.8, + DiscomfortFactor = 0.5, -- If greater than zero damage can be taken from serious wound infections. Min: 0.00 Max: 10.00 Default: 1.00 WoundInfectionFactor = 1.0, -- If true clothing with randomized tints will not be so dark to be virtually black. - NoBlackClothes = true, + NoBlackClothes = false, -- Disables the failure chances when climbing sheet ropes or over walls. EasyClimbing = false, -- The maximum hours of fuel that can be placed in a campfire, wood stove etc. Min: 1 Max: 168 Default: 8 @@ -759,9 +759,9 @@ SandboxVars = { -- Chance to turn a dirt floor into a clay floor. Applies to rivers. Min: 0.00 Max: 1.00 Default: 0.05 ClayRiverChance = 0.05, -- Min: 1 Max: 100 Default: 20 - GeneratorTileRange = 20, + GeneratorTileRange = 30, -- How many levels both above and below a generator it can provide with electricity. Min: 1 Max: 15 Default: 3 - GeneratorVerticalPowerRange = 3, + GeneratorVerticalPowerRange = 5, -- Min: -1 Max: 100 Default: -1 BAM_Server_MinSuccessChance = -1, -- Min: 0.00 Max: 50.00 Default: 0.02 @@ -796,9 +796,9 @@ SandboxVars = { -- 2 = Fast Shamblers -- 3 = Shamblers -- 4 = Random - Speed = 4, + Speed = 3, -- If Random Speed is enabled, this controls what percentage of zombies are Sprinters. Check the "Advanced" box below to use a custom percentage. Min: 0 Max: 100 Default: 0 - SprinterPercentage = 1, + SprinterPercentage = 6, -- The damage zombies inflict per attack. Default = Normal -- 1 = Superhuman -- 2 = Normal @@ -810,7 +810,7 @@ SandboxVars = { -- 2 = Normal -- 3 = Fragile -- 4 = Random - Toughness = 4, + Toughness = 2, -- How the Knox Virus spreads. Default = Blood and Saliva -- 1 = Blood and Saliva -- 2 = Saliva Only @@ -858,7 +858,7 @@ SandboxVars = { -- 4 = None -- 5 = Random -- 6 = Random between Normal and None - Memory = 2, + Memory = 6, -- Zombie vision radius. Default = Random between Normal and Poor -- 1 = Eagle -- 2 = Normal @@ -885,7 +885,7 @@ SandboxVars = { -- 3 = Day ActiveOnly = 1, -- If zombies trigger house alarms when breaking through windows or doors. - TriggerHouseAlarm = true, + TriggerHouseAlarm = false, -- If multiple attacking zombies can drag you down and kill you. Dependent on zombie strength. ZombiesDragDown = true, -- If crawler zombies beside a player contribute to the chance of being dragged down and killed by a group of zombies. @@ -918,25 +918,25 @@ SandboxVars = { }, ZombieConfig = { -- Set by the "Zombie Count" population option, or by a custom number here. Insane = 2.5, Very High = 1.6, High = 1.2, Normal = 0.65, Low = 0.15, None = 0.0. Min: 0.00 Max: 4.00 Default: 0.65 - PopulationMultiplier = 0.75, + PopulationMultiplier = 0.65, -- A multiplier for the desired zombie population at the start of the game. Insane = 3.0, Very High = 2.0, High = 1.5, Normal = 1.0, Low = 0.5, None = 0.0. Min: 0.00 Max: 4.00 Default: 1.00 - PopulationStartMultiplier = 1.1, + PopulationStartMultiplier = 0.5, -- A multiplier for the desired zombie population on the peak day. Insane = 3.0, Very High = 2.0, High = 1.5, Normal = 1.0, Low = 0.5, None = 0.0. Min: 0.00 Max: 4.00 Default: 1.50 - PopulationPeakMultiplier = 1.8, + PopulationPeakMultiplier = 1.5, -- The day when the population reaches its peak. Min: 1 Max: 365 Default: 28 - PopulationPeakDay = 28, + PopulationPeakDay = 90, -- The number of hours that must pass before zombies may respawn in a cell. If 0, spawning is disabled. Min: 0.00 Max: 8760.00 Default: 0.00 - RespawnHours = 0.0, + RespawnHours = 72.0, -- The number of hours that a chunk must be unseen before zombies may respawn in it. Min: 0.00 Max: 8760.00 Default: 0.00 - RespawnUnseenHours = 0.0, + RespawnUnseenHours = 16.0, -- The fraction of a cell's desired population that may respawn every RespawnHours. Min: 0.00 Max: 1.00 Default: 0.00 - RespawnMultiplier = 0.0, + RespawnMultiplier = 0.1, -- The number of hours that must pass before zombies migrate to empty parts of the same cell. If 0, migration is disabled. Min: 0.00 Max: 8760.00 Default: 12.00 RedistributeHours = 12.0, -- The distance a zombie will try to walk towards the last sound it heard. Min: 10 Max: 1000 Default: 100 FollowSoundDistance = 100, -- The size of groups real zombies form when idle. 0 means zombies don't form groups. Groups don't form inside buildings or forest zones. Min: 0 Max: 1000 Default: 20 - RallyGroupSize = 15, + RallyGroupSize = 20, -- The amount, as a percentage, that zombie groups can vary in size from the default (both larger and smaller). For example, at 50% variance with a default group size of 20, groups will vary in size from 10-30. Min: 0 Max: 100 Default: 50 RallyGroupSizeVariance = 50, -- The distance real zombies travel to form groups when idle. Min: 5 Max: 50 Default: 20 @@ -954,85 +954,85 @@ SandboxVars = { -- When enabled, all skills will use the Global Multiplier. GlobalToggle = true, -- Rate at which Fitness skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Fitness = 1.0, + Fitness = 2.0, -- Rate at which Strength skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Strength = 1.0, + Strength = 2.0, -- Rate at which Sprinting skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Sprinting = 1.0, + Sprinting = 2.0, -- Rate at which Lightfooted skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Lightfoot = 1.0, + Lightfoot = 2.0, -- Rate at which Nimble skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Nimble = 1.0, + Nimble = 2.0, -- Rate at which Sneaking skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Sneak = 1.0, + Sneak = 2.0, -- Rate at which Axe skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Axe = 1.0, + Axe = 2.0, -- Rate at which Long Blunt skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Blunt = 1.0, + Blunt = 2.0, -- Rate at which Short Blunt skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - SmallBlunt = 1.0, + SmallBlunt = 2.0, -- Rate at which Long Blade skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - LongBlade = 1.0, + LongBlade = 2.0, -- Rate at which Short Blade skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - SmallBlade = 1.0, + SmallBlade = 2.0, -- Rate at which Spear skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Spear = 1.0, + Spear = 2.0, -- Rate at which Maintenance skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Maintenance = 1.0, + Maintenance = 2.0, -- Rate at which Carpentry skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Woodwork = 1.0, + Woodwork = 2.0, -- Rate at which Cooking skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Cooking = 1.0, + Cooking = 2.0, -- Rate at which Agriculture skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Farming = 1.0, + Farming = 2.0, -- Rate at which First Aid skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Doctor = 1.0, + Doctor = 2.0, -- Rate at which Electrical skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Electricity = 1.0, + Electricity = 2.0, -- Rate at which Welding skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - MetalWelding = 1.0, + MetalWelding = 2.0, -- Rate at which Mechanics skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Mechanics = 1.0, + Mechanics = 2.0, -- Rate at which Tailoring skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Tailoring = 1.0, + Tailoring = 2.0, -- Rate at which Aiming skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Aiming = 1.0, + Aiming = 2.0, -- Rate at which Reloading skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Reloading = 1.0, + Reloading = 2.0, -- Rate at which Fishing skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Fishing = 1.0, + Fishing = 2.0, -- Rate at which Trapping skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Trapping = 1.0, + Trapping = 2.0, -- Rate at which Foraging skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - PlantScavenging = 1.0, + PlantScavenging = 2.0, -- Rate at which Knapping skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - FlintKnapping = 1.0, + FlintKnapping = 2.0, -- Rate at which Masonry skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Masonry = 1.0, + Masonry = 2.0, -- Rate at which Pottery skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Pottery = 1.0, + Pottery = 2.0, -- Rate at which Carving skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Carving = 1.0, + Carving = 2.0, -- Rate at which Animal Care skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Husbandry = 1.0, + Husbandry = 2.0, -- Rate at which Tracking skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Tracking = 1.0, + Tracking = 2.0, -- Rate at which Blacksmithing skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Blacksmith = 1.0, + Blacksmith = 2.0, -- Rate at which Butchering skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Butchering = 1.0, + Butchering = 2.0, -- Rate at which Glassmaking skill levels up. Min: 0.00 Max: 1000.00 Default: 1.00 - Glassmaking = 1.0, + Glassmaking = 2.0, -- Min: 0.00 Max: 1000.00 Default: 1.00 - Art = 1.0, + Art = 2.0, -- Min: 0.00 Max: 1000.00 Default: 1.00 - Cleaning = 1.0, + Cleaning = 2.0, -- Min: 0.00 Max: 1000.00 Default: 1.00 - Dancing = 1.0, + Dancing = 2.0, -- Min: 0.00 Max: 1000.00 Default: 1.00 - Meditation = 1.0, + Meditation = 2.0, -- Min: 0.00 Max: 1000.00 Default: 1.00 - Music = 1.0, + Music = 2.0, }, HB = { PermanentCasings = true, @@ -1051,7 +1051,7 @@ SandboxVars = { Custom4x12colossal = "", }, MHP = { - EnableReplaceBandage = true, + EnableReplaceBandage = false, ShowSafeRemoveIndicator = false, ShowStitchInspectIndicator = false, }, @@ -1087,27 +1087,27 @@ SandboxVars = { -- Min: 1 Max: 100000 Default: 336 CowardlyHoursToRemoveMax = 336, -- Min: 1 Max: 100000 Default: 1250 - CowardlyZombiesKilledToRemoveMin = 1000, + CowardlyZombiesKilledToRemoveMin = 1250, -- Min: 1 Max: 100000 Default: 2500 - CowardlyZombiesKilledToRemoveMax = 2000, + CowardlyZombiesKilledToRemoveMax = 2500, BraveEarnable = true, -- Min: 1 Max: 100000 Default: 504 BraveHoursToEarnMin = 504, -- Min: 1 Max: 100000 Default: 840 BraveHoursToEarnMax = 840, -- Min: 1 Max: 100000 Default: 3000 - BraveZombiesKilledToEarnMin = 2500, + BraveZombiesKilledToEarnMin = 3000, -- Min: 1 Max: 100000 Default: 4500 - BraveZombiesKilledToEarnMax = 4000, + BraveZombiesKilledToEarnMax = 4500, DesensitizedEarnable = true, -- Min: 1 Max: 100000 Default: 1176 DesensitizedHoursToEarnMin = 1176, -- Min: 1 Max: 100000 Default: 1512 DesensitizedHoursToEarnMax = 1512, -- Min: 1 Max: 100000 Default: 6000 - DesensitizedZombiesKilledToEarnMin = 5000, + DesensitizedZombiesKilledToEarnMin = 6000, -- Min: 1 Max: 100000 Default: 9000 - DesensitizedZombiesKilledToEarnMax = 7000, + DesensitizedZombiesKilledToEarnMax = 9000, PacifistRemovable = true, -- Min: 1 Max: 100000 Default: 672 PacifistHoursToRemoveMin = 672, @@ -1146,19 +1146,22 @@ SandboxVars = { ConspicuousRemovable = true, }, WorkingKnowledge = { - SpawnRate = 2, + SpawnRate = 4, -- Min: 0 Max: 500 Default: 50 - XPGrant = 50, + XPGrant = 75, + ConsumeOnRead = false, }, SkillRecoveryJournal = { -- Min: 1 Max: 100 Default: 100 - RecoveryPercentage = 70, + RecoveryPercentage = 100, -- Min: 0.00 Max: 1000.00 Default: 1.00 TranscribeSpeed = 1.0, -- Min: 0.00 Max: 1000.00 Default: 1.00 ReadTimeSpeed = 1.0, + -- Min: 0.00 Max: 1.00 Default: 0.00 + IlliterateSpeedMultiplier = 0.0, RecoverProfessionAndTraitsBonuses = false, - TranscribeTVXP = false, + TranscribeTVXP = true, -- Min: -1 Max: 100 Default: 0 RecoverPassiveSkills = 0, -- Min: -1 Max: 100 Default: -1 @@ -1185,7 +1188,7 @@ SandboxVars = { M13ReadingTweaks = { RWW = true, -- Min: 0.01 Max: 100.00 Default: 2.00 - PSM = 2.5, + PSM = 2.0, }, KillCount = { doExport = false, @@ -1196,22 +1199,22 @@ SandboxVars = { keepTrackOfDead = true, }, DAMN = { - AllowPowerChadSpawns = false, - AllowPro440Spawns = false, - AllowDemonChildSpawns = false, - AllowEV6spawns = false, - AllowTBCspawns = false, - AllowUBCspawns = false, - AllowWreckyMcChevySpawns = false, - AllowShitSpawns = false, - AllowManlyMANSpawns = false, - AllowGreatScottSpawns = false, - AllowOinkerSpawns = false, - AllowMrBusSpawns = false, - AllowChonkerSpawns = false, - AllowCashcowSpawns = false, - AllowMcBoxySpawns = false, - AllowSuckyMcSuckfaceSpawns = false, + AllowPowerChadSpawns = true, + AllowPro440Spawns = true, + AllowDemonChildSpawns = true, + AllowEV6spawns = true, + AllowTBCspawns = true, + AllowUBCspawns = true, + AllowWreckyMcChevySpawns = true, + AllowShitSpawns = true, + AllowManlyMANSpawns = true, + AllowGreatScottSpawns = true, + AllowOinkerSpawns = true, + AllowMrBusSpawns = true, + AllowChonkerSpawns = true, + AllowCashcowSpawns = true, + AllowMcBoxySpawns = true, + AllowSuckyMcSuckfaceSpawns = true, }, CF8KSweeper = { AllowTiles = true, @@ -1320,7 +1323,7 @@ SandboxVars = { EnableMorningShowXP = true, }, HereGoesTheSun = { - EnableGodRays = false, + EnableGodRays = true, EnableStormMood = true, StormMoodPreset = 2, }, @@ -1330,6 +1333,7 @@ SandboxVars = { -- Min: 0.05 Max: 0.95 Default: 0.25 WeatherThreshold = 0.25, AlsoCleanAsh = true, + AlsoCleanDroppings = true, AlsoCleanInside = false, AlsoCleanVehicles = true, -- Min: 0.10 Max: 1.00 Default: 0.10 @@ -1340,19 +1344,19 @@ SandboxVars = { AlwaysClean = false, }, DeadMansDossier = { - DropChance_Police = 3, + DropChance_Police = 2, DropChance_Military = 2, - DropChance_Medical = 3, - DropChance_Firefighter = 3, - DropChance_Ranger = 3, - ContainerSpawnRate = 3, + DropChance_Medical = 2, + DropChance_Firefighter = 2, + DropChance_Ranger = 2, + ContainerSpawnRate = 2, RewardRarity = 2, -- Min: 5 Max: 50 Default: 15 ProximityRadius = 15, UseCustomRewards = false, }, KnoxDetectionKit = { - KitRarity = 4, + KitRarity = 2, -- Min: 0 Max: 1440 Default: 120 WaitMinutes = 120, }, @@ -1434,7 +1438,7 @@ SandboxVars = { KeepBags = false, }, LSMeditation = { - RemoveLevitation = true, + RemoveLevitation = false, }, Yoga = { StrengthMultiplier = 2, @@ -1455,7 +1459,7 @@ SandboxVars = { -- Min: 0.00 Max: 3.00 Default: 1.00 HygieneNeedMultiplier = 1.0, -- Min: 0.00 Max: 3.00 Default: 1.00 - BladderNeedMultiplier = 0.0, + BladderNeedMultiplier = 1.0, HygieneNeedExpectationTime = 2, CleansMakeup = true, NotEmbarrassed = false, @@ -1496,27 +1500,6 @@ SandboxVars = { DanceAnim = false, LSVerbose = false, }, - GydeTraitMags = { - NegativeToPositive = false, - ReadRemove = false, - ReadDelete = false, - -- Min: 0 Max: 8766 Default: 0 - DaysBeforeRead = 0, - SpawnRate = 2, - SpawnSpeedDemon = true, - SpawnNutritionist = true, - SpawnOrganized = true, - SpawnOutdoorsman = true, - SpawnFastReader = true, - SpawnFastLearner = true, - SpawnHandy = true, - SpawnAxeMan = true, - SpawnBurglar = true, - SpawnGraceful = true, - SpawnDextrous = true, - SpawnInconspicuous = true, - SpawnKeenHearing = true, - }, AegisEvents = { -- Min: 1 Max: 10 Default: 3 SiegeWaves = 3, @@ -1567,6 +1550,18 @@ SandboxVars = { -- Min: 2 Max: 20 Default: 6 AmbushRadius = 6, PlayerPanel = true, + PlayerClaims = true, + PlayerKits = true, + KitCodeGates = true, + -- Min: 0 Max: 20 Default: 5 + PlayerVehicles = 5, + PlayerHealthInfection = true, + PlayerStatsForAdmins = true, + PlayerAutoAdminPowers = true, + }, + AutoTailoring = { + -- Min: 0 Max: 100000 Default: 10 + MaxLevel = 10, }, CaffeineMakesSense = { EnableSleepPenaltyModel = true, @@ -1582,7 +1577,7 @@ SandboxVars = { Allow_Fences = true, -- Min: 0 Max: 100 Default: 0 Fence_Wire_Chance = 0, - Allow_Shutters = false, + Allow_Shutters = true, -- Min: 0 Max: 10 Default: 3 Easy_Strength_Req = 3, -- Min: 0 Max: 10 Default: 5 @@ -1624,6 +1619,8 @@ SandboxVars = { KeepBagsOn = false, }, FWOWorkingTreadmill = { + -- Min: 0.00 Max: 100.00 Default: 1.00 + FitnessXPMultiply = 1.0, -- Min: 0.00 Max: 100.00 Default: 1.00 StrengthXPMultiply = 1.0, -- Min: 0.00 Max: 100.00 Default: 1.00 @@ -1648,6 +1645,9 @@ SandboxVars = { PryEnablePity = false, -- Min: 0.01 Max: 1.00 Default: 0.25 PryChanceBase = 0.25, + PryEnableSoftMin = false, + -- Min: 0.00 Max: 1.00 Default: 0.50 + PryBonusSoftMin = 0.5, -- Min: 0.00 Max: 1.00 Default: 0.03 PryBonusSkillStrength = 0.03, -- Min: 0.00 Max: 1.00 Default: 0.03 @@ -1742,6 +1742,24 @@ SandboxVars = { -- Min: 0.50 Max: 10.00 Default: 4.00 BandageWaterPerItem = 4.0, }, + ShelterHoldBeehive = { + EnableZombees = true, + HideInvalidBaitHiveBaits = false, + -- Min: -50.00 Max: 50.00 Default: 12.00 + HoneybeeMinTemperature = 12.0, + -- Min: -50.00 Max: 60.00 Default: 32.00 + HoneybeeMaxTemperature = 32.0, + -- Min: -50.00 Max: 50.00 Default: 5.00 + BumblebeeMinTemperature = 5.0, + -- Min: -50.00 Max: 60.00 Default: 35.00 + BumblebeeMaxTemperature = 35.0, + -- Min: 0.00 Max: 5.00 Default: 1.00 + HoneyProductionSpeedMultiplier = 1.0, + -- Min: 0 Max: 10 Default: 2 + PlantGrowthBoostRadius = 2, + -- Min: 0.00 Max: 5.00 Default: 1.00 + BeeForagingAbundanceMultiplier = 1.0, + }, ComputerMod = { -- Min: 0 Max: 100 Default: 14 DiscSpawnChance = 14, @@ -1779,8 +1797,8 @@ SandboxVars = { EnableBoardApp = true, EnableChatApp = true, EnableCommerceApp = true, - NetworkOutageOnPowerLoss = true, - NetworkTerminalNeedsPower = true, + NetworkOutageOnPowerLoss = false, + NetworkTerminalNeedsPower = false, -- Min: 1 Max: 168 Default: 24 MarketShopRefreshHours = 24, -- Min: 1 Max: 168 Default: 24 @@ -1801,13 +1819,13 @@ SandboxVars = { WeaponConditionLost = 1, }, FunctionalAppliances = { - BeerKegsChance = 2, + BeerKegsChance = 3, BeerKegsFilledAmount = 3, - SyrupsChance = 2, + SyrupsChance = 3, SyrupsFilledAmount = 3, FATheatreChance = 3, FAFreshTheatreChance = 3, - FAZombieItemsSpawn = false, + FAZombieItemsSpawn = true, }, PIP = { EnableAutoWatering = true, @@ -1851,8 +1869,6 @@ SandboxVars = { consumptionMultiplier = 100, -- Min: 1 Max: 10000 Default: 100 DIYBatteryMultiplier = 100, - -- Min: 0 Max: 100 Default: 25 - solarPanelWorldSpawns = 20, BatteryBankSpawn = 3, -- Min: 0.00 Max: 100.00 Default: 1.00 LRMSolarPanels = 1.0, @@ -1861,14 +1877,25 @@ SandboxVars = { -- Min: 0.00 Max: 100.00 Default: 1.00 LRMMisc = 1.0, -- Min: 1 Max: 1440 Default: 30 - ConnectPanelMin = 20, + ConnectPanelMin = 30, -- Min: 0 Max: 50 Default: 0 BackupConnectRange = 0, - HardenedPanelRecipe = true, + -- Min: 20 Max: 40 Default: 20 + PanelConnectRange = 20, + -- Min: 3 Max: 8 Default: 3 + PanelConnectFloors = 3, + -- Min: 1 Max: 8 Default: 1 + BackupConnectFloors = 1, + SolarCrateSpawn = 3, + HardenedPanelRecipe = false, + AllowVanillaConnect = false, }, Snowman = { Melt = true, }, + VideoGameConsoles = { + LootRarity = 2, + }, NewMusic = { -- Min: 0 Max: 36000 Default: 1500 MaxTrackingRange = 1500, @@ -1876,27 +1903,30 @@ SandboxVars = { ActiveDeviceLimit = 10, -- Min: 0.02 Max: 1000.00 Default: 24.00 BatteryDrainRate = 24.0, - -- Min: 9 Max: 100 Default: 35 + -- Min: 9 Max: 500 Default: 35 AudioMaxRadius = 35, - FancyUI = true, + -- Min: 9 Max: 200 Default: 105 + ZombieAttractionRadius = 105, Disassembly = true, - ZomboidOST = false, + ZomboidOST = true, + ConvertVanillaCDsAndCDPlayers = true, + MediaSpawnsWithCases = true, -- Min: 0.00 Max: 4.00 Default: 0.60 - CassettesSpawnRate = 0.5, + CassettesSpawnRate = 1.0, + -- Min: 0.00 Max: 4.00 Default: 0.30 + VinylRecordsSpawnRate = 1.0, -- Min: 0.00 Max: 4.00 Default: 0.60 - VinylRecordsSpawnRate = 0.4, + CDsSpawnRate = 1.0, -- Min: 0.00 Max: 4.00 Default: 0.60 - CDsSpawnRate = 0.4, - -- Min: 0.00 Max: 4.00 Default: 0.60 - WalkmanSpawnRate = 0.5, + WalkmanSpawnRate = 0.6, -- Min: 0.00 Max: 4.00 Default: 0.60 BoomboxSpawnRate = 0.6, -- Min: 0.00 Max: 4.00 Default: 0.60 - CDPlayerSpawnRate = 0.5, + CDPlayerSpawnRate = 0.6, -- Min: 0.00 Max: 4.00 Default: 0.60 - RecordPlayerSpawnRate = 0.5, + RecordPlayerSpawnRate = 0.6, -- Min: 0.00 Max: 4.00 Default: 0.60 - MusicalZombiesSpawnRate = 0.4, + MusicalZombiesSpawnRate = 0.6, }, B42Horticulture = { LearnedRecipe = true, @@ -1907,7 +1937,7 @@ SandboxVars = { SpicesSpawnChance = 3, CannedSpawnChance = 3, MagazineChance = 3, - MREChance = 2, + MREChance = 3, KitchenUtensilsChance = 3, AlcoholChance = 3, ZombieLootSpawn = 3, @@ -1946,7 +1976,10 @@ SandboxVars = { DroppedCasingsLifetime = 168, -- Min: 10 Max: 100 Default: 10 ProduceAmmoBulkSize = 10, + DropCasingsReload = false, + CollectAdditionalSeeds = true, AllowConvertRecipes = false, + ShowHiddenRecipes = false, -- Min: 0.00 Max: 30.00 Default: 10.00 ChanceArmyStorageAmmunition = 10.0, -- Min: 0.00 Max: 30.00 Default: 10.00 @@ -2114,7 +2147,7 @@ SandboxVars = { Enable_TacticalReload = false, }, LG = { - SpawnChance = 4, + SpawnChance = 3, }, JordanalSpawns = { -- Min: 0.00 Max: 100.00 Default: 0.04 @@ -2134,27 +2167,87 @@ SandboxVars = { -- Min: 0.00 Max: 100.00 Default: 0.02 Desert_Camo_UnitChance_General = 0.02, }, + NVG = { + -- Min: 0.10 Max: 20.00 Default: 1.00 + WeightMultiplier = 1.0, + VignetteEnabled = true, + }, ProjectArcade = { DisableDefaultPrizePool = false, ReplaceVanillaArcadesOnLoad = false, ReplaceVanillaPinballsOnLoad = false, -- Min: 0 Max: 100 Default: 100 - SfxVolumePct = 75, + SfxVolumePct = 100, DisableArcadeAmbientSound = false, AnnouncementLanguage = 1, CurrencyFullType = "Base.SilverCoin", -- Min: 0 Max: 300 Default: 100 CoinDistContainersPct = 100, -- Min: 0 Max: 300 Default: 100 - CoinDistZombiesPct = 50, + CoinDistZombiesPct = 100, -- Min: 0 Max: 300 Default: 100 - ROMDistPct = 70, + ROMDistPct = 100, + }, + BCR = { + -- Min: 2 Max: 10000 Default: 1000 + BodyCount = 1000, + enableDebugLogging = false, + enablePositiveTraits = true, + enableNegativeTraits = true, + rewardPriority = 1, + grantMissedOpportunities = false, + MilestoneScaling = 1, + -- Min: 0.10 Max: 2.00 Default: 0.50 + ProgressiveScalingFactor = 0.5, + allow_base_SpeedDemon = true, + allow_base_NightVision = true, + allow_base_Dextrous = true, + allow_base_FastReader = true, + allow_base_Inventive = true, + allow_base_LightEater = true, + allow_base_LowThirst = true, + allow_base_Outdoorsman = true, + allow_base_NeedsLessSleep = true, + allow_base_IronGut = true, + allow_base_AdrenalineJunkie = true, + allow_base_EagleEyed = true, + allow_base_Graceful = true, + allow_base_Inconspicuous = true, + allow_base_Nutritionist = true, + allow_base_Organized = true, + allow_base_Resilient = true, + allow_base_FastHealer = true, + allow_base_FastLearner = true, + allow_base_KeenHearing = true, + allow_base_ThickSkinned = true, + allow_base_HighThirst = true, + allow_base_SundayDriver = true, + allow_base_AllThumbs = true, + allow_base_Clumsy = true, + allow_base_Cowardly = true, + allow_base_SlowReader = true, + allow_base_SlowHealer = true, + allow_base_WeakStomach = true, + allow_base_Smoker = true, + allow_base_Agoraphobic = true, + allow_base_Claustrophobic = true, + allow_base_Conspicuous = true, + allow_base_HeartyAppetite = true, + allow_base_Pacifist = true, + allow_base_ProneToIllness = true, + allow_base_NeedsMoreSleep = true, + allow_base_Asthmatic = true, + allow_base_Hemophobic = true, + allow_base_Disorganized = true, + allow_base_SlowLearner = true, + allow_base_Illiterate = true, + allow_base_ThinSkinned = true, }, MoreImmersiveVehicles = { -- Min: 0 Max: 100 Default: 5 ParkOpenedDoorChance = 5, -- Min: 0 Max: 100 Default: 10 - ParkOpenedTrunkDoorChance = 7, + ParkOpenedTrunkDoorChance = 10, -- Min: 0 Max: 100 Default: 3 ParkOpenedEngineDoorChance = 3, -- Min: 0 Max: 100 Default: 5 @@ -2162,22 +2255,23 @@ SandboxVars = { -- Min: 0 Max: 100 Default: 35 RoadOpenedDoorChance = 35, -- Min: 0 Max: 100 Default: 45 - RoadOpenedTrunkDoorChance = 25, + RoadOpenedTrunkDoorChance = 45, -- Min: 0 Max: 100 Default: 12 - RoadOpenedEngineDoorChance = 5, + RoadOpenedEngineDoorChance = 12, -- Min: 0 Max: 100 Default: 20 - RoadOpenedWindowChance = 15, + RoadOpenedWindowChance = 20, }, GamestaVehicleZones = { + noVanillaVehicles = false, -- Min: -1 Max: 100 Default: -1 spawnRate = -1, -- Min: -1 Max: 100 Default: -1 spawnRateModifiedTrafficJams = -1, trafficjamsLV = true, trafficjamsExtra = true, - vehicleCorpseDistribution = 2, + vehicleCorpseDistribution = 3, climbVehicles = false, - noGoodCars = true, + noGoodCars = false, interactBombVehicle = false, autoVehicleFuelPumps = true, randomAngle = true, @@ -2191,28 +2285,35 @@ SandboxVars = { baseVehicleQuality = -0.1, -- Min: -1 Max: 100 Default: -1 chanceToPartDamage = -1, + -- Min: 0 Max: 26512143 Default: 0 + initMinIndustrialPropaneTankMulti = 0, + -- Min: 0 Max: 26512143 Default: 170 + initMaxIndustrialPropaneTankMulti = 170, }, VMZ = { RoadStories = true, -- Min: 0.00 Max: 2.00 Default: 1.00 - RoadStoriesMultiplier = 0.4, + RoadStoriesMultiplier = 1.0, SpecCar = false, -- Min: 0 Max: 100 Default: 16 - SpawnRate = 12, + SpawnRate = 16, -- Min: 0 Max: 100 Default: 50 - VehiCond = 33, + VehiCond = 50, -- Min: 0 Max: 100 Default: 0 - PartDamage = 25, + PartDamage = 0, -- Min: 0 Max: 100 Default: 70 - KeySpawn = 40, + KeySpawn = 70, }, VVR = { NoTrailers = false, - NoBurnt = false, + NoBurnt = true, -- Min: 0 Max: 100 Default: 10 VehiCond = 10, VehiclesBlacklist = "Base.ModernCar_Martin;", }, + GasPumpIndicator = { + ShowFuelAmount = false, + }, ImmersiveHotwire = { Screwdrivers = "Base.Screwdriver;Base.Screwdriver_Old;Base.Screwdriver_Improvised;Base.Multitool;Base.Handiknife", ScrewdriversTags = "", diff --git a/ansible/roles/podman/files/zomboid/sophie/spawnpoints.lua b/ansible/roles/podman/files/zomboid/sophie/spawnpoints.lua index 4116d44..b63071b 100644 --- a/ansible/roles/podman/files/zomboid/sophie/spawnpoints.lua +++ b/ansible/roles/podman/files/zomboid/sophie/spawnpoints.lua @@ -1,3 +1,28 @@ +-- Deployed as Server/debbzoid_spawnpoints.lua, and currently unused: nothing +-- reads it, because no entry in spawnregions.lua names it with +-- serverfile = "debbzoid_spawnpoints.lua". The contents below are the stock +-- sample and mean nothing until such an entry exists. +-- +-- This is the file to use if a spawn point has to move rather than disappear. +-- Point a region at it by serverfile instead of file, and put that region's +-- whole spawn table here -- the serverfile replaces the map's list, it does not +-- merge with it, so anything left out is gone. +-- +-- Keeping "Echo Creek, KY" as a spawn choice while freeing the diner would look +-- like this, with an outdoor square -- the parking lot or the road, not another +-- building, or that building becomes the unclaimable one instead: +-- +-- unemployed = { +-- { posX = , posY = , posZ = 0 }, +-- } +-- +-- Coordinates are absolute world tiles when worldX/worldY are omitted; with +-- them, the world position is worldX * 300 + posX (same for Y). +-- +-- The filename is not free-form: serverfile resolves inside the server's +-- Server/ directory, and the deploy names this copy after zomboid_server_name. +-- Rename the server and the serverfile reference has to follow, or the region +-- loses its points and drops out of the list. function SpawnPoints() return { unemployed = { diff --git a/ansible/roles/podman/files/zomboid/sophie/spawnregions.lua b/ansible/roles/podman/files/zomboid/sophie/spawnregions.lua index 106cb04..23e9bd0 100644 --- a/ansible/roles/podman/files/zomboid/sophie/spawnregions.lua +++ b/ansible/roles/podman/files/zomboid/sophie/spawnregions.lua @@ -1,7 +1,35 @@ +-- Spawn regions offered to new characters, deployed as +-- Server/debbzoid_spawnregions.lua. PZ reads it at every server start, so a +-- change here takes effect on the live world after a restart -- no wipe. +-- +-- Each entry either points at a map's own list (file = ...) or at a file in the +-- server's Server/ directory (serverfile = ...). Both are loaded by +-- media/lua/shared/SpawnRegions.lua; a region whose file is missing logs +-- "spawn points may be broken" to the server console and is dropped from the +-- list, taking its spawn choices with it. +-- +-- This list is also what makes buildings unclaimable. SafeHouse.canBeSafehouse +-- walks every point of every region here, resolves each to a grid square, and +-- refuses the claim with "Spawn location. Cannot be claimed." if the square +-- being claimed is inside that square's building. It does not care which +-- profession the point belongs to, whether the region is reachable, or whether +-- the player is an admin. A point on an outdoor square blocks nothing, because +-- an outdoor square has no building. +-- +-- 2026-08-31: "Echo Creek, KY" is commented out below. Its spawn list holds +-- exactly one point -- posX 3573, posY 10899, unemployed only -- and that point +-- sits inside the Echo Creek gas station/diner, which is why the diner cannot +-- be claimed as a safehouse. There is no server option that lifts the +-- restriction, so removing the region is the only way to free the building +-- short of moving the point somewhere else (see spawnpoints.lua). +-- +-- The cost of removing it: unemployed characters lose Echo Creek as a spawn +-- choice. Nothing else changes -- the town, its loot and its buildings stay in +-- the world, and no existing character is affected. function SpawnRegions() return { { name = "Brandenburg, KY", file = "media/maps/Brandenburg, KY/spawnpoints.lua" }, - { name = "Echo Creek, KY", file = "media/maps/Echo Creek, KY/spawnpoints.lua" }, +-- { name = "Echo Creek, KY", file = "media/maps/Echo Creek, KY/spawnpoints.lua" }, { name = "Ekron, KY", file = "media/maps/Ekron, KY/spawnpoints.lua" }, { name = "Fallas Lake, KY", file = "media/maps/Fallas Lake, KY/spawnpoints.lua" }, { name = "Irvington, KY", file = "media/maps/Irvington, KY/spawnpoints.lua" }, diff --git a/ansible/roles/podman/tasks/containers/home/zomboid.yml b/ansible/roles/podman/tasks/containers/home/zomboid.yml index 34ff90a..65ecfb0 100644 --- a/ansible/roles/podman/tasks/containers/home/zomboid.yml +++ b/ansible/roles/podman/tasks/containers/home/zomboid.yml @@ -152,8 +152,12 @@ mode: 0644 notify: restorecon podman -# Server config is seeded from the vendored Sophie 42 preset *before* first -# boot, so the server never generates a vanilla INI we then have to patch. +# Server config is seeded *before* first boot, so the server never generates a +# vanilla INI we then have to patch. +# +# The INI and SandboxVars started as the vendored Sophie 42 preset and were +# re-synced from the running debbzoid world on 2026-08-31 -- see the header of +# templates/zomboid/server.ini.j2 for the INI keys that moved and why. # # force is off by design: these files are a starting point, not a managed # state. Stop the server, hand-edit them, regenerate the world -- Ansible will @@ -170,7 +174,7 @@ notify: restorecon podman tags: zomboid-conf -- name: seed zomboid server ini from sophie preset +- name: seed zomboid server ini become: true ansible.builtin.template: src: zomboid/server.ini.j2 @@ -183,17 +187,42 @@ tags: zomboid-conf # Copied, not templated: these are Lua and must not go through Jinja. -- name: seed zomboid sandbox and spawn config from sophie preset +- name: seed zomboid sandbox settings become: true ansible.builtin.copy: - src: "zomboid/sophie/{{ item }}.lua" - dest: "{{ zomboid_path }}/data/Server/{{ zomboid_server_name }}_{{ item }}.lua" + src: zomboid/sophie/SandboxVars.lua + dest: "{{ zomboid_path }}/data/Server/{{ zomboid_server_name }}_SandboxVars.lua" force: "{{ zomboid_config_force | bool }}" owner: "{{ podman_subuid.stdout }}" group: "{{ podman_user }}" mode: 0644 + notify: restorecon podman + tags: zomboid-conf + +# Spawn config gets its own force switch, and it is not pedantry: these two +# files are the only part of the server config that a *running* world will pick +# up. PZ reads _spawnregions.lua (and any serverfile it names) at every +# server start; SandboxVars is read once, when the world is created. So a spawn +# change is deployable on the live world -- push, restart, done -- while a +# SandboxVars change is not, and needs a wipe to mean anything. +# +# Sharing zomboid_config_force between them would mean force-pushing the whole +# preset to land a one-line spawnregions edit, which also rewrites the INI (a +# ResetID mismatch tells every client to reroll) and the world's SandboxVars. +# +# make deploy TAGS=zomboid-conf -e zomboid_spawn_force=true +# +# then restart the server -- with players offline -- for it to take effect. +- name: seed zomboid spawn config + become: true + ansible.builtin.copy: + src: "zomboid/sophie/{{ item }}.lua" + dest: "{{ zomboid_path }}/data/Server/{{ zomboid_server_name }}_{{ item }}.lua" + force: "{{ zomboid_spawn_force | bool }}" + owner: "{{ podman_subuid.stdout }}" + group: "{{ podman_user }}" + mode: 0644 loop: - - SandboxVars - spawnregions - spawnpoints notify: restorecon podman @@ -231,7 +260,7 @@ state: started daemon_reload: true -# A pristine copy of the Sophie preset, kept where the server cannot overwrite it. +# The settings this repo would deploy, kept where the server cannot overwrite them. # # Reference only -- nothing applies this automatically. A wipe deliberately leaves # the live settings alone so hand tuning survives it. @@ -242,12 +271,21 @@ # much as an input, and that is how a Sophie world quietly became an Apocalypse # one -- 139 values reverted, loot from 0.35 back to 0.9, CharacterFreePoints # from 0 to 60. When that happens again, this is what to copy back from. +# +# What it holds changed on 2026-08-31. It was the pristine Sophie preset; it is +# now a snapshot of the live debbzoid world, because the admins' tuning had by +# then diverged from the preset in the same 139 values and re-seeding from the +# preset would have thrown that tuning away rather than restored it. +# +# force is on here, and only here. Nothing on the host writes this directory -- +# the server cannot see it -- so it has no hand edits to protect, and if it does +# not track the repo it is not a restore point, just an older world's settings. - name: seed canonical zomboid world settings become: true ansible.builtin.copy: src: "zomboid/sophie/{{ item }}.lua" dest: "{{ zomboid_path }}/config-template/{{ item }}.lua" - force: "{{ zomboid_config_force | bool }}" + force: true owner: "{{ podman_user }}" group: "{{ podman_user }}" mode: 0644 diff --git a/ansible/roles/podman/templates/zomboid/server.ini.j2 b/ansible/roles/podman/templates/zomboid/server.ini.j2 index 66e5da4..d19e4fa 100644 --- a/ansible/roles/podman/templates/zomboid/server.ini.j2 +++ b/ansible/roles/podman/templates/zomboid/server.ini.j2 @@ -8,11 +8,30 @@ Only the keys this deployment actually owns are templated -- credentials, RCON, Discord, backup cadence, and the mod lists. Every gameplay setting (PVP, safety system, safehouses, sleep, MaxPlayers, PauseEmpty, ResetID, - the welcome message) is left exactly as the preset author shipped it. + the welcome message) is a literal, and was the preset author's value until + the live-config sync below. Seeded once, then left alone: the deploy task uses force=false so the server and admins can hand-edit this file between world regenerations. Re-push it deliberately with -e zomboid_config_force=true. + + Synced from the running debbzoid server on 2026-08-31, so a deliberate + force-push cannot silently revert what the admins set in-game. Eight keys + had drifted from the preset and now carry the live values: + + PlayerSafehouse false -> true + SafehouseAllowNonResidential false -> true (the diner/gas-station case) + SafehouseAllowRespawn false -> true + SafehouseAllowLoot true -> false + SafehouseAllowFire true -> false + TrashDeleteAll false -> true + MapRemotePlayerVisibility 1 -> 4 + ResetID 6953472 -> 826046 + + ResetID is in that list on purpose. It is the world's soft-reset token: if + the file's value ever differs from the one the live world was created with, + every connected client is told to roll a new character. Carrying the live + value means a force-push is a no-op instead of a server-wide wipe prompt. -#} {% set rename_map = {} %} {% for r in zomboid_mods_renamed %}{% set _ = rename_map.update({r.old: r.new}) %}{% endfor %} @@ -83,7 +102,7 @@ DefaultPort=16261 UDPPort=16262 # Reset ID determines if the server has undergone a soft-reset. If this number does match the client, the client must create a new character. Used in conjunction with PlayerServerID. It is strongly advised that you backup these IDs somewhere Min: 0 Max: 2147483647 Default: 985847558 -ResetID=6953472 +ResetID=826046 # Enter the mod loading ID here. It can be found in \Steam\steamapps\workshop\modID\mods\modName\info.txt Mods={{ resolved_mod_ids | reject('in', excluded_mod_ids) | join(';') }} @@ -131,7 +150,7 @@ AnnounceAnimalDeath=false SaveWorldEveryMinutes=10 # Both admins and players can claim safehouses -PlayerSafehouse=false +PlayerSafehouse=true # Only admins can claim safehouses AdminSafehouse=false @@ -140,13 +159,13 @@ AdminSafehouse=false SafehouseAllowTrepass=true # Allow fire to damage safehouses -SafehouseAllowFire=true +SafehouseAllowFire=false # Allow non-members to take items from safehouses -SafehouseAllowLoot=true +SafehouseAllowLoot=false # Players will respawn in a safehouse that they were a member of before they died -SafehouseAllowRespawn=false +SafehouseAllowRespawn=true # Players must have survived this number of in-game days before they are allowed to claim a safehouse Min: 0 Max: 2147483647 Default: 0 SafehouseDaySurvivedToClaim=0 @@ -155,7 +174,7 @@ SafehouseDaySurvivedToClaim=0 SafeHouseRemovalTime=144 # Governs whether players can claim non-residential buildings. -SafehouseAllowNonResidential=false +SafehouseAllowNonResidential=true SafehouseDisableDisguises=true @@ -328,7 +347,7 @@ BanKickGlobalSound=true RemovePlayerCorpsesOnCorpseRemoval=false # If true, player can use the "delete all" button on bins. -TrashDeleteAll=false +TrashDeleteAll=true # If true, player can hit again when struck by another player. PVPMeleeWhileHitReaction=false @@ -352,7 +371,7 @@ CarEngineAttractionModifier=0.5 PlayerBumpPlayer=false # Controls display of remote players on the in-game map. 1=Hidden 2=Friends 3=Friends and nearby players 4=Everyone Min: 1 Max: 4 Default: 1 -MapRemotePlayerVisibility=1 +MapRemotePlayerVisibility=4 # Min: 1 Max: 300 Default: 5 BackupsCount=10 diff --git a/ansible/roles/podman/templates/zomboid/world-reset.sh.j2 b/ansible/roles/podman/templates/zomboid/world-reset.sh.j2 index 6ccdc34..e2c1ce5 100644 --- a/ansible/roles/podman/templates/zomboid/world-reset.sh.j2 +++ b/ansible/roles/podman/templates/zomboid/world-reset.sh.j2 @@ -86,7 +86,8 @@ fi # every later wipe regenerates from them -- which is how a Sophie world became an # Apocalypse one. Nothing here corrects that automatically any more, so the # snapshot above is the way back: config-backup/ holds the settings as they were -# before each wipe, and config-template/ holds the pristine Sophie preset. +# before each wipe, and config-template/ holds what this repo deploys -- since +# 2026-08-31 a snapshot of Greg's live tuning, not the pristine Sophie preset. # Start server log "Starting zomboid service..."