当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

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

一、死亡触发段放在哪

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

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

二、回城复活

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

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

[@复活回城]
#IF
#ACT
GMEXECUTE复活Self
MAPMOVE3333333
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
DELAYGOTO5000@复活回城
#say
君子报仇十年不晚。\
五秒后自动复活。\
如果你有5元宝,可以马上原地复活。\
<使用元宝原地复活/@原地复活>

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

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

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

#IF
#ACT
MOVM99LEVELDIVDIVM998#IFCHECKGAMEGOLD?STR(M99)
#ACT
QUERYVALUE2210@RealiveNow原地复活无痛苦你只需要花【<$STR(M99)>】元宝QF

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

五、复活时触发

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

[@Revival]
#IF
#ACT
SendMsg5你复活了。
SENDMSG6剩余复活时间<$RevivalTime>

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

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

六、装备触发复活

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

复活戒指Lv112010
复活戒指Lv211020
复活戒指Lv310030
转生戒指Lv49040
九转天龙戒Max4585
觉醒·九转天龙戒Max30100

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

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

[@Login]
#IF
#ACT
SetOnTimer31

[@OnTimer3]
#IF
LARGEU10
#ACT
DECU11
MOVS
复活
𝐶
𝐷
<
复活CD<STR(U1)>
#ELSEACT
MOVS$复活CD可复活

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

七、有限次数复活

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

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

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

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

八、次数和冷却的存取

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

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

[@login]
#IF
CHECKLEVELEX>0
#ACT
VARIntegerHUMAN复活
LOADVARHUMAN复活..\QuestDiary\修真数据\修真变量.txt

复活一次就加一并存回:

[@原地复活]
#IF
CHECKITEMW无上裁决1
CHECKVARHUMAN复活=0
#ACT
PLAYEFFECT补丁491141120
REALIVE
CALCVARHUMAN复活+13
SAVEVARHUMAN复活..\QuestDiary\修真数据\修真变量.txt
SendCenterMsg253252<$USERNAME>的装备触发了原地复活14

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

Robot_def\AutoRunRobot.txt里加:

#AutoRunNPCSEC60@清理复活冷却

Robot_def\RobotManage.txt里写:

[@清理复活冷却]
#IF
CHECKVARHUMAN复活>0
#ACT
CALCVARHUMAN复活-1
SAVEVARHUMAN复活..\QuestDiary\修真数据\修真变量.txt
break

九、条件和例外

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

[@RealiveNow]
#IF
ISONMAP0150
#ACT
SENDMSG7皇宫不允许复活,请回安全区。
break

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

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

十、常见故障

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

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

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

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

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

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