复活配置 revive
复活配置写在副本 config.yml 的 revive 段里,把「倒计时自动复活 / 消耗道具复活 / 队友读条救起」这三种最常见的复活方式做成配几行就能用,不用每个副本自己在 player_death 脚本里手搓。
不写 revive 段,副本行为与以前完全一致:只有脚本里的 action.revive() 能复活。
全队共 3 次复活,死后 5 秒在出生点自动复活:
revive: 次数: 3 自动: 延迟: 5revive: 次数: 3 # -1 = 无限,0 = 禁止复活 次数模式: 共享 # 共享 = 全队一个池;独立 = 每人各 3 次
自动: # 不写这段 = 不自动复活 延迟: 5 # 秒 位置: 出生点 # 出生点 / 原地 / 区域.点位
道具: # 不写这段 = 不支持道具复活 物品: "TOTEM_OF_UNDYING:1" # 与入场物品同格式,支持 mm:ID:数量 扣次数: false 位置: 原地
队友: # 不写这段 = 不支持队友救起 读条: 3 # 秒 距离: 4 # 格,按倒下的位置算 扣次数: true 位置: 原地
复活脚本: |- # 复活成功后执行,@trigger = 被复活者 action.apply_potion('@trigger', 'RESISTANCE', '5s', 1) 耗尽脚本: |- # 次数用完时执行一次 action.message('@trigger', '&c你已经没有复活机会了')有键才启用:写了 自动.延迟 就是要自动复活,没写就是不要。没有 enabled: true 这种字段。
| 键(中/英) | 类型 | 默认 | 说明 |
|---|---|---|---|
次数 / count | Int | 0 | 复活次数;-1 无限,0 禁止 |
次数模式 / count_mode | 共享 / 独立 | 共享 | shared / independent |
自动.延迟 / auto.delay | Int | — | 秒;有这个键才启用自动复活 |
自动.位置 / auto.at | String | 出生点 | 出生点 / 原地 / 区域.点位 |
道具.物品 / item.id | String | — | 物品ID:数量;有这个键才启用道具复活 |
道具.扣次数 / item.consume_count | Boolean | false | |
道具.位置 / item.at | String | 原地 | |
队友.读条 / ally.cast_time | Int | — | 秒;有这个键才启用队友复活 |
队友.距离 / ally.range | Double | 4.0 | 队友到倒下位置的距离 |
队友.扣次数 / ally.consume_count | Boolean | true | |
队友.位置 / ally.at | String | 原地 | |
复活脚本 / on_revive | 列表/多行 | 空 | 复活成功后执行 |
耗尽脚本 / on_exhausted | 列表/多行 | 空 | 次数用完时执行一次(共享池按副本一次,独立按人一次) |
位置写 区域.点位 时需要先在 区域配置 里定义点位,找不到会退回出生点并打 warn。
三种方式怎么用
Section titled “三种方式怎么用”自动:死后动作栏倒数,到点自动起来,扣 1 次。
道具:死后聊天栏出现「点击使用 xx 复活」按钮,点一下就消耗身上的道具复活。旁观者没法右键物品,所以走的是点击按钮,不是右键。
队友:活着的队友走到倒下的位置附近按住潜行开始读条,动作栏显示进度。中途松开潜行、走出距离、自己倒下都会中断。倒下的那个人自己飘去哪都不影响,看的是倒下的位置。
三种可以同时开,谁先成立谁生效。
与全灭判定的关系
Section titled “与全灭判定的关系”配了 revive 段后,副本自动按 lenient 语义判全灭:只要还有人能靠配置起来(自动倒计时中、或手里有复活道具且还有次数),就不触发 all_death。次数耗尽、倒计时被别人抢光了次数,才算真的全灭。没写 all_death 时,全灭后自动判定副本失败。
death_check_mode 不用再手动改。如果显式写了 strict 又配了复活,加载时会 warn 一句并按 lenient 处理。
主配置 config.yml 可以放一份同结构的 revive: 当全服默认,副本里的同名字段逐字段覆盖。副本想关掉全局开着的某种方式,写 自动: false(或 item: false / ally: false)即可。
revive: count: 2 auto: delay: 8脚本 API
Section titled “脚本 API”| 动作 | 说明 |
|---|---|
action.revive('@trigger') | 复活,扣次数,出生点 |
action.revive('@trigger', false) | 复活,不扣次数 |
action.revive('@trigger', '原地') | 在死亡位置复活 |
action.revive('@all', false, '复活区.落点') | 全员传到点位复活,不扣次数 |
action.add_revive(2) | 共享池 +2;独立模式写 action.add_revive('@trigger', 2) |
action.set_revive(1) | 设置次数 |
中文别名:复活 / 增加复活次数 / 设置复活次数。参数不分先后:false 表示不扣次数,其余当落点。
| 方法 | 返回 | 说明 |
|---|---|---|
dungeon.getReviveLeft(player) | Int | 剩余次数,无限 -1,未配置 0 |
dungeon.isPendingRevive(player) | Boolean | 是否处于待复活 |
dungeon.getPendingReviveCount() | Int | 待复活人数 |
| 变量 | 说明 |
|---|---|
%quedp_revive_left% | 剩余复活次数,无限显示 ∞,未配置为空 |
| 命令 | 说明 |
|---|---|
/dg revive | 死后使用复活道具(聊天栏按钮调用的就是它) |
/dg admin revive <玩家> | 强制复活,不扣次数 |
/dg admin revive <玩家> count <数值> | 设置剩余次数(共享模式设的是全队池) |
/dg edit → 基础设置 → 复活设置。三种方式各一行开关,关掉的方式不会写进 YAML;落点左键在出生点 / 原地间切换,右键从区域点位里挑;复活道具左键直接取主手物品。
底部「一键预设」:左键 = 3 次 + 5 秒自动复活,右键 = 3 次 + 队友读条 + 图腾复活,套上再微调就行。
- 不做灵魂自由活动半径。旁观者本来就能飘,加钳制只会增加每 tick 开销
- 不做复活 GUI。队友读条用动作栏进度,道具用聊天栏按钮
- 不改死亡拦截。「拦截致命伤 → 转旁观者 → 跑
player_death」这条链路原样保留 - 原版不死图腾在手里生效时照旧不算副本死亡,也不扣复活次数