feat(Core/Scripting): Add new hook OnUnitSetShapeshiftForm (#21235)

This commit is contained in:
iThorgrim 2025-02-04 07:41:29 +01:00 committed by GitHub
parent 02a903b16f
commit 054018232c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 15 additions and 4 deletions

View File

@ -21324,6 +21324,12 @@ bool Unit::CanRestoreMana(SpellInfo const* spellInfo) const
return false;
}
void Unit::SetShapeshiftForm(ShapeshiftForm form)
{
SetByteValue(UNIT_FIELD_BYTES_2, 3, form);
sScriptMgr->OnUnitSetShapeshiftForm((Unit*)this, form);
}
bool Unit::IsInDisallowedMountForm() const
{
if (SpellInfo const* transformSpellInfo = sSpellMgr->GetSpellInfo(getTransForm()))

View File

@ -1868,10 +1868,7 @@ public:
// ShapeShitForm (use by druid)
[[nodiscard]] ShapeshiftForm GetShapeshiftForm() const { return ShapeshiftForm(GetByteValue(UNIT_FIELD_BYTES_2, 3)); }
void SetShapeshiftForm(ShapeshiftForm form)
{
SetByteValue(UNIT_FIELD_BYTES_2, 3, form);
}
void SetShapeshiftForm(ShapeshiftForm form);
bool IsAttackSpeedOverridenShapeShift() const;
[[nodiscard]] bool IsInFeralForm() const
{

View File

@ -148,6 +148,11 @@ void ScriptMgr::OnUnitDeath(Unit* unit, Unit* killer)
CALL_ENABLED_HOOKS(UnitScript, UNITHOOK_ON_UNIT_DEATH, script->OnUnitDeath(unit, killer));
}
void ScriptMgr::OnUnitSetShapeshiftForm(Unit* unit, uint8 form)
{
CALL_ENABLED_HOOKS(UnitScript, UNITHOOK_ON_UNIT_SET_SHAPESHIFT_FORM, script->OnUnitSetShapeshiftForm(unit, form));
}
UnitScript::UnitScript(const char* name, bool addToScripts, std::vector<uint16> enabledHooks)
: ScriptObject(name, UNITHOOK_END)
{

View File

@ -45,6 +45,7 @@ enum UnitHook
UNITHOOK_ON_UNIT_ENTER_EVADE_MODE,
UNITHOOK_ON_UNIT_ENTER_COMBAT,
UNITHOOK_ON_UNIT_DEATH,
UNITHOOK_ON_UNIT_SET_SHAPESHIFT_FORM,
UNITHOOK_END
};
@ -115,6 +116,7 @@ public:
virtual void OnUnitEnterEvadeMode(Unit* /*unit*/, uint8 /*evadeReason*/) { }
virtual void OnUnitEnterCombat(Unit* /*unit*/, Unit* /*victim*/) { }
virtual void OnUnitDeath(Unit* /*unit*/, Unit* /*killer*/) { }
virtual void OnUnitSetShapeshiftForm(Unit* /*unit*/, uint8 /*form*/) { }
};
#endif

View File

@ -557,6 +557,7 @@ public: /* UnitScript */
void OnUnitEnterEvadeMode(Unit* unit, uint8 why);
void OnUnitEnterCombat(Unit* unit, Unit* victim);
void OnUnitDeath(Unit* unit, Unit* killer);
void OnUnitSetShapeshiftForm(Unit* unit, uint8 form);
public: /* MovementHandlerScript */
void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);