传奇脚本是控制游戏内NPC对话、任务触发、物品发放、功能开关的核心机制,主要通过文本文件定义事件与动作。主流引擎如GOM、HERO均采用类似语法,以QFunction.txt为主控文件,配合NPC配置实现交互逻辑。
一、脚本文件结构
QFunction.txt
所有脚本逻辑的主入口,格式为[@标签名]后接条件判断与动作命令。例如:
[@测试]
#IF
EQUALLEVEL30
#ACT
GIVE10011
NPC配置文件
存放于EnvirMarket_def目录,如新手导师.txt,内容为对话选项与跳转指令:
[@main]
#SAY
欢迎新人玩家!\
变量存储
HUMAN变量:绑定玩家角色,重启不丢失(需开启持久化)
TEMP变量:临时使用,登出即清除
系统变量:USERNAME(角色名)、LEVEL(等级)、JOB(职业)等
二、基础语法要素
条件判断(#IF)
支持数值比较、物品检测、变量存在性校验:
#IF
LARGELEVEL10
CHECKITEM10011
EXISTVARHUMAN领取标记
动作执行(#ACT)
常用命令包括:
GIVEItemIndex数量:发放物品
TAKEItemIndex数量:扣除物品
MOV变量名值:赋值(如MOVS0100)
CALCS1S0+50:数学运算
SENDMSG颜色代码文本:向玩家发送消息
流程控制
GOTO@标签:跳转到指定分支
BREAK:终止当前脚本
CLOSE:关闭NPC对话框
三、编写第一个脚本:等级礼包
目标:玩家达到30级时,通过NPC领取一次性的武器奖励。
步骤1:创建NPC文件等级礼包.txt
[@main]
SAY
达到30级可领取奖励!\
步骤2:在QFunction.txt中添加处理逻辑
[@领取30礼包]
IF
SMALLLEVEL30
ACT
SENDMSG7等级不足30级,无法领取。
CLOSE
BREAK
IF
EXISTVARHUMANLevel30Gift
ACT
SENDMSG7已领取过该礼包。
CLOSE
BREAK
ELSEACT
GIVE10011
SETHUMANLevel30Gift1
SENDMSG7恭喜获得30级武器!
CLOSE
四、关键命令详解
物品操作
CHECKITEM10011:检测背包是否有至少1个ItemIndex=1001的物品
TAKE10011:精确扣除1个,避免负数错误
数值运算
MOVS0LEVEL
CALCS1S0*10;S1=等级×10
GAMEGOLDS1;设置元宝为S1值
输入交互
WAITING_INPUT[提示文本]超时秒数@回调标签
示例:
SENDMSG7请输入兑换数量:
WAITING_INPUT[数量]20@处理输入
五、调试方法
日志记录
在关键节点添加:
LOGGINGScriptTest:triggered@领取30礼包
日志文件位于MirServerLog目录。
即时测试
使用GM命令:
@level30:提升等级
@delitem:清空背包
@reloadscript:重载脚本(部分引擎支持)
错误排查
检查ItemIndex是否与StdItems.db一致
确认变量名无拼写错误(区分大小写)
验证条件顺序(从具体到宽泛)
六、常见问题处理
脚本不触发
确认NPC文件名与Npc_def.ini注册名称一致,且路径正确。
物品未发放
检查背包空间,或改用CHECKBAGSIZEItemIndex1预判。
变量失效
HUMAN变量需在M2Server设置中启用“保存人物变量”选项。
七、进阶方向
掌握基础后可扩展:
地图事件(进入某地图自动触发)
定时任务(每日登录奖励)
装备合成(多物品消耗生成新装备)
职业专属功能(道士职业召唤神兽脚本)
脚本编写核心在于逻辑清晰、条件完备、动作精准。从简单礼包入手,逐步叠加判断与交互,即可构建完整的游戏功能体系。所有操作均基于文本编辑,无需外部工具,直接修改保存后重启服务端生效。
一、脚本文件结构
QFunction.txt
所有脚本逻辑的主入口,格式为[@标签名]后接条件判断与动作命令。例如:
[@测试]
#IF
EQUALLEVEL30
#ACT
GIVE10011
NPC配置文件
存放于EnvirMarket_def目录,如新手导师.txt,内容为对话选项与跳转指令:
[@main]
#SAY
欢迎新人玩家!\
变量存储
HUMAN变量:绑定玩家角色,重启不丢失(需开启持久化)
TEMP变量:临时使用,登出即清除
系统变量:USERNAME(角色名)、LEVEL(等级)、JOB(职业)等
二、基础语法要素
条件判断(#IF)
支持数值比较、物品检测、变量存在性校验:
#IF
LARGELEVEL10
CHECKITEM10011
EXISTVARHUMAN领取标记
动作执行(#ACT)
常用命令包括:
GIVEItemIndex数量:发放物品
TAKEItemIndex数量:扣除物品
MOV变量名值:赋值(如MOVS0100)
CALCS1S0+50:数学运算
SENDMSG颜色代码文本:向玩家发送消息
流程控制
GOTO@标签:跳转到指定分支
BREAK:终止当前脚本
CLOSE:关闭NPC对话框
三、编写第一个脚本:等级礼包
目标:玩家达到30级时,通过NPC领取一次性的武器奖励。
步骤1:创建NPC文件等级礼包.txt
[@main]
SAY
达到30级可领取奖励!\
步骤2:在QFunction.txt中添加处理逻辑
[@领取30礼包]
IF
SMALLLEVEL30
ACT
SENDMSG7等级不足30级,无法领取。
CLOSE
BREAK
IF
EXISTVARHUMANLevel30Gift
ACT
SENDMSG7已领取过该礼包。
CLOSE
BREAK
ELSEACT
GIVE10011
SETHUMANLevel30Gift1
SENDMSG7恭喜获得30级武器!
CLOSE
四、关键命令详解
物品操作
CHECKITEM10011:检测背包是否有至少1个ItemIndex=1001的物品
TAKE10011:精确扣除1个,避免负数错误
数值运算
MOVS0LEVEL
CALCS1S0*10;S1=等级×10
GAMEGOLDS1;设置元宝为S1值
输入交互
WAITING_INPUT[提示文本]超时秒数@回调标签
示例:
SENDMSG7请输入兑换数量:
WAITING_INPUT[数量]20@处理输入
五、调试方法
日志记录
在关键节点添加:
LOGGINGScriptTest:triggered@领取30礼包
日志文件位于MirServerLog目录。
即时测试
使用GM命令:
@level30:提升等级
@delitem:清空背包
@reloadscript:重载脚本(部分引擎支持)
错误排查
检查ItemIndex是否与StdItems.db一致
确认变量名无拼写错误(区分大小写)
验证条件顺序(从具体到宽泛)
六、常见问题处理
脚本不触发
确认NPC文件名与Npc_def.ini注册名称一致,且路径正确。
物品未发放
检查背包空间,或改用CHECKBAGSIZEItemIndex1预判。
变量失效
HUMAN变量需在M2Server设置中启用“保存人物变量”选项。
七、进阶方向
掌握基础后可扩展:
地图事件(进入某地图自动触发)
定时任务(每日登录奖励)
装备合成(多物品消耗生成新装备)
职业专属功能(道士职业召唤神兽脚本)
脚本编写核心在于逻辑清晰、条件完备、动作精准。从简单礼包入手,逐步叠加判断与交互,即可构建完整的游戏功能体系。所有操作均基于文本编辑,无需外部工具,直接修改保存后重启服务端生效。

