传奇服务端的“代码”并非传统编程语言,而是由脚本命令与触发段组成的逻辑文本。它运行于引擎底层,控制着游戏内所有非图形逻辑,包括NPC对话、怪物爆率、技能效果及装备属性。
一、代码文件存储架构
服务端代码按功能分散在Mir200\Envir\目录下的特定文本文件中,修改后需在M2Server中重载对应模块生效。
文件路径核心作用典型代码内容
MapQuest_def\QManage.txt登录触发。玩家上线自动执行,用于发放新手装、检测状态。[@Login]段
Market_def\QFunction-0.txt功能中枢。处理技能触发、物品使用、死亡事件等核心逻辑。[@Struck](攻击触发)
QuestDiary\下的子文件自定义NPC。各类功能NPC的对话与任务脚本。[@Main](NPC主界面)
MonItems\目录怪物爆率。每个怪物对应一个.txt文件,定义掉落列表。1/100屠龙
二、基础脚本语法结构
传奇脚本采用“标签+条件+动作”的块状结构,严格区分大小写,行首符号具有特定功能。
1.标签段(Section)
以[@Label]格式定义代码块入口,引擎根据上下文跳转到对应段执行。
•[@Login]:登录时触发。
•[@GetBagItems]:捡取物品时触发。
•[@KillMon]:杀死怪物时触发。
2.条件判断(#IF)
用于检测角色状态,只有条件满足时才会执行后续#ACT动作。
#IF
CHECKLEVEL35;检测等级是否≥35级
CHECKITEM金条1;检测背包是否有1根金条
#ACT;条件满足则执行
TAKE金条1;收回1根金条
GIVE裁决之杖1;给予1把裁决之杖
BREAK;跳出当前代码块
常用检测命令:CHECKJOB(职业)、CHECKGAMEGOLD(元宝)、RANDOM(随机数)。
3.动作执行(#ACT)
条件满足后执行的具体操作,包括资源增减、状态变更和界面交互。
#ACT
GAMEGOLD+1000;增加1000元宝
MAPMOVE0330330;传送到比奇安全区
SENDMSG6领取成功!;发送屏幕中央提示
三、核心功能代码实战
1.登录赠送新手套装
在QManage.txt的[@Login]段中写入,利用ISNEWHUMAN检测新角色。
[@Login]
#IF
ISNEWHUMAN;仅新角色触发
CHECKJOBWARRIOR;检测是否为战士
#ACT
GIVE木剑1
GIVE布衣(男)1
GIVE金币5000
BREAK
2.NPC礼包兑换脚本
在QuestDiary\目录下的NPC脚本中实现交互逻辑。
[@Main]
欢迎光临,是否兑换新手礼包?\
<兑换/@getgift><离开/@exit>
[@getgift]
#IF
CHECKGAMEGOLD<500;检测元宝是否少于500
#ACT
SENDMSG6元宝不足!
BREAK
#IF
#ACT
GAMEGOLD-500
GIVE圣战戒指1
SENDMSG0玩家【<$USERNAME>】兑换了新手礼包!
CLOSE
3.自定义技能触发效果
在QFunction-0.txt中绑定技能ID,实现特殊效果(如烈火剑法触发吸血)。
[@MagTagFunc100];假设100为烈火剑法技能ID
#IF
RANDOM3;1/3概率触发
#ACT
HUMANHP+50;恢复50点HP
SENDMSG6烈火剑意触发,吸取生命值!
四、变量与计时器高级应用
实现复杂的活动或状态记忆需使用变量和计时器。
1.个人字符变量(S变量)
用于标记玩家状态,如是否已领取首充。
#IF
EQUALS10已领;检测S10变量是否为“已领”
#ACT
SENDMSG6你已经领过了!
BREAK
#IF
#ACT
GIVE屠龙1
MOVS10已领;设置S10变量为“已领”
2.定时器(Timer)
实现持续状态或延时任务,如在线泡点。
[@Login]
#ACT
SetOnTimer11;开启1号计时器,每秒触发一次
[@OnTimer1]
#IF
CHECKMAP3;检测是否在土城地图
#ACT
CHANGEEXP+1000;每秒增加1000经验
五、代码调试与常见错误
•编码问题:脚本文件必须保存为ANSI编码,UTF-8会导致中文乱码或引擎无法解析。
•符号错误:脚本中必须使用英文半角符号(如""而非“”),#IF、#ACT前不能有空格。
•生效方式:修改脚本后,在M2Server界面点击“控制”→“重新加载”→“QF脚本”或“QM脚本”即可生效,无需重启服务端。
•逻辑穿透:每个条件块结尾务必加BREAK,否则会继续执行下一个#IF段,导致逻辑错乱。
掌握这些基础代码结构后,即可通过组合条件与动作,实现从简单的NPC商店到复杂的全服活动系统。建议从修改现有脚本入手,逐步理解变量传递与事件触发的机制。
一、代码文件存储架构
服务端代码按功能分散在Mir200\Envir\目录下的特定文本文件中,修改后需在M2Server中重载对应模块生效。
文件路径核心作用典型代码内容
MapQuest_def\QManage.txt登录触发。玩家上线自动执行,用于发放新手装、检测状态。[@Login]段
Market_def\QFunction-0.txt功能中枢。处理技能触发、物品使用、死亡事件等核心逻辑。[@Struck](攻击触发)
QuestDiary\下的子文件自定义NPC。各类功能NPC的对话与任务脚本。[@Main](NPC主界面)
MonItems\目录怪物爆率。每个怪物对应一个.txt文件,定义掉落列表。1/100屠龙
二、基础脚本语法结构
传奇脚本采用“标签+条件+动作”的块状结构,严格区分大小写,行首符号具有特定功能。
1.标签段(Section)
以[@Label]格式定义代码块入口,引擎根据上下文跳转到对应段执行。
•[@Login]:登录时触发。
•[@GetBagItems]:捡取物品时触发。
•[@KillMon]:杀死怪物时触发。
2.条件判断(#IF)
用于检测角色状态,只有条件满足时才会执行后续#ACT动作。
#IF
CHECKLEVEL35;检测等级是否≥35级
CHECKITEM金条1;检测背包是否有1根金条
#ACT;条件满足则执行
TAKE金条1;收回1根金条
GIVE裁决之杖1;给予1把裁决之杖
BREAK;跳出当前代码块
常用检测命令:CHECKJOB(职业)、CHECKGAMEGOLD(元宝)、RANDOM(随机数)。
3.动作执行(#ACT)
条件满足后执行的具体操作,包括资源增减、状态变更和界面交互。
#ACT
GAMEGOLD+1000;增加1000元宝
MAPMOVE0330330;传送到比奇安全区
SENDMSG6领取成功!;发送屏幕中央提示
三、核心功能代码实战
1.登录赠送新手套装
在QManage.txt的[@Login]段中写入,利用ISNEWHUMAN检测新角色。
[@Login]
#IF
ISNEWHUMAN;仅新角色触发
CHECKJOBWARRIOR;检测是否为战士
#ACT
GIVE木剑1
GIVE布衣(男)1
GIVE金币5000
BREAK
2.NPC礼包兑换脚本
在QuestDiary\目录下的NPC脚本中实现交互逻辑。
[@Main]
欢迎光临,是否兑换新手礼包?\
<兑换/@getgift><离开/@exit>
[@getgift]
#IF
CHECKGAMEGOLD<500;检测元宝是否少于500
#ACT
SENDMSG6元宝不足!
BREAK
#IF
#ACT
GAMEGOLD-500
GIVE圣战戒指1
SENDMSG0玩家【<$USERNAME>】兑换了新手礼包!
CLOSE
3.自定义技能触发效果
在QFunction-0.txt中绑定技能ID,实现特殊效果(如烈火剑法触发吸血)。
[@MagTagFunc100];假设100为烈火剑法技能ID
#IF
RANDOM3;1/3概率触发
#ACT
HUMANHP+50;恢复50点HP
SENDMSG6烈火剑意触发,吸取生命值!
四、变量与计时器高级应用
实现复杂的活动或状态记忆需使用变量和计时器。
1.个人字符变量(S变量)
用于标记玩家状态,如是否已领取首充。
#IF
EQUALS10已领;检测S10变量是否为“已领”
#ACT
SENDMSG6你已经领过了!
BREAK
#IF
#ACT
GIVE屠龙1
MOVS10已领;设置S10变量为“已领”
2.定时器(Timer)
实现持续状态或延时任务,如在线泡点。
[@Login]
#ACT
SetOnTimer11;开启1号计时器,每秒触发一次
[@OnTimer1]
#IF
CHECKMAP3;检测是否在土城地图
#ACT
CHANGEEXP+1000;每秒增加1000经验
五、代码调试与常见错误
•编码问题:脚本文件必须保存为ANSI编码,UTF-8会导致中文乱码或引擎无法解析。
•符号错误:脚本中必须使用英文半角符号(如""而非“”),#IF、#ACT前不能有空格。
•生效方式:修改脚本后,在M2Server界面点击“控制”→“重新加载”→“QF脚本”或“QM脚本”即可生效,无需重启服务端。
•逻辑穿透:每个条件块结尾务必加BREAK,否则会继续执行下一个#IF段,导致逻辑错乱。
掌握这些基础代码结构后,即可通过组合条件与动作,实现从简单的NPC商店到复杂的全服活动系统。建议从修改现有脚本入手,逐步理解变量传递与事件触发的机制。

