一、脚本构成与执行顺序
传奇脚本本质是事件驱动的条件响应系统。当游戏内发生特定事件(如对话NPC、击杀怪物、穿戴装备)时,引擎会查找并执行对应的脚本段。所有脚本均位于MirServer\Mir200\Envir\目录下,按功能分为四类:
•对话脚本(Market_Def\):NPC对话与功能交互。
•触发脚本(MapQuest.txtQFunction-0.txt):响应攻击、拾取、死亡等事件。
•机器人脚本(Robot_def\):系统定时自动执行任务。
•任务脚本(QuestDiary\):复杂任务链与变量存储。
脚本按NPC对话→地图触发→全局触发→机器人的优先级顺序执行,后触发的脚本可覆盖前序效果。
二、核心命令分类与功能
1.条件检测命令
•#IF:开启条件检测,后接判断语句。
•CHECKITEM:检测背包物品(CHECKITEM金币1000)。
•CHECKLEVEL:检测人物等级(CHECKLEVEL>40)。
•EQUAL/LARGE:变量比较(EQUAL<$STR(S0)>1)。
•RANDOM:概率检测(RANDOM5表示5%概率通过)。
2.执行动作命令
•#ACT:条件满足时执行的动作块。
•GIVE:给予物品(GIVE屠龙1)。
•TAKE:拿走物品(TAKE金币1000)。
•MAPMOVE:传送地图(MAPMOVE3330330)。
•SENDMSG:发送消息(SENDMSG6消息内容)。
3.变量操作命令
•SET:设置变量(SET[100]1设置个人变量100为1)。
•CALCVAR:计算变量(CALCVARHUMANN1+1)。
•CHECKVAR:检测变量(CHECKVARHUMANN1>5)。
•MOV:赋值(MOVS0测试字符串)。
4.流程控制命令
•GOTO:跳转标签(GOTO@功能1)。
•#SAY:NPC对话显示。
•#ELSESAY:条件不满足时显示。
三、脚本执行流与嵌套逻辑
脚本遵循“检测→执行→跳转”的线性流程,但可通过嵌套实现复杂逻辑。
基丛话脚本结构
[@Main];主标签
#SAY
欢迎来到盟重土城。\
<查看装备/@查看><购买药品/@购买>\
<离开/@exit>
[@查看]
#IF
CHECKITEM屠龙1
#ACT
SENDMSG6你拥有一把屠龙刀。
#ELSESAY
你还没有屠龙刀。
[@购买]
#ACT
GOTO@药品列表
条件嵌套示例
[@进入副本]
#IF
CHECKLEVEL>35;条件1:等级>35
CHECKITEM凭证1;条件2:拥有凭证
CHECKGAMEGOLD>99;条件3:元宝>99
#ACT
TAKE凭证1
GAMEGOLD-100
MAPMOVEFB015050
SENDMSG6进入副本成功!
#ELSESAY
条件不足:需等级35以上、持有凭证、消耗100元宝。
四、变量系统深度解析
变量是脚本实现动态功能的核心,分为四类:
1.个人变量(P0-P999A0-A999)
•作用域:角色私有,随角色保存。
•用途:记录任务进度、个人状态。
•示例:SET[100]1记录“已完成任务1”。
2.全局变量(G0-G999)
•作用域:全服共享,所有玩家读写同一变量。
•用途:全服活动开关、世界状态。
•示例:CALCVARG10+1记录“全服击杀BOSS次数”。
3.字符串变量(S0-S99)
•作用域:临时存储字符串。
•用途:存储名字、消息。
•示例:MOVS0<$USERNAME>保存当前玩家名。
4.自定义变量(HUMAN)
•作用域:角色私有,可保存到文件。
•用途:复杂数据存储。
•示例:CALCVARHUMAN充值点数+100记录充值额度。
变量生命周期
•临时变量(P、S):本次登录有效,小退清零。
•永久变量(G、自定义HUMAN):服务器重启后仍存在(需配合SAVEVAR命令保存到文件)。
五、实战:编写自动日常任务脚本
以下脚本实现“每日击杀10只怪物,领取奖励”的全流程。
1.登录初始化(QManage.txt)
[@Login]
;每日重置任务计数
#IF
EQUAL<$DATETIME><$HUMAN(日常日期)>
#ACT
;日期相同,不清零
#ELSESAY
;日期不同,重置计数
CALCVARHUMAN日常计数=0
SAVEVARHUMAN日常计数..\QuestDiary\日常任务\计数.txt
MOVS0<$DATETIME>
SAVEVARHUMAN日常日期..\QuestDiary\日常任务\日期.txt
2.击杀计数(QFunction-0.txt)
[@KillMon]
#IF
EQUAL<$CURRRACE>0;目标为怪物
LARGE<$HUMAN(日常计数)>9;已杀满10只
#ACT
SENDMSG6今日任务已完成,请返回领取奖励!
#ELSESAY
#ACT
CALCVARHUMAN日常计数+1
SAVEVARHUMAN日常计数..\QuestDiary\日常任务\计数.txt
SENDMSG6今日进度:<$HUMAN(日常计数)>/10
3.NPC领奖(Market_Def\日常任务.txt)
[@Main]
#SAY
今日击杀进度:<$HUMAN(日常计数)>/10\
<领取奖励/@领取>
[@领取]
#IF
LARGE<$HUMAN(日常计数)>9
#ACT
CALCVARHUMAN日常计数=0
GIVE金币100000
SENDMSG6奖励10万金币已发放!
#ELSESAY
进度不足,请继续努力。
六、调试技巧与效率优化
1.语法检查:使用专业工具(如“传奇脚本编辑器”)检查括号匹配、命令拼写。
2.日志输出:在关键节点用SENDMSG6输出变量值,或用SystemMsg记录到服务端日志。
3.避免死循环:慎用GOTO跳转回自身,需设置跳出条件。
4.性能优化:高频触发脚本(如[@Attack])中避免全服广播、复杂计算,用RETURN提前结束。
掌握变量作用域、条件嵌套与执行顺序,即可构建从简单对话到复杂活动的一切游戏逻辑。脚本编写本质是“事件监听-条件判断-执行响应”的流程控制。
传奇脚本本质是事件驱动的条件响应系统。当游戏内发生特定事件(如对话NPC、击杀怪物、穿戴装备)时,引擎会查找并执行对应的脚本段。所有脚本均位于MirServer\Mir200\Envir\目录下,按功能分为四类:
•对话脚本(Market_Def\):NPC对话与功能交互。
•触发脚本(MapQuest.txtQFunction-0.txt):响应攻击、拾取、死亡等事件。
•机器人脚本(Robot_def\):系统定时自动执行任务。
•任务脚本(QuestDiary\):复杂任务链与变量存储。
脚本按NPC对话→地图触发→全局触发→机器人的优先级顺序执行,后触发的脚本可覆盖前序效果。
二、核心命令分类与功能
1.条件检测命令
•#IF:开启条件检测,后接判断语句。
•CHECKITEM:检测背包物品(CHECKITEM金币1000)。
•CHECKLEVEL:检测人物等级(CHECKLEVEL>40)。
•EQUAL/LARGE:变量比较(EQUAL<$STR(S0)>1)。
•RANDOM:概率检测(RANDOM5表示5%概率通过)。
2.执行动作命令
•#ACT:条件满足时执行的动作块。
•GIVE:给予物品(GIVE屠龙1)。
•TAKE:拿走物品(TAKE金币1000)。
•MAPMOVE:传送地图(MAPMOVE3330330)。
•SENDMSG:发送消息(SENDMSG6消息内容)。
3.变量操作命令
•SET:设置变量(SET[100]1设置个人变量100为1)。
•CALCVAR:计算变量(CALCVARHUMANN1+1)。
•CHECKVAR:检测变量(CHECKVARHUMANN1>5)。
•MOV:赋值(MOVS0测试字符串)。
4.流程控制命令
•GOTO:跳转标签(GOTO@功能1)。
•#SAY:NPC对话显示。
•#ELSESAY:条件不满足时显示。
三、脚本执行流与嵌套逻辑
脚本遵循“检测→执行→跳转”的线性流程,但可通过嵌套实现复杂逻辑。
基丛话脚本结构
[@Main];主标签
#SAY
欢迎来到盟重土城。\
<查看装备/@查看><购买药品/@购买>\
<离开/@exit>
[@查看]
#IF
CHECKITEM屠龙1
#ACT
SENDMSG6你拥有一把屠龙刀。
#ELSESAY
你还没有屠龙刀。
[@购买]
#ACT
GOTO@药品列表
条件嵌套示例
[@进入副本]
#IF
CHECKLEVEL>35;条件1:等级>35
CHECKITEM凭证1;条件2:拥有凭证
CHECKGAMEGOLD>99;条件3:元宝>99
#ACT
TAKE凭证1
GAMEGOLD-100
MAPMOVEFB015050
SENDMSG6进入副本成功!
#ELSESAY
条件不足:需等级35以上、持有凭证、消耗100元宝。
四、变量系统深度解析
变量是脚本实现动态功能的核心,分为四类:
1.个人变量(P0-P999A0-A999)
•作用域:角色私有,随角色保存。
•用途:记录任务进度、个人状态。
•示例:SET[100]1记录“已完成任务1”。
2.全局变量(G0-G999)
•作用域:全服共享,所有玩家读写同一变量。
•用途:全服活动开关、世界状态。
•示例:CALCVARG10+1记录“全服击杀BOSS次数”。
3.字符串变量(S0-S99)
•作用域:临时存储字符串。
•用途:存储名字、消息。
•示例:MOVS0<$USERNAME>保存当前玩家名。
4.自定义变量(HUMAN)
•作用域:角色私有,可保存到文件。
•用途:复杂数据存储。
•示例:CALCVARHUMAN充值点数+100记录充值额度。
变量生命周期
•临时变量(P、S):本次登录有效,小退清零。
•永久变量(G、自定义HUMAN):服务器重启后仍存在(需配合SAVEVAR命令保存到文件)。
五、实战:编写自动日常任务脚本
以下脚本实现“每日击杀10只怪物,领取奖励”的全流程。
1.登录初始化(QManage.txt)
[@Login]
;每日重置任务计数
#IF
EQUAL<$DATETIME><$HUMAN(日常日期)>
#ACT
;日期相同,不清零
#ELSESAY
;日期不同,重置计数
CALCVARHUMAN日常计数=0
SAVEVARHUMAN日常计数..\QuestDiary\日常任务\计数.txt
MOVS0<$DATETIME>
SAVEVARHUMAN日常日期..\QuestDiary\日常任务\日期.txt
2.击杀计数(QFunction-0.txt)
[@KillMon]
#IF
EQUAL<$CURRRACE>0;目标为怪物
LARGE<$HUMAN(日常计数)>9;已杀满10只
#ACT
SENDMSG6今日任务已完成,请返回领取奖励!
#ELSESAY
#ACT
CALCVARHUMAN日常计数+1
SAVEVARHUMAN日常计数..\QuestDiary\日常任务\计数.txt
SENDMSG6今日进度:<$HUMAN(日常计数)>/10
3.NPC领奖(Market_Def\日常任务.txt)
[@Main]
#SAY
今日击杀进度:<$HUMAN(日常计数)>/10\
<领取奖励/@领取>
[@领取]
#IF
LARGE<$HUMAN(日常计数)>9
#ACT
CALCVARHUMAN日常计数=0
GIVE金币100000
SENDMSG6奖励10万金币已发放!
#ELSESAY
进度不足,请继续努力。
六、调试技巧与效率优化
1.语法检查:使用专业工具(如“传奇脚本编辑器”)检查括号匹配、命令拼写。
2.日志输出:在关键节点用SENDMSG6输出变量值,或用SystemMsg记录到服务端日志。
3.避免死循环:慎用GOTO跳转回自身,需设置跳出条件。
4.性能优化:高频触发脚本(如[@Attack])中避免全服广播、复杂计算,用RETURN提前结束。
掌握变量作用域、条件嵌套与执行顺序,即可构建从简单对话到复杂活动的一切游戏逻辑。脚本编写本质是“事件监听-条件判断-执行响应”的流程控制。

