触发脚本用于在特定游戏事件发生时自动执行指令,如玩家登录、死亡、拾取物品、进入地图等。无需修改主程序,通过QTrigger.txt或QFunction-0.txt配合标签即可实现。以下为具体配置方式。
一、触发脚本存放位置
所有触发逻辑必须写入服务端“QuestDiary”目录下的文件:
全局触发:QFunction-0.txt(推荐);
独立触发模块:自定义文件如Triggers.txt,需在!Setup.txt中启用。
文件编码必须为ANSI,避免乱码导致失效。
二、常用触发事件与标签
系统预设标签对应固定事件,直接编写指令即可生效:
[@Login]:角色上线时触发;
[@Death]:角色死亡后执行;
[@LevelUp]:升级完成时运行;
[@MapEnter]:进入任意地图时激活;
[@GetItem]:拾取物品后触发;
[@ReConnection]:断线重连时调用。
三、基础触发示例:上线送礼包
在QFunction-0.txt末尾添加:
[@Login]
IF
CHECK [1] 0
ACT
GIVE 新手礼包 1
SET [1] 1
SAVEVAR HUMAN FIRST_LOGIN 1
说明:
CHECK [1] 0 判断是否首次登录([1]为临时变量);
SET [1] 1 标记已领取;
SAVEVAR 永久存储状态,防止重复领取。
四、条件组合:进入指定地图触发公告
[@MapEnter]
IF
EQUAL "3"
ACT
GuildNoticeMsg 0 255 『系统』欢迎来到比奇城!
获取当前地图编号,需与MapInfo.txt中定义一致。若需多地图判断,用OR连接:
IF
EQUAL "3"
OR
EQUAL "7"
五、死亡惩罚:掉落金币与装备
[@Death]
IF
CHECKPKPOINT 1
ACT
TAKE 金币
MOV D0
MUL D0 0.1
GIVE 金币 D0
DROPITEM 圣战戒指 1
说明:
CHECKPKPOINT 1 确保红名才触发;
获取玩家当前金币;
DROPITEM 将物品掉落在死亡坐标。
六、拾取物品触发合成
当玩家获得“铁矿”时自动合成黑铁:
[@GetItem]
IF
EQUAL "铁矿"
ACT
TAKE 铁矿 1
GIVE 黑铁矿石 1
SENDMSG 6 合成成功:铁矿→黑铁矿石
注意: 必须与StdItems.txt中的物品名称完全一致。
七、定时触发:每日奖励发放
利用[@Login]结合日期变量实现:
[@Login]
IF
NOTEQUAL
ACT
GIVE 金条 1
MOV HUMAN LAST_DAILY
返回格式为YYYYMMDD的字符串,确保每日仅触发一次。
八、触发优先级与冲突处理
同一标签下,条件按从上到下顺序匹配,首条满足即执行;
避免在[@Death]中使用MAPMOVE,因角色已死亡无法传送;
若触发未生效,检查M2Server日志是否报“脚本语法错误”,重点排查GIVE/TAKE物品名拼写。
九、调试技巧
在关键动作前插入:SENDMSG 0 触发测试;
使用D0–D99临时变量记录中间值,如:MOV D0 ;
重启服务端后首次触发可能延迟,建议用小号实测。
以上方法覆盖90%以上触发场景,无需外部工具,直接编辑文本文件即可部署。所有指令均基于标准引擎语法,适用于主流版本。

