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
+3
View File
@@ -25,6 +25,7 @@
#include "MapReference.h" #include "MapReference.h"
#include "Player.h" #include "Player.h"
#include "Vehicle.h" #include "Vehicle.h"
#include "ScriptMgr.h"
#include "Language.h" #include "Language.h"
class PhasedRespawn : public BasicEvent class PhasedRespawn : public BasicEvent
@@ -226,6 +227,8 @@ void CreatureAI::EnterEvadeMode(EvadeReason why)
me->DespawnOnEvade(); me->DespawnOnEvade();
me->m_Events.AddEvent(new PhasedRespawn(*me), me->m_Events.CalculateTime(20000)); me->m_Events.AddEvent(new PhasedRespawn(*me), me->m_Events.CalculateTime(20000));
} }
sScriptMgr->OnUnitEnterEvadeMode(me, why);
} }
/*void CreatureAI::AttackedBy(Unit* attacker) /*void CreatureAI::AttackedBy(Unit* attacker)
+3
View File
@@ -13187,6 +13187,8 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy, uint32 duration)
if (creature->GetFormation()) if (creature->GetFormation())
creature->GetFormation()->MemberEngagingTarget(creature, enemy); creature->GetFormation()->MemberEngagingTarget(creature, enemy);
sScriptMgr->OnUnitEnterCombat(creature, enemy);
} }
creature->RefreshSwimmingFlag(); creature->RefreshSwimmingFlag();
@@ -17498,6 +17500,7 @@ void Unit::Kill(Unit* killer, Unit* victim, bool durabilityLoss, WeaponAttackTyp
if (CreatureAI* ai = creature->AI()) if (CreatureAI* ai = creature->AI())
{ {
ai->JustDied(killer); ai->JustDied(killer);
sScriptMgr->OnUnitDeath(creature, killer);
} }
if (TempSummon* summon = creature->ToTempSummon()) if (TempSummon* summon = creature->ToTempSummon())
@@ -218,3 +218,27 @@ void ScriptMgr::OnDisplayIdChange(Unit* unit, uint32 displayId)
script->OnDisplayIdChange(unit, 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);
});
}
+7
View File
@@ -461,6 +461,10 @@ public:
virtual void OnUnitUpdate(Unit* /*unit*/, uint32 /*diff*/) { } virtual void OnUnitUpdate(Unit* /*unit*/, uint32 /*diff*/) { }
virtual void OnDisplayIdChange(Unit* /*unit*/, uint32 /*displayId*/) { } 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 class MovementHandlerScript : public ScriptObject
@@ -2403,6 +2407,9 @@ public: /* UnitScript */
bool OnBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player* target, uint16 index); bool OnBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player* target, uint16 index);
void OnUnitUpdate(Unit* unit, uint32 diff); void OnUnitUpdate(Unit* unit, uint32 diff);
void OnDisplayIdChange(Unit* unit, uint32 displayId); 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 */ public: /* MovementHandlerScript */
void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode); void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);