传奇服务端脚本问题一般落在几个地方:M2引擎报错、NPC脚本不触发、机器人/刷怪脚本不刷、怪物不掉落、任务脚本卡流程、命令不认识、变量写错、定时器不跑、地图不加载、Guild/行会/邮件/商城类脚本崩。
先说最基础的脚本文件位置。LegendofMir2类服务端里,脚本大多在:
•\Mir200\Envir\Npc_def\(NPC对话脚本)
•\Mir200\Envir\QuestDiary\(任务脚本,按文件夹分模块)
•\Mir200\Envir\MonGen.txt(刷怪)
•\Mir200\Envir\MonItems\(怪物掉落)
•\Mir200\Envir\MapInfo.txt(地图参数)
•\Mir200\Envir\AdminList.txt(GM权限)
•\Mir200\Logs\(看报错)
•\Mir200\PlugIns\(插件脚本/lua/js/py类扩展)
NPC不说话、点不开对话框,先查NPC_def里文件头:
;NPCNAME地图坐标面向形象名字
地图号写错、坐标被墙挡、名字重名、分号漏写、中文空格混用,NPC就看不见或点了没反应。很多新手把“地图号1003303305杂货商”写成“1003303305杂货商”前面少了分号,引擎当注释,NPC直接不加载。
QuestDiary里任务脚本常见死法:
[@main]
#IF
CHECKLEVELEX>35
#ACT
#SAY
你等级够了。
#ELSEACT
#SAY
回去练级。
错误写法:#IF后面没条件直接#ACT,或者#SAY写成了#say但引擎大小写敏感版本会当未知命令;#IF和#ACT之间夹了空行,部分引擎直接忽略整段;变量用<$STR(NPC变量)>但没在[@XXX]里声明,就回空值。
服务端脚本命令分引擎:
•盛大系/LEG/微端:#IF#ACT#SAY#CALL#GOTO#ELSEACT
•GOM/GEE:支持#IF、#OR、#ACT、#SAY、GameGold、GiveItem、MapMove
•HEROPLUGIN/lua:NPC用lua写,错误会写进PlugIns\log\
•3K/M3/翎风:命令集不同,Give和GiveItem不是一回事
“脚本问题”里80%是命令名不对。比如想给元宝:
GOM里是GAMEGOLD+100或GameGold+100
LEG里可能是ADDGAMEGOLD100
HEROlua里是Human:AddGameGold(100)
你拿LEG的ADDGAMEGOLD塞进GOM,M2直接刷红字:Unknownscriptcommand:ADDGAMEGOLD。
刷怪脚本MonGen.txt格式:
地图号横坐标纵坐标范围怪物名数量刷新时间线数
10010010010半兽人10100
问题常是:地图号在MapInfo里没加载;坐标在阻挡层;数量写0不刷;刷新时间写0狂刷把CPU吃满;怪物名和Monster.db里不一致,M2报Monsternotfound;线数填错导致跨线不刷。
怪物掉落MonItems\半兽人.txt:
金币100/100
强效金创药5/3
沃玛装备1/1000
掉落不出的原因:文件名叫“半兽人.txt”但怪物数据库里是“BanShouRen”,中文名对不上就不掉;概率格式写反;物品名和StdItems.db不一致;服务端关了“死亡掉落”开关;跨服/微端没同步MonItems到网关。
机器人/定时脚本问题:
GOM用Robot.txt+RobotDef:
[Robot]
0:00执行@每日重置
常见错:Robot.txt编码是UTF-8带BOM,引擎只认ANSI,时间行不解析;[@每日重置]段写在QuestDiary里但Robot没#CALL过去;定时器在M2设置里被关;机器人账号没建在Robot.txt指定账号名。
Lua插件脚本崩了看PlugIns\log\PlugIn.log。报错像:
attempttoindexglobal'Human'(anilvalue)
就是函数里没传Human对象,或者NPC调用lua时没绑玩家对象。传奇lua脚本里Human、Npc、Monster三个对象必须分清:Human是玩家,Npc是脚本载体,Monster是怪。把Human:GetName()写在怪物死亡事件里,怪物没有GetName就nil。
变量作用域也常出事。
全局变量:<$G(变量名)>或SetGlobalVal
玩家变量:<$HUMAN(变量名)>或Human:SetCustomVarInt
NPC变量:<$NPC(变量名)>
很多人把玩家任务进度写进NPC变量,重启M2进度全没;写进全局变量,全服玩家共用一个进度,A做任务B也过了。
地图脚本进不去:
MapInfo.txt里:
100火龙洞11110
参数顺序一般是:地图号名字大地图标记允许PK允许行会允许商人掉线回城点。写错一个,地图加载出来是黑图、不能进、进了被踢、不能放技能、不能死亡回城。微端还得多查Map目录里100.map文件是否存在,文件名大小写、扩展名.map/.wem不对就加载空图。
M2报错排查顺序:
1.开M2→查看→日志→脚本日志
2.点NPC看M2是否刷“ScriptError”
3.看报错行号:QuestDiary\任务\某文件第12行
4.第12行看#IF/#ACT/#SAY是否齐全
5.看命令是否在当前引擎命令表里
6.看变量<$XXX>是否声明
7.把中文逗号、全角空格、BOM头、Tab混用全清掉
8.改完重启M2,别只点“重新加载脚本”,有些引擎重载不重挂NPC
“脚本能存盘但游戏里没效果”通常是:
•改了QuestDiary\功能\泡点.txt,但NPC里没#CALL这个文件
•改了MonGen但没点M2的“重新加载怪物刷新”
•改了MonItems但怪物是缓存里的旧对象,等刷新型才掉
•改了StdItems但没重读物品数据库,发出来是0持久0重量名字空
•改了地图但没重载MapInfo,老地图还占着号
合击/英雄脚本问题另算:
英雄出招、合击怒气、英雄技能自动放,通常在:
•\Mir200\Envir\HeroDef\
•M2里选项→英雄设置→合击设置
•数据库HeroDB/MagicHero.db
英雄不放合击:怒气公式在M2里被关;HeroMagic里合击技能MagicID填错;英雄状态设成“休息”;合击触发条件写“主号攻击后9999毫秒”实际永远不会到;版本里合击要火龙之心,道具没挂英雄装备位。
任务卡流程典型:
[@kill100mon]
#IF
CHECKMONKILL半兽人100
#ACT
#CALL[\任务\发奖.txt]@reward
玩家杀了100只但任务不跳,原因:CHECKMONKILL只在指定任务会话里计数;玩家进地图前没触发[@main]注册任务;服务器重启计数清了;怪物名和数据库不一致;跨线杀怪计数不进当前线任务上下文。
商城/充值/礼包脚本最容易被改坏:
#IF
CHECKGAMEGOLD>1000
#ACT
GameGold-1000
GiveItem裁决之杖1
错误点:GameGold减了但没判负;GiveItem物品名数据库没有;没写#ELSEACT提示“元宝不足”;商城NPC被玩家卡刷,重复点一次发两次;没加防连点锁,导致“0元宝领裁决”。
防刷脚本底线:
•发物品前判背包空格
•扣元宝在前,发物在后
•用SetInt(HUMAN(领过礼包))=1做一次性标记
•标记写进人物存档不是全局变量
•商城NPC加#IFCHECK[000]1类每日限制
•机器人发奖走离线结算,不跟玩家点击同线程
插件脚本(lua/js/py):
lua常见问题:require路径错、Metatable被覆盖、Human对象生命周期结束还调用、协程没resume、死循环whiletrue不yield把M2主线程卡死。
js插件:this指向错、异步回调里改人物属性没加锁、JSON解析怪物名乱码。
py插件:和M2通信靠管道/共享内存,编码gbk/utf8没转,中文物品名变问号,发出来叫“????”。
脚本编码铁律:
•老LEG/GOM用ANSI(GB2312/GBK)
•新GEE/HERO支持UTF-8但别带BOM
•QuestDiary里别粘Word空格
•中文标点全部换成英文标点
•Tab和空格别混用
•文件结尾留空行,很多引擎最后一行不读
M2报“Line:0”基本不是第0行,是脚本段没找到[@main]或[@XXX]入口。NPC脚本必须有:
[@main]
#ACT
#SAY
欢迎来杂货店。
没[@main],点NPC直接关对话框。
机器人不跑检查:
•M2里“机器人管理”开关开没开
•Robot.txt里账号密码和M2设置里机器人账号一致不
•机器人角色有没有真的登进游戏
•机器人地图有没有禁入
•机器人执行@段但段写在QuestDiary里,Robot文件没#CALL
•时间格式10:30别写10:30(全角冒号)
刷怪刷炸了:
MonGen里10010010010祖玛卫士5010
刷新时间1秒、数量50、地图就100x100,怪堆爆,寻路吃满,玩家卡顿,M2CPU100%。正确做法分多块坐标、刷新时间10-30秒、数量按地图承载来,祖玛级图单块别超20只。
掉落概率写法:
裁决之杖1/5000
不是1/5000%,也不是0.02%看引擎。有的引擎写1/5000是万分之五?不对,是五千分之一。有的写500/10000才等价。配表前先拿小怪试:强效金创药100/100必掉,沃玛1/100刷十次看掉不掉,掉率系统没被“全局爆率倍数”改过再上正式表。
全局爆率倍数在M2:
选项→参数设置→怪物→爆率控制
那里填2就是全服掉率×2,填0.5腰斩。很多人脚本写1/1000,实测从不出,一查M2里爆率倍数被设成0。
任务NPC点进去空白:
•#SAY后面没内容
•#IF条件不满足直接跳#ELSEACT但#ELSEACT没写
•用了<$USERNAME>但引擎变量名是<$NAME>
•对话框里用了颜色码\颜色但格式错成\红全角斜杠
•文本里有{}没闭合,富文本解析直接弃整段
合服/跨服脚本问题:
跨服NPC在A服写好了,B服没同步QuestDiary;跨服人物对象在网关层,M2里Human某些方法返回nil;跨服发物品要走中心服队列,直接GiveItem发到跨服角色身上会丢。
版本迁移脚本废掉:
LEG脚本迁GOM:ADDGAMEGOLD→GameGold,give→GiveItem,checklevel→CheckLevelEx,goto→#GOTO但参数写法变;HERO迁GEE:很多功能变lua插件,原来#CALL文本段要重写;3K迁GOM:怪物名、物品名、地图号全部对一遍,中文名编码一转就乱。
调试技巧:
•在脚本里插#SAY到这里了1#SAY到这里了2看流程卡哪
•M2开“显示脚本调试信息”
•用GM命令@mob祖玛卫士测刷怪
•用@give裁决之杖测物品名对不对
•用@mov100330330测地图坐标进得去不
•机器人段里#SAY机器人执行OK看机器人真跑没
•MonItems里先塞强效金创药100/100验证掉落链路通不通
权限问题:
AdminList.txt里*游戏管理员才能用@命令;普通玩家点NPC调@reload会被拒;脚本里想Reload一般走M2控制台,不让玩家NPC触发,不然玩家点一下重读全服脚本,卡全服。
常见的“脚本没问题但就是不行”:
1.客户端和网关没重启,只改了服务端
2.微端资源没更新,NPC形象是空的,点了没面板
3.数据库StdItems里物品禁交易/禁掉落/绑定,发出来立马回收
4.地图PK模式限制,进图被强制和平,合击/PK脚本不触发
5.行会地图没开行会权限,行会NPC不认人
6.节日/活动开关在M2里没开,活动脚本整体跳过
7.防外挂层把脚本命令当异常包拦了
NPC脚本最小可用模板(GOM类):
;杂货商33303305杂货商
[@main]
#ACT
#SAY
欢迎,<$\NAME>。\\
<买药/@buy>\<离开/@exit>
[@buy]
#ACT
#SAY
这里暂时只发强效金创药。
GiveItem强效金创药1
[@exit]
#ACT
#SAY
慢走。
任务脚本最小模板:
[@main]
#IF
CHECKLEVELEX<35
#ACT
#SAY
35级再来。
#ELSEACT
#SAY
<接任务/@accept>
[@accept]
#IF
#ACT
SetInt(<$HUMAN(做过初探)>)=1
#SAY
任务接了,去杀100只半兽人。
刷怪最小排错:
MonGen先写:
33303305半兽人5100
进游戏/move3看怪刷不刷;不刷就查MapInfo里3号图在不在、半兽人在Monster.db叫啥、坐标是不是墙、线数0是不是当前线。
掉落最小排错:
MonItems\半兽人.txt:
金币100/100
强效金创药100/100
杀一只必掉,不掉就是怪物名不对/文件没重载/掉落开关关了/微端没同步。
lua插件最小排错:
functionOnNpcClick(HumanNpc)
ifnotHumanthen
print("Humanisnil")
return
end
Human:Say("hello")
end
M2日志里没hello,就是NPC没绑这个lua函数;报Humanisnil就是调用方没传玩家对象。
服务端脚本问题归根到底就五类:
命令不对引擎、
变量作用域写错、
文件编码/格式坏了、
数据库名字对不上、
M2开关没开。
别一上来改大系统,先拿“强效金创药100/100”“@give裁决”“mov地图号”三件事把链路打通:物品链路、怪物链路、地图链路通了,再写任务、商城、合击、跨服、机器人。
脚本改完别信“保存即生效”。LEG类部分读盘老,GOM类点“重新加载脚本”,HERO/lua类有时要重载插件,微端要重发资源,跨服要中心服同步。每次只改一处,改完用GM命令验证,验证通过再改下一项,比一次性改五十行然后M2狂红省十倍时间。
NPC重名也会静默失效:两个NPC都叫“传送员”,第二个不加载;地图里两个坐标都放“杂货商”,玩家点到的可能是没写完整的那个。命名用土城传送员/沙巴克传送员/祖玛传送员,别全服都叫“传送员”。
任务变量别用数字开头,别用空格,别用中文:
错:SetInt(<$HUMAN(领过礼包)>)=1
对:SetInt(<$HUMAN(libao_get)>)=1
定时器不跑:
GOM用Robot.txt的0:00/10:00行;
LEG用定时器.txt/机器人管理;
HERO用lua的Timer注册;
M3用内置调度;
你拿LEG的定时器文件塞GOM,当然不跑。
最后一类:版本被二次打包,脚本目录看着像GOM,实际内核是GEE/HERO/翎风。解决办法不是猜命令,是进M2→关于/版本信息看引擎名,再去对应引擎文档查命令表。同一句“发元宝”,GOM写GameGold+100,GEE写AddGameGold(100),HERO写Human:AddGameGold(100),翎风又是另一套。引擎不对,教程再对也白搭。
服务端脚本没有“万能模板”,只有“先打通物品/怪物/地图/变量/定时器五条线,再叠业务”。NPC不说话看定义行和[@main],任务卡住看#IF/#ACT/#SAY和变量作用域,刷怪不出看MonGen和MapInfo,掉落没有看MonItems和数据库名,合击不放看英雄库和怒气开关,机器人不动看Robot账号和时间格式,lua崩看对象是否为nil和编码。把每条链路拆开测,比整服抄别人全套脚本稳得多。
先说最基础的脚本文件位置。LegendofMir2类服务端里,脚本大多在:
•\Mir200\Envir\Npc_def\(NPC对话脚本)
•\Mir200\Envir\QuestDiary\(任务脚本,按文件夹分模块)
•\Mir200\Envir\MonGen.txt(刷怪)
•\Mir200\Envir\MonItems\(怪物掉落)
•\Mir200\Envir\MapInfo.txt(地图参数)
•\Mir200\Envir\AdminList.txt(GM权限)
•\Mir200\Logs\(看报错)
•\Mir200\PlugIns\(插件脚本/lua/js/py类扩展)
NPC不说话、点不开对话框,先查NPC_def里文件头:
;NPCNAME地图坐标面向形象名字
地图号写错、坐标被墙挡、名字重名、分号漏写、中文空格混用,NPC就看不见或点了没反应。很多新手把“地图号1003303305杂货商”写成“1003303305杂货商”前面少了分号,引擎当注释,NPC直接不加载。
QuestDiary里任务脚本常见死法:
[@main]
#IF
CHECKLEVELEX>35
#ACT
#SAY
你等级够了。
#ELSEACT
#SAY
回去练级。
错误写法:#IF后面没条件直接#ACT,或者#SAY写成了#say但引擎大小写敏感版本会当未知命令;#IF和#ACT之间夹了空行,部分引擎直接忽略整段;变量用<$STR(NPC变量)>但没在[@XXX]里声明,就回空值。
服务端脚本命令分引擎:
•盛大系/LEG/微端:#IF#ACT#SAY#CALL#GOTO#ELSEACT
•GOM/GEE:支持#IF、#OR、#ACT、#SAY、GameGold、GiveItem、MapMove
•HEROPLUGIN/lua:NPC用lua写,错误会写进PlugIns\log\
•3K/M3/翎风:命令集不同,Give和GiveItem不是一回事
“脚本问题”里80%是命令名不对。比如想给元宝:
GOM里是GAMEGOLD+100或GameGold+100
LEG里可能是ADDGAMEGOLD100
HEROlua里是Human:AddGameGold(100)
你拿LEG的ADDGAMEGOLD塞进GOM,M2直接刷红字:Unknownscriptcommand:ADDGAMEGOLD。
刷怪脚本MonGen.txt格式:
地图号横坐标纵坐标范围怪物名数量刷新时间线数
10010010010半兽人10100
问题常是:地图号在MapInfo里没加载;坐标在阻挡层;数量写0不刷;刷新时间写0狂刷把CPU吃满;怪物名和Monster.db里不一致,M2报Monsternotfound;线数填错导致跨线不刷。
怪物掉落MonItems\半兽人.txt:
金币100/100
强效金创药5/3
沃玛装备1/1000
掉落不出的原因:文件名叫“半兽人.txt”但怪物数据库里是“BanShouRen”,中文名对不上就不掉;概率格式写反;物品名和StdItems.db不一致;服务端关了“死亡掉落”开关;跨服/微端没同步MonItems到网关。
机器人/定时脚本问题:
GOM用Robot.txt+RobotDef:
[Robot]
0:00执行@每日重置
常见错:Robot.txt编码是UTF-8带BOM,引擎只认ANSI,时间行不解析;[@每日重置]段写在QuestDiary里但Robot没#CALL过去;定时器在M2设置里被关;机器人账号没建在Robot.txt指定账号名。
Lua插件脚本崩了看PlugIns\log\PlugIn.log。报错像:
attempttoindexglobal'Human'(anilvalue)
就是函数里没传Human对象,或者NPC调用lua时没绑玩家对象。传奇lua脚本里Human、Npc、Monster三个对象必须分清:Human是玩家,Npc是脚本载体,Monster是怪。把Human:GetName()写在怪物死亡事件里,怪物没有GetName就nil。
变量作用域也常出事。
全局变量:<$G(变量名)>或SetGlobalVal
玩家变量:<$HUMAN(变量名)>或Human:SetCustomVarInt
NPC变量:<$NPC(变量名)>
很多人把玩家任务进度写进NPC变量,重启M2进度全没;写进全局变量,全服玩家共用一个进度,A做任务B也过了。
地图脚本进不去:
MapInfo.txt里:
100火龙洞11110
参数顺序一般是:地图号名字大地图标记允许PK允许行会允许商人掉线回城点。写错一个,地图加载出来是黑图、不能进、进了被踢、不能放技能、不能死亡回城。微端还得多查Map目录里100.map文件是否存在,文件名大小写、扩展名.map/.wem不对就加载空图。
M2报错排查顺序:
1.开M2→查看→日志→脚本日志
2.点NPC看M2是否刷“ScriptError”
3.看报错行号:QuestDiary\任务\某文件第12行
4.第12行看#IF/#ACT/#SAY是否齐全
5.看命令是否在当前引擎命令表里
6.看变量<$XXX>是否声明
7.把中文逗号、全角空格、BOM头、Tab混用全清掉
8.改完重启M2,别只点“重新加载脚本”,有些引擎重载不重挂NPC
“脚本能存盘但游戏里没效果”通常是:
•改了QuestDiary\功能\泡点.txt,但NPC里没#CALL这个文件
•改了MonGen但没点M2的“重新加载怪物刷新”
•改了MonItems但怪物是缓存里的旧对象,等刷新型才掉
•改了StdItems但没重读物品数据库,发出来是0持久0重量名字空
•改了地图但没重载MapInfo,老地图还占着号
合击/英雄脚本问题另算:
英雄出招、合击怒气、英雄技能自动放,通常在:
•\Mir200\Envir\HeroDef\
•M2里选项→英雄设置→合击设置
•数据库HeroDB/MagicHero.db
英雄不放合击:怒气公式在M2里被关;HeroMagic里合击技能MagicID填错;英雄状态设成“休息”;合击触发条件写“主号攻击后9999毫秒”实际永远不会到;版本里合击要火龙之心,道具没挂英雄装备位。
任务卡流程典型:
[@kill100mon]
#IF
CHECKMONKILL半兽人100
#ACT
#CALL[\任务\发奖.txt]@reward
玩家杀了100只但任务不跳,原因:CHECKMONKILL只在指定任务会话里计数;玩家进地图前没触发[@main]注册任务;服务器重启计数清了;怪物名和数据库不一致;跨线杀怪计数不进当前线任务上下文。
商城/充值/礼包脚本最容易被改坏:
#IF
CHECKGAMEGOLD>1000
#ACT
GameGold-1000
GiveItem裁决之杖1
错误点:GameGold减了但没判负;GiveItem物品名数据库没有;没写#ELSEACT提示“元宝不足”;商城NPC被玩家卡刷,重复点一次发两次;没加防连点锁,导致“0元宝领裁决”。
防刷脚本底线:
•发物品前判背包空格
•扣元宝在前,发物在后
•用SetInt(HUMAN(领过礼包))=1做一次性标记
•标记写进人物存档不是全局变量
•商城NPC加#IFCHECK[000]1类每日限制
•机器人发奖走离线结算,不跟玩家点击同线程
插件脚本(lua/js/py):
lua常见问题:require路径错、Metatable被覆盖、Human对象生命周期结束还调用、协程没resume、死循环whiletrue不yield把M2主线程卡死。
js插件:this指向错、异步回调里改人物属性没加锁、JSON解析怪物名乱码。
py插件:和M2通信靠管道/共享内存,编码gbk/utf8没转,中文物品名变问号,发出来叫“????”。
脚本编码铁律:
•老LEG/GOM用ANSI(GB2312/GBK)
•新GEE/HERO支持UTF-8但别带BOM
•QuestDiary里别粘Word空格
•中文标点全部换成英文标点
•Tab和空格别混用
•文件结尾留空行,很多引擎最后一行不读
M2报“Line:0”基本不是第0行,是脚本段没找到[@main]或[@XXX]入口。NPC脚本必须有:
[@main]
#ACT
#SAY
欢迎来杂货店。
没[@main],点NPC直接关对话框。
机器人不跑检查:
•M2里“机器人管理”开关开没开
•Robot.txt里账号密码和M2设置里机器人账号一致不
•机器人角色有没有真的登进游戏
•机器人地图有没有禁入
•机器人执行@段但段写在QuestDiary里,Robot文件没#CALL
•时间格式10:30别写10:30(全角冒号)
刷怪刷炸了:
MonGen里10010010010祖玛卫士5010
刷新时间1秒、数量50、地图就100x100,怪堆爆,寻路吃满,玩家卡顿,M2CPU100%。正确做法分多块坐标、刷新时间10-30秒、数量按地图承载来,祖玛级图单块别超20只。
掉落概率写法:
裁决之杖1/5000
不是1/5000%,也不是0.02%看引擎。有的引擎写1/5000是万分之五?不对,是五千分之一。有的写500/10000才等价。配表前先拿小怪试:强效金创药100/100必掉,沃玛1/100刷十次看掉不掉,掉率系统没被“全局爆率倍数”改过再上正式表。
全局爆率倍数在M2:
选项→参数设置→怪物→爆率控制
那里填2就是全服掉率×2,填0.5腰斩。很多人脚本写1/1000,实测从不出,一查M2里爆率倍数被设成0。
任务NPC点进去空白:
•#SAY后面没内容
•#IF条件不满足直接跳#ELSEACT但#ELSEACT没写
•用了<$USERNAME>但引擎变量名是<$NAME>
•对话框里用了颜色码\颜色但格式错成\红全角斜杠
•文本里有{}没闭合,富文本解析直接弃整段
合服/跨服脚本问题:
跨服NPC在A服写好了,B服没同步QuestDiary;跨服人物对象在网关层,M2里Human某些方法返回nil;跨服发物品要走中心服队列,直接GiveItem发到跨服角色身上会丢。
版本迁移脚本废掉:
LEG脚本迁GOM:ADDGAMEGOLD→GameGold,give→GiveItem,checklevel→CheckLevelEx,goto→#GOTO但参数写法变;HERO迁GEE:很多功能变lua插件,原来#CALL文本段要重写;3K迁GOM:怪物名、物品名、地图号全部对一遍,中文名编码一转就乱。
调试技巧:
•在脚本里插#SAY到这里了1#SAY到这里了2看流程卡哪
•M2开“显示脚本调试信息”
•用GM命令@mob祖玛卫士测刷怪
•用@give裁决之杖测物品名对不对
•用@mov100330330测地图坐标进得去不
•机器人段里#SAY机器人执行OK看机器人真跑没
•MonItems里先塞强效金创药100/100验证掉落链路通不通
权限问题:
AdminList.txt里*游戏管理员才能用@命令;普通玩家点NPC调@reload会被拒;脚本里想Reload一般走M2控制台,不让玩家NPC触发,不然玩家点一下重读全服脚本,卡全服。
常见的“脚本没问题但就是不行”:
1.客户端和网关没重启,只改了服务端
2.微端资源没更新,NPC形象是空的,点了没面板
3.数据库StdItems里物品禁交易/禁掉落/绑定,发出来立马回收
4.地图PK模式限制,进图被强制和平,合击/PK脚本不触发
5.行会地图没开行会权限,行会NPC不认人
6.节日/活动开关在M2里没开,活动脚本整体跳过
7.防外挂层把脚本命令当异常包拦了
NPC脚本最小可用模板(GOM类):
;杂货商33303305杂货商
[@main]
#ACT
#SAY
欢迎,<$\NAME>。\\
<买药/@buy>\<离开/@exit>
[@buy]
#ACT
#SAY
这里暂时只发强效金创药。
GiveItem强效金创药1
[@exit]
#ACT
#SAY
慢走。
任务脚本最小模板:
[@main]
#IF
CHECKLEVELEX<35
#ACT
#SAY
35级再来。
#ELSEACT
#SAY
<接任务/@accept>
[@accept]
#IF
#ACT
SetInt(<$HUMAN(做过初探)>)=1
#SAY
任务接了,去杀100只半兽人。
刷怪最小排错:
MonGen先写:
33303305半兽人5100
进游戏/move3看怪刷不刷;不刷就查MapInfo里3号图在不在、半兽人在Monster.db叫啥、坐标是不是墙、线数0是不是当前线。
掉落最小排错:
MonItems\半兽人.txt:
金币100/100
强效金创药100/100
杀一只必掉,不掉就是怪物名不对/文件没重载/掉落开关关了/微端没同步。
lua插件最小排错:
functionOnNpcClick(HumanNpc)
ifnotHumanthen
print("Humanisnil")
return
end
Human:Say("hello")
end
M2日志里没hello,就是NPC没绑这个lua函数;报Humanisnil就是调用方没传玩家对象。
服务端脚本问题归根到底就五类:
命令不对引擎、
变量作用域写错、
文件编码/格式坏了、
数据库名字对不上、
M2开关没开。
别一上来改大系统,先拿“强效金创药100/100”“@give裁决”“mov地图号”三件事把链路打通:物品链路、怪物链路、地图链路通了,再写任务、商城、合击、跨服、机器人。
脚本改完别信“保存即生效”。LEG类部分读盘老,GOM类点“重新加载脚本”,HERO/lua类有时要重载插件,微端要重发资源,跨服要中心服同步。每次只改一处,改完用GM命令验证,验证通过再改下一项,比一次性改五十行然后M2狂红省十倍时间。
NPC重名也会静默失效:两个NPC都叫“传送员”,第二个不加载;地图里两个坐标都放“杂货商”,玩家点到的可能是没写完整的那个。命名用土城传送员/沙巴克传送员/祖玛传送员,别全服都叫“传送员”。
任务变量别用数字开头,别用空格,别用中文:
错:SetInt(<$HUMAN(领过礼包)>)=1
对:SetInt(<$HUMAN(libao_get)>)=1
定时器不跑:
GOM用Robot.txt的0:00/10:00行;
LEG用定时器.txt/机器人管理;
HERO用lua的Timer注册;
M3用内置调度;
你拿LEG的定时器文件塞GOM,当然不跑。
最后一类:版本被二次打包,脚本目录看着像GOM,实际内核是GEE/HERO/翎风。解决办法不是猜命令,是进M2→关于/版本信息看引擎名,再去对应引擎文档查命令表。同一句“发元宝”,GOM写GameGold+100,GEE写AddGameGold(100),HERO写Human:AddGameGold(100),翎风又是另一套。引擎不对,教程再对也白搭。
服务端脚本没有“万能模板”,只有“先打通物品/怪物/地图/变量/定时器五条线,再叠业务”。NPC不说话看定义行和[@main],任务卡住看#IF/#ACT/#SAY和变量作用域,刷怪不出看MonGen和MapInfo,掉落没有看MonItems和数据库名,合击不放看英雄库和怒气开关,机器人不动看Robot账号和时间格式,lua崩看对象是否为nil和编码。把每条链路拆开测,比整服抄别人全套脚本稳得多。

