传奇PK死亡触发脚本编写完整教程

来源: 作者: 点击:
脚本位置与触发机制 死亡触发脚本通过QFunction-0.txt文件实现,该文件位于Mir200\Envir\MapQuest_def目录。玩家死亡时系统自动检测并执行对应脚本段,使用[@PlayDie]标签定义死亡触发。PK死亡需额外检测攻击者信息,通过<KILLER>变量获取击杀者名称,<USERNAME>变量获取死亡者名称。M2Server需在选项-功能设置-其他控制中开启死亡触发功能。

基础PK死亡公告脚本 最简单的PK死亡公告脚本示例:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]在<$MAPNAME>击杀了[<$USERNAME>]!

ISDUMMY检测是否为假人,是则BREAK终止脚本。CHECKCURRTARGETRACE = 0检测攻击者为玩家(0表示玩家,1表示怪物)。<$MAPNAME>获取当前地图名称。SENDMSG 0发送全服黄色公告。

详细PK信息记录 记录更详细的PK死亡信息:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]在<$MAPNAME>(<$X>,<$Y>)使用<$CURRRUSEMAGICID>技能击杀了[<$USERNAME>]!
MOV S0 <$KILLER>
MOV S1 <$USERNAME>
MOV S2 <$MAPNAME>
MOV S3 <$X>
MOV S4 <$Y>
MOV S5 <$CURRRUSEMAGICID>
WRITELINE ..\QuestDiary\PK记录.txt [<$DATETIME>] 击杀者:<$STR(S0)> 死亡者:<$STR(S1)> 地图:<$STR(S2)> 坐标:<$STR(S3)>,<$STR(S4)> 技能:<$STR(S5)>

<X>和<Y>获取死亡坐标,<$CURRRUSEMAGICID>获取使用的技能ID。MOV命令将变量值存入S系列变量,WRITELINE将记录写入文本文件,格式为[时间] 击杀者:XXX 死亡者:XXX 地图:XXX 坐标:X,Y 技能:XXX。

地图特定公告 仅在特定地图触发PK死亡公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
EQUAL <$MAP> 3
#ACT
SENDMSG 0 玩家[<$KILLER>]在盟重土城击杀了[<$USERNAME>],引起众人围观!
#IF
CHECKCURRTARGETRACE = 0
EQUAL <$MAP> 5
#ACT
SENDMSG 0 玩家[<$KILLER>]在沙巴克皇宫击杀了[<$USERNAME>],战斗激烈!

EQUAL <MAP> 3检测地图编号为3(盟重土城),EQUAL <MAP> 5检测地图编号为5(沙巴克皇宫)。不同地图显示不同公告内容。

行会战死亡公告 行会战期间PK死亡特别公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKGUILDFIGHT <$KILLER> <$USERNAME>
#ACT
SENDMSG 0 行会战激烈进行!玩家[<$KILLER>]击杀了敌对行会的[<$USERNAME>]!
SENDMSG 0 行会[<$GUILDNAME>]与[<$KILLERGUILD>]的战斗持续升温!

CHECKGUILDFIGHT检测双方是否为行会战关系。<GUILDNAME>获取死亡者行会名称,<KILLERGUILD>获取击杀者行会名称。行会战期间PK发送特别公告。

等级差距公告 根据等级差距显示不同公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
GetHumVar <$KILLER> P0
GetHumVar <$USERNAME> P1
#IF
LARGE P0 P1 10
#ACT
SENDMSG 0 高等级玩家[<$KILLER>](<$STR(P0)>级)欺负小号[<$USERNAME>](<$STR(P1)>级)!
#IF
SMALL P0 P1 10
#ACT
SENDMSG 0 玩家[<$USERNAME>](<$STR(P1)>级)被低等级玩家[<$KILLER>](<$STR(P0)>级)逆袭击杀!
#ELSEACT
SENDMSG 0 玩家[<$KILLER>]在势均力敌的战斗中击杀了[<$USERNAME>]!

GetHumVar获取玩家等级存入变量,LARGE P0 P1 10检测击杀者等级比死亡者高10级以上,SMALL P0 P1 10检测低10级以上。根据等级差距显示不同语气公告。

连续击杀公告 记录连续击杀次数并公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
INC G0 1
#IF
LARGE G0 2
#ACT
SENDMSG 0 玩家[<$KILLER>]已经连续击杀了<$STR(G0)>名玩家,正在大杀特杀!
#IF
LARGE G0 4
#ACT
SENDMSG 0 玩家[<$KILLER>]已经连续击杀了<$STR(G0)>名玩家,无人能挡!
#IF
LARGE G0 6
#ACT
SENDMSG 0 玩家[<$KILLER>]已经连续击杀了<$STR(G0)>名玩家,如同战神降临!

INC G0 1增加全局变量G0(连续击杀计数),LARGE G0 2检测连续击杀大于2次。根据连续击杀次数显示不同级别公告。需在玩家下线或长时间未击杀时重置G0变量。

复仇系统触发 PK死亡后触发复仇任务:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]击杀了[<$USERNAME>],仇恨的种子已经埋下!
MOV S10 <$KILLER>
SET [复仇目标] 1
SENDMSG 0 你获得了复仇任务,击杀[<$STR(S10)>]可获得额外奖励!

SET [复仇目标] 1设置复仇任务标记,MOV S10 <$KILLER>保存击杀者名称到变量。死亡玩家获得复仇任务,后续击杀该目标可获得奖励。

