[@main]
#ACT
MESSAGE 追杀标记面板,可标记目标玩家开启追杀监控,清除追杀标记查看当前目标
#IF
ISADMIN
#ACT
MESSAGE 管理员可执行追杀相关操作,普通玩家无权限使用此功能
MESSAGE 1.设置追杀目标 2.清除追杀标记 3.查看当前追杀目标 4.关闭面板
BREAK
#ELSEACT
MESSAGE 你没有权限操作追杀功能
BREAK
[@设置追杀目标]
#IF
ISADMIN
#ACT
INPUTS 输入需要追杀的角色名称 S1
CHECKHUMAN <$\(STR(S1)>
#IF
#ACT
CALCVAR GLOBAL ChaseTarget = <\)$STR(S1)>
CALCVAR GLOBAL ChaseOpen = 1
SENDMSG 0 系统已将<$\(STR(S1)>设为追杀目标,开始全地图监控
MESSAGE 追杀目标设置成功,引擎持续监控目标位置与在线状态
BREAK
#ELSEACT
MESSAGE 输入的角色不存在或者未在线,请核对角色名称
BREAK
BREAK
[@清除追杀标记]
#IF
ISADMIN
CHECKVAR GLOBAL ChaseOpen = 1
#ACT
CALCVAR GLOBAL ChaseOpen = 0
CALCVAR GLOBAL ChaseTarget ""
SENDMSG 0 追杀监控已关闭,目标标记清除
MESSAGE 追杀标记清除完成,不再监控目标角色
BREAK
#ELSEACT
MESSAGE 当前没有生效的追杀标记,无需执行清除操作
BREAK
[@查看当前追杀目标]
#IF
ISADMIN
CHECKVAR GLOBAL ChaseOpen = 1
#ACT
MESSAGE 当前追杀目标:<\)$GLOBALVAR(ChaseTarget)>
BREAK
#ELSEACT
MESSAGE 暂无正在监控的追杀目标
BREAK
[@关闭面板]
#ACT
MESSAGE 关闭追杀控制面板
BREAK
QFunction-0.txt全局触发器,角色移动、上线触发追杀逻辑
[@OnTimer]
#IF
CHECKVAR GLOBAL ChaseOpen = 1
CHECKHUMAN <$\(GLOBALVAR(ChaseTarget)>
#ACT
HUMANPOS <\)$GLOBALVAR(ChaseTarget)> S1 S2 S3
SENDMSG 5 追杀目标位置:地图<$STR(S1)> \(STR(S1)> 坐标<\)<$STR(S2)>,<$\(STR(S3)>
BREAK
[@OnPlayerLogin]
#IF
CHECKVAR GLOBAL ChaseOpen = 1
ISADMIN
#ACT
CHECKVAR HUMAN <\)$GLOBALVAR(ChaseTarget)>
#IF
#ACT
SENDMSG 0 追杀目标<$\(GLOBALVAR(ChaseTarget)>已经上线,启动追踪
BREAK
#ELSEACT
SENDMSG 0 追杀目标暂未上线,继续等待
BREAK
BREAK
[@OnPlayerLogout]
#IF
CHECKVAR GLOBAL ChaseOpen = 1
ISADMIN
#ACT
ISADMIN
#IF
ISNAMEMATCH <\)$USERNAME> <$\(GLOBALVAR(ChaseTarget)>
#ACT
SENDMSG 0 追杀目标<\)$USERNAME>下线,暂停追踪
BREAK
BREAK
脚本适配3K引擎1.80版本,整套代码分为NPC控制面板模块和QFunction全局触发器模块,全局变量ChaseTarget用来存放被追杀玩家名称,ChaseOpen作为追杀功能开关标记。脚本文件存放路径为QuestDiary目录下新建Chase文件夹,全局变量保存文件放置在该目录,变量目录缺失会造成开关状态在服务器重启后丢失。
NPC面板仅开放管理员权限,普通玩家点击NPC会直接返回权限不足提示,避免功能被随意调用。INPUTS指令接收管理员输入的角色名字,CHECKHUMAN校验角色是否在线,只有在线角色才能成功设置追杀标记。设置成功后开启全局标记ChaseOpen,全服推送提示,后续定时器持续读取目标\(STR(S1)> 坐标<\)。
[@OnTimer]定时器循环读取目标玩家地图与\(STR(S1)> 坐标<\),HUMANPOS指令把目标地图编号、X\(STR(S1)> 坐标<\)、Y\(STR(S1)> 坐标<\)存入S1 S2 S3字符串变量,通过消息展示目标实时位置。定时器的执行间隔在引擎M2参数内调整,不要设置过短,频繁读取玩家位置会增加服务器运算负载,常规设置3到5秒执行一次即可。
[@OnPlayerLogin]玩家上线触发器,当追杀标记处于开启状态,被标记目标登录游戏时自动推送上线提示。[@OnPlayerLogout]玩家下线触发器,目标下线时推送下线通知,暂停位置追踪,目标再次上线后自动恢复监控。
清除追杀标记会重置ChaseOpen变量为0,清空ChaseTarget内存储的角色名称,定时器检测到开关关闭就不再执行位置读取逻辑。查看追杀目标标签读取全局变量内保存的角色名称,快速确认当前追踪对象。
测试阶段管理员输入角色名测试,上下线目标账号验证上线下线提示,移动目标角色查看\(STR(S1)> 坐标<\)消息是否正常刷新。可以增加地图过滤逻辑,目标进入指定安全地图时增加提示文字,或者增加距离判断,当目标和指定角色距离小于设定数值时触发额外提示。
可扩展功能,增加自动传送,检测目标\(STR(S1)> 坐标<\)后一键传送至目标身边,也可以增加目标死亡触发提示,在怪物死亡触发器内判断死亡角色名称是否匹配追杀目标,目标被击杀推送全服提示。也可以增加多目标追杀,改用数组变量存储多个角色名称,循环读取多个目标位置信息。
需要留意3K引擎指令适配问题,部分低版本内核HUMANPOS变量读取存在差异,\(STR(S1)> 坐标<\)不显示时核对引擎版本。全局字符串变量保存时,角色名称大小写必须和游戏内角色名称完全一致,名称不一致会导致无法识别目标。定时器任务数量不要过多,多个定时器同时运行容易造成服务器卡顿。
变量持久化可以添加SAVEVAR指令,每次修改ChaseOpen和ChaseTarget之后保存到文本,服务器重启后自动加载上次追杀标记。如果不需要重启保留状态,可以不添加保存指令,服务器重启自动清空追杀任务。追杀脚本仅做位置监控,不会自动攻击玩家,如需自动追击怪物,需要额外编写刷怪跟随脚本。
脚本不自带任何强制锁定、禁止移动类指令,仅提供位置监控与上下线提醒。在使用时注意定时器消息推送频率,短间隔大量消息刷屏会影响其他玩家体验,可修改SENDMSG消息颜色代码区分系统提示,避免和普通聊天文字混淆。

