Skip to content

SCUM自定义任务 - 中文说明文档

更新日期:

2025年5月11日

谷歌文档原文一共18页

⊿ 原文:Custom Quest Modification

- 📄

1、介绍

SCUM允许你通过位于特定文件夹中的JSON文件来创建和自定义任务,具体文件夹取决于你是在运行多人服务器还是在沙盒模式下游玩。对任务JSON文件的所有更改都需要重新启动服务器(或在沙盒模式下重新启动游戏)才能使更改生效。

提供一个工具的链接,通过简单的图形界面简化创建过程,同时确保输出结构正确并与已知的游戏数据进行验证:

谷歌云盘下载-官方  阿里云下载  浏览器直接下载-国内节点


相关命令
复制指令
#Quests ListAllQuests

将所有默认任务的 JSON 数组复制到剪贴板。你可以将其粘贴到一个文件(例如 DisabledQuests.json)中,以阻止任何不希望出现的默认任务

复制指令
#ExportQuests

创建任务文件夹(如果该文件夹尚未存在),并导出与任务相关的 JSON 文件,提供所有当前任务的快照

复制指令
#Quests GetMeshInfo

用于交互条件以检索地图上的对象信息(例如,用于放置可交互对象)



- 📁

2、文件夹和文件结构


任务文件夹

根据你的设置,任务文件夹位于以下位置:

服务器路径
复制路径
<Server>\SCUM\Saved\Config\WindowsServer\Quests
单机路径
复制路径
%LocalAppData%\SCUM\Saved\Config\WindowsNoEditor\Quests

此文件夹会在你首次运行 #ExportQuests 命令时自动创建

在任务文件夹内,你会找到以下子文件夹:

  • Blocked(已阻止)

    包含 BlockedQuests.json,它允许你通过名称阻止(禁用)某些任务或阻止所有默认任务

  • Override(覆盖)

    用于添加或更新自定义任务。当服务器启动(或沙盒模式下的游戏)时,它会解析此文件夹中的 JSON 文件并应用任何新的或已更新的任务

  • QuestList(任务列表)

    包含 CustomQuestList.json(导出的所有自定义任务列表)和 DefaultQuestList.json(所有默认任务列表)

    编辑这些文件不会影响服务器或游戏玩法;它们仅用于参考

阻止默认任务

如果你希望阻止某些默认任务出现,可以使用Blocked文件夹中的 BlockedQuests.json 文件。只需添加你想要禁用的任务名称。例如:

复制指令
{
  "BlockAllDefaultQuests": false,
  "BlockQuestNames": [
   	"T1_AR_Fetch_45ACPAmmobox",
	"T1_AR_Fetch_50AEAmmobox",
	"T1_AR_Fetch_9mmAmmobox"
  ]
}

如果你想要禁用所有默认任务,请将BlockAllDefaultQuests设置为true

- ✍🏻

3、创建自定义任务

所有自定义任务必须作为每个文件中的一个 JSON 对象放置在Override文件夹中。每个文件描述一个任务。当服务器(或游戏)重新启动时,SCUM 将加载这些任务。

路径示例结构:
别复制了没用的
Quests

├── Blocked
│    └── BlockedQuests.json
├── Override
│    ├── MyFirstCustomQuest.json
│    └── MySecondCustomQuest.json
└── QuestList
     ├── CustomQuestList.json
     └── DefaultQuestList.json

- 🪢

4、任务 JSON 文件的结构

你创建的每个任务都由一个具有特定属性的任务 JSON 对象定义。某些属性是强制的(bold),而其他属性是可选的(italics)。 以下是其结构,随后是详细解释:

复制示例
{
  "AssociatedNPC": "Bartender",
  "Tier": 1,
  "Title": "我的第一个自定义任务【这个是任务名称命名,可以自定义名称】",
  "Description": "帮助酒保完成一些任务。【这是一个任务描述,可自定义内容】",
  "TimeLimitHours": 24,
  "RewardPool": [
    {
      // 可在此处添加一个或多个奖励对象
    }
  ],
  "Conditions": [
    {
      // 可在此处添加一个或多个条件对象
    }
  ]
}

稍后会详细介绍奖励池条件

4.1 强制属性

每个任务 JSON 对象都必须包含以下强制属性:

