行会战地图脚本参数与传奇服务端脚本错误速修

来源: 作者: 点击:
行会战/行会占领地图在 HERO 引擎里不是单靠一个“参数文件”搞定,而是 MapInfo.txt + SabukW.txt + Merchant.txt + Market_Def + QuestDiary/QFunction 一起起作用。报“脚本错误”时,先别改一大片,先抓 M2 红字里的 文件名 + 行号 + 命令名。

一、行会战/攻城地图该配的地方
1. MapInfo.txt
沙巴克/行会战地图一般带模式标记,例如:
3 比奇 0 0 0
350 沙巴克皇宫 FIGHT3 0 0
015 沙巴克 0 0 0
HERO 里皇宫地图常用 FIGHT3(行会战斗/占领模式)。地图号必须和客户端 Map 目录里的 .map 存在,也和 NPC 所在地图号一致。
写错地图号 → 进图黑屏/卡加载;模式没写 FIGHT3 → 占领判定不触发。

2. SabukW.txt
HERO 攻沙核心配置:
[Settings]
CastleName=沙巴克
WarTime=20:00-22:00
DefenseFee=1000000
还有城门怪物名、皇宫地图号、占领倒计时、攻城奖励等。
攻城不开启:先看这里时间格式对不对、CastleName 和 MapInfo 里城堡名对不对、M2 里“沙巴克设置”有没有点保存并重启。

3. Merchant.txt 加报名/传送 NPC
格式:
地图号 X Y NPC名字 皮肤 功能标志 喊话间隔 移动范围
例:
3 330 330 沙巴克报名官 0 0 0 0
NPC 脚本放 Market_Def\沙巴克报名官-3.txt(名字里最好带地图号,避免加载混乱)。

4. 行会身份判定命令
HERO 常用:
ISGUILDMASTER —— 是否行会会长
HaveGuild —— 是否已有行会
CHECKGUILDVAR —— 行会变量
GETCASTLEOWNER 0 H1 —— 取沙巴克占领行会名到变量 H1
IsCastleMaster —— 是否城主行会成员
MOVETOMAP 350 30 30 —— 传皇宫
错误写法:mapmove xx xxx xxx(命令名拼错)、MOVETOMAP 后坐标少一个、GOTO @xxx 但目标文件里没 [@xxx]。

二、行会战传送 NPC 最小可用例子
Market_Def\行会战传送员-3.txt:
[@main]
SAY

行会战传送:\
1.进入行会战地图\
2.离开\
<进入行会战/@jinru> <关闭/@exit>

[@jinru]
IF

HaveGuild
ACT

MOVETOMAP 60 10 10
SENDMSG 6 已传送至行会战地图
ELSEACT

SENDMSG 5 你还没有行会,无法进入

[@exit]
ACT

break

要点:
• #IF / #ACT / #ELSEACT / break 半角

• 标签 [@jinru] 顶格,前面别留空格/Tab

• 地图号 60 必须在 MapInfo.txt 和 Map 目录里真有

• 改完 M2 点“重新加载 NPC”,别每次都重启

三、服务端脚本错误通用排法
M2 红字像这样才有用:
Script Error: Market_Def\行会战传送员-3.txt Line 12
Unknown command: mapmove
先看这三样:

1. 编码
HERO 老端用 ANSI/GBK。记事本存成 UTF-8 会带 BOM,第一行命令直接废。
Notepad++ → 编码 → 转为 ANSI → 保存。

2. 半角符号
中文逗号、中文冒号、中文引号、全角空格都会炸。
IF/#ACT 后面条件里写:

CHECKGUILDVAR 参战状态 1
别写:
CHECKGUILDVAR 参战状态:1

3. 结构不闭合
IF

ACT

...
ELSEACT

...
break
菜单段结束要 break;条件分支结束该 #ENDIF 的别漏。
GOTO @领取 时,目标文件必须有 [@领取],跨文件用:
CALL [..\QuestDiary\行会战.txt] @领取

4. 命令不是所有引擎都有
HERO 用 ISGUILDMASTER、GETCASTLEOWNER、MOVETOMAP
GOM 用另一套;GEE 又有差异。
把 GOM 脚本塞进 HERO 端,就会满屏 Unknown command。

5. 文件路径乱放
• NPC 对话/商人:Market_Def

• 任务/全局触发:QuestDiary

• 杀死怪物:DeadMonster / MonItems

• 地图进入事件:MapQuest / QFunction

放错目录 = NPC 不显示或触发没反应。

6. 引用文件不存在
脚本里写:
AddTextList .\QuestDiary\开启行会名称.txt
结果 QuestDiary 下没这文件,就会读空或报错。
先建空文件再引用,或改成已存在路径。

7. 行会战专属坑
• 地图模式不是 FIGHT3,占领皇宫不计数

• SabukW.txt 城堡名和 MapInfo 不一致

• 攻城时间写 20:00-22:00 但 M2 时区/系统时间不对

• 城门怪物在 MonsterDB 里 Appr 值和 SabukW 对不上,门打不烂

• 皇宫占领倒计时太短(1 秒),刚进就被判赢

• 胜利奖励脚本放 QFunction-0.txt 里,但标签名不是引擎自动调用的 @沙巴克攻城结束

- 用 ISGuildMember %H1 这种变量没先 GETCASTLEOWNER 取出来,永远不成立

四、改行会战脚本的安全流程
1. 备 Mir200\Envir 整个目录
2. 只改一个文件
3. M2 看红字:哪文件哪行
4. Notepad++ 打开,看那行命令拼错没、参数够不够、标签在不在
5. 转 ANSI
6. M2 → 控制 → 重新加载 NPC / 重新加载脚本
7. 小退重登测试,不行再回滚 .bak

五、常见红字对照
• Unknown command: mapmove → 命令拼错,应是 MOVETOMAP

• Label not found: @kaiqi → 文件里没 [@kaiqi]

• Script file not found → CALL 路径写错

- Line 1 syntax error → UTF-8 BOM / 第一行有隐藏字符
• Variable not defined → 用了 H1/G1 但没声明也没 SAVEVAR/LOADVAR

• Map not found → MOVETOMAP 的地图号 MapInfo 里没有

• Guild var error → 行会变量没用 SETGUILDVAR / CHECKGUILDVAR 配套

六、行会占领地图参数思路(不是 HERO 原生“键值”那么写)
网上有些文章写 GuildWar_EnterLevel=35、GuildWar_TimeLimit=1800、WinCondition=1,这类多是教学伪配置。HERO 实际是:
- 地图规则放 MapInfo.txt(模式、安全区、是否回城)
• 攻城规则放 SabukW.txt(时间、城堡名、城门、奖励)

、行会判断放 NPC/QuestDiary 脚本(ISGUILDMASTER、GETCASTLEOWNER、CHECKGUILDVAR)
• 胜负触发放 QFunction-0.txt(攻城结束自动标签)

别把“教学参数名”直接塞进 HERO 文本文件,引擎不认就等于没配置。

七、最简自测顺序
建两个行会 A/B → A 会长点报名 NPC → 到攻城时间进沙巴克 → 破门进皇宫 → 占皇宫过倒计时 → M2 日志出“X 行会占领沙巴克” → 城主行会成员找奖励 NPC 能领 → 非城主被拒。
哪一步断,就查那一层:
报名断 = Merchant/NPC 脚本
破门断 = SabukW 城门怪物/MapInfo
占领不生效 = 地图模式不是 FIGHT3 / 皇宫地图号错
结束没奖励 = QFunction-0 标签名不对 / GETCASTLEOWNER 没写 / 变量没存
NPC 点开空白 = 编码 UTF-8 / 文件名没带地图号 / MerChant.txt 坐标错

行会战脚本别抄花活,先跑通“会长报名—进图—占皇宫—结束发奖”四条,再加击杀积分、旗帜、复活点、行会资金、攻城商店。脚本错误 90% 都是半角、编码、标签名、地图号、命令名这五件事,不是引擎坏了。