传奇设置英雄杀怪经验倍数全引擎配置与脚本实操详解

来源: 作者: 点击:
英雄经验计算在HERO引擎中遵循固定公式:英雄实际经验等于怪物基础经验乘以英雄等级系数乘以全局倍率乘以临时倍率。全局倍率通过服务端!Setup.txt文件中的HeroExpRate参数控制,默认值为1.0,修改此数值可影响所有英雄的经验获取速率。临时倍率由脚本动态调整,优先级最高,会在全局倍率基础上进行二次运算。

## HERO引擎脚本配置

QManage.txt登录触发脚本适合设置全程固定倍率。在[@Login]段中添加以下内容:

```
[@Login]
#IF
CHECKHERO
#ACT
SetHeroExpRate 200
```

其中200代表2倍经验,200等于2乘以100%,计算逻辑与常规经验倍数命令一致。该设置全程生效,除非被其他脚本覆盖。

多英雄场景下需要独立控制倍率。通过GetHeroName获取当前英雄名称,再使用CALCVAR命令为不同英雄分别赋值:

```
#ACT
GetHeroName
MOV S1 <$OUTPUTSTR>
CALCVAR HUMAN HEROEXP_<$STR(S1)> = 300
```

上述脚本将指定英雄的杀怪经验倍率单独设置为3倍。

## GOM与GEE引擎命令

KILLMONEXPRATE是GOM和GEE引擎的核心经验倍数命令,格式为KILLMONEXPRATE 倍率 有效时间。倍率数值以100为基数,200代表2倍,150代表1.5倍,1000代表10倍。有效时间单位为秒,填写0代表永久生效,但小退后效果会消失,需要配合变量存储机制才能实现持续保留。

英雄同步加成需要特别关注第三参数。KILLMONEXPRATE命令的完整格式为KILLMONEXPRATE 倍率 有效时间 英雄是否生效,第三参数设为1时英雄与人物同步享受倍数加成,设为0或留空则只对人物生效。这是英雄经验倍数设置中最容易被忽略的关键参数,许多配置后英雄经验无变化的情况都源于此参数未正确设置。

NPC领取双倍经验的脚本示例如下:

```
[@领取英雄双倍]
#IF
#ACT
KILLMONEXPRATE 200 3600 1
SendMsg 6 提示:你与你的英雄获得2倍杀怪经验,持续3600秒!
Break
```

第三参数明确写为1,英雄才会同步获得经验加成。

GOM引擎的SetHeroExpRate命令提供另一种全局倍率控制方式,格式为SetHeroExpRate 倍率值 时效,0为永久生效,所有英雄通用,无需额外配置,执行后立即生效。该命令与KILLMONEXPRATE的区别在于前者直接作用于英雄系统,后者作用于人物经验系统并通过第三参数联动英雄。

## 地图参数配置

MapInfo.txt文件支持为指定地图设置英雄专属经验倍率。在对应地图参数后添加HEROEXPRATE(数值),例如在VIP修炼场地图中添加HEROEXPRATE 300,英雄在此地图杀怪自动获得3倍经验。该设置仅对该地图生效,离开地图后倍率自动恢复。

通用地图经验参数EXPRATE同样可用于英雄,格式为EXPRATE(数值),数值除以100为实际倍数,EXPRATE(200)代表2倍经验。BLUE引擎的地图参数配置与GOM一致,在MapInfo.txt中对应地图配置段后添加EXPRATE(数值)即可,当人物进入盟重省地图设置EXPRATE(200)后,打怪将获得双倍经验。

地图专属经验倍数无需脚本触发,进入指定地图自动生效,适合设置VIP地图或活动地图的差异化经验收益。

## 物品触发与动态倍率脚本

经验卷轴类物品通过DB字段与QFunction-0.txt关联。物品DB中需设置StdMode=31、AniCount=1,使其成为双击触发型物品。QFunction-0.txt中对应触发段的脚本写法:

```
[@UseItem100]
#IF
CHECKHERO
#ACT
SetHeroExpRate 200
SENDMSG 6 英雄经验倍率已激活:2倍(剩余30分钟)
DELAYGOTO 1800000 @ResetExpRate

[@ResetExpRate]
#ACT
SetHeroExpRate 100
SENDMSG 6 英雄经验倍率已恢复为1倍
```

