传奇服务端增加死亡复活功能完整教程触发段命令与复活方式设置详解

来源: 作者: 点击:
人物倒下之后画面变灰,只能小退重登,这是原版最原始的死亡状态。给服务端加死亡复活,说白了就是抓住人物死亡那一瞬间的触发点,再决定让他从哪里、以什么代价站起来。可选的路子就几条:自动回城、原地站起、消耗元宝或道具复活、装备触发复活。每条对应不同的命令和触发段,混着写就容易出毛病。

一、死亡触发段放在哪

人物死亡的触发段统一写在功能脚本里,路径是 Mir200\Envir\Market_Def\QFunction-0.txt。这个文件里的 @PlayDie 段,每个人物死亡都会走一次,是复活逻辑的主入口。只要引擎识别到这个段就会执行,不需要额外挂地图或配 NPC。

段的写法是 #IF 跟条件、#ACT 跟动作,两条配对。有的引擎只写 #ACT 不写 #IF 也能跑,但为了规范还是成对写,省得换版本时出岔子。

二、回城复活

最简单的做法是死亡后延迟几秒,把人送回主城再复活。主城一般写土城的三号地图。

[@PlayDie]
#IF
#ACT
DELAYGOTO 3000 @复活回城
#say
君子报仇十年不晚。\
三秒后自动复活。

[@复活回城]
#IF
#ACT
GMEXECUTE 复活 Self
MAPMOVE 3 333 333
break

DELAYGOTO 的参数按毫秒算,3000 就是三秒。GMEXECUTE 复活 Self 调的是引擎内置复活命令,Self 指本人。MAPMOVE 把人送到主城坐标。这两条顺序不能反,先复活再移动,反过来人飞过去了还顶着死亡状态。

这里有个坑,GMEXECUTE 后面的复活命令名不是所有引擎都叫复活,有的叫 Relive,有的叫 ReAlive,有的干脆写立即复活。名字以 M2 选项里的游戏命令列表为准,或者翻 Command.ini 里的 ReAlive 那一项。对不上号,脚本跑了人还是灰的。

三、原地复活

原地复活不进回城,直接在倒下的位置站起来,适合PK和抢BOSS这种不想跑图的场景。去掉移动,只留复活:

[@PlayDie]
#IF
#ACT
GmExeCute 复活 Self
break

只调复活命令、不加 MAPMOVE,人就留在原地。个别引擎的复活命令自带回城行为,这种要在后面补一条 MAPMOVE 拉回原坐标,或者干脆换成 REALIVE。

REALIVE 是另一条复活命令,写法极简:

[@main]
#ACT
REALIVE

它复活当前人物,不带传送。引擎文档把 REALIVE 归在死亡复活类命令下,和 KILL 成对。做原地复活用 REALIVE 比 GMEXECUTE 干净,不受命令配置表的名字影响。

四、收费复活

让玩家花元宝买复活,是运营里最常做的设计。核心就两步,判断元宝够不够,够就扣元宝复活,不够给提示。元宝判断用 CHECKGAMEGOLD,扣除用 GAMEGOLD 减号。

[@PlayDie]
#IF
#ACT
DELAYGOTO 5000 @复活回城
#say
君子报仇十年不晚。\
五秒后自动复活。\
如果你有5元宝,可以马上原地复活。\
<使用元宝原地复活/@原地复活>

[@原地复活]
#IF
CHECKGAMEGOLD > 4
#ACT
GAMEGOLD - 5
GMEXECUTE 复活 Self
break
#ELSEACT
SENDMSG 6 元宝不足,无法原地复活。

CHECKGAMEGOLD 后面接大于号加数字,判断是否高于这个值。扣元宝是 GAMEGOLD 减号接数量。价格想按等级浮动,把要扣的数量算进变量再扣:

[@PlayDie]
#IF
CHECKLEVELEX < 8
#ACT
BREAK

#IF
#ACT
MOV M99 LEVELDIV DIV M99 8 #IF CHECKGAMEGOLD ? STR(M99)
#ACT
QUERYVALUE 2 2 10 @RealiveNow 原地复活无痛苦,你只需要花【<$STR(M99)>】元宝 QF

QUERYVALUE 弹一个窗口给客户端,参数依次是返回值编号、返回类型、输入长度、跳转段、提示文字、跳转宿主,末尾的 QF 表示跳转目标在 QFunction 里。等级越高,DIV 出来的价格越高,等级差异定价就实现了。

五、复活时触发

人物真正站起来的瞬间也有触发段,在 QFunction-0.txt 里的 @Revival。适合做复活提示、复活特效、复活后挂状态。

[@Revival]
#IF
#ACT
SendMsg 5 你复活了。
SENDMSG 6 剩余复活时间 <$RevivalTime>

<$RevivalTime> 是复活剩余时间变量,配合装备复活用。带英雄的版本另有 [@H.Revival],英雄复活走这段。

[@H.Revival]
#IF
#ACT
SendMsg 5 你的英雄复活了。

六、装备触发复活

复活戒指这类装备靠配置表驱动,不用写脚本。表在 Mir200\Envir\RevivalItemList.txt,每行三列:装备名称、复活间隔秒数、恢复血量百分比。

