Skip to content

任务值参考表

<NolebasePageProperties />

为对任务创建或修改感兴趣的模组作者提供的参考页面。


本页面包含任务创建或修改过程中使用的各种数值。请使用快捷链接在不同区域之间跳转。

更新于 3 月 11 日


一般信息

下方列出了所有与任务相关的常规信息,包括原版商人ID、地点信息和ID、任务类型和属性。您还会找到一个直接取自BSG的示例任务。

实用链接

物品查找器
原版任务数据
机器人类型及名称参考表
交易者ID
位置ID

技能名称

下面列出了 EFT 目前使用或以前使用过的所有技能名称。

游戏中已移除一些数值,但为了便于更新模组或修改 SPT 的先前版本,仍在此处列出。

技能名称价值有效性
藏身处管理"HideoutManagement"有效的
制作"Crafting"有效的
代谢"Metabolism"有效的
免疫"Immunity"有效的
耐力"Endurance"有效的
力量"Strength"有效的
活力"Vitality"有效的
健康"Health"有效的
抗压性"StressResistance"有效的
投掷"Throwing"有效的
转换运动"CovertMovement"有效的
洞察力"Perception"有效的
智力"Intellect"有效的
注意力"Attention"有效的
魅力"Charisma"有效的
近战"Melee"有效的
外科手术"Surgery"有效的
瞄准练习"AimDrills"有效的
故障排除"TroubleShooting"有效的
急救"FirstAid"有效的
轻型背心"LightVests"有效的
重型背心"HeavyVests"有效的
武器治疗"WeaponTreatment"有效的
磁力钻"MagDrills"有效的
狙击手"Sniper"有效的
手枪"Pistol"有效的
左轮手枪"Revolver"有效的
冲锋枪"SMG"有效的
突击步枪"Assault"有效的
霰弹枪"Shotgun"有效的
轻机枪"LMG"有效的
DMR"DMR"有效的

任务类型

任务类型是必需的,将在玩家的任务列表以及商人的任务页面上以特定方式显示。

所有任务都必须有类型。
任务类型将显示在玩家客户端的任务列表中,并带有任务名称和 BSG 图标。
任务类型不必与任务条件完全一致,但为了方便玩家理解,建议尽量与任务条件一致。

我在下方的有效类型表中添加了典型的任务用法。**您不必完全遵循这些建议,它们只是 BSG 任务中的常见用法。**您可以根据任务本身的
需要对任务类型进行任何设置,但条件必须与相应的条件类型完全匹配。

TypeTypical Quest Usage
PickUpFind/Handover
EliminationKill
DiscoverLeaveItemAtLocation
CompletionMulti Conditional
ExplorationVisitPlace
LevellingPrestige/Achievement/Level (Unused)
ExperienceExperience (Unused)
StandingTraderLoyalty
LoyaltyBranching quests (Like choosing one trader or another)
MerchantHanding money over to a trader
SkillSkill Requirements
MultiMulti Conditional
WeaponAssemblyWeaponAssembly
ArenaWinMatchUnused - Untested if works in SPT
ArenaWinRoundUnused - Untested if works in SPT

任务状态

任务状态在团队副本期间和非团队副本期间均由条件计数器自动设置。它们也可用于“可开始”要求。

所有任务都会有状态。该状态存储在用户个人资料的json文件中。

StatusValueDescription
Locked0Quest is locked and not available to the player
AvailableForStart1Quest is available to player
Started2Quest is available to the player, and they have accepted it
AvailableForFinish3Quest is available to the player, they have accepted it, and it is ready to turn in
Success4Quest has been completed by the player
Fail5Player has failed the quest and it is not marked restartable
FailRestartable6Player has failed the quest, and can restart it
MarkedAsFailed7Quest has been marked to fail but did not flip to status 5 or 6 yet
Expired8Quest has expired
AvailableAfter9Quest is available, but is delayed from being shown to the player

特性

下表列出了目前已知的所有任务属性。

虽然并非所有属性都是_必需的_,但最好拥有每一个属性,无论你是否使用它。

Property NameRequired?Example ValueType
QuestNameYes"Building Our First Quest!"string
_idYes"68423056128053531e5a5bf6"MongoID string
acceptPlayerMessageNo"68423056128053531e5a5bf6 acceptPlayerMessage"string
acceptanceAndFinishingSourceNo"eft"string
arenaLocationsNo[]array
canShowNotificationsInGameYestrueboolean
changeQuestMessageTextNo"68423056128053531e5a5bf6 changeQuestMessageText"string
completePlayerMessageNo"68423056128053531e5a5bf6 completePlayerMessage"string
conditionsYesobject (AvailableForFinish/AvailableForStart/Fail)
declinePlayerMessageNo"68423056128053531e5a5bf6 declinePlayerMessage"string
descriptionNo"68423056128053531e5a5bf6 description"string
failMessageTextNo"68423056128053531e5a5bf6 failMessageText"string
gameModesNo[]array
imageNo"/files/quest/icon/quest_icon.png"string
instantCompleteNofalseboolean
isKeyNofalseboolean
locationYes"5704e4dad2720bb55b8b4567"MongoID string (Location IDs)
nameYes"68423056128053531e5a5bf6 name"string
noteNo"68423056128053531e5a5bf6 note"string
progressSourceNo"eft"string
rankingModesNo[]array
restartableYesfalseboolean
rewardsNoobject (Rewards)
secretQuestNofalseboolean
sideYes"Pmc"string
startedMessageTextNo"68423056128053531e5a5bf6 name"string
successMessageTextNo"68423056128053531e5a5bf6 name"string
traderIdYes"54cb50c76803fa8b248b4571"MongoID string (Trader IDs)
typeYes"Skill"string (Quest Type Table)

任务结构

以下是 BSG 创建的一个任务示例。

以下信息可在阅读任务结构时找到。还有更多信息可供挖掘,我不会在此一一列举。您可以自行阅读下方实际的任务数据,看看能发现什么!

  • 任务名称为“首秀”
  • 任务 ID 为 5936d90786f7742b1420ba5b。
    • 如您所见,此 ID 也用于各种区域设置字符串中,例如“ acceptPlayerMessage ”。
  • 当子任务完成时,任务会在游戏内显示通知,这表示“ canShowNotificationsInGame ”为真。
  • 该任务为“淘汰”任务,因此玩家任务列表中会显示骷髅头图标并标注“淘汰”字样。
  • 击杀目标必须是非私人军事承包商(PMC)成员。
    • Boss 和 Scav 被归类为“野蛮人”,但角色没有明确定义,因此任何非 PMC 玩家都是有效的攻击目标。
    • 所需击杀数为 5。
  • 需要上交的物品是“MP-133 12ga 泵动式霰弹枪”,目标编号为“ 54491c4f4bdc2db1078b4568 ”。
    • 这些霰弹枪不需要是 FIR 型,因为“ onlyFoundInRaid ”显示为 false。
  • 该任务在 1 级时解锁,但玩家还必须完成任务 ID “ 657315df034d76585f032e01 ”。
    • 所需的任务 ID 是名为“射击罐子”的任务。
  • 完成此任务可获得经验值、商人声望、物品(包括自制武器)以及普拉波尔的商人商品种类解锁。
