传奇服务端通过触发脚本实现玩家行为响应,如对话、拾取、进入地图、使用物品等。核心文件为QFunction-0.txt、QManage.txt和UserCmd.txt,采用“事件标签+条件判断+执行动作”三层结构。以下详解设置方法、常用标签及实战案例。
触发脚本基本结构
每个触发块以[@事件标签]开头,后接#IF条件区和#ACT动作区。例如:
[@Login]
IF
CheckLevel30
ACT
SendMsg0"欢迎高级玩家!"
GiveItem金创药5
当玩家登录时,若等级≥30,则发送消息并给予药品。若无#IF,则无条件执行#ACT内容。
常用事件标签分类
1.角色生命周期事件
[@Login]:角色登录时触发;
[@Logout]:角色退出时触发;
[@Death]:角色死亡时触发;
[@ReAlive]:角色复活时触发。
2.地图与坐标事件
[@MapEnter]:进入任意地图时触发;
[@MapLeave]:离开地图时触发;
[@Move]:每次移动坐标时触发(慎用,高频);
自定义地图入口:[@MapEnter_地图名],如[@MapEnter_3000]。
3.物品与背包事件
[@PickUp]:拾取物品时触发;
[@DropItem]:丢弃物品时触发;
[@UseItem]:使用背包内物品时触发(需物品绑定脚本)。
4.对话与NPC交互
[@Main]:点击NPC主菜单时触发;
[@Menu_X]:选择第X个对话选项时触发;
[@InputString]:玩家输入文本后触发(配合SendAsk使用)。
5.技能与战斗事件
[@MagicalTime_X]:使用技能ID为X时触发;
[@Attack]:发起攻击时触发;
[@Struck]:被攻击时触发。
条件判断指令(#IF区)
CheckLevelN:角色等级≥N;
CheckGoldN:金币≥N;
CheckItem物品名数量:背包含指定物品;
CheckBagSizeN:背包空位≥N;
InMap地图名:当前位于某地图;
RandomN:N%概率成立;
IsAdmin:是否为管理员;
CheckGuildName行会名:所属行会匹配;
CheckHumLevelN:目标玩家等级≥N(用于PK或组队场景)。
多个条件可叠加,全部满足才执行动作。使用#ELSE可处理不满足条件的情况。
执行动作指令(#ACT区)
SendMsg颜色代码"内容":向玩家发送消息(0=白色,1=红色等);
GiveItem物品名数量:给予物品;
DelItem物品名数量:扣除物品;
ChangeMap地图名XY:传送至指定坐标;
RecallMob怪物名数量持续时间:召唤怪物;
Set[变量名]值:设置自定义变量(如HUMAN(任务状态)=1);
Goto@标签:跳转至同一文件内的其他标签;
DelayGoto@标签毫秒:延迟后跳转;
Close:关闭NPC对话窗口。
实战案例:新手任务触发
目标:玩家首次进入地图“比奇省”时,自动弹出任务提示。
在QFunction-0.txt中添加:
[@MapEnter_0]
IF
!Check[HUMAN(新手任务)]
ACT
SendAsk"是否接受新手任务?"
Set[HUMAN(新手任务)]1
再定义响应标签:
[@AcceptTask]
ACT
GiveItem木剑1
GiveItem小红药10
SendMsg0"任务已接受,祝你冒险顺利!"
[@RefuseTask]
ACT
SendMsg1"你拒绝了任务,可稍后找村长重新领取。"
!Check表示变量未设置或为0,确保任务仅触发一次。
注意事项
所有标签名区分大小写,建议统一小写;
脚本文件必须保存为ANSI或UTF-8无BOM格式,否则中文乱码;
修改后需重启M2Server主程序生效;
避免在[@Move]等高频事件中执行复杂操作,防止卡顿;
变量命名推荐加前缀(如HUMAN、GUILD),避免冲突。
通过组合事件标签、条件与动作,可构建完整的任务、副本、活动系统。触发脚本是传奇服务端扩展功能的核心手段,掌握其逻辑即可实现高度自定义的游戏流程。
触发脚本基本结构
每个触发块以[@事件标签]开头,后接#IF条件区和#ACT动作区。例如:
[@Login]
IF
CheckLevel30
ACT
SendMsg0"欢迎高级玩家!"
GiveItem金创药5
当玩家登录时,若等级≥30,则发送消息并给予药品。若无#IF,则无条件执行#ACT内容。
常用事件标签分类
1.角色生命周期事件
[@Login]:角色登录时触发;
[@Logout]:角色退出时触发;
[@Death]:角色死亡时触发;
[@ReAlive]:角色复活时触发。
2.地图与坐标事件
[@MapEnter]:进入任意地图时触发;
[@MapLeave]:离开地图时触发;
[@Move]:每次移动坐标时触发(慎用,高频);
自定义地图入口:[@MapEnter_地图名],如[@MapEnter_3000]。
3.物品与背包事件
[@PickUp]:拾取物品时触发;
[@DropItem]:丢弃物品时触发;
[@UseItem]:使用背包内物品时触发(需物品绑定脚本)。
4.对话与NPC交互
[@Main]:点击NPC主菜单时触发;
[@Menu_X]:选择第X个对话选项时触发;
[@InputString]:玩家输入文本后触发(配合SendAsk使用)。
5.技能与战斗事件
[@MagicalTime_X]:使用技能ID为X时触发;
[@Attack]:发起攻击时触发;
[@Struck]:被攻击时触发。
条件判断指令(#IF区)
CheckLevelN:角色等级≥N;
CheckGoldN:金币≥N;
CheckItem物品名数量:背包含指定物品;
CheckBagSizeN:背包空位≥N;
InMap地图名:当前位于某地图;
RandomN:N%概率成立;
IsAdmin:是否为管理员;
CheckGuildName行会名:所属行会匹配;
CheckHumLevelN:目标玩家等级≥N(用于PK或组队场景)。
多个条件可叠加,全部满足才执行动作。使用#ELSE可处理不满足条件的情况。
执行动作指令(#ACT区)
SendMsg颜色代码"内容":向玩家发送消息(0=白色,1=红色等);
GiveItem物品名数量:给予物品;
DelItem物品名数量:扣除物品;
ChangeMap地图名XY:传送至指定坐标;
RecallMob怪物名数量持续时间:召唤怪物;
Set[变量名]值:设置自定义变量(如HUMAN(任务状态)=1);
Goto@标签:跳转至同一文件内的其他标签;
DelayGoto@标签毫秒:延迟后跳转;
Close:关闭NPC对话窗口。
实战案例:新手任务触发
目标:玩家首次进入地图“比奇省”时,自动弹出任务提示。
在QFunction-0.txt中添加:
[@MapEnter_0]
IF
!Check[HUMAN(新手任务)]
ACT
SendAsk"是否接受新手任务?"
Set[HUMAN(新手任务)]1
再定义响应标签:
[@AcceptTask]
ACT
GiveItem木剑1
GiveItem小红药10
SendMsg0"任务已接受,祝你冒险顺利!"
[@RefuseTask]
ACT
SendMsg1"你拒绝了任务,可稍后找村长重新领取。"
!Check表示变量未设置或为0,确保任务仅触发一次。
注意事项
所有标签名区分大小写,建议统一小写;
脚本文件必须保存为ANSI或UTF-8无BOM格式,否则中文乱码;
修改后需重启M2Server主程序生效;
避免在[@Move]等高频事件中执行复杂操作,防止卡顿;
变量命名推荐加前缀(如HUMAN、GUILD),避免冲突。
通过组合事件标签、条件与动作,可构建完整的任务、副本、活动系统。触发脚本是传奇服务端扩展功能的核心手段,掌握其逻辑即可实现高度自定义的游戏流程。

