跳转到内容

复活配置 revive

复活配置写在副本 config.yml 的 revive 段里,把「倒计时自动复活 / 消耗道具复活 / 队友读条救起」这三种最常见的复活方式做成配几行就能用,不用每个副本自己在 player_death 脚本里手搓。

不写 revive 段,副本行为与以前完全一致:只有脚本里的 action.revive() 能复活。

全队共 3 次复活,死后 5 秒在出生点自动复活:

revive:
次数: 3
自动:
延迟: 5
revive:
次数: 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 这种字段。

键(中/英)类型默认说明
次数 / countInt0复活次数;-1 无限,0 禁止
次数模式 / count_mode共享 / 独立共享shared / independent
自动.延迟 / auto.delayInt—秒;有这个键才启用自动复活
自动.位置 / auto.atString出生点出生点 / 原地 / 区域.点位
道具.物品 / item.idString—物品ID:数量;有这个键才启用道具复活
道具.扣次数 / item.consume_countBooleanfalse
道具.位置 / item.atString原地
队友.读条 / ally.cast_timeInt—秒;有这个键才启用队友复活
队友.距离 / ally.rangeDouble4.0队友到倒下位置的距离
队友.扣次数 / ally.consume_countBooleantrue
队友.位置 / ally.atString原地
复活脚本 / on_revive列表/多行空复活成功后执行
耗尽脚本 / on_exhausted列表/多行空次数用完时执行一次(共享池按副本一次,独立按人一次)

位置写 区域.点位 时需要先在 区域配置 里定义点位,找不到会退回出生点并打 warn。

自动:死后动作栏倒数,到点自动起来,扣 1 次。

道具:死后聊天栏出现「点击使用 xx 复活」按钮,点一下就消耗身上的道具复活。旁观者没法右键物品,所以走的是点击按钮,不是右键。

队友:活着的队友走到倒下的位置附近按住潜行开始读条,动作栏显示进度。中途松开潜行、走出距离、自己倒下都会中断。倒下的那个人自己飘去哪都不影响,看的是倒下的位置。

三种可以同时开,谁先成立谁生效。

配了 revive 段后,副本自动按 lenient 语义判全灭:只要还有人能靠配置起来(自动倒计时中、或手里有复活道具且还有次数),就不触发 all_death。次数耗尽、倒计时被别人抢光了次数,才算真的全灭。没写 all_death 时,全灭后自动判定副本失败。

death_check_mode 不用再手动改。如果显式写了 strict 又配了复活,加载时会 warn 一句并按 lenient 处理。

主配置 config.yml 可以放一份同结构的 revive: 当全服默认,副本里的同名字段逐字段覆盖。副本想关掉全局开着的某种方式,写 自动: false(或 item: false / ally: false)即可。

plugins/QueDP/config.yml
revive:
count: 2
auto:
delay: 8
动作说明
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」这条链路原样保留
  • 原版不死图腾在手里生效时照旧不算副本死亡,也不扣复活次数