增加伤害相关钩子(OnCalculateSplittedDamage | OnAfterUpdateArmor | OnUpdateResistances | OnSpellPctDamageModsDoneAfter)
This commit is contained in:
parent
df7c23d763
commit
724ea2d78b
@ -2507,6 +2507,9 @@ void Unit::CalcAbsorbResist(DamageInfo& dmgInfo, bool Splited)
|
||||
CleanDamage cleanDamage = CleanDamage(splitted, 0, BASE_ATTACK, MELEE_HIT_NORMAL);
|
||||
Unit::DealDamage(attacker, caster, splitted, &cleanDamage, DIRECT_DAMAGE, splitSchoolMask, splitSpellInfo, false);
|
||||
}
|
||||
|
||||
//@尚美 20240320 当函数 CalcAbsorbResist 处理完伤害、吸收和抵抗后调用,用于减伤功能
|
||||
sScriptMgr->OnCalculateSplittedDamage(victim, attacker, dmgInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -153,6 +153,38 @@ void ScriptMgr::OnUnitSetShapeshiftForm(Unit* unit, uint8 form)
|
||||
CALL_ENABLED_HOOKS(UnitScript, UNITHOOK_ON_UNIT_SET_SHAPESHIFT_FORM, script->OnUnitSetShapeshiftForm(unit, form));
|
||||
}
|
||||
|
||||
//@尚美 20240320 当函数 CalcAbsorbResist 处理完伤害、吸收和抵抗后调用,用于减伤功能
|
||||
void ScriptMgr::OnCalculateSplittedDamage(Unit* victim, Unit* attacker, DamageInfo& dmgInfo)
|
||||
{
|
||||
ExecuteScript<UnitScript>([&](UnitScript* script) {
|
||||
script->OnCalculateSplittedDamage(victim, attacker, dmgInfo);
|
||||
});
|
||||
}
|
||||
|
||||
// @尚美 20240313 调用钩子函数以允许自定义逻辑修改护甲值
|
||||
void ScriptMgr::OnAfterUpdateArmor(Unit* unit, float& value)
|
||||
{
|
||||
ExecuteScript<UnitScript>([&](UnitScript* script) {
|
||||
script->OnAfterUpdateArmor(unit, value);
|
||||
});
|
||||
}
|
||||
|
||||
// @尚美 20240321 调用钩子函数以允许自定义逻辑修改抗性值
|
||||
void ScriptMgr::OnUpdateResistances(Unit* unit, uint32 school, float& value)
|
||||
{
|
||||
ExecuteScript<UnitScript>([&](UnitScript* script) {
|
||||
script->OnUpdateResistances(unit, school, value);
|
||||
});
|
||||
}
|
||||
|
||||
// @尚美 20240321 调用钩子函数以允许自定义逻辑修改抗性值
|
||||
void ScriptMgr::OnSpellPctDamageModsDoneAfter(Unit* unit, float& DoneTotalMod)
|
||||
{
|
||||
ExecuteScript<UnitScript>([&](UnitScript* script) {
|
||||
script->OnSpellPctDamageModsDoneAfter(unit, DoneTotalMod);
|
||||
});
|
||||
}
|
||||
|
||||
UnitScript::UnitScript(const char* name, bool addToScripts, std::vector<uint16> enabledHooks)
|
||||
: ScriptObject(name, UNITHOOK_END)
|
||||
{
|
||||
|
||||
@ -117,6 +117,58 @@ public:
|
||||
virtual void OnUnitEnterCombat(Unit* /*unit*/, Unit* /*victim*/) { }
|
||||
virtual void OnUnitDeath(Unit* /*unit*/, Unit* /*killer*/) { }
|
||||
virtual void OnUnitSetShapeshiftForm(Unit* /*unit*/, uint8 /*form*/) { }
|
||||
|
||||
|
||||
//@尚美 20240320 当函数 CalcAbsorbResist 处理完伤害、吸收和抵抗后调用,用于减伤功能
|
||||
/**
|
||||
* @Unit* caster: 这个参数指代施放者,即造成伤害的单位。在伤害分割的上下文中,这通常指的是释放导致分割伤害的法术或效果的单位。
|
||||
* @Unit* attacker: 这个参数指代攻击者,可能与caster相同,也可能不同。在某些情况下,比如反射伤害或某些特殊的法术效果,attacker和caster可能是不同的单位。
|
||||
* @uint32& splitted: 这是一个引用参数,代表经过计算后准备应用到目标上的伤害值。由于这是一个引用,可在钩子函数中修改这个值以改变最终被应用的伤害量。
|
||||
* @DamageInfo& dmgInfo: 这个参数提供了一个关于当前伤害事件的详细信息的对象,其中包括伤害量、伤害类型、相关的法术信息等。通过dmgInfo,可获取更多关于伤害事件的上下文信息,也可以修改其中的一些属性以影响伤害处理的结果。
|
||||
* @SpellSchoolMask schoolMask: 这代表伤害的魔法类型,例如物理、火焰、冰霜等。这个信息对于处理抗性和吸收特别重要,因为不同类型的伤害可能会受到目标的不同属性或状态的影响。
|
||||
*/
|
||||
virtual void OnCalculateSplittedDamage(Unit* /*victim*/, Unit* /*attacker*/, DamageInfo& /*dmgInfo*/) {}
|
||||
|
||||
/**
|
||||
* @尚美 20240313
|
||||
*
|
||||
* 自定义新增钩子 在设置新护甲值之前
|
||||
*
|
||||
* @param player Contains information about the Player
|
||||
*/
|
||||
virtual void OnAfterUpdateArmor(Unit* /*uint*/, float& /*value*/) {}
|
||||
|
||||
/**
|
||||
* @尚美 20240313
|
||||
*
|
||||
* 自定义新增钩子 UpdateResistances 在设置新护甲值之前
|
||||
*
|
||||
* @Unit* unit 单位类型(生物或者玩家)
|
||||
* @uint32 school 抗性类型
|
||||
*
|
||||
1、奥数抗性 SPELL_SCHOOL_ARCANE
|
||||
2、火焰抗性 SPELL_SCHOOL_FIRE
|
||||
3、自然抗性 SPELL_SCHOOL_NATURE
|
||||
4、冰霜抗性 SPELL_SCHOOL_FROST
|
||||
5、暗影抗性 SPELL_SCHOOL_SHADOW
|
||||
|
||||
* float& value 抗性值
|
||||
*
|
||||
* @param player Contains information about the Player
|
||||
*/
|
||||
virtual void OnUpdateResistances(Unit* /*unit*/, uint32 /*school*/, float& /*value*/) {}
|
||||
|
||||
/**
|
||||
* @尚美 20240327
|
||||
*
|
||||
* 自定义新增钩子 在SpellPctDamageModsDone 函数结束前修正法术伤害倍率
|
||||
*
|
||||
* @Unit* unit 单位类型(生物或者玩家)
|
||||
* @uint32 DoneTotalMod 完成后的总倍率
|
||||
*
|
||||
* @param player Contains information about the Player
|
||||
*/
|
||||
virtual void OnSpellPctDamageModsDoneAfter(Unit* /*unit*/, float& /*DoneTotalMod*/) {}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -562,6 +562,18 @@ public: /* UnitScript */
|
||||
void OnUnitDeath(Unit* unit, Unit* killer);
|
||||
void OnUnitSetShapeshiftForm(Unit* unit, uint8 form);
|
||||
|
||||
//@尚美 20240320 当函数 CalcAbsorbResist 处理完伤害、吸收和抵抗后调用,用于减伤功能
|
||||
void OnCalculateSplittedDamage(Unit* victim, Unit* attacker, DamageInfo& dmgInfo);
|
||||
|
||||
//自定义新增钩子 在设置新护甲值之前
|
||||
void OnAfterUpdateArmor(Unit* uint, float& value);
|
||||
|
||||
// @尚美 20240321 调用钩子函数以允许自定义逻辑修改抗性值
|
||||
void OnUpdateResistances(Unit* unit, uint32 school, float& value);
|
||||
|
||||
// @尚美 20240327 自定义新增钩子 在SpellPctDamageModsDone 函数结束前修正法术伤害倍率
|
||||
void OnSpellPctDamageModsDoneAfter(Unit* unit, float& DoneTotalMod);
|
||||
|
||||
public: /* MovementHandlerScript */
|
||||
void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user