传奇行会战地图脚本参数设置与服务端脚本报错排查修复

来源: 作者: 点击:
行会战地图脚本报错不要先改参数,先开服务端 Log 目录下的 ScriptError.log,日志里会写“Envir\QuestDiary\行会战\xxx.txt line 32: 未知命令/参数错误”,带着行号去改文件,比盲改快十倍。

一、行会战地图脚本挂在哪几个文件
MapInfo.txt:地图编号、名称、是否允许行会战、最大人数、死亡掉落规则。行会战地图必须在这里有独立编号,比如 1001 沙巴克战场,脚本里 MapMove 1001 才能跳进去,编号写错直接“地图不存在”。
Envir\MapQuest_def\1001\GuildWarRule.txt:战场规则主体,胜负条件、刷新旗子NPC、击杀加分、结束发奖都在这里。
Envir\QuestDiary\行会战\xxx.txt:触发行会战的NPC对话脚本,土城行会管理员点“发起行会战”走的就是这条。
Mir200\Envir\Item.txt 和 Monster.txt:奖励物品名、旗子怪物ID必须和这两个表对上,写错ID就“无法找到物品”。

二、行会战脚本里最容易写错的参数
GUILDWAR 发起行会ID 对手行会ID 地图ID 时长(秒):四个参数缺一个就报“参数数量错误”,例如 GUILDWAR 1001 1002 1001 1800,时长单位是秒不是分钟,写 30 就是 30 秒结束。
WARSTART=19:00 必须用英文半角冒号,写中文冒号或 19:00 地图不开启;起始时间大于结束时间同样不触发。
MaxPlayer=50 写 0 或负数全员进不去;MinGuildMember 测试期设 1,正式再调回 2 或 5。
RespawnTime=10 复活秒数,写 -5 复活失效;RespawnPoint 必须指向 MapInfo 里存在的合法坐标,没定义就随机飘。
WinCondition=KillCount 时必须配套 WinKillCount=50,只写条件不写数值,满足击杀也不判胜。
MapMove 1001 320 280 三个参数缺一不可,只写 MapMove 1001 320 报 MoveFail。
CHECKGUILDWAR1 在 GOM 是参战判定,GEE 引擎写成 @CHECKGUILDWAR1,引擎混用必报 CommandNotFound。

三、服务端报错的对应修法
启动弹窗 ScriptSyntaxError line 15:打开对应 txt 跳到 15 行,少等号(GuildWarDuration1800→加=)、拼错词(MonRefleshTime→MonRefreshTime)、行尾多空格,记事本“显示所有字符”能看见尾部空格。
运行时刷 ERROR Invalid parameter / Unknown command 'TeleportToBoss':命令拼错或当前引擎不支持,对照所用引擎(M2Server.exe 属性看版本)命令手册改,GOM 的 #Act 在 GEE 是 #ACTION,RandomMove 在 GOM 是 RandMove。[办citation:9]
进入战场黑屏卡死:MapInfo 里该地图 MAXPLAYERS 设太高,或脚本里有 #GOTO 死循环,全局搜 #GOTO 看是否跳回自己;坐标超出地图尺寸也会把角色卡出边界,F11 或 MapEditor 查合法坐标再改。
旗帜刷出来击杀不加分:@KillNpc1001 写成 @KillMob1001,NPC 和怪物函数混用;或者 VAR GUILD GuildScore1 0 没在文件头定义就用 ADD GuildScore1 10,变量未初始化直接失效。
结束不发奖:REWARDID 里的物品名和 Item.txt 不一致(“行会战勋章”写成“行会勋章”),或 @WAREND 段没写 GIVE 指令,补上跳转和物品名。
改完不生效:M2 控制台没 reload,行会战类敲 reloadguildwar,QuestDiary 改了敲 reloadquest,或者重启 M2Server;每次改前把原文件复制成 GuildWarRule_backup.txt,崩了能秒回滚。

四、编码与路径两个隐形坑
脚本文件必须 ANSI/GBK 保存,用 UTF-8 带 BOM 存的中文会变乱码,引擎解析到中文行直接断。
MapQuest_def 下的子目录名必须是地图编号数字(1001 不是 war1001),GuildWarRule.txt 文件名固定,改名成 WarRule.txt 服务端不认。
QuestDiary 里自建文件夹默认不加载,脚本得放 Envir\QuestDiary\行会战\ 这种标准路径,CALL 调用的子脚本路径写相对名就行。

五、定位套路
备份原文件→开 ScriptError.log 看行号→只改报错那一行→M2 reload 对应模块→建两个小号行会(MinGuildMember 设1)实测进图、击杀旗子、到时结算。还不行就把 GuildWarRule.txt 后半段删掉只留 @ENTER 和变量定义,能进图再加回胜负段,一段段贴回去,哪段贴进去崩就是哪段错。