json
{
  "5936d90786f7742b1420ba5b": {
    "QuestName": "Debut",
    "_id": "5936d90786f7742b1420ba5b",
    "acceptPlayerMessage": "5936d90786f7742b1420ba5b acceptPlayerMessage",
    "acceptanceAndFinishingSource": "eft",
    "arenaLocations": [],
    "canShowNotificationsInGame": true,
    "changeQuestMessageText": "5936d90786f7742b1420ba5b changeQuestMessageText",
    "completePlayerMessage": "5936d90786f7742b1420ba5b completePlayerMessage",
    "conditions": {
      "AvailableForFinish": [
        {
          "completeInSeconds": 0,
          "conditionType": "CounterCreator",
          "counter": {
            "conditions": [
              {
                "bodyPart": [],
                "compareMethod": ">=",
                "conditionType": "Kills",
                "daytime": {
                  "from": 0,
                  "to": 0
                },
                "distance": {
                  "compareMethod": ">=",
                  "value": 0
                },
                "dynamicLocale": false,
                "enemyEquipmentExclusive": [],
                "enemyEquipmentInclusive": [],
                "enemyHealthEffects": [],
                "id": "5967379786f774620e763ea8",
                "resetOnSessionEnd": false,
                "savageRole": [],
                "target": "Savage",
                "value": 1,
                "weapon": [],
                "weaponCaliber": [],
                "weaponModsExclusive": [],
                "weaponModsInclusive": []
              }
            ],
            "id": "5967379186f77463860dadd5"
          },
          "doNotResetIfCounterCompleted": false,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "5967379186f77463860dadd6",
          "index": 0,
          "isNecessary": false,
          "isResetOnConditionFailed": false,
          "oneSessionOnly": false,
          "parentId": "",
          "type": "Elimination",
          "value": 5,
          "visibilityConditions": []
        },
        {
          "conditionType": "HandoverItem",
          "dogtagLevel": 0,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "596737cb86f77463a8115efd",
          "index": 3,
          "isEncoded": false,
          "maxDurability": 100,
          "minDurability": 0,
          "onlyFoundInRaid": false,
          "parentId": "",
          "target": [
            "54491c4f4bdc2db1078b4568"
          ],
          "value": 2,
          "visibilityConditions": []
        }
      ],
      "AvailableForStart": [
        {
          "compareMethod": ">=",
          "conditionType": "Level",
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "658471a72957dfa0e01552d1",
          "index": 0,
          "parentId": "",
          "value": 1,
          "visibilityConditions": []
        },
        {
          "availableAfter": 0,
          "conditionType": "Quest",
          "dispersion": 0,
          "dynamicLocale": false,
          "globalQuestCounterId": "",
          "id": "658471a35740d10d154dac8f",
          "index": 1,
          "parentId": "",
          "status": [
            4,
            5
          ],
          "target": "657315df034d76585f032e01",
          "visibilityConditions": []
        }
      ],
      "Fail": []
    },
    "declinePlayerMessage": "5936d90786f7742b1420ba5b declinePlayerMessage",
    "description": "5936d90786f7742b1420ba5b description",
    "failMessageText": "5936d90786f7742b1420ba5b failMessageText",
    "gameModes": [],
    "image": "/files/quest/icon/596b465486f77457ca186188.jpg",
    "instantComplete": false,
    "isKey": false,
    "location": "any",
    "name": "5936d90786f7742b1420ba5b name",
    "note": "5936d90786f7742b1420ba5b note",
    "progressSource": "eft",
    "rankingModes": [],
    "restartable": false,
    "rewards": {
      "Fail": [],
      "Started": [],
      "Success": [
        {
          "availableInGameEditions": [],
          "id": "5fe305df8a67d12f5f24c8aa",
          "index": 0,
          "type": "Experience",
          "unknown": false,
          "value": 1700
        },
        {
          "availableInGameEditions": [],
          "id": "60c89c0c80b2027f403dd992",
          "index": 0,
          "target": "54cb50c76803fa8b248b4571",
          "type": "TraderStanding",
          "unknown": false,
          "value": 0.02
        },
        {
          "availableInGameEditions": [],
          "findInRaid": false,
          "id": "5fe305d9c646836c3b6fc562",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2d7",
              "_tpl": "5449016a4bdc2d6f028b456f",
              "upd": {
                "StackObjectsCount": 15000
              }
            }
          ],
          "target": "67d82e6e4f4b5340e611a2d7",
          "type": "Item",
          "unknown": false,
          "value": 15000
        },
        {
          "availableInGameEditions": [],
          "findInRaid": true,
          "id": "60cb4643f09d61072d6cf21a",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2d8",
              "_tpl": "57d14d2524597714373db789",
              "upd": {
                "StackObjectsCount": 1
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2d9",
              "_tpl": "57d152ec245977144076ccdf",
              "parentId": "67d82e6e4f4b5340e611a2d8",
              "slotId": "mod_pistol_grip"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2da",
              "_tpl": "57d1519e24597714373db79d",
              "parentId": "67d82e6e4f4b5340e611a2d8",
              "slotId": "mod_magazine"
            }
          ],
          "target": "67d82e6e4f4b5340e611a2d8",
          "type": "Item",
          "unknown": false,
          "value": 1
        },
        {
          "availableInGameEditions": [],
          "findInRaid": true,
          "id": "60cb467f7c496e588343a193",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2dd",
              "_tpl": "65702606cfc010a0f5006a3e",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 1
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2de",
              "_tpl": "573718ba2459775a75491131",
              "parentId": "67d82e6e4f4b5340e611a2dd",
              "slotId": "cartridges",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 50
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2df",
              "_tpl": "65702606cfc010a0f5006a3e",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 1
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e0",
              "_tpl": "573718ba2459775a75491131",
              "parentId": "67d82e6e4f4b5340e611a2df",
              "slotId": "cartridges",
              "upd": {
                "SpawnedInSession": true,
                "StackObjectsCount": 50
              }
            }
          ],
          "target": "67d82e6e4f4b5340e611a2df",
          "type": "Item",
          "unknown": false,
          "value": 2
        },
        {
          "availableInGameEditions": [],
          "id": "5ac64f3786f774056634a1cb",
          "index": 0,
          "items": [
            {
              "_id": "67d82e6e4f4b5340e611a2e1",
              "_tpl": "5839a40f24597726f856b511",
              "upd": {
                "FireMode": {
                  "FireMode": "single"
                },
                "Foldable": {
                  "Folded": false
                }
              }
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e2",
              "_tpl": "5649ad3f4bdc2df8348b4585",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_pistol_grip"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e3",
              "_tpl": "57dc347d245977596754e7a1",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_stock"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e4",
              "_tpl": "564ca99c4bdc2d16268b4589",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_magazine"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e5",
              "_tpl": "57ffb0e42459777d047111c5",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_muzzle"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e6",
              "_tpl": "5839a7742459773cf9693481",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_reciever"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e7",
              "_tpl": "59d36a0086f7747e673f3946",
              "parentId": "67d82e6e4f4b5340e611a2e1",
              "slotId": "mod_gas_block"
            },
            {
              "_id": "67d82e6e4f4b5340e611a2e8",
              "_tpl": "57dc32dc245977596d4ef3d3",
              "parentId": "67d82e6e4f4b5340e611a2e7",
              "slotId": "mod_handguard"
            }
          ],
          "loyaltyLevel": 1,
          "target": "67d82e6e4f4b5340e611a2e1",
          "traderId": "54cb50c76803fa8b248b4571",
          "type": "AssortmentUnlock",
          "unknown": false
        },
        {
          "availableInGameEditions": [],
          "id": "629f016390948017ee17bb3b",
          "index": 0,
          "target": "5c0647fdd443bc2504c2d371",
          "type": "TraderStanding",
          "unknown": false,
          "value": 0.01
        }
      ]
    },
    "secretQuest": false,
    "side": "Pmc",
    "startedMessageText": "5936d90786f7742b1420ba5b startedMessageText",
    "status": 0,
    "successMessageText": "5936d90786f7742b1420ba5b successMessageText",
    "traderId": "54cb50c76803fa8b248b4571",
    "type": "Elimination"
  }

