传奇里“调用M2命令”分三层:GM聊天命令、NPC脚本命令、引擎内置触发标签。不是把 M2 里的函数直接写进 txt 就能跑,而是用引擎约定的脚本命令去触发 M2 已经实现的功能。
一、NPC脚本里直接写执行命令
文件在 Mir200\Envir\Market_Def\ 或 Market_Sell\ 里,结构就是标签+条件+动作:
[@main]
欢迎\
<传送到祖玛/@go_zuma>\
<发元宝/@give_yb>\
[@go_zuma]
IF
CHECKLEVELEX > 10
ACT
MAPMOVE 015 50 50
SENDMSG 6 已传送到祖玛寺庙
BREAK
ELSESAY
等级不足10级
BREAK
[@give_yb]
IF
ISADMIN
ACT
GAMEGOLD + 100
SENDMSG 6 管理员发放100元宝
BREAK
ELSESAY
你不是管理员
BREAK
MAPMOVE、GAMEGOLD、GIVE、TAKE、SENDMSG、MAPMOVED、SET、MOV、CHECKLEVELEX、CHECKITEM、ISADMIN 这些都是 M2 解析的脚本命令,不是你自己写的函数。
二、GM命令在游戏里触发
M2 里很多功能做成 @命令,GM账号在聊天框直接输:
@reloadnpc
@move 3 330 330
@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
SENDMSG 0 恭喜达到35级,获得骨玉权杖
BREAK
[@Login]
ACT
SENDMSG 6 欢迎回来
SET D0 0
[@UseItemXXX]
ACT
CHANGEEXP + 500000
SENDMSG 6 使用经验卷轴+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
MOV S1 $PARAM(1)
MOV D0 $PARAM(2)
SENDMSG 6 购买物品:<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函数”写成 Call MapMove(015,50,50) → 传奇脚本不是Lua/JS,不支持这种
• 自定义 @命令没在 UserCmd 配权限,普通玩家输出来没反应
• 变量混用:N0/M0/S0/G0/D0/A0 用途各引擎有差异,BLUE 里 M0 常接输入,G 系列做全局,D 系列做临时,A/S 做字符
九、最小可跑模板
[@main]
主城传送员\
<进祖玛/@zuma> <进石墓/@shigu>\
<离开/@exit>\
[@zuma]
IF
CHECKGOLD 1000
ACT
TAKE 金币 1000
MAPMOVE 015 50 50
SENDMSG 6 消耗1000金币,进入祖玛
BREAK
ELSEACT
SENDMSG 6 金币不够
BREAK
[@shigu]
IF
ACT
MAPMOVE 717 100 100
SENDMSG 6 进入石墓阵
BREAK
这就是“脚本调M2命令”的真实样子:标签接收点击,#IF 检测,#ACT 里写 M2 认得的命令,BREAK 防穿透。
十、如果你说的是“M2控制台命令”
M2Server 界面里输:
@ReloadNpc
@ReloadManage
@ReloadMonItems
@ReloadLineNotice
这些是给引擎自己热重载配置,不是给 NPC 脚本里嵌的;脚本里只能用 MAPMOVE / GIVE / TAKE / SENDMSG / GAMEGOLD 这类“脚本级命令”去达到同样效果。
传奇脚本调用M2命令:NPC/任务/QF写法
来源:
作者:
点击:

