闭关脚本通过计时器定期为玩家提供经验。若需英雄同步获得经验,关键在于使用正确的命令参数。以下详细说明修改方法。
闭关脚本基本结构
典型闭关脚本包含三个部分:NPC传送脚本、计时器触发脚本和地图触发脚本。
1. NPC传送脚本:玩家与NPC对话,满足条件(如等级、元宝)后,被传送至特定闭关地图并启动计时器。
[@进入闭关]
#IF
CHECKLEVELEX > 25
CHECKGAMEGOLD > 999
#ACT
SetOnTimer 1 1
MAPMOVE GZPD
SENDMSG 1 玩家【%s】进入闭关地图!
BREAK
2. 计时器触发脚本:此部分位于QManage.txt或QFunction-0.txt中。计时器每隔一秒触发一次,检测玩家是否在闭关地图并满足条件,然后发放经验。
[@OnTimer1]
#IF
ISONMAP GZPD
CHECKGAMEGOLD > 9
#ACT
GAMEGOLD - 10
CHANGEEXP + 1000000
BREAK
#ELSEACT
SetOffTimer 1
MAPMOVE 3 330 333
BREAK
修改英雄经验的核心命令
默认的CHANGEEXP命令仅对人物主体生效。若需英雄同时获得经验,需改用ChangeExp命令(注意大小写可能因引擎而异),并设置其第三个参数。
• 命令格式:ChangeExp + 经验值 参数
• 参数说明:
◦ 参数 = 0 或省略:仅增加人物经验。
◦ 参数 = 1:增加人物经验,同时英雄也获得等量经验。
◦ 参数 = 2:增加人物经验,且当单次增加的经验值超过升级所需时,人物只升一级(常用于高额经验奖励防止秒升过多级)。此参数下英雄是否获得经验取决于引擎,通常不同时给予英雄经验。
因此,要让英雄在闭关时同步升级,应将脚本中的CHANGEEXP命令替换为ChangeExp,并将第三个参数设置为1。
修改前后脚本对比
以每秒增加100万经验为例:
• 修改前(仅人物获得经验):
[@OnTimer1]
#IF
ISONMAP GZPD
CHECKGAMEGOLD > 9
#ACT
GAMEGOLD - 10
CHANGEEXP + 1000000 // 或 ChangeExp + 1000000 0
BREAK
• 修改后(人物与英雄同时获得经验):
[@OnTimer1]
#IF
ISONMAP GZPD
CHECKGAMEGOLD > 9
#ACT
GAMEGOLD - 10
ChangeExp + 1000000 1 // 关键修改:第三个参数设为1
BREAK
完整修改步骤
1. 定位脚本文件:找到服务端中控制闭关经验的脚本。通常是MirServer\Mir200\Envir\MapQuest_def\QManage.txt或QFunction-0.txt文件。
2. 搜索计时器段:在文件中搜索[@OnTimer,找到对应闭关地图的计时器段落(如[@OnTimer1])。
3. 修改经验命令:在该段落的#ACT部分,找到发放经验的命令(通常是CHANGEEXP或ChangeExp),将其修改为ChangeExp + 经验值 1格式。
4. 可选:增加英雄检测:为确保只有携带英雄的玩家才触发英雄经验增加,可在条件中增加检测。但参数设为1时,即使无英雄,命令也会正常执行,仅对人物生效。
[@OnTimer1]
#IF
ISONMAP GZPD
CHECKGAMEGOLD > 9
#ACT
GAMEGOLD - 10
#IF
HAVEHERO // 检测是否有英雄
#ACT
ChangeExp + 1000000 1 // 有英雄时,人物和英雄都加经验
#ELSEACT
CHANGEEXP + 1000000 // 无英雄时,仅人物加经验
BREAK
5. 保存与重载:修改完成后保存文件,并在游戏管理后台重载NPC脚本或重启相关脚本引擎,使修改生效。
注意事项
• 命令兼容性:ChangeExp是更现代引擎的命令,部分老引擎可能仅支持CHANGEEXP。请先测试命令是否有效。
• 经验平衡:英雄与人物同时获得等量经验会大幅加快整体升级速度。需综合考虑服务器经济系统,适当调整每秒获得的经验值或元宝消耗。
• 计时器索引:确保NPC脚本中SetOnTimer启动的计时器索引(如SetOnTimer 1 1)与QManage.txt中的触发段([@OnTimer1])一一对应。
• 多地图支持:若服务器有多个不同经验的闭关地图,需为每个地图的计时器段单独修改经验命令。
通过以上步骤,即可将闭关脚本从仅对人物生效,修改为对人物及其英雄同时生效,实现同步升级。

