传奇服务端想让怪物每次受击固定减少指定血量,核心不是修改怪物最大生命值,而是在攻击前伤害触发中使用固定数值覆盖本次伤害。支持qfunction-0的引擎通常采用`changedamagevalue 0 = n`,其中`0`代表固定数值,`n`就是每次实际扣除的生命值;例如设置为`50`,满足条件的单次攻击就会造成50点掉血。使用支持`@attackdamage`的引擎时,应优先把命令写在该触发段中;部分引擎则通过`@attack`或`@underattack`处理,触发名称必须以当前引擎实际提供的入口为准。

具体设置时,先关闭服务端并备份`mirserver\mir200\envir\qfunction-0.txt`,再在攻击前触发位置加入测试脚本:`[@attackdamage]`、`if`、`act`、`changedamagevalue 0 = 50`、`break`。这段设置代表每次符合条件的攻击固定扣除50点,不再沿用武器攻击、魔法攻击、暴击等原始伤害结果。测试阶段不要直接对全服生效,应先限制到一只测试怪物,确认数值后再增加目标类型、怪物名称、地图或技能id条件,否则普通怪物、首领甚至玩家目标都可能被统一改成固定掉血。若只想限制某个首领,优先使用引擎提供的目标类型和怪物名称判断,不建议通过修改怪物基础hp来替代伤害触发。

使用`@attack`或`@underattack`的引擎还需要先打开攻击触发开关,否则脚本存在也不会执行。以支持该机制的引擎为例,`!setup.txt`中的`attacktrigger`需要设为`1`,怪物数据表里的`hittrigger`也要设为`1`;部分dbc或dbc2000结构则需要在`envir\monattacktrigger.txt`登记可触发的怪物。完成后重启服务端,在测试地图召唤一只5000点生命值的怪物,关闭毒伤、反伤、持续伤害、护盾和自动回血,再用普通攻击连续命中10次,理论上应减少500点生命;多段技能要按每一段是否单独触发计算,不能只看技能释放次数。
固定掉血数值应按目标战斗时长倒推,而不是盲目设置越高越好。若怪物生命值为5000点,玩家平均每秒造成2次有效命中,希望战斗持续20秒,可将单次固定伤害设为约125点;普通小怪可取总生命值的1%至3%,精英怪可取每次有效命中的2%至5%,首领则应结合多人同时攻击后的总频率重新计算。低等级玩家使用单次攻击时,固定伤害能减少装备差距造成的刮痧;高等级队伍面对多段技能和召唤物时,必须按攻击来源分别限制,否则高频职业会明显占优。需要保留暴击、属性克制或技能差异时,不要使用全局`=`覆盖,可改用条件筛选,或采用百分比模式让不同技能保留原有成长空间。