复活戒指Lv1 120 10
复活戒指Lv2 110 20
复活戒指Lv3 100 30
转生戒指Lv4 90 40
九转天龙戒Max 45 85
觉醒·九转天龙戒Max 30 100

第一列必须是能复活的装备名,第二列是冷却秒数,第三列是复活回多少血,100 就是满血。玩家戴多个复活类装备时,按装备位置顺序,最后一个生效,别指望叠加。

装备复活的界面提示得另做。想显示可复活或者倒计时数字,用定时器每秒刷一次变量:

[@Login]
#IF
#ACT
SetOnTimer 3 1

[@OnTimer3]
#IF
LARGE U1 0
#ACT
DEC U1 1
MOV S
复活
𝐶
𝐷
<
复活CD<STR(U1)>
#ELSEACT
MOV S$复活CD 可复活

U1 存当前冷却剩余,定时器每秒减一,减到零就把状态字改成可复活,再配自定义按钮显示到界面上。

七、有限次数复活

想让复活次数可控,比如 NPC 发十次机会、五分钟内有效,用 Setreborn。

格式是 Setreborn 复活次数 有效秒数。

[@测试脚本]
#ACT
Setreborn 10 300
SendMsg 6 已获得10次复活,五分钟内有效。

这条命令给的复活不受正常复活间隔限制,能按设置次数反复站起,用的时候心里要有数。过程中剩余次数查 <
𝑁
𝑝
𝑐
𝑅
𝑒
𝑏
𝑜
𝑟
𝑛
𝐶
𝑜
𝑢
𝑛
𝑡
>
,已用次数查
<
NpcRebornCount>,已用次数查<TriggerNpcRebornCount>,配合 [@NpcRevival] 做统计和提示。

八、次数和冷却的存取

次数、冷却这类数据要落盘,不然小退就重置。变量用 HUMAN 私人变量,存到 QuestDiary 下的变量文件里。

在 QManage.txt 的登录段先把变量读出来:

[@login]
#IF
CHECKLEVELEX > 0
#ACT
VAR Integer HUMAN 复活
LOADVAR HUMAN 复活 ..\QuestDiary\修真数据\修真变量.txt

复活一次就加一并存回:

[@原地复活]
#IF
CHECKITEMW 无上裁决 1
CHECKVAR HUMAN 复活 = 0
#ACT
PLAYEFFECT 补丁 491 14 1 120
REALIVE
CALCVAR HUMAN 复活 + 13
SAVEVAR HUMAN 复活 ..\QuestDiary\修真数据\修真变量.txt
SendCenterMsg 253 252 <$USERNAME>的装备触发了原地复活 1 4

CHECKVAR 判断变量值,CALCVAR 做加减,SAVEVAR 写回文件。人物重启后计数还在,冷却不丢。想定时清冷却,用机器人脚本挂一个按分钟跑的段,把大于零的计数减一。

Robot_def\AutoRunRobot.txt 里加:

#AutoRun NPC SEC 60 @清理复活冷却

Robot_def\RobotManage.txt 里写:

[@清理复活冷却]
#IF
CHECKVAR HUMAN 复活 > 0
#ACT
CALCVAR HUMAN 复活 - 1
SAVEVAR HUMAN 复活 ..\QuestDiary\修真数据\修真变量.txt
break

九、条件和例外

不是每次死亡都该走复活。皇宫、沙巴克、比赛地图这类地方常禁止原地复活,不然守城直接崩。判断地图用 ISONMAP 或 CHECKMAP,命中就断掉。

[@RealiveNow]
#IF
ISONMAP 0150
#ACT
SENDMSG 7 皇宫不允许复活,请回安全区。
break

等级限制也常加,低级号不给复活,逼人练级。CHECKLEVELEX < 8 命中的直接 BREAK,跳出 @PlayDie,后面什么都不执行。

被打死的原因也分。KILLBYHUM 判断凶手是不是玩家,人打死走一套提示,怪打死走另一套,做行会公告和全服播报时用得上。

十、常见故障

人复活不了,先查命令名。GMEXECUTE 后面那个复活,各引擎叫法不一,翻 M2 游戏命令表或 Command.ini 里的 ReAlive 项对照,配错了脚本照样跑但没效果。

画面还是灰的,多半是复活命令和移动命令顺序反了,或者复活命令压根没执行。中间加一条 SENDMSG 6 测试 打印,看脚本走到哪一步断的。

QFunction 没加载,检查文件在不在 Market_Def 目录下,有没有被别的文件覆盖。引擎启动日志会报脚本错误,#IF 和 #ACT 不成对、段名重名、路径写错都会让整段失效。

小退后冷却重置,是变量没存盘,补 LOADVAR 和 SAVEVAR。改完记得重载脚本或重启,不然改的是文件、跑的还是旧逻辑。

英雄死了不复活,是英雄和人物的判断分开,[@H.Revival] 得单独写,别指望人的复活段管到英雄。

复活机制落到脚本上并不复杂,一条死亡触发、一条复活命令、一条回城或原地移动,三样凑齐就能跑。剩下的全是条件和数据,什么时候给复活、要不要收费、冷却多久、哪些地图禁掉。把这些想清楚,脚本自然就顺了。