能见度条件


可见性条件是SPT任务创建中的一项高级功能。大多数模组作者不会使用这些值,但它们非常有用。

可见性条件的使用场景是,如果您希望玩家在完成特定条件之前看不到任务,那么您可以在任务中设置一些任务。您可以使用这些条件来“惊喜”玩家,让他们在任务列表中看到一些额外的任务,这些任务只有在玩家准备好接受它们之后才会出现。

隐藏在可见性条件中的条件,在玩家看到之前不会跟踪或计算任何值。

例如,《太空堡垒卡拉狄加》中的“背景调查”任务就是一个例子。

这个任务有两个**“寻找物品”条件和一个“交出物品”条件。我们实际上并不关心其中一个“寻找物品”条件,因此示例中不会包含它。“交出物品**
” 条件只有在玩家完成找到“挂在链子上的青铜怀表”的条件后才会出现在玩家的任务列表中。

如下面的示例所示,HandoverItem条件有一个visibilityCondition。此条件要求“conditionType”为**“CompleteCondition”**,这意味着目标必须先完成,HandoverItem条件才会对玩家可见。

conditionType必须为“CompleteCondition”。id 必须是可见性数组条目本身的唯一 ID。target 是条件 ID ,您需要先完成该条件,然后该条件本身才会可见。

您可以为一项任务设置多个可见条件,本例中只有一个条件必须满足才能使交接物品可见。如果您需要查看包含多个条件的任务示例,请参阅“原版任务数据 ->实用链接”中的“战争之血 - 第三部分”。

您可以为一项任务设置多个可见条件,本例中只有一个条件必须满足才能使交接物品可见。如果您需要查看包含多个条件的任务示例,请参阅“原版任务数据 ->实用链接”中的“战争之血 - 第三部分”。

json
{
  "conditionType": "FindItem",
  "countInRaid": false,
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5968ec9986f7741ddd6c1012",
  "index": 0,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "target": [
    "5937fd0086f7742bf33fc198"
  ],
  "value": 1,
  "visibilityConditions": []
},
{
  "conditionType": "HandoverItem",
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5967920f86f77468d219d632",
  "index": 1,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "target": [
    "5937fd0086f7742bf33fc198"
  ],
  "value": 1,
  "visibilityConditions": [
    {
      "conditionType": "CompleteCondition",
      "id": "5a5778c986f7740ad83cd652",
      "target": "5968ec9986f7741ddd6c1012"
    }
  ]
}

适用于成品条件

交接物品

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
conditionType"HandoverItem"stringHandoverItem condition
dogtagLevel0intRequired if handing over DogTag
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
inEncodedfalsebooleanRequired if requiring DSP Transmitter handover
maxDurability100intRequired for medical items, weapons, armour, etc
minDurability0intRequired for medical items, weapons, armour, etc
onlyFoundInRaidfalsebooleanIf item is required to be FIR or not
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
target["54491c4f4bdc2db1078b4568"]MongoID string arrayItemID that is to be handed over, you can have multiple items in the array for multiple choice. If wanting a dogtag handed over, it will only be the specified ID - if you want all of them to be accepted you will need to populate the array for every ID for dogtags.
value2intAmount of items in target that are required to be handed over to complete subtask
visibilityConditions[]arraysee Visibility Conditions for example usage

例子:

json
{
  "conditionType": "HandoverItem",
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "596737cb86f77463a8115efd",
  "index": 3,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "target": [
    "54491c4f4bdc2db1078b4568"
  ],
  "value": 2,
  "visibilityConditions": []
}

查找项目

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
conditionType"FindItem"stringHandoverItem condition
countInRaidfalsebooleanCurrently unused, should always be false
dogtagLevel0intRequired if finding DogTag of specific level
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
inEncodedfalsebooleanRequired if requiring DSP Transmitter handover
maxDurability100intRequired for medical items, weapons, armour, etc
minDurability0intRequired for medical items, weapons, armour, etc
onlyFoundInRaidfalsebooleanIf item is required to be FIR or not
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
target["54491c4f4bdc2db1078b4568"]MongoID string arrayItemID that is to be found, you can have multiple items in the array for multiple choice. If wanting a dogtag handed over, it will only count the specified IDs - if you want all of them to be accepted you will need to populate the array for every ID for dogtags.
value2intAmount of items in target that are required to be found to complete subtask
visibilityConditions[]arraysee Visibility Conditions for example usage

例子:

json
{
  "conditionType": "FindItem",
  "countInRaid": false,
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5ac502a786f7740bde1b000c",
  "index": 0,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": true,
  "parentId": "",
  "target": [
    "59e36c6f86f774176c10a2a7"
  ],
  "value": 2,
  "visibilityConditions": []
}

技能要求

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
compareMethod">="stringMethod to compare player skill to required skill (example shows player must have higher than or equal to the example value)
conditionType"Skill"stringHandoverItem condition
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
target"Charisma"stringSkill name that the condition targets - see Skill Table
value10intAmount of items in target that are required to be found to complete subtask
visibilityConditions[]arraysee Visibility Conditions for example usage

例子:

