📄 PalSummon.json
PalSummon 文件定义一个固定地点的遭遇,可通过 /summon <文件名> 启动。将文件保存到 <PalServer>/Pal/Binaries/Win64/PalDefender/Pals/Summons/,被引用的 PalTemplate 则保存在 Pals/Templates/。
ID 查询
使用 paldeck.cc/pals 查询 PalID,paldeck.cc/passives 查询被动词条,paldeck.cc/skills 查询模板使用的技能 ID。
遭遇配置键
| 键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
PalTemplate |
string | 必填 | Pals/Templates/ 中的模板文件名;可以省略 .json。 |
BossBattleName |
string | Pal ID | 用于公告、日志、webhook 和伤害结果的显示名称。 |
Uncapturable |
bool | false |
使召唤出的 Pal 永远无法被捕获。 |
CapturableAtHealthPercent |
number | 15 |
Pal 的生命值达到该百分比或以下时才可捕获(0–100)。Uncapturable 为 true 时忽略。 |
DisableAI |
bool | false |
禁用普通 AI。闪避等部分被动行为仍可能发生。 |
DisableDamageMeter |
bool | false |
禁用伤害跟踪、结果窗口和排名奖励。此时会将 Default 奖励发给所有在线玩家。 |
SpawnScale |
number | 1.0 |
视觉/物理体型倍率;非正数会恢复为 1.0。 |
DamageTakenMultiplier |
number | 1.0 |
承受伤害倍率;负数会恢复为 1.0。 |
DamageDealtMultiplier |
number | 1.0 |
造成伤害倍率;负数会恢复为 1.0。 |
X, Y, Z |
number | 必填 | 地图坐标。使用 /getpos 获取。 |
DisableStatuses |
array | 空 | 要禁用的状态名称。无效名称会被跳过。 可用名称. |
Rewards |
object 或 array | 空 | 可选的排名奖励和默认奖励定义。推荐使用 object 形式。 |
兼容别名 CapturableAt、CapturableAtPercent 和 capturable_at 也可使用。AdditionalEnemyReceiveDamageRate 和 AdditionalEnemyInflictDamageRate 同样受支持,但建议使用表格中的名称。
最大生命值迁移
召唤出的帕鲁的最大生命值现在取自所引用 PalTemplate 中的 HP。HealthMultiplier、HPMultiplier 和 AdditionalEnemyMaxHPRate 已不再受支持;请从现有 PalSummon 文件中删除这些字段。
禁用状态
DisableStatuses 是一个由状态名称字符串组成的数组。列出的状态会从召唤出的帕鲁身上移除,并且无法再次施加。名称不区分大小写;请保留英文标识符及其中的下划线,不要翻译。空数组 [] 不会禁用任何状态。空字符串和无效名称会被跳过;None 不是有效选项。
示例:禁用中毒、燃烧、冻结、电系效果、眩晕和睡眠。
完整列表还包含增益效果和游戏内部状态,并非只有负面效果。
所有可用的状态名称
ControlSP
GainHP
StepCooldown
DrownCheck
Poison
UNKOTimer
Stun
Coma
Sleep
Overwork
Happiness
Resistance
Moratorium
Drown
Dying
ShieldRecovery
FallDamage
LavaDamage
Burn
Wetness
Freeze
Electrical
Muddy
IvyCling
Darkness
AttackUp
DefenseUp
AttackDown
CollectItem
LifeSteal
RaidBossStatusChange
RarePalEffect
MorphChange
PalEnhancement
PalEnhancement2
PalEnhancement3
PartBreak
FishingSpotElectrical
HPLock
AcidDamage
WorldTreeAuraPalEffect
AwakeningAuraEffect
ToxicGas
ToxicGas_FromAttack
Stealth
TeleportStealth
LowGravity
PlayerLowHealthBlast
PlayerElementStepAttack_Fire
PlayerElementStepAttack_Water
PlayerElementStepAttack_Leaf
PlayerInflictEffect_AttackBurning_ApplyExplosion
PlayerInflictEffect_AttackIvyCling_ApplyExplosion
PlayerInflictEffect_AttackBurning_ApplyFireVortex
PlayerInflictEffect_AttackElectrified_ApplySpark
PlayerInflictEffect_AttackPoisoned_ApplyAttackDown
PlayerInflictEffect_AttackMuddy_ApplyAttackDown
PlayerInflictEffect_MeleeHitBarrier
PlayerInflictEffect_AttackWet_ApplyFreeze
PlayerInflictEffect_AttackWet_ApplyFreeze_Resist
Player_ArrowExplosion
BulletHit_StackBuff
DefeatEnemy_StackBuff
MapObjectOverHeat
JumpingFrog
JumpingFrog_dark
LifeDrainPower_AttackUp
AttackRateHPThresholdPassive
DefenseRateHPThresholdPassive
WeakPointHitDamageUp
WeakPointHitDamageUp_Buff
SwimSpeedUp
WorldTreeHolyWaterEffect
DefeatEnemy_ActiveSkillCoolTime_Decrease
DefeatEnemy_RecoverHP
RecoverHPOnHPThresholdPassive
FloatStun
伤害统计与奖励
召唤的帕鲁死亡或被捕获后会结算奖励。伤害排行榜按伤害从高到低排序。结果窗口显示前五名并突出显示前三名;如果接收结果的玩家不在前五名中,还会显示其自己的名次。
启用伤害跟踪后,每个参与玩家的处理方式如下:
- PalDefender 查找与该玩家的最终排名匹配的数字
Rewards键。 - 如果该确切排名不存在,则 PalDefender 使用
Rewards.Default。 - 如果两者都不存在,则该玩家不会获得任何奖励。
- 为该玩家单独随机结算所选奖励。因此,使用相同
Default定义的两名玩家可能获得不同的随机结果。
只有在战斗结束时仍然在线并且拥有可用玩家控制器的参与者才能获得排名奖励。编号奖励不包括 Default 奖励;它会取代该等级。
"Rewards": {
"1": {
"Drops": [
{ "ItemID": "Money", "Count": 50000 },
{ "TechnologyPoints": 5 }
]
},
"2": {
"Drops": [
{ "EXP": { "Min": 10000, "Max": 20000 } }
]
},
"Default": {
"Drops": [
{ "ItemID": "Money", "Count": 1000, "Chance": 75 }
]
}
}
在此示例中,第一名会收到保证掉落的物品,第二名会收到随机数量的 EXP,而其他排名的参与者独立地有 75% 的机会收到 1,000 Money。
排名键必须是写为 JSON 对象键的正整数,例如 "1"、"2" 或 "10"。 "0"、负排名和任意名称均无效。 Default 不区分大小写进行匹配。
数组形式
Rewards 也可以是一个数组。数组元素 0 的等级为 1,元素 1 的等级为 2,依此类推。数组形式无法定义Default,因此对象形式更清晰,推荐使用。
奖励定义结构
每个等级和 Default 都包含一个奖励定义。定义可以包含两者:
Drops:直接且独立评估的条目。Pools:控制如何选择条目的组。
它还可能包含级数简写 EXP、TechnologyPoints 和 AncientTechnologyPoints。当不需要自己的 Chance、Weight 或 Unique 设置时,速记是有保证的并且很有用。
{
"EXP": { "Min": 10000, "Max": 20000 },
"TechnologyPoints": 2,
"AncientTechnologyPoints": 1,
"Drops": [
{ "ItemID": "Money", "Count": 5000 }
],
"Pools": [
{
"Entries": [
{ "ItemID": "AncientArmor", "Weight": 1 },
{ "ItemID": "AncientHelmet", "Weight": 1 }
]
}
]
}
奖励条目类型
每个条目必须准确定义一种奖励类型。不要将项目、蛋和进度字段合并在同一条目中。
| 奖励 | 必填字段 | 可选字段 | 笔记 |
|---|---|---|---|
| 物品 | ItemID |
Count、Chance、Weight、Unique |
Count 默认为 1。 |
| 帕鲁蛋 | EggID、PalTemplate |
Count、Level、Chance、Weight、Unique |
Count 默认为 1;Level: 0 使用模板中的等级。 |
| 经验 | EXP |
Chance、Weight、Unique |
EXP 值是金额或范围。 |
| 技术要点 | TechnologyPoints |
Chance、Weight、Unique |
字段值是金额或范围。 |
| 古代科技点 | AncientTechnologyPoints |
Chance、Weight、Unique |
字段值是金额或范围。 |
Chance、Weight 和 Unique 仅在下述上下文中有效。解析器接受的字段并不意味着它会影响每种分发模式。
建议使用上面的规范字段名称。解析器还接受这些别名:
| 规范领域 | 接受的别名 |
|---|---|
ItemID |
ItemId、ID |
EggID |
EggId |
PalTemplate |
Template |
Count |
Amount、Num |
EXP |
Exp、Experience |
TechnologyPoints |
TechPoints |
AncientTechnologyPoints |
BossTechnologyPoints |
固定值、范围和机会
金额可以是固定整数或包含范围:
{
"Drops": [
{ "ItemID": "Money", "Count": 25000 },
{ "ItemID": "AssaultRifleBullet", "Count": { "Min": 100, "Max": 250 } },
{ "EXP": { "Min": 10000, "Max": 20000 } },
{ "TechnologyPoints": 2 }
]
}
Count、EXP 和技术点数量必须至少为1的整数。- 范围需要
Min和Max,并且Max不得低于Min。 - 诸如
"1-3"之类的文本范围无效;使用{ "Min": 1, "Max": 3 }。 - 帕鲁蛋的
Level可以为0,此时沿用引用 PalTemplate 中的等级。大于0的固定等级或范围会覆盖模板等级,发放时最高限制为 255 级。 Chance接受带有可选%的数字或数字文本,例如30、30.5或"30%"。Chance: 0永远不会成功,Chance: 100始终会成功,并且值必须保持在0和100之间。- 对于严格介于 0 到 100 之间的机会,生成的掷骰必须低于配置的值。因此,恰好
30.0的一卷失败了30的Chance。
直接掉落
Drops 中的每个条目都是独立评估的。相邻条目之间不存在单选关系。缺少 Chance 意味着 100。
{
"Drops": [
{ "ItemID": "Money", "Count": { "Min": 25000, "Max": 75000 } },
{ "ItemID": "AssaultRifleBullet", "Count": { "Min": 100, "Max": 250 }, "Chance": 30 },
{ "EXP": 15000, "Chance": "50%" },
{ "TechnologyPoints": 2, "Chance": 10 }
]
}
Money 是有保证的。弹药、EXP 和技术点各有自己的机会掷骰。零次、一次、两次或所有三个可选滴都可能成功。
Weight 和 Unique 不能直接在 Drops 中工作并产生警告。使用 Chance 进行可选的直接删除。
战利品池
奖励池首先判定自身的 Chance。如果判定失败,则不会处理其中任何条目;如果成功,则由 Mode 决定如何处理条目。
| 泳池钥匙 | 类型 | 默认 | 描述 |
|---|---|---|---|
Name |
字符串 | 空 | 可选的诊断标签。不影响选择。 |
Mode |
字符串 | OneOf |
OneOf、Pick、All 或 Independent。匹配不区分大小写。 |
Chance |
数字或百分比文本 | 100 |
整个池激活的机会。 |
Rolls |
整数 | 1 |
Pick 中的选择数;被其他模式忽略。 |
Unique |
布尔 | true |
Pick 的默认重复策略;一个条目可能会覆盖它。 |
Entries |
数组 | 必填 | 奖励条目非空列表。 |
One 被接受作为 OneOf 的别名,PickN 被接受作为 Pick 的别名,但建议使用规范模式名称。
| 模式 | 可以授予多少条目? | 使用Weight? |
使用条目 Chance? |
使用 Rolls / Unique? |
|---|---|---|---|---|
OneOf |
如果池成功则恰好为 1 | 是的 | 没有 | 没有 |
Pick |
最多 Rolls 个选择 |
是的 | 没有 | 是的 |
All |
如果池成功,则每个条目一次 | 没有 | 没有 | 没有 |
Independent |
所有条目归零 | 没有 | 是的 | 没有 |
All 四种模式仍然使用池级 Chance。一个奖励定义中的多个池是独立处理的,它们的结果将添加到直接 Drops 中。
OneOf:一个加权结果
OneOf 是默认模式。如果其池级机会成功,则仅选择一个条目。条目的概率是其 Weight 除以所有条目权重的总和。
{
"Pools": [
{
"Name": "Equipment jackpot",
"Mode": "OneOf",
"Chance": 35,
"Entries": [
{ "ItemID": "AncientArmor", "Weight": 7 },
{ "ItemID": "AncientHelmet", "Weight": 7 },
{ "ItemID": "SkyAssaultRifle", "Weight": 5 },
{ "EggID": "PalEgg_Dark_05", "PalTemplate": "RaidReward.json", "Weight": 1 }
]
}
]
}
权重总计为 20。在奖励池已激活的前提下,四个条目的概率分别为 35%、35%、25% 和 5%。由于奖励池本身只有 35% 的激活概率,因此帕鲁蛋的绝对概率为 35% × 5% = 1.75%。
- 缺少
Weight默认为1。 Weight必须是至少1的整数;删除条目而不是分配权重0。Rolls被忽略并产生警告,因为OneOf始终选择一次。- 入门级
Chance被忽略并产生警告。使用Weight控制相对选择概率。 Unique没有实际作用,因为只选择了一项。
Pick:不重复的多个加权结果
Pick 重复加权选择 Rolls 次。使用默认的 Unique: true 时,选定的条目将在下一次选择之前被删除,并且无法再次选择。每次选择后,都会根据剩余条目重新计算权重。
{
"Pools": [
{
"Name": "Choose two different rewards",
"Mode": "Pick",
"Rolls": 2,
"Unique": true,
"Entries": [
{ "ItemID": "AncientArmor", "Weight": 1 },
{ "ItemID": "AncientHelmet", "Weight": 1 },
{ "ItemID": "SkyAssaultRifle", "Weight": 1 }
]
}
]
}
这将授予两个不同的条目。如果 Rolls 大于可用唯一条目的数量,则当没有条目剩余时,选择将停止;这不是一个错误。
Pick:允许重复结果
将池的 Unique 设为 false,已选中的条目就能在后续抽取中再次被选中。相同物品的重复结果会在发放前合并。
{
"Pools": [
{
"Name": "Three supply rolls",
"Mode": "Pick",
"Rolls": 3,
"Unique": false,
"Entries": [
{ "ItemID": "Money", "Count": 5000, "Weight": 5 },
{ "ItemID": "AssaultRifleBullet", "Count": 100, "Weight": 2 }
]
}
]
}
All 三卷可能会选择Money,也可能全部选择弹药,或者结果可能会混合。例如,选择两次 Money 会产生一次 10,000 的 Money 授权,而不是两次单独的授权。
Pick:覆盖每个条目的 Unique
条目级 Unique 仅覆盖该条目的池默认值。这允许在同一池中重复使用普通奖励和一次性头奖奖励。
{
"Pools": [
{
"Name": "Repeatable currency with unique jackpots",
"Mode": "Pick",
"Rolls": 3,
"Unique": true,
"Entries": [
{ "ItemID": "Money", "Count": { "Min": 5000, "Max": 7000 }, "Weight": 10, "Unique": false },
{ "ItemID": "AncientArmor", "Weight": 1 },
{ "ItemID": "AncientHelmet", "Weight": 1 }
]
}
]
}
Money 在被选择后仍保留在候选列表中,因为其条目为 Unique: false。盔甲和头盔从池中继承 Unique: true ,并在选择后删除。反之亦然:池可以使用 Unique: false,而特定条目则使用 Unique: true。
All:授予每个条目
当池级 Chance 成功时,All 只授予每个条目一次。
{
"Pools": [
{
"Name": "Complete reward bundle",
"Mode": "All",
"Chance": 100,
"Entries": [
{ "ItemID": "Money", "Count": 10000 },
{ "ItemID": "AssaultRifleBullet", "Count": { "Min": 100, "Max": 250 } },
{ "EXP": 15000 },
{ "TechnologyPoints": 2 },
{ "EggID": "PalEgg_Dark_05", "PalTemplate": "RaidReward.json", "Level": 50 }
]
}
]
}
Weight、入门级Chance 和Unique 不影响All。 Rolls 被忽略并产生警告。要使整个捆绑包可选,请设置池的 Chance;要使单个条目可选,请改用 Independent 或直接 Drops 。
Independent:分别判定每个条目
Independent 检查每个条目并使用每个条目自己的 Chance。它可以不授予任何条目、授予一个条目、授予多个条目或授予所有条目。
{
"Pools": [
{
"Name": "Independent bonus rolls",
"Mode": "Independent",
"Chance": 80,
"Entries": [
{ "ItemID": "Money", "Count": 10000 },
{ "ItemID": "AssaultRifleBullet", "Count": 250, "Chance": 50 },
{ "ItemID": "AncientArmor", "Chance": 10 },
{ "EggID": "PalEgg_Dark_05", "PalTemplate": "RaidReward.json", "Level": { "Min": 45, "Max": 55 }, "Chance": 5 }
]
}
]
}
首先,奖励池有 80% 的概率激活。激活后,Money 条目因省略 Chance 而必定发放;另外三个条目分别独立判定 50%、10% 和 5% 的概率。
- 缺少条目
Chance默认为100。 Weight和Unique不影响此模式。Rolls被忽略并产生警告,因为每个条目都会检查一次。
组合直接掉落与多个奖励池
当一个接收者应该收到多个独立结构的奖励层时,请使用多个池。
{
"Drops": [
{ "ItemID": "Money", "Count": 10000 },
{ "EXP": 5000 }
],
"Pools": [
{
"Name": "One equipment item",
"Mode": "OneOf",
"Entries": [
{ "ItemID": "AncientArmor", "Weight": 1 },
{ "ItemID": "AncientHelmet", "Weight": 1 }
]
},
{
"Name": "Two supply rolls",
"Mode": "Pick",
"Rolls": 2,
"Unique": false,
"Entries": [
{ "ItemID": "Money", "Count": 5000, "Weight": 3 },
{ "ItemID": "AssaultRifleBullet", "Count": 100, "Weight": 1 }
]
},
{
"Name": "Rare independent bonuses",
"Mode": "Independent",
"Entries": [
{ "TechnologyPoints": 1, "Chance": 20 },
{ "AncientTechnologyPoints": 1, "Chance": 5 }
]
}
]
}
直接 Money 和 EXP 始终适用。第一个池添加一个设备项目,第二个池进行两个带替换的加权供应选择,第三个池进行两个独立的奖励掷骰。玩家可以收到每个池的结果,因为池之间不会相互竞争。
帕鲁蛋奖励
帕鲁蛋需要同时指定 EggID 和 PalTemplate。模板从 Pals/Templates/ 加载,文件名中的 .json 可以省略。Count 控制发放的蛋数量。Level: 0 或省略等级时沿用模板等级;大于 0 的固定值或范围会覆盖模板等级。
{
"Pools": [
{
"Name": "One random egg reward",
"Mode": "OneOf",
"Entries": [
{
"EggID": "PalEgg_Dark_05",
"PalTemplate": "RaidReward.json",
"Count": 1,
"Level": { "Min": 45, "Max": 55 },
"Weight": 3
},
{
"EggID": "PalEgg_Dragon_05",
"PalTemplate": "DragonReward.json",
"Count": { "Min": 1, "Max": 2 },
"Level": 50,
"Weight": 1
}
]
}
]
}
如果授予奖励时无法导入彩蛋模板,PalDefender 会记录错误并跳过该彩蛋奖励。
合并重复结果
直接掉落和所有奖励池的结果会在发放前合并:
- 具有相同
ItemID的项目通过添加其计数来合并。 - 仅当
EggID、PalTemplate和随机得到的Level全部相同时,帕鲁蛋才会合并。 - EXP、科技点、古代科技点相加。
- 可授予的项目和技术点总数被限制为带符号的 32 位最大值 (
2,147,483,647)。
这意味着重复的 Pick 结果不会在奖励请求中创建重复的物品行。随机等级不同的帕鲁蛋仍会作为独立奖励发放。
DisableDamageMeter 分布
当 DisableDamageMeter 为 true 时,PalDefender 不会生成伤害排行榜,也不会使用数字排名奖励。它会改为给遭遇结束时在线的每位玩家分别随机结算 Rewards.Default,其中也包括未对召唤帕鲁造成伤害的玩家。
{
"DisableDamageMeter": true,
"Rewards": {
"Default": {
"Drops": [
{ "ItemID": "Money", "Count": 5000 }
],
"Pools": [
{
"Mode": "Independent",
"Entries": [
{ "TechnologyPoints": 1, "Chance": 25 },
{ "AncientTechnologyPoints": 1, "Chance": 5 }
]
}
]
}
}
}
每名在线玩家都会获得 Money。两种可选点数奖励会为每名玩家分别独立判定。如果 Default 缺失或为空,则此模式下不会发放任何奖励,PalDefender 会在日志中写入警告。
无效和被忽略的组合
无效的奖励数据会阻止加载 PalSummon 文件。未知或上下文忽略的字段会产生警告,因此拼写错误和无效设置会在 PalDefender 日志中可见。
| 配置 | 结果 |
|---|---|
一项同时包含 ItemID 和 EXP |
错误:一个条目只能定义一种奖励类型。 |
| 奖励条目没有物品、彩蛋或进度字段 | 错误:PalDefender 不知道要授予什么。 |
Count: 0、Weight: 0 或 Rolls: 0 |
错误:这些值必须至少为 1。 |
范围省略 Min 或 Max,或具有 Max < Min |
错误。 |
Chance 位于 0–100 之外 |
错误。 |
池没有 Entries、空 Entries 数组或非数组值 |
错误。 |
Chance 放置在 OneOf、Pick 或 All 条目上 |
警告;进入机会被忽略。 |
Rolls 在 OneOf、All 或 Independent 上设置 |
警告; Rolls 被忽略。 |
Weight 或 Unique 直接放置在 Drops |
中警告;使用 Chance 进行直接删除。 |
存在未知字段,如 Wieght |
警告;该字段未使用。 |
使用有效的 JSON ,不带注释或尾随逗号。即使召唤仍在加载,也要查看加载警告:警告通常会识别出无效的设置。
完整示例
{
"PalTemplate": "ArenaBoss.json",
"BossBattleName": "Arena Anubis",
"Uncapturable": false,
"CapturableAtHealthPercent": 10,
"DisableAI": false,
"DisableDamageMeter": false,
"SpawnScale": 1.5,
"DamageTakenMultiplier": 0.75,
"DamageDealtMultiplier": 2.0,
"X": 230,
"Y": -486,
"Z": 4097,
"DisableStatuses": ["Poison", "Burn", "Freeze"],
"Rewards": {
"1": {
"Drops": [
{ "ItemID": "Money", "Count": 50000 },
{ "AncientTechnologyPoints": 3 }
],
"Pools": [
{
"Name": "Winner bonus",
"Mode": "Pick",
"Rolls": 2,
"Unique": true,
"Entries": [
{ "ItemID": "AncientCivilizationParts", "Count": { "Min": 1, "Max": 3 }, "Weight": 5 },
{ "EggID": "PalEgg_Dark_05", "PalTemplate": "RaidReward.json", "Level": { "Min": 45, "Max": 55 }, "Weight": 1 }
]
}
]
},
"Default": {
"Drops": [
{ "EXP": 5000 },
{ "TechnologyPoints": 1 }
]
}
}
}
验证清单
- 先使用
/givemepal_j <模板>测试被引用的模板。 - 使用
/getpos获取X、Y和Z;通过 RCON 使用/getpos时必须提供 UserId。 - 使用有效 JSON,不要包含注释或末尾多余逗号。
- 每个奖励条目只能使用一种奖励类型。
- 确认每个池都有非空的
Entriesarray,并且只使用对所选Mode生效的字段。 - 执行
/summon <文件名>,并查看 PalDefender 日志中的具体验证错误和警告。