属性名类型描述
AssociatedNPC字符串必须为这些之一:Armorer(武器商)Banker(银行家)Barber(理发师)Bartender(酒保)Doctor(医生)Fisherman(渔夫)GeneralGoods(杂货商)Mechanic(机械师)。指示哪个 NPC 提供任务以及奖励(包括商店折扣奖励)的来源
Tier整数(范围:1 至 3)指定任务的难度或重要性等级
Title字符串用于标记任务的合适文本
Description字符串简要说明玩家需要做什么
RewardPool奖励对象的数组每次生成任务的新实例时,从中随机选择一个奖励对象
Conditions条件对象的数组           定义完成任务必须满足的目标



4.2 可选属性

时间限制(小时)

类型:数字(可以是整数或小数)

设置完成任务的时间限制(以小时为单位)(例如,24、48.5 等)

如果没有时间限制,则省略此属性


- 🥳

5、奖励对象

奖励池数组中的每个条目都是一个奖励对象。SCUM 在每个对象中最多设置五个“奖励槽位”,计数方式如下:

  • 货币(普通、金币、声望)组

    • 这三者共同计为 1 个奖励槽位——无论你只包含其中一个(例如仅包含普通货币)还是全部三个(普通货币、金币和声望)。
  • 技能

    • 每授予一个技能计为 1 个奖励槽位。
    • 示例:如果你在射箭和烹饪方面给予经验值,这就是 2 个奖励槽位。
  • 交易优惠

    • 在同一个奖励对象中的第一个交易优惠计为 2 个奖励槽位。
    • 在同一个奖励对象中的每个额外交易优惠计为 1 个奖励槽位。
    • 授予的物品必须属于交易者的库存

下面是一个展示奖励计数如何工作的示例:

复制示例
{
  "CurrencyNormal": 100,
  "CurrencyGold": 1,
  "Fame": 10,
  "Skills": [
    {
      "Skill": "Cooking",
      "Experience": 50
    }
  ],
  "TradeDeals": [
    {
      "Item": "BP_Weapon_M9_C",
      "Price": 50,
      "Amount": 2,
      "AllowExcluded": false,
      "Fame": 10
    }
  ]
}
  • 普通货币(100)+ 金币(1)+ 声望(10)→ 1 个奖励槽位

  • 烹饪技能 +50 经验 → 1 个奖励槽位

  • 第一个交易优惠 → 2 个奖励槽位

到目前为止,总计为 4 个奖励槽位。在达到 5 个的限制之前,你还可以添加一个技能或一个交易优惠(或任何单槽位奖励元素)


5.1、奖励对象属性
  • CurrencyNormal(整数) 玩家获得的普通货币金额。

  • CurrencyGold(整数) 玩家获得的金币金额。

  • Fame(整数) 授予的声望点数。

  • Skills(技能对象的数组) 玩家在此数组中的每个技能对象中获得技能经验。

  • TradeDeals(交易优惠对象的数组) 定义在对应 NPC 商店中的折扣或其他修改后的物品价格。

- 🕵🏻

6、技能对象

在奖励对象中的【Skills】数组内使用。

  • SkillName(字符串) 技能的名称(例如,“Cooking”、“Archery”等)。

  • Experience(整数) 授予该技能的经验值。

复制示例
{ "Skill": "Cooking",
  "Experience": 50
}
  • Skill(字符串) 必须是以下预定义技能名称之一:
英文中文
Archery射箭
Aviation航空
Awareness警觉
Boxing拳击
Camouflage伪装
Cooking烹饪
Demolition爆破
Driving驾驶
Endurance耐力
Engineering工程
Farming农业
Handgun手枪
Medical医疗
MeleeWeapons近战武器
Motorcycle摩托车
Rifles步枪
Running跑步
Sniping狙击
Stealth潜行
Survival生存
Tactics战术
Thievery盗窃
  • Experience(整数) 授予该技能的经验值。

- 🕵🏻

7、交易优惠对象

在奖励对象中的TradeDeals数组内使用。