红名惩罚公告 PK值过高玩家死亡特别公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
GetHumVar <$USERNAME> P2
#IF
LARGE P2 100
#ACT
SENDMSG 0 红名玩家[<$USERNAME>](PK值:<$STR(P2)>)被[<$KILLER>]终结,大快人心!
#IF
LARGE P2 200
#ACT
SENDMSG 0 罪恶滔天的红名玩家[<$USERNAME>](PK值:<$STR(P2)>)终于伏诛!

GetHumVar获取死亡者PK值,LARGE P2 100检测PK值大于100,LARGE P2 200检测大于200。根据PK值显示不同公告,高PK值玩家死亡时公告语气更强烈。

装备掉落公告 PK死亡掉落装备时公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKITEMW 屠龙
#ACT
SENDMSG 0 惊天动地!玩家[<$USERNAME>]被[<$KILLER>]击杀,身上的屠龙爆出来了!
#IF
CHECKCURRTARGETRACE = 0
CHECKITEMW 开天
#ACT
SENDMSG 0 玩家[<$USERNAME>]被[<$KILLER>]击杀,珍贵的开天剑掉落在地!

CHECKITEMW检测死亡者是否穿戴指定装备,屠龙、开天为装备名称。穿戴特定装备死亡时发送特别公告,吸引其他玩家注意。

时间记录与统计 记录PK死亡时间并统计每日数据:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]于<$HOUR>:<$MINUTE>击杀了[<$USERNAME>]!
INC G1 1
#IF
LARGE G1 10
#ACT
SENDMSG 0 今日PK事件已发生<$STR(G1)>起,江湖纷争不断!

<HOUR>和<MINUTE>获取当前小时和分钟。INC G1 1增加全局变量G1(当日PK计数),LARGE G1 10检测大于10次时发送统计公告。需在每日0点重置G1变量。

师徒系统保护 师徒之间PK死亡不公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKMASTER <$KILLER> <$USERNAME>
#ACT
SENDMSG 0 师徒切磋,点到为止!
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKMASTER <$USERNAME> <$KILLER>
#ACT
SENDMSG 0 师徒切磋,点到为止!
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]击杀了[<$USERNAME>]!

CHECKMASTER检测双方是否为师徒关系,是则发送切磋消息并BREAK终止后续公告。避免师徒PK产生全服公告。

组队误伤处理 组队成员PK死亡不公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKGROUP <$KILLER> <$USERNAME>
#ACT
SENDMSG 0 队伍误伤,下次注意!
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]击杀了[<$USERNAME>]!

CHECKGROUP检测双方是否为同组队员,是则发送误伤消息并BREAK。防止组队时误杀队友产生全服公告。

行会成员保护 同行会成员PK死亡内部公告:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKGUILD <$KILLER> <$USERNAME>
#ACT
GUILDMESSAGE 0 行会内部矛盾:[<$KILLER>]击杀了[<$USERNAME>],请自行调解!
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]击杀了[<$USERNAME>]!

CHECKGUILD检测双方是否为同行会成员,是则发送行会内部消息GUILDMESSAGE 0并BREAK。同行会PK不发送全服公告,仅行会内部通知。

死亡惩罚系统 PK死亡后施加惩罚:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]击杀了[<$USERNAME>]!
CHANGEEXP - 10000
SENDMSG 0 [<$USERNAME>]因死亡损失10000点经验!

CHANGEEXP - 10000减少死亡者10000点经验值。PK死亡后除了公告还施加经验惩罚,增加PK成本。

击杀奖励系统 击杀者获得奖励:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
#ACT
SENDMSG 0 玩家[<$KILLER>]击杀了[<$USERNAME>],获得江湖声望!
GAMEGOLD + 50
SENDMSG 0 [<$KILLER>]获得50元宝奖励!

GAMEGOLD + 50给击杀者增加50元宝。PK成功获得奖励,激励玩家参与PK活动。

多条件组合公告 综合多个条件决定公告内容:

[@PlayDie]
#IF
ISDUMMY
#ACT
BREAK
#IF
CHECKCURRTARGETRACE = 0
CHECKLEVELEX > 40 <$KILLER>
CHECKLEVELEX > 40 <$USERNAME>
CHECKITEMW 屠龙 <$USERNAME>
#ACT
SENDMSG 0 巅峰对决!高手[<$KILLER>]击杀了手持屠龙的[<$USERNAME>]!
#IF
CHECKCURRTARGETRACE = 0
CHECKLEVELEX < 30 <$KILLER>
CHECKLEVELEX > 40 <$USERNAME>
#ACT
SENDMSG 0 以下克上!低等级玩家[<$KILLER>]逆袭击杀了高等级玩家[<$USERNAME>]!

CHECKLEVELEX检测玩家等级,CHECKITEMW检测装备。多个条件组合判断,根据对战双方等级、装备等情况发送不同公告。

脚本调试方法 测试死亡触发脚本时使用GM命令辅助。@Kill自杀测试死亡触发。@ReloadQFunction重载QFunction-0.txt脚本。@ViewG0查看全局变量G0值。@SetG0 0重置连续击杀计数。观察M2Server控制台输出,确认脚本执行。修改脚本后及时重载,避免重启服务端。测试时注意区分玩家PK死亡和怪物击杀死亡,确保只有PK死亡触发公告。

最终脚本部署 在QFunction-0.txt中添加[@PlayDie]段死亡触发脚本,保存文件。M2Server控制台点击选项-功能设置-其他控制,确认开启死亡触发功能。重启M2Server或使用@ReloadQFunction命令重载脚本。进行PK测试,确认死亡公告正常触发。根据需求调整公告内容、条件判断、变量记录等功能。定期检查PK记录文件,监控服务器PK情况。优化脚本逻辑,确保稳定运行不影响服务器性能。