json
{
  "compareMethod": ">=",
  "conditionType": "Skill",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5ae9c29386f77427153c7fb0",
  "index": 0,
  "parentId": "",
  "target": "Charisma",
  "value": 10,
  "visibilityConditions": []
}

将物品留在指定地点

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

这种任务类型与放置信标不同。它们在游戏中的行为也不同。放置信标是永久性的,可以被移除/摧毁,并且会影响玩家的游戏进度。而放置物品后,物品会立即消失。

Property NameExample ValueTypeNotes
conditionType"LeaveItemAtLocation"stringLeaveItemAtLocation condition
dogtagLevel0intRequired if finding DogTag of specific level
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
inEncodedfalsebooleanRequired if requiring DSP Transmitter handover
maxDurability100intRequired for medical items, weapons, armour, etc
minDurability0intRequired for medical items, weapons, armour, etc
onlyFoundInRaidfalsebooleanIf item to be placed is required to be FIR or not
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
plantTime30intTime in seconds that it takes the player to “place” the item
target["54491c4f4bdc2db1078b4568"]MongoID string arrayItemID that is to be placed, you can have multiple items in the array for multiple choice. If wanting a dogtag to be placed, it will only count the specified IDs - if you want all of them to be acceptable you will need to populate the array for every ID for dogtags.
value2intAmount of items in target that are required to be found to complete subtask
visibilityConditions[]arraysee Visibility Conditions for example usage
zoneId"ter_017_area_1"stringThis value is required and must match the placeitem zone that you have created (or use a vanilla zone ID). This zone indicates where the item must be placed. For zone creation, you may consider using the mod VCQL by Virtual.

例子:

json
{
  "conditionType": "LeaveItemAtLocation",
  "dogtagLevel": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5a687a1c86f7745f2152168c",
  "index": 2,
  "isEncoded": false,
  "maxDurability": 100,
  "minDurability": 0,
  "onlyFoundInRaid": false,
  "parentId": "",
  "plantTime": 30,
  "target": [
    "590c5a7286f7747884343aea"
  ],
  "value": 3,
  "visibilityConditions": [],
  "zoneId": "ter_017_area_1"
}

放置信标

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

这种任务类型与“放置物品”任务不同。它们在游戏中的行为也不同。“信标”任务是永久性的,可以被移除/摧毁,并且会影响玩家的游戏进度。“放置物品”任务完成后,物品会在放置后立即消失。

Property NameExample ValueTypeNotes
conditionType"PlaceBeacon"stringPlaceBeacon condition
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
plantTime30intTime in seconds that it takes the player to “place” the item
target["5991b51486f77447b112d44f"]MongoID string arrayYou should only use the ID for the MS2000 Marker (5991b51486f77447b112d44f) or the Radio Repeater (63a0b2eabea67a6d93009e52). Since the item persists after placing, I believe these two IDs are the only ones currently used for this quest type.
value1intAmount of beacons that must be placed to complete the task.
visibilityConditions[]arraysee Visibility Conditions for example usage
zoneId"gazel"stringThis value is required and must match the placeitem zone that you have created (or use a vanilla zone ID). This zone indicates where the item must be placed. For zone creation, you may consider using the mod VCQL by Virtual.

例子:

json
{
  "conditionType": "PlaceBeacon",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5998366886f77455853b2d9f",
  "index": 1,
  "parentId": "",
  "plantTime": 30,
  "target": [
    "5991b51486f77447b112d44f"
  ],
  "value": 1,
  "visibilityConditions": [],
  "zoneId": "gazel"
}

参观地点

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

请注意,此类任务结构实际上位于“反制创造者”条件内。
“反制创造者”条件包含各种条件类型,必须用于此类条件类型。

Property NameExample ValueTypeNotes
conditionType"VisitPlace"stringVisitPlace condition
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
target"place_peacemaker_001"stringThis value is required and must match the visit zone that you have created (or use a vanilla zone ID). This zone indicates where the player must visit. For zone creation, you may consider using the mod VCQL by Virtual.
value1intThis is always 1. The actual value of how many times you must complete the “VisitPlace” condition is the value property on the CounterCreator itself, and not the one within the VisitPlace condition.

例子:

json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "VisitPlace",
        "dynamicLocale": false,
        "id": "5a3ba1c286f7742c9d4f5d49",
        "target": "place_peacemaker_001",
        "value": 1
      }
    ],
    "id": "5a3ba11786f7742c9d4f5d28"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5a3ba11786f7742c9d4f5d29",
  "index": 1,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Exploration",
  "value": 1,
  "visibilityConditions": []
}

武器组装

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

这类任务条件是最难正确设置的。比较方法很容易出错,或者使用了无效值。
在构建这些任务时,务必反复检查两遍、三遍甚至四遍。一定要测试它们。

Property NameExample ValueTypeChild Property NameChild Example ValueChild TypeNotes
conditionType"WeaponAssembly"stringWeaponAssembly condition
id"5accd5e386f77463027e9397"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
dynamicLocale""stringCurrently unused
globalQuestCounterId""stringCurrently unused
containsItems["5aa66be6e5b5b0214e506e97"]MongoID string arrayList of ItemIDs in an array that the weapon must have attached
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
baseAccuracy-objectcompareMethod>=stringWeapon MOA Requirements
value0int
durability-objectcompareMethod>=stringCurrent durability requirements
value60int
effectiveDistance-objectcompareMethod>=stringSighting Range requirements
value60int
emptyTacticalSlot-objectcompareMethod>=stringHow many empty tactical slots are required
value60int
ergonomics-objectcompareMethod>=stringErgonomics requirements
value60int
hasItemFromCategory["55818b164bdc2ddc698b456c"]MongoID string arrayList of Item Category IDs that the weapon must have attached
height-objectcompareMethod<=stringNumber of vertical grid cells the weapon must have in the stash
value2int
magazineCapacity-objectcompareMethod<=stringRequirements for size of the attached magazine
value50int
muzzleVelocity-objectcompareMethod>=stringVelocity Requirements (Velocity * SpeedFactor)
value0int
recoil-objectcompareMethod<=stringSum of Horizontal & Vertical recoil is the value to compare
value300int
target["5bfea6e90db834001b7347f3"]MongoID string arrayThe ItemID of the weapon to be built
value1intThe number of weapons that must be built and handed over that match the requirements (untested over 1)
visibilityConditions[]arraysee Visibility Conditions for example usage
weight-objectcompareMethod<=stringWeapon must match the comparison of the value to be valid
value4.5float
width-objectcompareMethod<=stringNumber of horizontal grid cells the weapon must have in the stash
value8int

例子:

json
{
  "baseAccuracy": {
    "compareMethod": ">=",
    "value": 0
  },
  "conditionType": "WeaponAssembly",
  "containsItems": [],
  "durability": {
    "compareMethod": ">=",
    "value": 60
  },
  "dynamicLocale": false,
  "effectiveDistance": {
    "compareMethod": ">=",
    "value": 0
  },
  "emptyTacticalSlot": {
    "compareMethod": ">=",
    "value": 0
  },
  "ergonomics": {
    "compareMethod": ">=",
    "value": 47
  },
  "globalQuestCounterId": "",
  "hasItemFromCategory": [
    "55818b164bdc2ddc698b456c"
  ],
  "height": {
    "compareMethod": "<=",
    "value": 1
  },
  "id": "5accd5e386f77463027e9397",
  "index": 0,
  "magazineCapacity": {
    "compareMethod": ">=",
    "value": 5
  },
  "muzzleVelocity": {
    "compareMethod": ">=",
    "value": 0
  },
  "parentId": "",
  "recoil": {
    "compareMethod": "<=",
    "value": 850
  },
  "target": [
    "54491c4f4bdc2db1078b4568"
  ],
  "value": 1,
  "visibilityConditions": [],
  "weight": {
    "compareMethod": ">=",
    "value": 0
  },
  "width": {
    "compareMethod": "<=",
    "value": 4
  }
}

杀戮

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

请注意,此类型的任务结构实际上位于“反制创造者”条件内。
“反制创造者”条件包含各种条件类型,并且必须用于此条件类型。
请参阅“反制创造者” 。

Property NameExample ValueTypeNotes
bodyPart["Head"]string arrayIf populated, requires specific kill shots to count. See Body Part Values
compareMethod">="stringCompare method, there’s really no reason to use anything other than ">="
conditionType"Kills"stringKills condition
daytimesee example belowobjectIn game hour requirement, not required - if either value is not 0 then it is enforced for the kill to count (typically used for night raids). Leave from & to both at 0 to not have a time requirement
distancesee example belowobjectDistance requirement, not required - if either value is not 0 then it is enforced for the kill to count (typically used for night raids). Set compareMethod to ">=" & value to 0 to not have a distance requirement. Value is distance in meters.
dynamicLocalefalsebooleanCurrently unused
enemyEquipmentExclusive[]booleanIf populated, requires specific equipment to not be worn by enemy when killed (Not Used by BSG, untested)
enemyEquipmentInclusive[]booleanIf populated, requires specific equipment to be worn by enemy when killed (Not Used by BSG, untested)
enemyHealthEffects[]booleanIf populated, requires specific health ailments to be active on enemy when killed (Not Used by BSG, untested)
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
resetOnSessionEndfalsebooleanWhether the condition resets to 0 if not completed by session end (Exfil/death/etc) - In otherwords, the kill condition must be completed in 1 raid or it resets if true
savageRole[]string arrayIf specified, then the kill will only count if the player kills that specific bot type. See Bot Type & Name Reference Sheet
target"AnyPmc"stringMust be "AnyPmc""Savage", or "Any". See Bot Type & Name Reference Sheet for clarification on what is a Savage or Pmc. Specifying "Any" will count any kill no matter what.
value1intThis is always 1. The actual value of how many kills you must achieve to complete the condition is the value property on the CounterCreator itself, and not the one within the Kills condition.
weapon[]string arrayArray of weapons that must make the killing blow to count towards the condition. Can be empty.
weaponCaliber[]string arrayUnused
weaponModsExclusive[]string arrayArray of weapon attachments - if the killing weapon has any of these attachments then the kill will not count.
weaponModsInclusive[]string arrayArray of weapon attachments - the killing weapon must have these attachments to be counted.

例子:

json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "bodyPart": [],
        "compareMethod": ">=",
        "conditionType": "Kills",
        "daytime": {
          "from": 22,
          "to": 7
        },
        "distance": {
          "compareMethod": ">=",
          "value": 20
        },
        "dynamicLocale": false,
        "enemyEquipmentExclusive": [],
        "enemyEquipmentInclusive": [],
        "enemyHealthEffects": [],
        "id": "5edab65ececc0069284c0ec3",
        "resetOnSessionEnd": false,
        "savageRole": [
          "bossSanitar"
        ],
        "target": "Savage",
        "value": 1,
        "weapon": [],
        "weaponCaliber": [],
        "weaponModsExclusive": [],
        "weaponModsInclusive": []
      }
    ],
    "id": "5edab5a6cecc0069284c0ec1"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5edab5a6cecc0069284c0ec2",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Elimination",
  "value": 1,
  "visibilityConditions": []
}

退出状态

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

请注意,此类任务结构实际上位于“反制创造者”条件内。
“反制创造者”条件包含各种条件类型,必须用于此类条件类型。

在“计数器创建器”中,可以将“撤离状态”条件与“撤离名称”条件结合使用,以要求玩家必须执行特定的撤离操作才能计入统计。请参见示例。

Property NameExample ValueTypeNotes
conditionType"ExitStatus"stringExitStatus condition
dynamicLocalefalsebooleanCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
status["Survived", "Transit", "Runner"]string arrayDepending on what you populate in the array, those are the available exfil statuses that can complete the condition. If you specify the example to the left and the player is killed, the counter remains at 0, because you did not specify “Killed” as a status. If they Transit, they will complete this condition. For valid statuses, see below table.
Status NameRequirements
“Survived”Player earned 200+ XP or spent at least 7 minutes in raid, and successfully exfilled - not transit.
“Killed”Player dies in raid.
“Left”Player left raid. (Does not apply in SPT)
“Runner”Player exfilled before 7 minutes in raid and did not earn at least 200 XP.
“MissingInAction”Player did not exfil or transit prior to raid time expiring.
“Transit”Player activated a transit and moved to another map.
例子:
json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "669fb170617a3971bb525b2a",
        "status": [
          "Survived",
          "Transit"
        ]
      },
      {
        "conditionType": "ExitName",
        "dynamicLocale": false,
        "exitName": "Gate_o",
        "id": "66c0a86de55c52cd17921935"
      }
    ],
    "id": "669fb12ec1fbcb64b49837ab"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "669fb12eb01ceef19a5b4ebc",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 1,
  "visibilityConditions": []
}

出口名称

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

请注意,此类任务结构实际上位于“反制创造者”条件内。
“反制创造者”条件包含各种条件类型,必须用于此类条件类型。

在“计数器创建器”中,可以将“出口名称”条件与“出口状态”条件结合使用,从而要求玩家必须处于特定的撤离状态才能计入统计。请参见示例。

Property NameExample ValueTypeNotes
conditionType"ExitName"stringExitStatus condition
dynamicLocalefalsebooleanCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
exitName"EXFIL_Train"stringName of the exfil that the player must take to complete the condition. For valid exfil names, see SPT Location Data on the GitHub, and view the allExtracts.json for the location you are interested in requiring players to exfil from.
例子:
json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "669fb170617a3971bb525b2a",
        "status": [
          "Survived",
          "Runner",
          "Transit"
        ]
      },
      {
        "conditionType": "ExitName",
        "dynamicLocale": false,
        "exitName": "Gate_o",
        "id": "66c0a86de55c52cd17921935"
      }
    ],
    "id": "669fb12ec1fbcb64b49837ab"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "669fb12eb01ceef19a5b4ebc",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 1,
  "visibilityConditions": []
}

