在传奇类游戏中,角色受到攻击时自动退出(如回城、下线或传送)可通过脚本逻辑结合条件判断实现。该功能依赖服务端支持的命令与事件触发机制,需在QFunction.txt或相关脚本文件中配置。
核心原理是监听“被攻击”事件。部分服务端引擎提供专用标签,例如[@OnHit]或[@Attacked],当角色受到怪物或其他玩家伤害时自动触发。若引擎不支持该事件,可采用定时检测HP变化的方式模拟。
方法一:使用内置被攻击事件标签(适用于支持的引擎)
在QFunction.txt中添加:
[@OnHit]
IF
CHECKMAP 比奇野外
ACT
MAPMOVE 3
SENDMSG 5 遭受攻击,已自动回城!
此脚本表示角色在“比奇野外”地图被击中时,立即传送到安全区(地图3通常为盟重省)。可根据实际MapInfo.txt中的地图编号调整目标坐标。
方法二:通过HP变化检测实现(通用方案)
创建循环检测脚本,记录当前HP并与上一次对比:
; 初始化变量
[@Login]
MOV NLastHP H
; 定时检测(每2秒执行一次)
[@CheckHPLoop]
DELAY 2000
IF
SMALL H NLastHP
ACT
MAPMOVE 3
SENDMSG 5 生命值下降,疑似被攻击,已退出!
BREAK
elseact
MOV NLastHP H
GOTO @CheckHPLoop
该逻辑需在玩家登录时启动检测循环,并在每次HP减少时判定为受击,执行退出动作。注意避免因自然掉血(如中毒)误触发,可增加“是否在安全区”或“是否在战斗状态”等二次判断。
方法三:结合地图与怪物 proximity 判断
若角色进入高危地图(如赤月峡谷),可预设自动保护机制:
[@MapEnter_7] ; 假设7为赤月老巢地图编号
IF
CHECKONLINE
ACT
STARTTIMER 1 5000 ; 启动5秒定时器
[@Timer_1]
IF
MONCOUNT > 0 ; 周围存在怪物
ACT
MAPMOVE 3
此方式在进入危险地图后检测周围是否有怪物,若有则立即退出,避免被围攻。
退出动作不限于回城,也可执行以下操作:
使用回城卷:USE 回城卷
强制下线:KICK CharName(需GM权限)
传送至指定坐标:MAPMOVE 地图名 X Y
注意事项:
脚本中的地图编号、物品名称必须与服务端配置完全一致;
频繁传送可能触发反外挂机制,建议加入冷却时间;
部分引擎需开启“允许脚本控制移动”权限;
HP检测法在多人同屏战斗时可能因延迟导致误判,应结合地图类型过滤。
实际部署时,将上述逻辑写入对应事件标签,并确保脚本文件被正确加载。修改后需重载脚本或重启服务端使设置生效。测试阶段应在低等级地图进行,防止角色意外死亡或卡位。