复制示例
{
  "Item": "BP_Weapon_M9_C",
  "Price": 50,
  "Amount": 2,
  "AllowExcluded": false,
  "Fame": 10
}
  • Item(字符串) 游戏内物品的名称,与在 #SpawnItem 中使用的名称相同。

  • Price(整数,可选) 折扣(或更改后)的价格。省略则保持默认价格。

  • Amount(整数 ≥ 1,可选) 可用的折扣物品数量。

  • AllowExcluded(布尔值,可选) 如果设置为 true,则允许购买交易者通常不出售的物品。

  • Fame(整数 ≥ 0,可选) 购买物品所需的声望。省略则使用默认声望要求。

- 🕵🏻

8、条件对象

任务 JSON 对象中的Conditions数组包含一个或多个条件对象。每个条件可以是以下三种类型之一:消灭目标、获取物品或交互。

8.1、常见条件属性
复制示例
{
  "Type": "Elimination",
  "CanBeAutoCompleted": false,
  "TrackingCaption": "Eliminate 3 puppets",
  "SequenceIndex": 0,
  "LocationsShownOnMap": [
    {
      "Location": { "X": 0.0, "Y": 0.0, "Z": 0.0 },
      "SizeFactor": 1.0
    }
  ]
}
  • Type(字符串)

    • 必须是 “Elimination”(消灭目标)、“Fetch”(获取物品) 或 “Interaction”(交互)。
  • CanBeAutoCompleted(布尔值,默认:false)

    • 如果为 false,玩家必须返回给任务 NPC 才能完成此步骤。如果为 true,满足要求后会自动完成。
  • TrackingCaption(字符串,可选)

    • 用于描述此步骤在玩家日志或任务列表中的内容。
  • SequenceIndex(整数 ≥ 0)

    • 定义条件激活的顺序。
    • 至少一个条件必须有 SequenceIndex: 0。
    • 多个条件可以共享相同的索引,所有这些条件都必须完成,任务才会进入下一个索引。
  • LocationsShownOnMap(地图位置对象数组,可选)

    • 为此条件的位置在地图上绘制圆圈。

8.1.1、常地图位置对象
LocationsShownOnMap中的每个对象如下所示:
复制示例
{"Location": { "X": 1000.0, "Y": 2000.0, "Z": 30.0 },
  "SizeFactor": 1.0}

游戏中也可以使用 Ctrl+C 复制位置:

复制示例
{ "Location": "{X=-157607.328 Y=-687586.562 Z=667.976|P=353.113800 Y=101.191971 R=0.000000}",
    "SizeFactor": 1.0}
  • Location(位置)

    • 包含游戏世界中的 X、Y、Z 坐标
  • SizeFactor(缩放)(数字 > 0.0)

    • 绘制圆圈的缩放比例(1.0 表示直径约 300 米)

8.2、消灭目标条件

用于击杀要求:

复制示例
{
"Type": "Elimination",
  "TargetCharacters": [
    "Puppet",
    "Prisoner" ],
  "Amount": 5,
  "AllowedWeapons": [
    "BP_Weapon_M1911_C",
    "BP_Weapon_M9_C"]
}
  • TargetCharacters(目标角色数组)

    • 列出必须被消灭的对象。可以包含在 #SpawnZombie(例如,Puppet)或 #SpawnAnimal 中使用的生成名称。特殊占位符包括:
      • “Puppet”(匹配所有木偶)
      • “Prisoner”(匹配所有囚犯角色)
      • “Razor”、“Sentry”、“SentryOld” 等。
  • Amount(数量 ≥ 1)

    • 需要的击杀次数。
  • AllowedWeapons(武器数组,可选)

    • 如果存在,只有使用这些武器的击杀才会被计入。省略则允许使用任何武器。

8.3、获取物品条件

用于收集或交付物品:

复制示例
{
  "Type": "Fetch",
  "DisablePurchaseOfRequiredItems": false,
  "PlayerKeepsItems": false,
  "RequiredItems": [
    {
      "AcceptedItems": [ "BP_Apple_C" ],
      "RequiredNum": 3,
      "RandomAdditionalRequiredNum": 2,
      "MinAcceptedItemUses": 1,
      "MinAcceptedCookLevel": "Raw",
      "MaxAcceptedCookLevel": "Cooked",
      "MinAcceptedCookQuality": "Poor",
      "MinAcceptedItemMass": 100.0,
      "MinAcceptedItemHealth": 50.0,
      "MinAcceptedItemResourceRatio": 20.0,
      "MinAcceptedItemResourceAmount": 50.0
    }
  ]
}
  • DisablePurchaseOfRequiredItems(禁止购买所需物品)(布尔值)

    • 如果为 true,则在任务活跃期间,任何人无法购买 必需品 列表中的物品——仅在服务器启用了 阻止购买必需品 设置时相关。
  • PlayerKeepsItems(玩家保留物品)(布尔值)

    • 如果为 true,则任务完成后,物品不会从玩家的库存中移除。
  • RequiredItems(所需物品数组)(物品对象数组)

    • 每个物品对象指定必须收集的物品及其数量。

