自定义物资教程



引言

本文档介绍《SCUM》中的掉落自定义功能。掉落自定义通过创建和修改各类JSON文件实现,你需要具备JSON基础知识

大多数与掉落相关的JSON文件都可以通过各种管理员命令从游戏中导出,部分文件则需要手动创建。JSON文件的根路径为: 

  • 
  • 多人服务器:
  • 
  • 单人模式:
  • 

JSON文件会在游戏启动时加载,后续的修改可以通过以下命令重新加载,以便快速测试修改效果: 

 

#ReloadLootCustomizationsAndResetSpawners 

本文后续会详细介绍上述命令,以及导出、创建和修改掉落相关JSON文件的流程。 

在深入讲解命令和掉落修改之前,我们会先介绍一些对高效进行掉落自定义至关重要的概念和前置功能。 

如果你想立即开始操作,可以直接跳转到导出章节。 

 

一、稀有度

稀有度在掉落自定义中被广泛使用,它决定了从一组对象中选中某个对象的概率。这里的“对象”是一个抽象概念,目前你可以将其理解为物品。 

稀有度等级与权重

集合中的每个对象都会被分配一个稀有度,可选值及相对权重(以“极其稀有”为基准1)如下: 

 







 

海量(Abundant) 

 

32 

 

被选中概率是极其稀有的32倍 

 

普通(Common) 

 

16 

 

被选中概率是极其稀有的16倍 

 

少见(Uncommon) 

 

8 

 

被选中概率是极其稀有的8倍 

 

稀有(Rare) 

 

4 

 

被选中概率是极其稀有的4倍 

 

非常稀有(Very Rare) 

 

2 

 

被选中概率是极其稀有的2倍 

 

极其稀有(Extremely Rare) 

 

1 

 

基准概率 

概率计算示例

  • 
  • 苹果被选中的概率 = 香蕉×2 = 柠檬×4 = 猕猴桃×8 = 芒果×16 = 西瓜×32
  • 
  • 香蕉被选中的概率 = 苹果×1/2 = 柠檬×2 = 猕猴桃×4 = 芒果×8 = 西瓜×16
  • 
  • 其他物品之间的相对概率以此类推
  • 

同稀有度物品的处理

如果多个物品稀有度相同,它们会被归为一组。当系统选中该组后,会再进行一次等概率的随机抽取,从组内选择最终掉落的物品。 

  • 
  • 苹果/香蕉被选中的总概率 = 柠檬×4 = 西瓜×8
  • 
  • 系统先选中“苹果+香蕉”组,再以50%概率决定最终掉落苹果还是香蕉
  • 

 

二、掉落树节点

概述

直接为每个场景的每个物品单独分配概率,会导致配置极其繁琐且缺乏细粒度。因此游戏将物品及其稀有度组织成树状结构

  • 
  • 根节点:代表一个大的物品分类(如“酒吧”)
  • 
  • 内部节点(物品包):代表一个子类(如“饮品”、“食物”)
  • 
  • 叶节点:代表具体物品
  • 

每个节点的稀有度是相对于其同级节点而言的。 

节点ID

为了唯一标识节点并在其他地方引用,节点ID的生成规则是: 

将该节点所有祖先节点的名称与自身名称用点号连接 

示例: 

  • 
  • 酒吧 → 饮品 → 啤酒 → 节点ID:
  • 
  • 酒吧 → 武器 → 单手厨刀 → 节点ID:
  • 

JSON规范

节点使用JSON对象定义,不同类型节点的属性如下: 

基础节点属性

 







 

Name 

 

字符串 

 

节点名称,在同级节点中必须唯一 

 

Rarity 

 

字符串 

 

节点的稀有度,可选值见“稀有度”章节 

物品包节点(内部节点)额外属性

 







 

Children 

 

对象数组 

 

该节点的所有子节点 

物品节点(叶节点)额外属性

 







 

Variations 

 