交易者忠诚度

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
compareMethod">="stringCompare method, no reason to really change this unless you want to require them to be lower loyalty levels, which may cause the player to be unable to complete this
conditionType"TraderLoyalty"stringTraderLoyalty condition
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
target"54cb50c76803fa8b248b4571"MongoID stringTrader ID for the value requirement of the loyalty level. See Trader IDs
value3floatLoyalty Level required for the player to compare against using the compareMethod
visibilityConditions[]arraysee Visibility Conditions for example usage

例子:

json
{
  "compareMethod": ">=",
  "conditionType": "TraderLoyalty",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5dbadfd186f77449467d1482",
  "index": 0,
  "parentId": "",
  "target": "54cb50c76803fa8b248b4571",
  "value": 3,
  "visibilityConditions": []
}

地点要求

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

请注意,此类任务结构实际上位于“反制条件”内。
“反制条件”包含多种条件类型,必须用于此类条件。
您需要将此条件与其他条件配对,这要求“反制条件”内的其他条件CounterCreator已在指定地图上完成。

Property NameExample ValueTypeNotes
conditionType"Location"stringLocation condition
dynamicLocalefalsebooleanCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
target["Interchange"]string arrayUse Target Name data for the locations - see Location Information

例子:

json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "5a577b4186f7743e797f6f04",
        "status": [
          "Survived",
          "Runner"
        ]
      },
      {
        "conditionType": "Location",
        "dynamicLocale": false,
        "id": "5bf5393d86f77458f17c1993",
        "target": [
          "factory4_day",
          "factory4_night"
        ]
      }
    ],
    "id": "5977784486f774285402cf51"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5977784486f774285402cf52",
  "index": 2,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 1,
  "visibilityConditions": [
    {
      "conditionType": "CompleteCondition",
      "id": "5a5779e486f774411f6c321f",
      "target": "59674fe586f7744f4e358aa2"
    }
  ]
}

计数器创建者

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

条件生成器用于将多个条件组合到任务的单个任务中,或者单独使用,只要是必需的条件即可。强烈建议您事先阅读相关文档,了解您要创建的条件类型。

不要害怕尝试各种计数生成器中的条件,以了解它的工作原理以及如何利用它来创建其他人(包括 BSG!)可能没有想到的独特任务。

下面列举了两种截然不同的此类应用场景。

许多任务条件都嵌套在计数器生成器中。要了解它们在计数器生成器中的具体行为,请阅读相应条件类型的章节。

Property NameExample ValueTypeNotes
completeInSeconds0intCurrently unused
conditionType"CounterCreator"stringCounterCreator condition
counterobjectSee relevant condition documentation
doNotResetIfCounterCompletedfalsebooleanWorks in tandem with isResetOnConditionFailed and on its own. If true, and value is less than condition value, can set the condition value to 0. In some scenarios, it will check the isResetOnConditionFailed property first. Largely unused. See the quest "Chemistry Closet" in the Vanilla Quests Data -> Useful Links for usage.
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
isNecessaryfalsebooleanUsed in tandem with parentId. If true, and parentId used for optional condition, requires it instead of being optional. Largely unused.
isResetOnConditionFailedfalsebooleanUsed in tandem with doNotResetIfCounterCompleted. If true, and doNotResetIfCounterCompleted is true - Will reset the value of the counter to 0 if any conditions are not met when starting a raid. This has never been used, untested if works properly.
oneSessionOnlyfalsebooleanCurrently unused
parentId""MongoID stringUsed to create optional sub-tasks for a task - see "Bad Rep Evidence" in the Vanilla Quests Data -> Useful Links — Leave this as an empty string if not needed.
type"Elimination"stringType of condition for the counter creator.
value5intNumber of nested condition counts required to count the CounterCreator condition as completed. (Ie, 5 kills, 5 visits, etc)
visibilityConditions[]arraysee Visibility Conditions for example usage

25 Scav kills on a specific Map example:

json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "bodyPart": [],
        "compareMethod": ">=",
        "conditionType": "Kills",
        "daytime": {
          "from": 0,
          "to": 0
        },
        "distance": {
          "compareMethod": ">=",
          "value": 0
        },
        "dynamicLocale": false,
        "enemyEquipmentExclusive": [],
        "enemyEquipmentInclusive": [],
        "enemyHealthEffects": [],
        "id": "5ae44ef386f774149f15ed84",
        "resetOnSessionEnd": false,
        "savageRole": [],
        "target": "Savage",
        "value": 1,
        "weapon": [],
        "weaponCaliber": [],
        "weaponModsExclusive": [],
        "weaponModsInclusive": []
      },
      {
        "conditionType": "Location",
        "dynamicLocale": false,
        "id": "5ae44efd86f774149d4cc6a4",
        "target": [
          "Interchange"
        ]
      }
    ],
    "id": "5ae44ecd86f77414a13c970d"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5ae44ecd86f77414a13c970e",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Elimination",
  "value": 25,
  "visibilityConditions": []
}

Player exfil 7 times from a specific location, with a specific status, from a specific exfil example:

json
{
  "completeInSeconds": 0,
  "conditionType": "CounterCreator",
  "counter": {
    "conditions": [
      {
        "conditionType": "Location",
        "dynamicLocale": false,
        "id": "5ae9e46686f77440d37ce046",
        "target": [
          "Interchange"
        ]
      },
      {
        "conditionType": "ExitName",
        "dynamicLocale": false,
        "exitName": "Saferoom Exfil",
        "id": "63929163c115f907b14700bb"
      },
      {
        "conditionType": "ExitStatus",
        "dynamicLocale": false,
        "id": "5bb60cc688a4507f2f385a76",
        "status": [
          "Survived"
        ]
      }
    ],
    "id": "5ae9e44f86f7746b6a466a8d"
  },
  "doNotResetIfCounterCompleted": false,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "5bb60cbc88a45011a8235cc5",
  "index": 0,
  "isNecessary": false,
  "isResetOnConditionFailed": false,
  "oneSessionOnly": false,
  "parentId": "",
  "type": "Completion",
  "value": 7,
  "visibilityConditions": []
}

可立即开始的要求

所有起始条件都可以组合成多个不同的要求。
你可以发挥创意,甚至可以强制玩家达到特定等级,同时完成特定任务才能解锁新任务。
我通常建议只使用 2-3 个条件。

你可以设置多个任务要求,一个值得参考的任务是"Collector"Vanilla Quests Data -> Useful Links - 这是 Tarkov 中迄今为止拥有最多独立任务要求的 Vanilla 任务。

玩家必须满足所有条件才能接受任务。