8.3.1、物品对象

每个所需物品的属性:

英文名称中文名称数值介绍
AcceptedItems可接受物品字符串数组       通过 #SpawnItem 识别的物品名称列表。
RequiredNum所需数量整数 ≥ 1必须收集的这些物品的数量。
RandomAdditionalRequiredNum随机额外所需数量整数 ≥ 1可选,可能需要的随机额外数量(最多为指定的数字)。
MinAcceptedItemUses最小可接受物品使用次数整数 ≥ 0可选,如果适用,物品必须至少有此使用次数。
MinAcceptedCookLevel / MaxAcceptedCookLevel最小/最大可接受烹饪等级字符串可选,食物允许的烹饪等级范围。有效等级:“生的”、“未煮熟的”、“煮熟的”、“过熟的”、“烧焦的”。
MinAcceptedCookQuality最小可接受烹饪质量字符串可选,最低可接受的烹饪质量:“糟糕的”、“差的”、“一般的”、“好的”、“优秀的”、“完美的”。
MinAcceptedItemMass最小可接受物品质量数字 ≥ 0.0可选,以克为单位,物品的质量必须至少为该值。
MinAcceptedItemHealth最小可接受物品健康度0.0 到 100.0 范围内的数字可选,所需的物品最低健康度百分比。
MinAcceptedItemResourceRatio最小可接受物品资源比例0.0 到 100.0 范围内的数字可选,用于含有液体的物品(例如,水瓶)。必须至少有该百分比的液体。
MinAcceptedItemResourceAmount最小可接受物品资源量       数字 ≥ 0.0可选,用于含有液体的物品。必须至少有该克数的液体。

8.4、交互条件

用于与放置在地图上的物体进行交互(例如,翻转开关、收集笔记等)

获取位置数据

在游戏中查看物体时使用#Quests GetMeshInfo来捕捉其网格名称、实例、变换等信息。它会将一个 JSON 片段复制到剪贴板,你可以直接将其粘贴到任务文件中。

复制示例
{ "Type": "Interaction",
  "Locations": [{
      "AnchorMesh": "/Game/World/SomeMap/BP_Switch.BP_Switch_C",
      "Instance": 4,
      "FallbackTransform": "X=123.456 Y=234.567 Z=10.0 Pitch=0 Yaw=0,Roll=0",
      "VisibleMesh": "/Game/World/SomeMap/BP_SwitchModel.BP_SwitchModel_C" },
    {
      "AnchorMesh": "/Game/World/SomeMap/BP_Door.BP_Door_C"
    }],
  "MinNeeded": 1,
  "MaxNeeded": 2,
  "SpawnOnlyNeeded": true,
  "WorldMarkerShowDistance": 50}
  • Locations(位置数组)(位置对象数组)

    • 每个位置对象定义世界中的一个物体放置点或交互点。
  • MinNeeded / MaxNeeded(最小/最大需要)(整数)

    • 随机确定玩家必须与指定位置对象中的多少个进行交互。例如,如果 MinNeeded = 1 且 MaxNeeded = 2,游戏将决定需要 1 次或 2 次交互。
  • SpawnOnlyNeeded(仅生成需要的)(布尔值)

    • 如果为 true,则仅生成随机确定数量的物体。如果为 false,则生成所有物体,但玩家只需与足够数量的物体交互以满足要求。
  • WorldMarkerShowDistance(世界标记显示距离)(整数 ≥ 0)

    • 标记在世界中可见的距离(以米为单位),引导玩家到达物体的确切位置。