字符串数组 

 

物品的皮肤变体。当选中该节点时,会以等概率选择物品本身或其任意变体 

完整示例

酒吧掉落树对应的JSON代码: 

 

{ "Name": "Bar", "Children": [ { "Name": "Drinks", "Rarity": "Abundant", "Children": [ { "Name": "Beer", "Rarity": "Abundant" }, { "Name": "Absinthe", "Rarity": "Rare" } ] }, { "Name": "Food", "Rarity": "Uncommon", "Children": [ { "Name": "Chips", "Rarity": "Abundant" }, { "Name": "Hazelnuts", "Rarity": "Common" } ] }, { "Name": "Weapons", "Rarity": "Very Rare", "Children": [ { "Name": "1H_KitchenKnife" } ] } ] } 

导出内置节点

使用以下命令导出游戏默认的完整掉落树: 

 

#ExportDefaultLootTree 

导出后文件会保存到以下路径: 

  • 
  • 多人服务器:
  • 
  • 单人模式:
  • 

注意:导出默认掉落树只是获得了一个用于分析和修改的起点,不会立即生效任何自定义

 

三、掉落自定义

核心概念:合并模式

当你自定义一个已存在的节点时,需要指定ChildrenMergeMode属性来决定合并方式: 

 





 

Replace 

 

用自定义节点的子节点完全替换默认节点的子节点 

 

UpdateOrAdd(默认) 

 

合并子节点:更新同名子节点,并添加新的子节点 

完整操作流程