起始等级要求

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
compareMethod">="stringCompare method, no reason to really change this unless you want to require the player to be a lower level than dictated to receive the quest, which may cause the player to be unable to ever see this quest depending on other requirements
conditionType"Level"stringLevel condition
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
parentId""stringCurrently unused for Quest Start requirements
value10floatPlayer Side Level required for the player to compare against using the compareMethod
visibilityConditions[]arraysee Visibility Conditions for example usage. This is unused for Start Requirements, I would not advise using it.

例子:

json
{
  "availableAfter": 0,
  "conditionType": "Quest",
  "dispersion": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "66796ea13b61733d65fc59a6",
  "index": 0,
  "parentId": "",
  "status": [
    2,
    5,
    4
  ],
  "target": "657315ddab5a49b71f098853",
  "visibilityConditions": []
}

任务开始要求

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
availableAfter0intMinutes that must have passed since completing the quest target for this quest to become available.
conditionType"Quest"stringQuest condition
dispersion0intCurrently unused
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
parentId""stringCurrently unused for Quest Start requirements
status[4, 5]int arrayPossible quest statuses for the target quest within the players profile. The target quest must be one of these statuses to become available. See Quest Status for possible values.
target"657315ddab5a49b71f098853"MongoID stringQuest ID of the quest that is checked for the status conditions to control availability of the quest you are building this requirement for.
visibilityConditions[]arraysee Visibility Conditions for example usage. This is unused for Start Requirements, I would not advise using it.

例子:

json
{
  "availableAfter": 0,
  "conditionType": "Quest",
  "dispersion": 0,
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "66796ea13b61733d65fc59a6",
  "index": 0,
  "parentId": "",
  "status": [
    2,
    5,
    4
  ],
  "target": "657315ddab5a49b71f098853",
  "visibilityConditions": []
}

交易员资格要求

与任务中的所有属性一样,无论是否需要,都应该使用所有可用的属性。BSG
任务会使用所有属性,无论它们是否与要交付的物品相关。

Property NameExample ValueTypeNotes
compareMethod">="stringCompare method, no reason to really change this unless you want to require the player to be a lower loyalty level than dictated to receive the quest, which may cause the player to be unable to ever see this quest depending on other requirements
conditionType"TraderStanding"stringTraderStanding condition
dynamicLocalefalsebooleanCurrently unused
globalQuestCounterId""stringCurrently unused
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the condition
index0intCurrently unused (suspected added via BSG Tooling to build quests)
parentId""stringCurrently unused for Quest Start requirements
target"579dc571d53a0658a154fbec"MongoID stringTrader ID for the value requirement of the loyalty level. See Trader IDs
value3floatLoyalty Level required for the player to compare against using the compareMethod
visibilityConditions[]arraysee Visibility Conditions for example usage. This is unused for Start Requirements, I would not advise using it.

Example:

json
{
  "compareMethod": ">=",
  "conditionType": "TraderStanding",
  "dynamicLocale": false,
  "globalQuestCounterId": "",
  "id": "6672daa3a5f158174abeaab2",
  "index": 0,
  "parentId": "",
  "target": "579dc571d53a0658a154fbec",
  "value": 4,
  "visibilityConditions": []
}

失败条件

失败条件可能非常复杂,而且很容易被破坏。强烈建议您在添加可能导致任务失败的条件时,务必进行测试。您可以使用 USEC 开发账号来测试任务失败条件,因为在创建该账号时,所有任务都会自动启动并接受,无需设置任何AvailableForStart条件。

如果你添加了失败条件,并且希望玩家能够重新开始任务,请确保在任务属性中启用此功能restartabletrue如果你没有这样做,导致玩家任务失败,则任务将永久失败。

AvailableForStart失败条件的工作方式与条件完全相同AvailableForFinish。请参阅相关文档了解如何创建失败条件。唯一的区别在于,失败条件应放在Fail数组中,而不是数组AvailableForStartAvailableForFinish

使用原版任务是构建失败条件的绝佳方法。参见原版任务数据 ->实用链接

Rewards

Experience

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
type"Experience"stringExperience reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page.
value85000intAmount of experience to grant to the player upon quest completion

Example:

json
{
  "availableInGameEditions": [],
  "id": "60c8c2d02238043a5267864d",
  "index": 0,
  "type": "Experience",
  "unknown": false,
  "value": 7500
}

物品

我强烈建议你先了解一下原版游戏任务的物品奖励机制。刚开始玩的时候,这些机制可能会比较复杂。

本节提供了多个关于物品奖励的示例。请注意数组StackObjectsCount内部的items内容与奖励对象上的属性之间的value区别。这一点很容易出错。

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
findInRaidfalsebooleanWhether the item being rewarded is marked as FIR or not
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
itemsobject arraySee examples
target"67d82e6f4f4b5340e611a4cb"MongoID stringThe target is the _id of the item you are rewarding. This target ID is targetted to a different _id depending on if it’s a single item reward, multi item reward, or a weapon/armour reward (item that has children). See the examples.
type"Item"stringWill always be "Item" for an Item reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page.
value1intThe value here is dependent on how many items you are rewarding, or what type of item you are rewarding. Stackable single item rewards will match the StackObjectsCount of the item in the items array. Multiple of the same item will be the sum of the StackObjectsCount inside the items array, but the items array must only contain the same _tpl item to be valid. Rewarding a weapon/armour/etc, this value will always be 1 since they cannot stack.

Rouble reward (single item reward) example:

json
{
  "availableInGameEditions": [],
  "findInRaid": false,
  "id": "60cb694077dc197c77424fcd",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a4cb",
      "_tpl": "5449016a4bdc2d6f028b456f",
      "upd": {
        "StackObjectsCount": 75000
      }
    }
  ],
  "target": "67d82e6f4f4b5340e611a4cb",
  "type": "Item",
  "unknown": false,
  "value": 75000
}

Single item reward example:

json
{
  "availableInGameEditions": [],
  "findInRaid": true,
  "id": "60cb69576a2a1958fc522d04",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a4cd",
      "_tpl": "5d02778e86f774203e7dedbe",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    }
  ],
  "target": "67d82e6f4f4b5340e611a4cd",
  "type": "Item",
  "unknown": false,
  "value": 1
}

Multiple item reward example:

json
{
  "availableInGameEditions": [],
  "findInRaid": true,
  "id": "5ac6643e86f774055a77c730",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a646",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6f4f4b5340e611a647",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6f4f4b5340e611a648",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6f4f4b5340e611a649",
      "_tpl": "5673de654bdc2d180f8b456d",
      "upd": {
        "SpawnedInSession": true,
        "StackObjectsCount": 1
      }
    }
  ],
  "target": "67d82e6f4f4b5340e611a649",
  "type": "Item",
  "unknown": false,
  "value": 4
}

Weapon reward example:

json
{
  "availableInGameEditions": [],
  "findInRaid": true,
  "id": "60d062e01bdece56c249cc0b",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6e4f4b5340e611a3d5",
      "_tpl": "59f9cabd86f7743a10721f46",
      "upd": {
        "StackObjectsCount": 1
      }
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d6",
      "_tpl": "5998517986f7746017232f7e",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_pistol_grip"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d7",
      "_tpl": "599851db86f77467372f0a18",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_stock"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d8",
      "_tpl": "5998529a86f774647f44f421",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_magazine"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3d9",
      "_tpl": "5998598e86f7740b3f498a86",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_muzzle"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3da",
      "_tpl": "59985a8086f77414ec448d1a",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_reciever"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3db",
      "_tpl": "599860e986f7743bb57573a6",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_sight_rear"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3dc",
      "_tpl": "59ccd11386f77428f24a488f",
      "parentId": "67d82e6e4f4b5340e611a3d5",
      "slotId": "mod_gas_block"
    },
    {
      "_id": "67d82e6e4f4b5340e611a3dd",
      "_tpl": "5648b1504bdc2d9d488b4584",
      "parentId": "67d82e6e4f4b5340e611a3dc",
      "slotId": "mod_handguard"
    }
  ],
  "target": "67d82e6e4f4b5340e611a3d5",
  "type": "Item",
  "unknown": false,
  "value": 1
}

解锁商品种类

我强烈建议您了解一下自定义商人物品解锁的结构。
对于新手来说,这可能会比较复杂。
如果您要修改原版商人,您还需要调整商人的商品种类,使其包含您需要的物品,并且需要调整商人的questassort.json任务 ID,使其与商品种类 ID 相匹配。这些步骤在解锁自定义商人时同样适用。

本节提供了多个物品解锁示例。3.11 版本中,解锁机制略有变化,目标物品不再需要与物品种类完全匹配。

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
itemsobject arraySee examples. This array should only have 1 entry unless you are adding an item that has children (weapon, armour, etc).
loyaltyLevel1intLoyalty Level for the Unlock. Must match the Quest Assort Loyalty Level for the trader.
target"67d82e6f4f4b5340e611a4cb"MongoID stringThe target is the _id of the item you are rewarding as an unlock. The _tpl of that target is the item that is actually going to be unlocked, only if that _tpl has an entry in the assort and the quest ID for this condition is in the questassort.json for the traderId being targetted…and that questassort entry for the questID is targetted to the id of the assort entry for the _tpl. You can see how this is confusing, use custom traders or vanilla traders as a reference.
traderId"58330581ace78e27b8b10cee"MongoID stringTrader ID for the assortment unlock. See Trader IDs
type"AssortmentUnlock"stringWill always be "Item" for an Item reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page.

武器组合解锁示例(将解锁此特定武器及其组合中的这些特定配件):

json
{
  "availableInGameEditions": [],
  "id": "63a1a03b4ebcff1c995dc341",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6e4f4b5340e611a312",
      "_tpl": "5a7828548dc32e5a9c28b516"
    },
    {
      "_id": "67d82e6e4f4b5340e611a313",
      "_tpl": "5a787f7ac5856700177af660",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_barrel"
    },
    {
      "_id": "67d82e6e4f4b5340e611a314",
      "_tpl": "5a788089c5856700142fdd9c",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_handguard"
    },
    {
      "_id": "67d82e6e4f4b5340e611a315",
      "_tpl": "5a7882dcc5856700177af662",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_magazine"
    },
    {
      "_id": "67d82e6e4f4b5340e611a316",
      "_tpl": "5a7880d0c5856700142fdd9d",
      "parentId": "67d82e6e4f4b5340e611a312",
      "slotId": "mod_stock"
    }
  ],
  "loyaltyLevel": 1,
  "target": "67d82e6e4f4b5340e611a312",
  "traderId": "58330581ace78e27b8b10cee",
  "type": "AssortmentUnlock",
  "unknown": false
}

单件物品解锁示例:

json
{
  "availableInGameEditions": [],
  "id": "5ac667f686f77403df401d1d",
  "index": 0,
  "items": [
    {
      "_id": "67d82e6f4f4b5340e611a5ec",
      "_tpl": "584984812459776a704a82a6"
    }
  ],
  "loyaltyLevel": 1,
  "target": "67d82e6f4f4b5340e611a5ec",
  "traderId": "58330581ace78e27b8b10cee",
  "type": "AssortmentUnlock",
  "unknown": false
}

交易员立场

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
target"5a7c2eca46aef81a7ca2145d"MongoID stringTrader ID that the condition targets - see Trader IDs
type"TraderStanding"stringWill always be "TraderStanding" for an TraderStanding reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page.
value0.45floatHow many loyalty points to award to the player for the targetted Trader

例子:

json
{
  "availableInGameEditions": [],
  "id": "60cc7aff179f8541b8469273",
  "index": 0,
  "target": "5a7c2eca46aef81a7ca2145d",
  "type": "TraderStanding",
  "unknown": false,
  "value": 0.02
}

技能

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
target"Attention"stringSkill name that the condition targets - see Skill Table
type"Skill"stringWill always be "Skill" for a Skill reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page.
value100intHow many points to award to the target skill

储藏行

玩家只有在重启 EFT 客户端或完成突袭撤离后,才能在仓库栏中看到奖励。

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
type"StashRows"stringWill always be "StashRows" for a StashRows reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page.
value2intHow many rows to award to the player’s stash

例子:

json
{
  "availableInGameEditions": [],
  "id": "668858720221bbe5f306b4e7",
  "index": 0,
  "type": "StashRows",
  "unknown": false,
  "value": "2"
}

### 成就

成就奖励需要自定义代码来导入成就数据和图标,以便正确地授予玩家,除非您奖励的是已有的成就。

建议参考服务器数据库模板中的服务器achievements.json文件,以了解成就的实际结构。本参考表不会详细介绍如何正确地向服务器添加成就。

Property NameExample ValueTypeNotes
availableInGameEditions[]string arrayIf you would like the rewards for a quest to be restricted to specific game editions, you add those editions to this array
id"5a3fbdb086f7745a554f0c31"MongoID stringUnique ID for the reward
index0intCurrently unused (suspected added via BSG Tooling to build quests)
target"664f1f8768508d74604bf556"MongoID stringUnique AchievementID, this is the achievement that will be rewarded
type"Achievement"stringWill always be "Achievement" for an Achievement reward
unknownfalsebooleanWhether or not the reward will be shown, or if it will display a ? on the trader task page

例子:

json
{
  "availableInGameEditions": [],
  "id": "664f249468508d74604bf55f",
  "index": 0,
  "target": "664f1f8768508d74604bf556",
  "type": "Achievement",
  "unknown": false
}

贡献者

<NolebaseGitContributors />

文件历史

<NolebaseGitChangelog />

撰写