8.4.1、位置对象
  • AnchorMesh(锚点网格)(字符串)

    • 识别地图上的游戏内对象。
  • Instance(实例)(整数,可选)

    • 如果相同网格的多个副本靠近在一起,则使用此属性进行区分。
  • FallbackTransform(备用变换)(字符串)

    • 如果 AnchorMesh 失败(例如,在沙盒模式下始终使用 FallbackTransform),则使用的位移/旋转数据。
  • VisibleMesh(可见网格)(字符串)

    • 要显示的 3D 模型。

- 🛰️

9、示例任务【将所有内容整合在一起】

下面是一个简单且完全详细的自定义任务 JSON 文件示例。将此文件保存为 MyFirstQuest.json(或任意名称)到 Override 文件夹中

复制示例
{
  "AssociatedNpc": "GeneralGoods",
  "Tier": 1,
  "Title": "General Goods trader's Special",
  "Description": "Collect apples for the General Goods trader and get a small reward.",
  "TimeLimitHours": 24.0,
  "RewardPool": [{
      "CurrencyNormal": 100,
      "Fame": 5,
      "Skills": [{
          "Skill": "Cooking",
          "Experience": 20}],
      "TradeDeals": [
        {
          "Item": "Pineapple",
          "Price": 50,
          "Amount": 1,
          "Fame": 0 } ] } ],
  "Conditions": [{
      "TrackingCaption": "Gather apples",
      "SequenceIndex": 0,
      "CanBeAutoCompleted": false,
      "Type": "Fetch",
      "DisablePurchaseOfRequiredItems": false,
      "PlayerKeepsItems": true,
      "RequiredItems": [{
          "AcceptedItems": [
            "Apple_2"],
          "RequiredNum": 3,
          "MinAcceptedItemHealth": 50.0}],
      "LocationsShownOnMap": [{
          "Location": {
            "X": 1000.0,
            "Y": 2000.0,
            "Z": 50.0},
          "SizeFactor": 1.0} ]}]}

说明
  • AssociatedNPC(关联 NPC)

    • 酒保将提供任务,交易优惠数组中的奖励适用于酒保的商店。
  • Tier(等级)

    • 等级 1 表示一个简单或低级的任务。
  • RewardPool(奖励池)

    • 玩家完成任务后将获得 100 普通货币、5 点声望、20 点烹饪经验,并可以折扣价购买 M9 手枪。
  • Conditions(条件)

    • 类型为获取。玩家必须带来 3 个苹果(AcceptedItems: BP_Apple_C),且苹果的健康度至少为 50%。
  • CanBeAutoCompleted(可自动完成)

    • 玩家必须返回酒保处(CanBeAutoCompleted: false)以最终完成任务。
  • PlayerKeepsItems(玩家保留物品)

    • PlayerKeepsItems 为 true,因此完成任务后玩家不会失去苹果。
  • 创建或修改此文件后,需要重启服务器或游戏才能使任务生效。


- 🙆🏻‍♂️

10、建议和最佳实践

  • 备份 JSON 文件:保留 JSON 文件的备份,以便在需要时恢复更改。
  • 验证 JSON:使用在线或本地 JSON 验证工具来防止格式错误。
  • 获取准确的放置数据:对于交互类型条件,使用 #Quests GetMeshInfo 获取准确的放置数据。
  • 在沙盒模式下测试任务:如果可能,在将任务添加到实时服务器环境之前,先在沙盒模式下进行测试。
  • 无法编辑默认任务:记住你无法编辑默认任务。你只能阻止它们或创建全新的任务。

- 💕

总结

通过遵循本指南,你应该能够在 SCUM 中创建、自定义和管理自己的任务。无论你是想阻止默认任务,添加具有独特条件的新任务,还是通过货币、声望、折扣或技能经验奖励玩家,上述提供的 JSON 结构涵盖了所有要点。

重要提示: 在对 JSON 文件进行更改后,务必重新启动服务器或游戏,以便你的自定义任务能够正确加载。

享受使用自定义任务打造独特的 SCUM 体验吧!


⩥ 编译:白木『QQ:2819066121』

🥳 校对名单:...招募校对、维护伙伴...有兴趣可联系白木❤️

♥内容原创归属:SAM • 游戏社区

⩥⩥ 「 鸣谢列表

© 2025 SAM社区 - 白木 公益性创建