传奇服务端脚本逻辑完全解析

来源: 作者: 点击:
一、脚本构成与执行顺序

传奇脚本本质是事件驱动的条件响应系统。当游戏内发生特定事件(如对话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提前结束。

掌握变量作用域、条件嵌套与执行顺序,即可构建从简单对话到复杂活动的一切游戏逻辑。脚本编写本质是“事件监听-条件判断-执行响应”的流程控制。
[顶部]