传奇服务端的自定义功能通过脚本系统实现,脚本文件位于Mir200\Envir目录下的多个子文件夹中。核心脚本使用特定的标签、命令和语法结构,控制NPC对话、任务流程、物品触发和游戏事件。
脚本文件位置与类型脚本按功能存放于不同目录。NPC脚本位于Market_Def文件夹,每个NPC对应一个TXT文件。任务脚本位于QuestDiary文件夹,按系统或活动分类存放。怪物爆率脚本位于MonItems文件夹,每个怪物对应一个TXT文件。登录、升级等触发脚本位于MapQuest_Def文件夹的QFunction-0.txt、QManage.txt等文件中。
基础语法结构脚本以标签段为单位组织。标签格式为[@标签名],标识一个可执行的代码块。例如[@main]是NPC的默认对话入口。脚本执行流通过goto语句跳转,格式为goto@标签名。每行一个命令,分号后为注释。示例:
[@main]
#SAY
欢迎来到比奇城。\\
<询问装备/@ask><购买药品/@buy>\\
<离开/@exit>
SAY表示开始输出文本,\\表示换行,<文本/@标签>创建可点击按钮。
常用脚本命令#SAY用于NPC说话。#ACT执行动作,必须与条件判断一起使用。GOTO跳转到指定标签。CLOSE关闭对话框。BREAK中断当前脚本段。MAP移动玩家到指定地图。PARAM1、PARAM2、MONGEN用于设置刷怪参数。TimeRecall设置地图停留时间。
条件检测命令条件命令通常以CHECK开头。CHECKLEVELEX检测等级,格式为CHECKLEVELEX操作符(><=)等级。CHECKGOLD检测金币。CHECKITEM检测背包物品。CHECKJOB检测职业。CHECKHUM检测地图人数。CHECKOFGUILD检测是否同一行会。CHECKGUILDLIST检测行会列表。EQUAL检测变量是否等于值。LARGE检测变量是否大于值。SMALL检测变量是否小于值。
物品与货币操作GIVE给予物品,格式为GIVE物品名数量。TAKE收取物品。GOLD增加金币。TAKEGOLD减少金币。CREDIT增加元宝。TAKECREDIT减少元宝。UPGRADEUSERITEM升级装备属性。MOVEITEM移动物品位置。
变量系统传奇脚本支持个人变量、全局变量、字符串变量等多种类型。个人变量(P、M、S、I系列)随角色保存。P0-P99为数字变量,D0-D99为字符变量。M0-M99为私有数字变量,在线期间有效。S0-S99为全局数字变量,全服共享。G0-G99为行会变量。A0-A99为全局字符变量。变量操作:MOV赋值,INC递增,DEC递减。示例:MOVP0100将100赋值给个人变量P0。
NPC对话脚本编写完整NPC脚本包含头部声明与多个对话段。Merchant.txt中定义的NPC会调用对应脚本文件。示例商人脚本:
[@main]
#SAY
武器匠铺,出售各类兵器。\\
<购买武器/@buy_weapon><修理武器/@repair><离开/@exit>
[@buy_weapon]
#SAY
请选择:\\
<乌木剑/@buy1>1000金币\\
<半月/@buy2>5000金币\\
<返回/@main>
[@buy1]
#ACT
CHECKGOLD1000
#SAY
购买成功!
#ACT
TAKEGOLD1000
GIVE乌木剑1
goto@main
条件与动作需配对使用,条件成立才执行下方#ACT部分。
任务脚本流程任务脚本使用变量标记进度。示例:
[@接受任务]
#ACT
MOVP00
#SAY
去击杀10只半兽人,回来报告。\
<好的/@accept>
[@accept]
#SAY
任务开始,当前进度:<$STR(P0)>/10。\
<离开/@exit>
[@完成任务]
#ACT
CHECK[110]0
CHECKKILLMONCOUNT半兽人10
#SAY
干得好!这是你的奖励。\
#ACT
GIVE金创药5
GOLD5000
SET[110]1
CHECK[110]0检测任务标记未完成。SET[110]1设置任务为已完成状态。
物品使用触发双击物品触发脚本写在QFunction-0.txt中,通过物品的Stdmode和Shape值关联。示例:
[@@useItem]
#IF
EQUAL<$PARAM(0)>补血丹
#ACT
HumanHP+50
Take补血丹1
Break
<$PARAM(0)>获取使用的物品名,HumanHP增加生命值。
地图事件触发地图触发写在MapEvent.txt中,格式为:地图编号事件类型触发坐标X触发坐标Y触发范围触发脚本标签。示例:
3[310]3303305@EnterBossRoom
表示3号地图330330坐标周围5格触发@EnterBossRoom脚本。触发类型包括:进入某坐标、某坐标走动、某地图杀怪、某地图点击等。
时间与定时器通过时间标签实现定时功能。在QManage.txt登录脚本中设置:
ACT
SETONTIMER01
启动0号定时器,每秒触发一次。在QFunction-0.txt中响应:
[@OnTimer0]
ACT
INCP01
每秒个人变量P0加1。SETOFFTIMER0关闭定时器。
行会与队伍脚本CHECKOFGUILD检测是否同行会。CHECKGUILDLIST检测行会列表。CREATEGUILD创建行会。ADDGUILDMEMBER加入行会。CHECKTEAMLEADER检测是否为队长。CHECKTEAMMEMBERSCOUNT检测队伍人数。CREATETEAM创建队伍。
技能与魔法脚本CHECKMAGIC检测是否已学技能。CHECKMAGICLEVEL检测技能等级。ADDMAGIC添加技能。DELMAGIC删除技能。ADDSKILL增加技能经验。H.CheckSkill检测英雄技能。示例:CHECKMAGICLEVEL烈火剑法=3检测烈火剑法是否为3级。
公告与消息发送SENDMSG发送消息。格式:SENDMSG类型内容颜色。类型0-6,0为顶部滚动,1为聊天框,5为全局居中。SENDMOVEMSG发送腐消息。MAPMSG发送地图消息。GUILDMSG发送行会消息。GROUPMSG发送队伍消息。
文件操作命令脚本可读写文本文件。WRITELINE写入行,格式:WRITELINE文件路径行号内容。READLINE读取行,将内容存入变量。WRITETEXTFILE写入整个文件。CHECKTEXTLIST检测文本是否存在文件中。ADDTextList添加文本到文件。
调用外部EXE与DLL通过RUN命令执行外部程序。格式:RUN程序路径参数。某些引擎支持CALLSCRIPT调用外部DLL函数。使用时需确保路径正确,避免安全漏洞。
随机数与概率RANDOM生成随机数,格式:RANDOM上限。示例:RANDOM100生成0-99的随机数。常用于概率判断:
#IF
RANDOM100
SMALL10
#ACT
GIVE屠龙1
#SAY
幸运降临!获得屠龙!
表示10%概率获得物品。
脚本调试与日志使用GM命令@test直接测试脚本段。在M2Server控制台查看脚本错误信息。关键位置用SENDMSG输出变量值辅助调试。在QFunction-0.txt的[@Login]段初始化调试变量。定期清理QuestDiary\系统日志目录下的日志文件。
语法注意事项所有符号使用英文半角。标签名不能重复。变量使用前需初始化。条件与动作必须成对出现。跳转标签必须存在。字符串比较使用EQUAL,数字比较使用LARGE、SMALL、EQUAL。避免脚本死循环,控制goto次数。
脚本文件位置与类型脚本按功能存放于不同目录。NPC脚本位于Market_Def文件夹,每个NPC对应一个TXT文件。任务脚本位于QuestDiary文件夹,按系统或活动分类存放。怪物爆率脚本位于MonItems文件夹,每个怪物对应一个TXT文件。登录、升级等触发脚本位于MapQuest_Def文件夹的QFunction-0.txt、QManage.txt等文件中。
基础语法结构脚本以标签段为单位组织。标签格式为[@标签名],标识一个可执行的代码块。例如[@main]是NPC的默认对话入口。脚本执行流通过goto语句跳转,格式为goto@标签名。每行一个命令,分号后为注释。示例:
[@main]
#SAY
欢迎来到比奇城。\\
<询问装备/@ask><购买药品/@buy>\\
<离开/@exit>
SAY表示开始输出文本,\\表示换行,<文本/@标签>创建可点击按钮。
常用脚本命令#SAY用于NPC说话。#ACT执行动作,必须与条件判断一起使用。GOTO跳转到指定标签。CLOSE关闭对话框。BREAK中断当前脚本段。MAP移动玩家到指定地图。PARAM1、PARAM2、MONGEN用于设置刷怪参数。TimeRecall设置地图停留时间。
条件检测命令条件命令通常以CHECK开头。CHECKLEVELEX检测等级,格式为CHECKLEVELEX操作符(><=)等级。CHECKGOLD检测金币。CHECKITEM检测背包物品。CHECKJOB检测职业。CHECKHUM检测地图人数。CHECKOFGUILD检测是否同一行会。CHECKGUILDLIST检测行会列表。EQUAL检测变量是否等于值。LARGE检测变量是否大于值。SMALL检测变量是否小于值。
物品与货币操作GIVE给予物品,格式为GIVE物品名数量。TAKE收取物品。GOLD增加金币。TAKEGOLD减少金币。CREDIT增加元宝。TAKECREDIT减少元宝。UPGRADEUSERITEM升级装备属性。MOVEITEM移动物品位置。
变量系统传奇脚本支持个人变量、全局变量、字符串变量等多种类型。个人变量(P、M、S、I系列)随角色保存。P0-P99为数字变量,D0-D99为字符变量。M0-M99为私有数字变量,在线期间有效。S0-S99为全局数字变量,全服共享。G0-G99为行会变量。A0-A99为全局字符变量。变量操作:MOV赋值,INC递增,DEC递减。示例:MOVP0100将100赋值给个人变量P0。
NPC对话脚本编写完整NPC脚本包含头部声明与多个对话段。Merchant.txt中定义的NPC会调用对应脚本文件。示例商人脚本:
[@main]
#SAY
武器匠铺,出售各类兵器。\\
<购买武器/@buy_weapon><修理武器/@repair><离开/@exit>
[@buy_weapon]
#SAY
请选择:\\
<乌木剑/@buy1>1000金币\\
<半月/@buy2>5000金币\\
<返回/@main>
[@buy1]
#ACT
CHECKGOLD1000
#SAY
购买成功!
#ACT
TAKEGOLD1000
GIVE乌木剑1
goto@main
条件与动作需配对使用,条件成立才执行下方#ACT部分。
任务脚本流程任务脚本使用变量标记进度。示例:
[@接受任务]
#ACT
MOVP00
#SAY
去击杀10只半兽人,回来报告。\
<好的/@accept>
[@accept]
#SAY
任务开始,当前进度:<$STR(P0)>/10。\
<离开/@exit>
[@完成任务]
#ACT
CHECK[110]0
CHECKKILLMONCOUNT半兽人10
#SAY
干得好!这是你的奖励。\
#ACT
GIVE金创药5
GOLD5000
SET[110]1
CHECK[110]0检测任务标记未完成。SET[110]1设置任务为已完成状态。
物品使用触发双击物品触发脚本写在QFunction-0.txt中,通过物品的Stdmode和Shape值关联。示例:
[@@useItem]
#IF
EQUAL<$PARAM(0)>补血丹
#ACT
HumanHP+50
Take补血丹1
Break
<$PARAM(0)>获取使用的物品名,HumanHP增加生命值。
地图事件触发地图触发写在MapEvent.txt中,格式为:地图编号事件类型触发坐标X触发坐标Y触发范围触发脚本标签。示例:
3[310]3303305@EnterBossRoom
表示3号地图330330坐标周围5格触发@EnterBossRoom脚本。触发类型包括:进入某坐标、某坐标走动、某地图杀怪、某地图点击等。
时间与定时器通过时间标签实现定时功能。在QManage.txt登录脚本中设置:
ACT
SETONTIMER01
启动0号定时器,每秒触发一次。在QFunction-0.txt中响应:
[@OnTimer0]
ACT
INCP01
每秒个人变量P0加1。SETOFFTIMER0关闭定时器。
行会与队伍脚本CHECKOFGUILD检测是否同行会。CHECKGUILDLIST检测行会列表。CREATEGUILD创建行会。ADDGUILDMEMBER加入行会。CHECKTEAMLEADER检测是否为队长。CHECKTEAMMEMBERSCOUNT检测队伍人数。CREATETEAM创建队伍。
技能与魔法脚本CHECKMAGIC检测是否已学技能。CHECKMAGICLEVEL检测技能等级。ADDMAGIC添加技能。DELMAGIC删除技能。ADDSKILL增加技能经验。H.CheckSkill检测英雄技能。示例:CHECKMAGICLEVEL烈火剑法=3检测烈火剑法是否为3级。
公告与消息发送SENDMSG发送消息。格式:SENDMSG类型内容颜色。类型0-6,0为顶部滚动,1为聊天框,5为全局居中。SENDMOVEMSG发送腐消息。MAPMSG发送地图消息。GUILDMSG发送行会消息。GROUPMSG发送队伍消息。
文件操作命令脚本可读写文本文件。WRITELINE写入行,格式:WRITELINE文件路径行号内容。READLINE读取行,将内容存入变量。WRITETEXTFILE写入整个文件。CHECKTEXTLIST检测文本是否存在文件中。ADDTextList添加文本到文件。
调用外部EXE与DLL通过RUN命令执行外部程序。格式:RUN程序路径参数。某些引擎支持CALLSCRIPT调用外部DLL函数。使用时需确保路径正确,避免安全漏洞。
随机数与概率RANDOM生成随机数,格式:RANDOM上限。示例:RANDOM100生成0-99的随机数。常用于概率判断:
#IF
RANDOM100
SMALL10
#ACT
GIVE屠龙1
#SAY
幸运降临!获得屠龙!
表示10%概率获得物品。
脚本调试与日志使用GM命令@test直接测试脚本段。在M2Server控制台查看脚本错误信息。关键位置用SENDMSG输出变量值辅助调试。在QFunction-0.txt的[@Login]段初始化调试变量。定期清理QuestDiary\系统日志目录下的日志文件。
语法注意事项所有符号使用英文半角。标签名不能重复。变量使用前需初始化。条件与动作必须成对出现。跳转标签必须存在。字符串比较使用EQUAL,数字比较使用LARGE、SMALL、EQUAL。避免脚本死循环,控制goto次数。

