当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇脚本调用M2命令:NPC/任务/QF写法

热度:
传奇里“调用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这类“脚本级命令”去达到同样效果。
[顶部]