传奇脚本不是一门编程语言,而是一堆“标签+条件+动作”的文本规则。引擎按玩家点击的按钮跳转到对应标签,从上往下读,遇到满足条件的就执行动作。搞懂这个模型,你就能看懂任何NPC脚本,也能自己改。
一、脚本文件在哪
服务端目录下常见路径:
•Mir200\Envir\Market_Def\放NPC对话脚本
•Mir200\Envir\Market_Sell\放商店NPC脚本
•Mir200\Envir\QuestDiary\放任务、功能脚本
•Mir200\Envir\MapQuest_def\放地图触发、QFunction
NPC要显示在游戏里,得在Merchant.txt里登记,指定NPC名字、地图、坐标、脚本文件名。
二、脚本最小结构
一个NPC文件长这样:
[@main]
欢迎光临\
<买药/@buy><卖装备/@sell><离开/@exit>\
[@buy]
IF
CHECKGOLD100
ACT
TAKE金币100
GIVE金创药1
SENDMSG6购买成功
BREAK
ELSEACT
SENDMSG6金币不足
BREAK
[@sell]
IF
CHECKITEM屠龙1
ACT
TAKE屠龙1
GIVE金币500000
SENDMSG6卖出成功
BREAK
ELSEACT
SENDMSG6你没有屠龙
BREAK
[@exit]
ACT
CLOSE
BREAK
拆开看:
•[@main]是默认入口,玩家点NPC先执行这里
•<买药/@buy>是按钮,玩家点击后跳转到[@buy]
•#IF下面写检测条件,满足才往下走
•#ACT下面写执行动作
•#ELSEACT是条件不满足时执行的动作
•BREAK是结束,防止继续往下执行
•\是换行
三、标签的三种写法
[@main]普通标签,玩家点击按钮跳转过来
[@Login]玩家登录时自动触发,不用点
[@KillMon]玩家杀怪时自动触发,不用点
标签名自己起,但不能重复。跳转用<文字/@标签名>或GOTO@标签名。
四、#IF和#ACT的区别
IF下面只能放检测命令,比如:
CHECKGOLD100
CHECKITEM屠龙1
CHECKLEVELEX35
CHECKMAPNAME015
ISADMIN
EQUALN15
LARGEN110
ACT下面只能放执行命令,比如:
TAKE金币100
GIVE屠龙1
CHANGEEXP+1000
MAPMOVE0155050
SENDMSG6提示文字
MOVN15
INCN11
BREAK
检测命令放错位置,脚本直接报错或不生效。
五、变量:脚本的记性
变量就是存数字或文字的盒子,用<$STR(变量名)>显示出来。
数字变量:
N1、N2、D0、D1、U1、G1
•N系列:玩家私有数字变量
•D系列:临时数字变量,小退可能清空
•U系列:玩家私有可保存变量
•G系列:全局变量,全服共享
字符变量:
S1、S0、A1
存文字,比如玩家名字、地图名。
赋值:
MOVN15把5存进N1
MOVS1你好把“你好”存进S1
INCN11N1加1
DECN11N1减1
MULN12N1乘2
显示:
SENDMSG6当前等级:<$STR(N1)>
SENDMSG6玩家名:<$USERNAME>
六、常用检测命令
CHECKGOLD1000检查金币是否≥1000
CHECKITEM屠龙1检查是否有1把屠龙
CHECKLEVELEX35检查等级是否≥35
CHECKMAPNAME015检查是否在015地图
CHECKMONMAP0150检查015地图怪物数量是否为0
EQUALN15检查N1是否等于5
LARGEN15检查N1是否大于5
SMALLN15检查N1是否小于5
ISADMIN检查是否管理员
RANDOM31/3概率通过
七、常用执行命令
GIVE屠龙1给物品
TAKE屠龙1收物品
GAMEGOLD+100加元宝
CHANGEEXP+1000加经验
MAPMOVE0155050传送
SENDMSG6文字玩家自己看提示
SENDMSG0文字全服广播
BREAK结束
GOTO@标签跳转
CLOSE关闭NPC窗口
MOVN15赋值
INCN11加1
SET[001]1设置标志位
八、标志位:简单的是非开关
SET[001]1把标志001设为开
SET[001]0把标志001设为关
CHECK[001]1检查标志001是否开
CHECK[001]0检查标志001是否关
用于“是否接过任务”“是否领过奖励”这种二选一状态。
九、NPC按钮写法
<显示文字/@跳转标签>
<买药/@buy>
<传送到祖玛/@go_zuma>
按钮可以带参数:
<输入数字/@@InPutInteger1>
<输入文字/@@InPutString1>
输入后跳转到:
[@InPutInteger1]
ACT
MOVN1<$STR(M0)>
SENDMSG6你输入的数字是:<$STR(N1)>
M0是引擎存输入值的临时变量。
十、条件分支的完整写法
[@main]
IF
CHECKLEVELEX35
ACT
SENDMSG6你等级够了
GOTO@高级功能
BREAK
ELSEACT
SENDMSG6你等级不够
GOTO@低级功能
BREAK
IF满足走#ACT,不满足走#ELSEACT。没有#ELSEACT就不执行任何动作。
十一、多条件组合
IF
CHECKLEVELEX35
CHECKGOLD1000
ACT
SENDMSG6等级和金币都满足
BREAK
两个条件都要满足才执行。要“或”关系,用OR:
IF
OR
CHECKLEVELEX35
ISADMIN
ACT
SENDMSG6等级35或管理员
BREAK
十二、脚本调试方法
1.改完脚本,M2里点“重新加载NPC”或GM输@reloadnpc
2.游戏里点NPC,看有没有报错提示
3.M2窗口的日志区会显示脚本错误行号
4.最常见错误:标签名重复、#IF下面写了执行命令、跳转的标签不存在
十三、从改到写
先找一个现成NPC脚本,比如仓库NPC,改按钮文字、改给的东西、改条件,跑通了再自己从零写。别一上来就写复杂任务系统,先写一个“给钱发装备”的NPC,再写“杀怪计数”,再写“任务链”。
十四、完整入门示例:一个卖药NPC
[@main]
<药店老板>\
\
<买金创药/@buy_jcy><买魔法药/@buy_mfy>\
<离开/@exit>\
[@buy_jcy]
IF
CHECKGOLD100
ACT
TAKE金币100
GIVE金创药1
SENDMSG6购买成功
GOTO@main
BREAK
ELSEACT
SENDMSG6金币不足
GOTO@main
BREAK
[@buy_mfy]
IF
CHECKGOLD100
ACT
TAKE金币100
GIVE魔法药1
SENDMSG6购买成功
GOTO@main
BREAK
ELSEACT
SENDMSG6金币不足
GOTO@main
BREAK
[@exit]
ACT
CLOSE
BREAK
这个脚本能跑通,你就入门了。剩下的就是背命令、看引擎帮助文档、拆别人的脚本。
十五、引擎差异
BLUE/LEGEND/HERO/GOM/GEE命令名有细微差别:
•检查等级:CHECKLEVELEX或CHECKLEVEL
•检查金币:CHECKGOLD或CHECKGAMEGOLD
•传送:MAPMOVE或MAP
•变量:N$前缀有的引擎支持,有的不支持
写之前先看你引擎的脚本命令手册,别把GEE的命令抄到HERO里。
十六、最后一句
传奇脚本=标签+#IF检测+#ACT执行+变量记状态+跳转串联。所有功能都是这个模型的组合。先跑通最简单的,再慢慢加。
一、脚本文件在哪
服务端目录下常见路径:
•Mir200\Envir\Market_Def\放NPC对话脚本
•Mir200\Envir\Market_Sell\放商店NPC脚本
•Mir200\Envir\QuestDiary\放任务、功能脚本
•Mir200\Envir\MapQuest_def\放地图触发、QFunction
NPC要显示在游戏里,得在Merchant.txt里登记,指定NPC名字、地图、坐标、脚本文件名。
二、脚本最小结构
一个NPC文件长这样:
[@main]
欢迎光临\
<买药/@buy><卖装备/@sell><离开/@exit>\
[@buy]
IF
CHECKGOLD100
ACT
TAKE金币100
GIVE金创药1
SENDMSG6购买成功
BREAK
ELSEACT
SENDMSG6金币不足
BREAK
[@sell]
IF
CHECKITEM屠龙1
ACT
TAKE屠龙1
GIVE金币500000
SENDMSG6卖出成功
BREAK
ELSEACT
SENDMSG6你没有屠龙
BREAK
[@exit]
ACT
CLOSE
BREAK
拆开看:
•[@main]是默认入口,玩家点NPC先执行这里
•<买药/@buy>是按钮,玩家点击后跳转到[@buy]
•#IF下面写检测条件,满足才往下走
•#ACT下面写执行动作
•#ELSEACT是条件不满足时执行的动作
•BREAK是结束,防止继续往下执行
•\是换行
三、标签的三种写法
[@main]普通标签,玩家点击按钮跳转过来
[@Login]玩家登录时自动触发,不用点
[@KillMon]玩家杀怪时自动触发,不用点
标签名自己起,但不能重复。跳转用<文字/@标签名>或GOTO@标签名。
四、#IF和#ACT的区别
IF下面只能放检测命令,比如:
CHECKGOLD100
CHECKITEM屠龙1
CHECKLEVELEX35
CHECKMAPNAME015
ISADMIN
EQUALN15
LARGEN110
ACT下面只能放执行命令,比如:
TAKE金币100
GIVE屠龙1
CHANGEEXP+1000
MAPMOVE0155050
SENDMSG6提示文字
MOVN15
INCN11
BREAK
检测命令放错位置,脚本直接报错或不生效。
五、变量:脚本的记性
变量就是存数字或文字的盒子,用<$STR(变量名)>显示出来。
数字变量:
N1、N2、D0、D1、U1、G1
•N系列:玩家私有数字变量
•D系列:临时数字变量,小退可能清空
•U系列:玩家私有可保存变量
•G系列:全局变量,全服共享
字符变量:
S1、S0、A1
存文字,比如玩家名字、地图名。
赋值:
MOVN15把5存进N1
MOVS1你好把“你好”存进S1
INCN11N1加1
DECN11N1减1
MULN12N1乘2
显示:
SENDMSG6当前等级:<$STR(N1)>
SENDMSG6玩家名:<$USERNAME>
六、常用检测命令
CHECKGOLD1000检查金币是否≥1000
CHECKITEM屠龙1检查是否有1把屠龙
CHECKLEVELEX35检查等级是否≥35
CHECKMAPNAME015检查是否在015地图
CHECKMONMAP0150检查015地图怪物数量是否为0
EQUALN15检查N1是否等于5
LARGEN15检查N1是否大于5
SMALLN15检查N1是否小于5
ISADMIN检查是否管理员
RANDOM31/3概率通过
七、常用执行命令
GIVE屠龙1给物品
TAKE屠龙1收物品
GAMEGOLD+100加元宝
CHANGEEXP+1000加经验
MAPMOVE0155050传送
SENDMSG6文字玩家自己看提示
SENDMSG0文字全服广播
BREAK结束
GOTO@标签跳转
CLOSE关闭NPC窗口
MOVN15赋值
INCN11加1
SET[001]1设置标志位
八、标志位:简单的是非开关
SET[001]1把标志001设为开
SET[001]0把标志001设为关
CHECK[001]1检查标志001是否开
CHECK[001]0检查标志001是否关
用于“是否接过任务”“是否领过奖励”这种二选一状态。
九、NPC按钮写法
<显示文字/@跳转标签>
<买药/@buy>
<传送到祖玛/@go_zuma>
按钮可以带参数:
<输入数字/@@InPutInteger1>
<输入文字/@@InPutString1>
输入后跳转到:
[@InPutInteger1]
ACT
MOVN1<$STR(M0)>
SENDMSG6你输入的数字是:<$STR(N1)>
M0是引擎存输入值的临时变量。
十、条件分支的完整写法
[@main]
IF
CHECKLEVELEX35
ACT
SENDMSG6你等级够了
GOTO@高级功能
BREAK
ELSEACT
SENDMSG6你等级不够
GOTO@低级功能
BREAK
IF满足走#ACT,不满足走#ELSEACT。没有#ELSEACT就不执行任何动作。
十一、多条件组合
IF
CHECKLEVELEX35
CHECKGOLD1000
ACT
SENDMSG6等级和金币都满足
BREAK
两个条件都要满足才执行。要“或”关系,用OR:
IF
OR
CHECKLEVELEX35
ISADMIN
ACT
SENDMSG6等级35或管理员
BREAK
十二、脚本调试方法
1.改完脚本,M2里点“重新加载NPC”或GM输@reloadnpc
2.游戏里点NPC,看有没有报错提示
3.M2窗口的日志区会显示脚本错误行号
4.最常见错误:标签名重复、#IF下面写了执行命令、跳转的标签不存在
十三、从改到写
先找一个现成NPC脚本,比如仓库NPC,改按钮文字、改给的东西、改条件,跑通了再自己从零写。别一上来就写复杂任务系统,先写一个“给钱发装备”的NPC,再写“杀怪计数”,再写“任务链”。
十四、完整入门示例:一个卖药NPC
[@main]
<药店老板>\
\
<买金创药/@buy_jcy><买魔法药/@buy_mfy>\
<离开/@exit>\
[@buy_jcy]
IF
CHECKGOLD100
ACT
TAKE金币100
GIVE金创药1
SENDMSG6购买成功
GOTO@main
BREAK
ELSEACT
SENDMSG6金币不足
GOTO@main
BREAK
[@buy_mfy]
IF
CHECKGOLD100
ACT
TAKE金币100
GIVE魔法药1
SENDMSG6购买成功
GOTO@main
BREAK
ELSEACT
SENDMSG6金币不足
GOTO@main
BREAK
[@exit]
ACT
CLOSE
BREAK
这个脚本能跑通,你就入门了。剩下的就是背命令、看引擎帮助文档、拆别人的脚本。
十五、引擎差异
BLUE/LEGEND/HERO/GOM/GEE命令名有细微差别:
•检查等级:CHECKLEVELEX或CHECKLEVEL
•检查金币:CHECKGOLD或CHECKGAMEGOLD
•传送:MAPMOVE或MAP
•变量:N$前缀有的引擎支持,有的不支持
写之前先看你引擎的脚本命令手册,别把GEE的命令抄到HERO里。
十六、最后一句
传奇脚本=标签+#IF检测+#ACT执行+变量记状态+跳转串联。所有功能都是这个模型的组合。先跑通最简单的,再慢慢加。

