配合我的第一弹食用。 https://sns.oddba.cn/61207.html
修改前一定要备份!
这是一份自用的修改手册,改完以后我存下来大家可以参考。 数值不用学我 因为我会把游戏时间控制在5天内,楼主经常新版本开新档玩一周。 批量修改的部分可以学我以前的教学 用ctrl+F /
ctrl+H 的替换大法, 也可以这次和我一样python修改。不放心的同学可以不做python处的修改。或者找到我上面第一弹里的方法
,但是找到最新版的路径自行修改。
以下正文
===
适用版本:SPT 4.0.12 (Client 0.16.9.0.40087) 编写日期:2026-02-20 目标:降低游戏难度,提升单人离线体验
准备工作
1. 备份
在修改前,复制以下两个文件夹作为备份:
-
SPT_Data/configs→SPT_Data/configs - 副本 -
SPT_Data/database→SPT_Data/database - 副本
2. 工具
-
文本编辑器:VS Code、Notepad++ 等(能处理大 JSON 文件)
-
Python 3:用于批量修改大文件(items.json 19MB、globals.json 1MB)
3. 文件结构说明
SPT_Data/
├── configs/ ← 服务端配置(小文件,可直接手改)
│ ├── airdrop.json 空投物资内容
│ ├── insurance.json 保险设置
│ ├── inraid.json 战局内设置
│ ├── location.json 地图物资倍率
│ ├── quest.json 任务奖励
│ ├── ragfair.json 跳蚤市场
│ └── scavcase.json Scav宝箱
└── database/ ← 游戏数据库(大文件,建议用脚本改)
├── globals.json 全局设置(经验、技能、跳蚤上架等)
├── hideout/ 藏身处
│ ├── areas.json 建造时间
│ └── production.json 制造时间
├── locations/ 各地图设置
│ └── */base.json 包含空投概率等
├── templates/
│ └── items.json 所有物品属性(19MB)
└── traders/ 商人设置
└── 54cb50c76803fa8b248b4571/
└── base.json 毛子(Prapor)设置
第一部分:Configs 直接修改
这些文件较小,可以直接用文本编辑器打开修改。
1.1 保险秒回 — configs/insurance.json
目标:保险100%返还,秒回,配件不容易被AI拿走。
找到并修改以下字段:
{
"returnChancePercent": {
"54cb50c76803fa8b248b4571": 100, // 毛子 → 100%(原85%)
"54cb57776803fa99248b456e": 100 // 医生 → 100%(原95%)
},
"runIntervalSeconds": 60, // 刷新间隔 → 60秒(原600秒)
"chanceNoAttachmentsTakenPercent": 65 // 配件保留率 → 65%(原10%)
}
1.2 坐车/合作撤离加成 — configs/inraid.json
目标:提高坐车撤离的好感度奖励。
{
"carExtractBaseStandingGain": 0.5, // 原0.2
"coopExtractBaseStandingGain": 0.5 // 原0.25
}
1.3 跳蚤市场卖出率 — configs/ragfair.json
目标:挂在跳蚤上的东西更容易卖出。
找到 sell.chance 区块,修改:
"sell": {
"chance": {
"base": 75, // 原50
"sellMultiplier": 1.8 // 原1.24
}
}
1.4 物资倍率 — configs/location.json
目标:地图上的物资更丰富。
用 Python 批量修改更方便:
import json
with open('configs/location.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 散落物资 ×1.3
for k, v in data['looseLootMultiplier'].items():
if v > 0:
data['looseLootMultiplier'][k] = round(v * 1.3, 1)
# 静态物资(箱子等)→ 2倍
for k, v in data['staticLootMultiplier'].items():
if k != 'hideout' and v > 0:
data['staticLootMultiplier'][k] = 2
with open('configs/location.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('location.json 修改完成')
1.5 空投物资加强 — configs/airdrop.json
目标:空投内容更丰富。
注意:空投概率不在这个文件里!概率在每张地图的
database/locations/*/base.json中(见第二部分)。
import json
with open('configs/airdrop.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 提高 mixed 和 weaponArmor 类型权重
data['airdropTypeWeightings']['mixed'] = 800 # 原500
data['airdropTypeWeightings']['weaponArmor'] = 600 # 原400
# 各类型物资数量 ×1.5
for loot_type in ['mixed', 'weaponArmor', 'foodMedical', 'barter']:
loot = data['loot'][loot_type]
for count_key in ['itemCount', 'weaponPresetCount', 'armorPresetCount']:
if loot.get(count_key, {}).get('max', 0) > 0:
loot[count_key]['max'] = int(loot[count_key]['max'] * 1.5)
# 货币翻倍
for currency_id in ['5449016a4bdc2d6f028b456f']: # 卢布
if currency_id in loot.get('itemStackLimits', {}):
loot['itemStackLimits'][currency_id]['max'] *= 2
loot['itemStackLimits'][currency_id]['min'] *= 2
with open('configs/airdrop.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('airdrop.json 修改完成')
1.6 日常任务奖励 — configs/quest.json
目标:每天5个日常任务,奖励翻3倍。
import json
with open('configs/quest.json', 'r', encoding='utf-8') as f:
data = json.load(f)
for rq in data.get('repeatableQuests', []):
if rq.get('name') == 'Daily':
rq['numQuests'] = 5
rs = rq['rewardScaling']
rs['experience'] = [x * 3 for x in rs['experience']]
rs['roubles'] = [x * 3 for x in rs['roubles']]
rs['items'] = [x + 2 for x in rs['items']]
break
with open('configs/quest.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('quest.json 修改完成')
1.7 Scav宝箱奖励 — configs/scavcase.json
目标:宝箱奖励价值大幅提升。
找到 rewardItemValueRangeRub,把 max 值翻 3-5 倍:
"rewardItemValueRangeRub": {
"common": { "min": 100, "max": 50000 }, // 原max ~10000
"rare": { "min": 1001, "max": 500000 }, // 原max ~100000
"superrare": { "min": 10001, "max": 6000000 } // 原max ~1200000
}
同理修改 moneyRewards 中 rubCount/usdCount/eurCount 的 max 值翻 3 倍。
第二部分:Database 批量修改(Python 脚本)
以下脚本直接保存到
SPT_Data文件夹中,然后在该文件夹内打开 PowerShell 运行。
2.1 经验/技能倍率 — database/globals.json
# 保存为 modify_globals.py
import json
with open('database/globals.json', 'r', encoding='utf-8') as f:
data = json.load(f)
c = data['config']
# 战局经验 ×2
me = c['exp']['match_end']
for key in ['survivedMult', 'killedMult', 'miaMult', 'runnerMult']:
if key in me and me[key] > 0:
me[key] = round(me[key] * 2, 2)
# 治疗/吃喝经验 ×3
for key in ['expForHeal', 'expForHydration', 'expForEnergy']:
c['exp']['heal'][key] = c['exp']['heal'][key] * 3
# 技能升级速度 ×5 / 武器精通 ×3
c['SkillsSettings']['SkillProgressRate'] = 2.0 # 原0.4
c['SkillsSettings']['WeaponSkillProgressRate'] = 3.0 # 原1.0
# 跳蚤上架数量翻倍
for entry in c['RagFair']['maxActiveOfferCount']:
entry['count'] *= 2
entry['countForSpecialEditions'] *= 2
# 全局掉率/价格
c['GlobalLootChanceModifier'] = 0.35 # 原0.2
c['GlobalItemPriceModifier'] = 1.5 # 原1.0
with open('database/globals.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('globals.json 修改完成')
2.2 物品属性 — database/templates/items.json
# 保存为 modify_items.py
import json
with open('database/templates/items.json', 'r', encoding='utf-8') as f:
data = json.load(f)
AMMO_PARENT = '5485a8684bdc2da71d8b4567'
CURRENCY_IDS = {
'5449016a4bdc2d6f028b456f': '卢布',
'569668774bdc2da2298b4568': '美元',
'5696686a4bdc2da3298b456a': '欧元',
}
DOCS_CASE = '590c60fc86f77412b13fddcf' # 文件包
INJECTOR_CASE = '619cbf7d23893217ec30b689' # 注射器盒
SICC_POUCH = '5d235bb686f77443f4331278' # SICC
PROPITAL = '5c0e530286f7747fa1419862' # Propital
for item_id, item in data.items():
if not isinstance(item, dict) or '_props' not in item:
continue
props = item['_props']
# 货币堆叠 → 200万
if item_id in CURRENCY_IDS:
props['StackMaxSize'] = 2000000
# 子弹堆叠 ×4
if item.get('_parent') == AMMO_PARENT and props.get('StackMaxSize', 0) > 0:
props['StackMaxSize'] *= 4
# 跳蚤禁售解除
if props.get('CanSellOnRagfair') == False:
props['CanSellOnRagfair'] = True
# 容器增大
if item_id == DOCS_CASE:
props['Grids'][0]['_props']['cellsH'] = 5
props['Grids'][0]['_props']['cellsV'] = 5
if item_id == INJECTOR_CASE:
props['Grids'][0]['_props']['cellsH'] = 4
props['Grids'][0]['_props']['cellsV'] = 4
if item_id == SICC_POUCH:
props['Grids'][0]['_props']['cellsH'] = 7
props['Grids'][0]['_props']['cellsV'] = 7
# Propital 止疼延长
if item_id == PROPITAL:
ed = props.get('effects_damage', {})
if 'Pain' in ed: ed['Pain']['duration'] = 2400
if 'Contusion' in ed: ed['Contusion']['duration'] = 2400
with open('database/templates/items.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('items.json 修改完成')
2.3 藏身处时间 — database/hideout/
# 保存为 modify_hideout.py
import json
# 建造时间 ÷20
with open('database/hideout/areas.json', 'r', encoding='utf-8') as f:
areas = json.load(f)
for area in areas:
for stage in area.get('stages', {}).values():
ct = stage.get('constructionTime', 0)
if ct > 0:
stage['constructionTime'] = max(1, ct // 20)
with open('database/hideout/areas.json', 'w', encoding='utf-8') as f:
json.dump(areas, f, indent=2, ensure_ascii=False)
# 制造时间 ÷20 + 比特币上限30
with open('database/hideout/production.json', 'r', encoding='utf-8') as f:
production = json.load(f)
for key in ['recipes', 'scavRecipes', 'cultistRecipes']:
for recipe in production.get(key, []):
if not isinstance(recipe, dict): continue
pt = recipe.get('productionTime', 0)
if pt > 0:
recipe['productionTime'] = max(1, pt // 20)
if recipe.get('productionLimitCount', 0) > 0:
recipe['productionLimitCount'] = 30
with open('database/hideout/production.json', 'w', encoding='utf-8') as f:
json.dump(production, f, indent=2, ensure_ascii=False)
print('藏身处修改完成')
2.4 商人保险秒回 — database/traders/
# 保存为 modify_traders.py
import json
path = 'database/traders/54cb50c76803fa8b248b4571/base.json'
with open(path, 'r', encoding='utf-8') as f:
data = json.load(f)
data['insurance']['min_return_hour'] = 0
data['insurance']['max_return_hour'] = 0
with open(path, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('毛子保险秒回完成')
2.5 空投概率 — database/locations/*/base.json
# 保存为 modify_locations.py
import json, os
MAPS = ['bigmap', 'woods', 'shoreline', 'lighthouse', 'interchange',
'rezervbase', 'tarkovstreets', 'sandbox', 'sandbox_high', 'labyrinth']
def find_and_set(obj, key, value):
if isinstance(obj, dict):
for k, v in obj.items():
if k == key:
obj[k] = value
return True
if find_and_set(v, key, value):
return True
elif isinstance(obj, list):
for item in obj:
if find_and_set(item, key, value):
return True
return False
for m in MAPS:
path = f'database/locations/{m}/base.json'
if not os.path.exists(path): continue
with open(path, 'r', encoding='utf-8') as f:
data = json.load(f)
find_and_set(data, 'PlaneAirdropChance', 0.95)
with open(path, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print(f' {m} 空投概率 → 0.95')
print('空投概率修改完成')
2.6 药剂改造 — database/globals.json
注意:需要在
modify_globals.py之后运行!
# 保存为 modify_stimulants.py
import json
with open('database/globals.json', 'r', encoding='utf-8') as f:
data = json.load(f)
buffs = data['config']['Health']['Effects']['Stimulator']['Buffs']
# ===== Propital → 超级药剂 =====
# 效果:回血5hp/s 持续50分钟、止疼40分钟、体力恢复、止血
propital = buffs['BuffsPropital']
for buff in propital:
if buff['BuffType'] == 'HealthRate':
buff['Value'] = 5 # 原1
buff['Duration'] = 3000 # 原300(50分钟)
elif buff['BuffType'] == 'SkillRate':
buff['Duration'] = 3000
elif buff['BuffType'] in ['HandsTremor', 'QuantumTunnelling']:
buff['Delay'] = 2700
buff['Duration'] = 300
# 新增:体力恢复
propital.append({
"AbsoluteValue": True, "BuffType": "StaminaRate",
"Chance": 1, "Delay": 1, "Duration": 3000,
"SkillName": "", "Value": 0.5
})
# 新增:止血
propital.append({
"AbsoluteValue": True, "BuffType": "RemoveAllBloodLosses",
"Chance": 1, "Delay": 1, "Duration": 3000,
"SkillName": "", "Value": 0
})
# ===== eTG-change → 超强回血药 =====
# 效果:65hp/s 持续10分钟,无副作用
etg = buffs['BuffseTGchange']
new_etg = []
for buff in etg:
if buff['BuffType'] == 'HealthRate':
buff['Value'] = 65 # 原6.5(×10)
buff['Duration'] = 600 # 原60(×10)
new_etg.append(buff)
elif buff['BuffType'] == 'EnergyRate' and buff['Value'] > 0:
buff['Duration'] = 600
new_etg.append(buff)
elif buff['BuffType'] == 'SkillRate' and buff['Value'] > 0:
buff['Duration'] = 600
new_etg.append(buff)
# 跳过所有负面效果
buffs['BuffseTGchange'] = new_etg
with open('database/globals.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print('药剂改造完成')
第三部分:一键执行
把上面所有脚本(.py 文件)保存到 SPT_Data 文件夹中,然后:
-
打开
SPT_Data文件夹 -
按住
Shift右键空白处 → “在此处打开 PowerShell 窗口” -
按顺序输入以下命令(每输一行按回车):
python modify_globals.py python modify_items.py python modify_hideout.py python modify_traders.py python modify_locations.py python modify_stimulants.py
configs 目录下的小文件需要手动编辑或使用上面对应的 Python 代码片段。
第四部分:还原方法
如果出现问题,把备份文件夹复制回来覆盖即可:
# 删除修改后的文件夹 Remove-Item -Recurse -Force .\configs Remove-Item -Recurse -Force .\database # 用备份恢复 Copy-Item -Recurse ".\configs - 副本" .\configs Copy-Item -Recurse ".\database - 副本" .\database
附录A:Python 安装与使用指南
如果你从未使用过 Python,请按以下步骤操作。Python 是一种编程语言,我们用它来自动修改那些太大(几MB到几十MB)无法手动编辑的 JSON 文件。
A.1 安装 Python
-
下载 Python 安装包(选一个能打开的链接):
-
华为镜像(国内快):https://mirrors.huaweicloud.com/python/
-
淘宝镜像(国内快):https://registry.npmmirror.com/binary.html?path=python/
-
进入镜像后选择最新的
3.12.x或3.13.x文件夹 → 下载python-3.x.x-amd64.exe -
运行安装程序,务必勾选底部的 ✅ “Add Python to PATH”(非常重要!)
-
点击 Install Now 完成安装
💡 本教程的脚本不需要安装任何第三方库(不需要
pip install),只用 Python 自带的json和os模块,所以不需要配置 pip 镜像。
A.2 验证安装
按 Win + R,输入 cmd,回车打开命令提示符,输入:
python --version
如果显示 Python 3.x.x 就说明安装成功。如果提示找不到命令,说明没有勾选 “Add to PATH”,需要重新安装。
A.3 如何运行本教程中的脚本
方法一:保存为文件运行(推荐)
-
把教程中的 Python 代码(
python 和之间的内容)复制到记事本 -
保存为
.py文件,例如modify_globals.py,保存到SPT_Data文件夹中 -
在
SPT_Data文件夹中,按住Shift键右键空白处,选择 “在此处打开 PowerShell 窗口”(或 “在终端中打开”) -
输入以下命令运行脚本:
python modify_globals.py
-
看到
修改完成的提示就说明成功了
方法二:在 VS Code 中运行
-
用 VS Code 打开
SPT_Data文件夹 -
新建文件,粘贴 Python 代码,保存为
.py文件 -
右键编辑区 → Run Python File in Terminal
-
或者按
Ctrl + ``打开终端,输入python 文件名.py
A.4 常见问题
| 问题 | 解决方法 |
|---|---|
python 无法识别 |
重新安装 Python 并勾选 “Add to PATH”,或尝试用 python3 替代 |
| 乱码 / 编码错误 | 确保脚本中 encoding='utf-8' 没有被删除 |
| 文件找不到 | 确认你是在 SPT_Data 目录下运行脚本,不是在其他目录 |
| 脚本改了但没效果 | 确认修改的是 database/ 下的文件,不是 database - 副本/ |
| 想恢复原文件 | 参考第四部分的还原方法,从备份文件夹复制回来 |
A.5 脚本安全说明
本教程提供的所有脚本都是纯本地操作:
-
✅ 只读取和写入你电脑上的 JSON 文件
-
✅ 不联网、不下载任何东西、不安装任何依赖
-
✅ 只使用 Python 自带的
json和os模块 -
✅ 可以用记事本打开
.py文件查看全部代码
附录B:常用物品 ID
| 物品 | ID |
|---|---|
| 卢布 | 5449016a4bdc2d6f028b456f |
| 美元 | 569668774bdc2da2298b4568 |
| 欧元 | 5696686a4bdc2da3298b456a |
| 文件包 | 590c60fc86f77412b13fddcf |
| SICC | 5d235bb686f77443f4331278 |
| 注射器盒 | 619cbf7d23893217ec30b689 |
| Propital 针剂 | 5c0e530286f7747fa1419862 |
| eTG-change 针剂 | 5c0e534186f7747fa1419867 |
| 毛子 Prapor | 54cb50c76803fa8b248b4571 |
| 医生 Therapist | 54cb57776803fa99248b456e |
| 子弹父类 | 5485a8684bdc2da71d8b4567 |
物品ID查询:









一楼预留用于未来修改。
@楼上 你可以自己试试手动改我这里写的字段
1. 故障机制 —
database/globals.json路径:
config.Malfunction字段 默认值 作用
DurRangeToIgnoreMalfs.x 93 耐久高于此百分比时不会卡壳。改成 50 则耐久低于 50% 才可能出故障
DurRangeToIgnoreMalfs.y 100 上限,不用改
DurJamWt 0.6 卡壳权重,改小则卡壳概率降低
DurMisfireWt 0.1 哑弹权重
DurFeedWt 0.1 供弹不良权重
AmmoMalfChanceMult 1 弹药故障总倍率,改成 0.1 则故障率降为十分之一
2. 耐久消耗速率 —
database/templates/items.json每把武器的
_props中有:字段 说明
DurabilityBurnModificator 射击时耐久消耗速度的倍率。值越小耐久掉得越慢
HeatFactorByShot 每发子弹的过热系数。值越小越不容易过热
Durability / MaxDurability 武器初始 / 最大耐久值
续楼上
代码未验证,也可以选择手动修改。
修改脚本示例(示例)
# 保存为 modify_durability.py,放到 SPT_Data 文件夹中运行 import json # === 1. 降低故障率 === with open('database/globals.json', 'r', encoding='utf-8') as f: data = json.load(f) malf = data['config']['Malfunction'] malf['DurRangeToIgnoreMalfs']['x'] = 50 # 耐久 > 50% 不会卡壳(原 93%) malf['AmmoMalfChanceMult'] = 0.1 # 弹药故障率 ÷ 10 with open('database/globals.json', 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False) print('故障率已降低') # === 2. 降低所有武器耐久消耗 === with open('database/templates/items.json', 'r', encoding='utf-8') as f: items = json.load(f) WEAPON_PARENTS = [ '5447b5cf4bdc2d65278b4567', # AssaultRifle '5447b5e04bdc2d62278b4567', # SniperRifle '5447b5f14bdc2d61278b4567', # AssaultCarbine '5447b5fc4bdc2d87278b4567', # Shotgun '5447b6094bdc2dc3278b4567', # MarksmanRifle '5447b6194bdc2d67278b4567', # Pistol '5447b6254bdc2dc3278b4568', # SMG '5447bed64bdc2d97278b4568', # MachineGun '617f1ef5e8b54b0998387733', # Revolver ] count = 0 for item_id, item in items.items(): if not isinstance(item, dict) or '_props' not in item: continue if item.get('_parent') in WEAPON_PARENTS: props = item['_props'] burn = props.get('DurabilityBurnModificator', 0) if burn > 0: props['DurabilityBurnModificator'] = round(burn / 5, 4) # 消耗 ÷ 5 count += 1 with open('database/templates/items.json', 'w', encoding='utf-8') as f: json.dump(items, f, indent=2, ensure_ascii=False) print(f'{count} 把武器耐久消耗已降至 1/5')效果