feat(Core/Scripting): Add several UnitHooks (#12365)

This commit is contained in:
Skjalf
2022-07-11 14:57:38 -03:00
committed by GitHub
parent d6d961174d
commit 9920e01b2b
4 changed files with 37 additions and 0 deletions

View File

@@ -25,6 +25,7 @@
#include "MapReference.h"
#include "Player.h"
#include "Vehicle.h"
#include "ScriptMgr.h"
#include "Language.h"
class PhasedRespawn : public BasicEvent
@@ -226,6 +227,8 @@ void CreatureAI::EnterEvadeMode(EvadeReason why)
me->DespawnOnEvade();
me->m_Events.AddEvent(new PhasedRespawn(*me), me->m_Events.CalculateTime(20000));
}
sScriptMgr->OnUnitEnterEvadeMode(me, why);
}
/*void CreatureAI::AttackedBy(Unit* attacker)

View File

@@ -13187,6 +13187,8 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy, uint32 duration)
if (creature->GetFormation())
creature->GetFormation()->MemberEngagingTarget(creature, enemy);
sScriptMgr->OnUnitEnterCombat(creature, enemy);
}
creature->RefreshSwimmingFlag();
@@ -17498,6 +17500,7 @@ void Unit::Kill(Unit* killer, Unit* victim, bool durabilityLoss, WeaponAttackTyp
if (CreatureAI* ai = creature->AI())
{
ai->JustDied(killer);
sScriptMgr->OnUnitDeath(creature, killer);
}
if (TempSummon* summon = creature->ToTempSummon())

View File

@@ -218,3 +218,27 @@ void ScriptMgr::OnDisplayIdChange(Unit* unit, uint32 displayId)
script->OnDisplayIdChange(unit, displayId);
});
}
void ScriptMgr::OnUnitEnterEvadeMode(Unit* unit, uint8 evadeReason)
{
ExecuteScript<UnitScript>([&](UnitScript* script)
{
script->OnUnitEnterEvadeMode(unit, evadeReason);
});
}
void ScriptMgr::OnUnitEnterCombat(Unit* unit, Unit* victim)
{
ExecuteScript<UnitScript>([&](UnitScript* script)
{
script->OnUnitEnterCombat(unit, victim);
});
}
void ScriptMgr::OnUnitDeath(Unit* unit, Unit* killer)
{
ExecuteScript<UnitScript>([&](UnitScript* script)
{
script->OnUnitDeath(unit, killer);
});
}

View File

@@ -461,6 +461,10 @@ public:
virtual void OnUnitUpdate(Unit* /*unit*/, uint32 /*diff*/) { }
virtual void OnDisplayIdChange(Unit* /*unit*/, uint32 /*displayId*/) { }
virtual void OnUnitEnterEvadeMode(Unit* /*unit*/, uint8 /*evadeReason*/) { }
virtual void OnUnitEnterCombat(Unit* /*unit*/, Unit* /*victim*/) { }
virtual void OnUnitDeath(Unit* /*unit*/, Unit* /*killer*/) { }
};
class MovementHandlerScript : public ScriptObject
@@ -2403,6 +2407,9 @@ public: /* UnitScript */
bool OnBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player* target, uint16 index);
void OnUnitUpdate(Unit* unit, uint32 diff);
void OnDisplayIdChange(Unit* unit, uint32 displayId);
void OnUnitEnterEvadeMode(Unit* unit, uint8 why);
void OnUnitEnterCombat(Unit* unit, Unit* victim);
void OnUnitDeath(Unit* unit, Unit* killer);
public: /* MovementHandlerScript */
void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);