DELAYGOTO命令以毫秒为单位,1800000对应30分钟,到时自动将倍率重置为1倍。

复合倍率叠加需要结合VIP等级和时段条件。以下脚本实现VIP每级增加5%经验、活动时段额外加成的效果:

```
[@OnKillMob]
#ACT
CHECKVIPLEVEL
MOVR N0 <$VIPLEVEL>
MULR N0 50
ADD N0 100
CHECKDAYTIME 20:00-22:00
ADD N0 100
SetHeroExpRate <$STR(N0)>
```

最终倍率计算公式为(VIP等级乘以5%加上活动加成)乘以基础倍率。同时需要添加倍率上限锁定,防止数值溢出:

```
#IF
LARGE N0 500
#ACT
MOV N0 500
```

该段代码将英雄最大经验倍率限制在5倍以内。

## 等级差动态调控

越级打怪加成通过比较英雄等级与怪物等级实现。脚本中获取英雄等级存入N0,获取怪物等级存入N1,计算差值后判定:

```
[@OnKillMob]
#ACT
GetHeroLevel
GetMobLevel <$CURRMONSTER>
SUB N2 N1 N0
#IF
LARGE N2 5
#ACT
CALCVAR N3 = <$STR(N2)> * 10
ADD N3 100
SetHeroExpRate <$STR(N3)>
```

怪物等级高于英雄5级以上时,每高一级额外增加10%经验。压制惩罚机制则反向设置,英雄等级高于怪物10级以上时经验降为50%:

```
#IF
SMALL N2 -10
#ACT
SetHeroExpRate 50
```

该机制可防止高级英雄在低级地图过度刷取经验。

## 数据库与引擎全局参数

HeroDB.db中的英雄基础配置表需要正确设置英雄经验获取开关为1,确保英雄能正常获得杀怪经验。基础经验比例设为100,代表100%基础经验,脚本在此基础上进行倍数放大。

M2引擎控制台中的英雄经验分配比例直接影响最终收益。依次点击选项、功能设置、英雄系统、经验分配,找到英雄获得经验百分比设置项,默认通常为50%。若此比例设置过低,即使脚本设置了10倍经验,英雄实际获得量也会被此比例压缩。修改后需重启M2引擎才能生效。

BLUE引擎的!Setup.txt文件中,SaveKillMonExpRate参数控制人物经验倍数的保存行为,设为1时人物下线后经验倍数时间会被保存,再次上线时继续计时。

## 调试与常见问题

实时查询英雄当前经验倍率可使用GetHeroExpRate命令:

```
[@Main]
#ACT
GetHeroExpRate
#SAY
当前英雄经验倍率:<$OUTPUT>%
```

该命令返回的输出值可直接用于NPC对话界面展示。

经验日志记录有助于追踪倍率是否按预期生效。在QFunction-0.txt中添加以下触发段:

```
[@OnHeroGetExp]
#ACT
WriteLine ..\QuestDiary\经验日志.txt [<$DATETIME>] 英雄<$HERONAME> 击杀<$CURRMONSTER> 获得经验:<$EXPVALUE> 倍率:<$HEROEXPRATE>%
```

日志文件将记录每次英雄击杀怪物时的时间、英雄名、怪物名、获得经验和当前倍率,便于排查倍率未生效或数值异常的问题。

英雄经验倍数不生效时,优先检查KILLMONEXPRATE命令的第三参数是否设置为1,确认M2引擎的英雄经验分配比例未设为0。使用老版HERO引擎时需注意KILLMONEXPRATE命令可能不存在,需要通过HERO.CHANGEEXP在杀怪触发中手动计算并增加英雄经验。

变量冲突是脚本编写中的常见问题。临时变量应避免使用G0至G99范围,优先选用N系列变量或私有变量,防止与其他脚本的变量占用发生冲突。引擎版本差异方面,2015年之后的HERO引擎支持小数倍率,150代表1.5倍,旧版引擎仅支持整数倍率,配置时需确认引擎版本是否兼容。

脚本文件编码必须设置为ANSI格式,UTF-8编码会导致中文注释和提示信息在引擎解析时出现乱码,进而引发脚本执行异常。所有脚本修改后需重启服务端或执行脚本重载命令才能生效。