传奇触发脚本设置全解析:事件响应与条件动作配置

来源: 作者: 点击:
传奇服务端通过触发脚本实现玩家行为响应,如对话、拾取、进入地图、使用物品等。核心文件为 QFunction-0.txt、QManage.txt 和 UserCmd.txt,采用“事件标签 + 条件判断 + 执行动作”三层结构。以下详解设置方法、常用标签及实战案例。

触发脚本基本结构

每个触发块以 [@事件标签] 开头,后接 #IF 条件区和 #ACT 动作区。例如:

[@Login]
IF
CheckLevel 30
ACT
SendMsg 0 "欢迎高级玩家!"
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 区)

CheckLevel N:角色等级 ≥ N;
CheckGold N:金币 ≥ N;
CheckItem 物品名 数量:背包含指定物品;
CheckBagSize N:背包空位 ≥ N;
InMap 地图名:当前位于某地图;
Random N:N% 概率成立;
IsAdmin:是否为管理员;
CheckGuildName 行会名:所属行会匹配;
CheckHumLevel N:目标玩家等级 ≥ N(用于PK或组队场景)。

多个条件可叠加,全部满足才执行动作。使用 #ELSE 可处理不满足条件的情况。

执行动作指令(#ACT 区)

SendMsg 颜色代码 "内容":向玩家发送消息(0=白色,1=红色等);
GiveItem 物品名 数量:给予物品;
DelItem 物品名 数量:扣除物品;
ChangeMap 地图名 X Y:传送至指定坐标;
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
SendMsg 0 "任务已接受,祝你冒险顺利!"

[@RefuseTask]
ACT
SendMsg 1 "你拒绝了任务,可稍后找村长重新领取。"

!Check 表示变量未设置或为0,确保任务仅触发一次。

注意事项

所有标签名区分大小写,建议统一小写;
脚本文件必须保存为 ANSI 或 UTF-8 无BOM格式,否则中文乱码;
修改后需重启 M2Server 主程序生效;
避免在 [@Move] 等高频事件中执行复杂操作,防止卡顿;
变量命名推荐加前缀(如 HUMAN、GUILD),避免冲突。

通过组合事件标签、条件与动作,可构建完整的任务、副本、活动系统。触发脚本是传奇服务端扩展功能的核心手段,掌握其逻辑即可实现高度自定义的游戏流程。