传奇里“调用M2命令”分三层:GM聊天命令、NPC脚本命令、引擎内置触发标签。不是把M2里的函数直接写进txt就能跑,而是用引擎约定的脚本命令去触发M2已经实现的功能。
一、NPC脚本里直接写执行命令
文件在Mir200\Envir\Market_Def\或Market_Sell\里,结构就是标签+条件+动作:
[@main]
欢迎\
<传送到祖玛/@go_zuma>\
<发元宝/@give_yb>\
[@go_zuma]
IF
CHECKLEVELEX>10
ACT
MAPMOVE0155050
SENDMSG6已传送到祖玛寺庙
BREAK
ELSESAY
等级不足10级
BREAK
[@give_yb]
IF
ISADMIN
ACT
GAMEGOLD+100
SENDMSG6管理员发放100元宝
BREAK
ELSESAY
你不是管理员
BREAK
MAPMOVE、GAMEGOLD、GIVE、TAKE、SENDMSG、MAPMOVED、SET、MOV、CHECKLEVELEX、CHECKITEM、ISADMIN这些都是M2解析的脚本命令,不是你自己写的函数。
二、GM命令在游戏里触发
M2里很多功能做成@命令,GM账号在聊天框直接输:
@reloadnpc
@move3330330
@kick玩家名
@make屠龙1
@mob祖玛卫士5
这些命令在Command.ini/AdminList.txt/UserCmd.txt里能改名字和权限。脚本里不能写“调用@move”,但可以让玩家点NPC后由脚本执行MAPMOVE这种等价命令。
三、任务脚本QuestDiary里用内置触发
Envir\QuestDiary\某某目录\文件.txt:
[@PlayLevelUp]
IF
CHECKLEVELEX=35
ACT
GIVE骨玉权杖1
SENDMSG0恭喜达到35级,获得骨玉权杖
BREAK
[@Login]
ACT
SENDMSG6欢迎回来
SETD00
[@UseItemXXX]
ACT
CHANGEEXP+500000
SENDMSG6使用经验卷轴+50万经验
BREAK
[@Login]、[@PlayLevelUp]、[@PlayDie]、[@KillPlay]、[@PickUpItem]是引擎自动调用的标签,不是点NPC才跑。
四、QFunction.txt/QManage.txt里挂全局事件
Envir\MapQuest_def\QFunction-0.txt:
[@KillMonGen]、[@PlayDie]、[@Revival]、[@StdModeFunc1]
这些段由M2在玩家死亡、打怪、用触发类物品时自动执行,里面写#IF/#ACT就行。
五、BLUE/LEGEND自定义@命令传参
玩家输@装备购买屠龙1,脚本里:
[@装备购买]
ACT
MOVS1$PARAM(1)
MOVD0$PARAM(2)
SENDMSG6购买物品:<STR(S1)>数量:<STR(D0)>
PARAM(0)是整条命令串,PARAM(1)第一个参数,后面依次排。这个就是“脚本调用M2自定义命令”的写法。
六、想让脚本执行“M2里没有的命令”
两种路:
1.M2插件/DLL注册新脚本命令,比如AddHeroSkill、OpenShopEx,然后在NPC里直接写:
ACT
AddHeroSkill烈火剑法1
2.用EXEC类命令调外部程序(部分引擎支持EXECUTE、RunProgram、CALL外部),但老BLUE/HERO不一定有,GEE有些扩展命令。
七、重载方式
改完NPC脚本:M2里控制→重新加载NPC,或GM输@reloadnpc
改QuestDiary:@reloadmanage/重载任务脚本
改QFunction:一般重载NPC或重载登录脚本
改Merchant.txt(NPC坐标/名字):多数要重启M2或点“重新加载商人”
八、常见写错
•#IF后面写GIVE→错,#IF只放检测命令
•#ACT后面写CHECKGOLD→错,#ACT只放执行命令
•想“调用M2函数”写成CallMapMove(0155050)→传奇脚本不是Lua/JS,不支持这种
•自定义@命令没在UserCmd配权限,普通玩家输出来没反应
•变量混用:N0/M0/S0/G0/D0/A0用途各引擎有差异,BLUE里M0常接输入,G系列做全局,D系列做临时,A/S做字符
九、最小可跑模板
[@main]
主城传送员\
<进祖玛/@zuma><进石墓/@shigu>\
<离开/@exit>\
[@zuma]
IF
CHECKGOLD1000
ACT
TAKE金币1000
MAPMOVE0155050
SENDMSG6消耗1000金币,进入祖玛
BREAK
ELSEACT
SENDMSG6金币不够
BREAK
[@shigu]
IF
ACT
MAPMOVE717100100
SENDMSG6进入石墓阵
BREAK
这就是“脚本调M2命令”的真实样子:标签接收点击,#IF检测,#ACT里写M2认得的命令,BREAK防穿透。
十、如果你说的是“M2控制台命令”
M2Server界面里输:
@ReloadNpc
@ReloadManage
@ReloadMonItems
@ReloadLineNotice
这些是给引擎自己热重载配置,不是给NPC脚本里嵌的;脚本里只能用MAPMOVE/GIVE/TAKE/SENDMSG/GAMEGOLD这类“脚本级命令”去达到同样效果。
一、NPC脚本里直接写执行命令
文件在Mir200\Envir\Market_Def\或Market_Sell\里,结构就是标签+条件+动作:
[@main]
欢迎\
<传送到祖玛/@go_zuma>\
<发元宝/@give_yb>\
[@go_zuma]
IF
CHECKLEVELEX>10
ACT
MAPMOVE0155050
SENDMSG6已传送到祖玛寺庙
BREAK
ELSESAY
等级不足10级
BREAK
[@give_yb]
IF
ISADMIN
ACT
GAMEGOLD+100
SENDMSG6管理员发放100元宝
BREAK
ELSESAY
你不是管理员
BREAK
MAPMOVE、GAMEGOLD、GIVE、TAKE、SENDMSG、MAPMOVED、SET、MOV、CHECKLEVELEX、CHECKITEM、ISADMIN这些都是M2解析的脚本命令,不是你自己写的函数。
二、GM命令在游戏里触发
M2里很多功能做成@命令,GM账号在聊天框直接输:
@reloadnpc
@move3330330
@kick玩家名
@make屠龙1
@mob祖玛卫士5
这些命令在Command.ini/AdminList.txt/UserCmd.txt里能改名字和权限。脚本里不能写“调用@move”,但可以让玩家点NPC后由脚本执行MAPMOVE这种等价命令。
三、任务脚本QuestDiary里用内置触发
Envir\QuestDiary\某某目录\文件.txt:
[@PlayLevelUp]
IF
CHECKLEVELEX=35
ACT
GIVE骨玉权杖1
SENDMSG0恭喜达到35级,获得骨玉权杖
BREAK
[@Login]
ACT
SENDMSG6欢迎回来
SETD00
[@UseItemXXX]
ACT
CHANGEEXP+500000
SENDMSG6使用经验卷轴+50万经验
BREAK
[@Login]、[@PlayLevelUp]、[@PlayDie]、[@KillPlay]、[@PickUpItem]是引擎自动调用的标签,不是点NPC才跑。
四、QFunction.txt/QManage.txt里挂全局事件
Envir\MapQuest_def\QFunction-0.txt:
[@KillMonGen]、[@PlayDie]、[@Revival]、[@StdModeFunc1]
这些段由M2在玩家死亡、打怪、用触发类物品时自动执行,里面写#IF/#ACT就行。
五、BLUE/LEGEND自定义@命令传参
玩家输@装备购买屠龙1,脚本里:
[@装备购买]
ACT
MOVS1$PARAM(1)
MOVD0$PARAM(2)
SENDMSG6购买物品:<STR(S1)>数量:<STR(D0)>
PARAM(0)是整条命令串,PARAM(1)第一个参数,后面依次排。这个就是“脚本调用M2自定义命令”的写法。
六、想让脚本执行“M2里没有的命令”
两种路:
1.M2插件/DLL注册新脚本命令,比如AddHeroSkill、OpenShopEx,然后在NPC里直接写:
ACT
AddHeroSkill烈火剑法1
2.用EXEC类命令调外部程序(部分引擎支持EXECUTE、RunProgram、CALL外部),但老BLUE/HERO不一定有,GEE有些扩展命令。
七、重载方式
改完NPC脚本:M2里控制→重新加载NPC,或GM输@reloadnpc
改QuestDiary:@reloadmanage/重载任务脚本
改QFunction:一般重载NPC或重载登录脚本
改Merchant.txt(NPC坐标/名字):多数要重启M2或点“重新加载商人”
八、常见写错
•#IF后面写GIVE→错,#IF只放检测命令
•#ACT后面写CHECKGOLD→错,#ACT只放执行命令
•想“调用M2函数”写成CallMapMove(0155050)→传奇脚本不是Lua/JS,不支持这种
•自定义@命令没在UserCmd配权限,普通玩家输出来没反应
•变量混用:N0/M0/S0/G0/D0/A0用途各引擎有差异,BLUE里M0常接输入,G系列做全局,D系列做临时,A/S做字符
九、最小可跑模板
[@main]
主城传送员\
<进祖玛/@zuma><进石墓/@shigu>\
<离开/@exit>\
[@zuma]
IF
CHECKGOLD1000
ACT
TAKE金币1000
MAPMOVE0155050
SENDMSG6消耗1000金币,进入祖玛
BREAK
ELSEACT
SENDMSG6金币不够
BREAK
[@shigu]
IF
ACT
MAPMOVE717100100
SENDMSG6进入石墓阵
BREAK
这就是“脚本调M2命令”的真实样子:标签接收点击,#IF检测,#ACT里写M2认得的命令,BREAK防穿透。
十、如果你说的是“M2控制台命令”
M2Server界面里输:
@ReloadNpc
@ReloadManage
@ReloadMonItems
@ReloadLineNotice
这些是给引擎自己热重载配置,不是给NPC脚本里嵌的;脚本里只能用MAPMOVE/GIVE/TAKE/SENDMSG/GAMEGOLD这类“脚本级命令”去达到同样效果。

