增加伤害相关钩子(OnCalculateSplittedDamage | OnAfterUpdateArmor | OnUpdateResistances | OnSpellPctDamageModsDoneAfter)

This commit is contained in:
尚美 2025-02-17 18:57:10 +08:00
parent df7c23d763
commit 724ea2d78b
4 changed files with 99 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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)
{

View File

@ -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

View File

@ -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);