目标:让红色垃圾桶只掉落水、啤酒、苹果和香蕉,且饮品掉落概率高于食物。 

  1. 
  2. 启动单人模式(推荐用于测试)
  3. 
  4. 传送至红色垃圾桶位置:
  5. 
  6. 导出默认掉落树:
  7. 
  8. 下载测试用全局掉落倍率文件:[GeneralZoneModifiers.json](sslocal://flow/file_open?url=https%3A%2F%2Fgithub.com%2FCheeseKingu%2FLoot-Modifiers%2Fblob%2Fmain%2FGeneralZoneModifiers&flow_extra=eyJsaW5rX3R5cGUiOiJjb2RlX2ludGVycHJldGVyIn0=),放入根目录
  9. 
  10. 重新加载配置:
  11. 
  12. 在目录下创建文件夹
  13. 
  14. 在文件夹中创建,写入以下内容: { "Name": "ItemLootTreeNodes", "Children": [ { "Name": "Trash", "ChildrenMergeMode": "Replace", "Children": [ { "Name": "Drinks", "Rarity": "Abundant", "Children": [ { "Name": "Water_05l", "Rarity": "Abundant" }, { "Name": "Beer", "Rarity": "Rare" } ] }, { "Name": "Food", "Rarity": "Common", "Children": [ { "Name": "Apple" }, { "Name": "Banana" } ] } ] } ] }
  15. 
  16. 再次重新加载配置:
  17. 
  18. 搜索红色垃圾桶测试效果
  19. 
  20. 测试完成后,删除恢复正常掉落概率
  21. 

常见问题排查

如果掉落自定义没有生效,首先检查JSON语法错误。游戏日志中会记录错误文件路径,关键词: 

 

LogItemSpawningDataRegistry: Error: Failed to parse 

其他有用的日志关键词:LogItemSpawning、LogItemLootTree 

 

四、导出

物品参数导出

 

#ExportDefaultItemSpawningParameters 

导出所有可生成物品的基础参数(手工物品除外),保存路径: 

  • 
  • 多人服务器:
  • 
  • 单人模式:
  • 

物品参数说明

以M82A1为例: 

 

{ "Id": "Weapon_M82A1", "IsDisabledForSpawning": false, // 是否禁用该物品生成 "AllowedLocations": ["Coastal", "Continental", "Mountain"], // 允许生成的区域 "CooldownPerSquadMemberMin": 0, // 小队拾取后最小冷却(小时) "CooldownPerSquadMemberMax": 0, // 小队拾取后最大冷却(小时) "Variations": ["Weapon_M82A1_Black", "Weapon_M82A1_Desert", "Weapon_M82A1_Snow"], // 皮肤变体 "ShouldOverrideInitialAndRandomUsage": false, // 是否覆盖生成器的使用量设置 "InitialUsageOverride": 0, // 初始使用量扣除百分比 "RandomUsageOverrideUsage": 0 // 随机使用量扣除百分比 } 

覆盖物品参数

在Loot\Items目录下创建Override文件夹,在其中创建任意名称的JSON文件,写入需要修改的物品参数即可。 

生成器预设导出

导出所有默认生成器预设

 

#ExportDefaultItemSpawnerPresets 

保存路径: 

  • 
  • 多人服务器:
  • 
  • 单人模式:
  • 

导出指定区域生成器预设

 

#ExportItemSpawnerPresetsInZone <扇区名> #ExportItemSpawnerPresetsInZone <左上角X> <左上角Y> <右下角X> <右下角Y> <文件夹名> 

示例: 

  • 
  • 导出A2扇区:
  • 
  • 导出Tisno港口:
  • 

区域优先级规则

  • 
  • 区域优先级:
  • 
  • 重叠区域:面积更小的区域的配置会覆盖面积更大的区域的配置
  • 
  • 全局配置:如果文件夹中没有文件,该文件夹中的预设会在生效
  • 

 

五、通用区域修改器

用于全局修改某个矩形区域或整个扇区的掉落属性。 

在Loot根目录下创建GeneralZoneModifiers.json,示例: 

 

{ "Modifiers": [ { "Zones": [ { "Name": "FishFactory", "TopLeft": "X=-327211.8142 Y=-346843.5702", "BottomRight": "X=-363868.8911 Y=-383500.647" } ], "SpawnerProbabilityMultiplier": 100, // 环境生成概率倍率 "ExamineSpawnerProbabilityMultiplier": 100, // 可搜索对象生成概率倍率 "ExamineSpawnerQuantityMultiplier": 5 // 可搜索对象掉落数量倍率 }, { "Zones": [{ "Sector": "A1" }], "ExamineSpawnerQuantityMultiplier": 5 } ] } 

注意:这些数值会与ServerSettings.ini中的对应设置相乘得到最终值。 

 

六、实用管理员命令

查看对象对应的生成器预设

 

#SetShouldPrintExamineSpawnerPresets true 

执行后,搜索任何可搜索对象,其对应的生成器预设名称会打印到聊天框和日志中。 

  • 
  • 单人模式日志:
  • 
  • 多人服务器日志:
  • 

重新加载所有掉落配置

 

#ReloadLootCustomizationsAndResetSpawners 

  • 
  • 重新加载所有JSON配置文件
  • 
  • 重置所有可搜索对象的冷却时间和掉落池
  • 
  • 不重置
  • 

 

七、生成器预设

生成器预设决定了你在世界中或搜索对象时会找到哪些掉落物。每个可搜索对象和每个环境生成点都有一个对应的生成器预设。 

预设命名规则

  • 
  • 名称包含:对应需要搜索才能获得掉落物的对象(如橱柜、垃圾桶)
  • 
  • 名称包含:对应在附近自动生成物品的生成点(如架子、地面)
  • 

生成器预设核心设置

 

{ "Nodes": [ ... ], // 引用的掉落树节点 "Probability": 25, // 掉落概率(%),会与服务器设置相乘 "QuantityMin": 1, // 最小掉落数量 "QuantityMax": 1, // 最大掉落数量 "AllowDuplicates": false, // 是否允许掉落重复物品 "ShouldFilterItemsByZone": true, // 是否遵守物品的区域生成限制 "InitialDamage": 5, // 初始损坏百分比 "RandomDamage": 35, // 随机损坏百分比(0-该值) "InitialUsage": 5, // 初始使用量扣除百分比 "RandomUsage": 35 // 随机使用量扣除百分比(0-该值) } 

修改生成器预设的4种方式

1. 固定物品

列表中的所有物品必定掉落,忽略概率和稀有度设置。 

 

{ "FixedItems": ["Weapon_M82A1", "Weapon_MK18", "2H_Katana"], "QuantityMin": 1, "QuantityMax": 2, "AllowDuplicates": true, "ShouldFilterItemsByZone": false, "InitialDamage": 0, "RandomDamage": 0, "InitialUsage": 0, "RandomUsage": 0 } 

2. 物品列表

为每个物品单独分配稀有度。 

 

{ "Items": [ { "Rarity": "Abundant", "Id": "Weapon_M82A1" }, { "Rarity": "Common", "Id": "1H_Hatchet" }, { "Rarity": "Uncommon", "Id": "2H_Katana" } ], "Probability": 20, "QuantityMin": 1, "QuantityMax": 2, ... } 

3. 子预设

在一个生成器预设中引用其他多个生成器预设。 

 

{ "Subpresets": [ { "Rarity": "Uncommon", "Id": "Special_Packages-Vault-Examine_RPK_Vault_Pack" }, { "Rarity": "Uncommon", "Id": "Special_Packages-Vault-Examine_GrenadeLauncher_Vault_Pack" } ] } 

4. 节点

引用掉落树中的节点,这是游戏默认使用的方式。 

 

{ "Nodes": [ { "Rarity": "Uncommon", "Ids": [ "ItemLootTreeNodes.Workshop.Tools", "ItemLootTreeNodes.Workshop.WorkClothes" ] } ], ... } 

特殊生成器预设修改

以下类型的生成器预设无法通过区域导出获得,需要从Default文件夹中手动复制到对应区域的Override文件夹中: 

  • 
  • 景观生成器(如石头、芦荟)
  • 
  • 人偶掉落(僵尸、NPC)
  • 
  • 空投掉落
  • 
  • 农业掉落(农作物)
  • 

 

八、生成后动作

用于修改掉落物品的附加属性,添加在生成器预设的PostSpawnActions数组中。 

常用生成后动作列表

 





 

SetAmmoAmount_SmallStash 

 

弹药数量为该口径容量的0-35% 

 

SetAmmoAmount_BigStash 

 

弹药数量为该口径容量的50-100% 

 

SetCashAmount_SmallStash 

 

现金价值为1-100 

 

SetCashAmount_MediumStash 

 

现金价值为50-200 

 

SetCashAmount_BigStash 

 

现金价值为200-500 

 

SetClothesDirtiness_ResidentialClothes 

 

衣物脏污度为0-20% 

 

SetClothesDirtiness_DirtyClothes 

 

衣物脏污度为60-85% 

 

SetClothesDirtiness_DeadPuppets 

 

衣物脏污度为93-96% 

 

SetUsage_Max 

 

所有有使用量的物品以0使用量生成 

示例

 

{ ... "PostSpawnActions": [ "SetAmmoAmount_SmallStash", "SetCashAmount_SmallStash", "SetClothesDirtiness_DirtyClothes" ] } 

 

九、冷却组

冷却组是用于限制地图热门区域稀有掉落的系统。当你拾取一个物品时,会触发该物品所在冷却组的冷却,同时也会触发所有冷却时间更长的组的冷却。 

注意:冷却只影响单个生成器,不会转移到其他生成器;且不影响FixedItems

禁用冷却组

如果你不想使用这个功能,可以在服务器设置中关闭: 

服务器设置 → 功能 → 物品生成 → 启用物品冷却组 → 关闭 

修改后需要重启服务器或重新登录单人模式。 

 

0
0
0
0
评论(0)
Watching is like it, come and comment now!
SCUM玩家社区 2026/04/23 更新,178阅读量
分享
评论0