feat(Core/Misc): implement ObjectGuid class (port from TC) (#4885)

This commit is contained in:
UltraNix
2021-04-25 22:18:03 +02:00
committed by GitHub
parent 91081f4ad8
commit f4c226423d
568 changed files with 10655 additions and 11019 deletions

View File

@@ -85,10 +85,10 @@ public:
if (IsHeroic())
events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, 3000);
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID)))
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_1_GUID)))
if (!c->IsInCombat())
c->AI()->AttackStart(who);
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID)))
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_2_GUID)))
if (!c->IsInCombat())
c->AI()->AttackStart(who);
}
@@ -116,14 +116,14 @@ public:
events.RepeatEvent(urand(16000, 22000));
break;
case EVENT_SPELL_CHAIN_HEAL:
if (uint64 TargetGUID = GetChainHealTargetGUID())
if (ObjectGuid TargetGUID = GetChainHealTargetGUID())
if (pInstance)
{
if (Creature* target = pInstance->instance->GetCreature(TargetGUID))
me->CastSpell(target, SPELL_CHAIN_HEAL, false);
Creature* pGuard1 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID));
Creature* pGuard2 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID));
Creature* pGuard1 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_1_GUID));
Creature* pGuard2 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_2_GUID));
if ((pGuard1 && !pGuard1->IsAlive()) || (pGuard2 && !pGuard2->IsAlive()))
{
events.RepeatEvent(urand(3000, 6000));
@@ -147,8 +147,8 @@ public:
break;
case EVENT_SPELL_STORMSTRIKE:
{
Creature* pGuard1 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID));
Creature* pGuard2 = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID));
Creature* pGuard1 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_1_GUID));
Creature* pGuard2 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_2_GUID));
if (pGuard1 && !pGuard1->IsAlive() && pGuard2 && !pGuard2->IsAlive()) // both dead
me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE, false);
events.RepeatEvent(3000);
@@ -184,18 +184,18 @@ public:
pInstance->SetData(DATA_FAILED, 1);
}
uint64 GetChainHealTargetGUID()
ObjectGuid GetChainHealTargetGUID()
{
if (HealthBelowPct(85))
return me->GetGUID();
if (pInstance)
{
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_1_GUID)))
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_1_GUID)))
if (c->IsAlive() && !c->HealthAbovePct(75))
return c->GetGUID();
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUARD_2_GUID)))
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_2_GUID)))
if (c->IsAlive() && !c->HealthAbovePct(75))
return c->GetGUID();
}
@@ -252,7 +252,7 @@ public:
events.RescheduleEvent(EVENT_SPELL_HOWLING_SCREECH, urand(8000, 13000));
events.RescheduleEvent(EVENT_SPELL_STRIKE, urand(4000, 8000));
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_EREKEM_GUID)))
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUID)))
if (!c->IsInCombat())
c->AI()->AttackStart(who);
}

View File

@@ -209,8 +209,8 @@ public:
bool bIsWaterElementsAlive = false;
if (!globules.empty())
{
for (std::list<uint64>::const_iterator itr = globules.begin(); itr != globules.end(); ++itr)
if (Creature* pTemp = ObjectAccessor::GetCreature(*me, *itr))
for (ObjectGuid const guid : globules)
if (Creature* pTemp = ObjectAccessor::GetCreature(*me, guid))
if (pTemp->IsAlive())
{
bIsWaterElementsAlive = true;
@@ -247,7 +247,7 @@ public:
me->CastSpell(pSummoned, SPELL_CREATE_GLOBULE_VISUAL, true); // triggered should ignore los
globules.Summon(pSummoned);
if (pInstance)
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
}
}
@@ -257,7 +257,7 @@ public:
{
globules.Despawn(pSummoned);
if (pInstance)
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
}
}
@@ -323,7 +323,7 @@ public:
if (uiRangeCheck_Timer < uiDiff)
{
if (pInstance)
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetData64(DATA_ICHORON_GUID)))
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_ICHORON_GUID)))
if (me->IsWithinDist(pIchoron, 2.0f, false))
{
if (pIchoron->AI())
@@ -339,7 +339,7 @@ public:
{
me->CastSpell(me, SPELL_SPLASH, true);
if (pInstance)
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetData64(DATA_ICHORON_GUID)))
if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_ICHORON_GUID)))
if (pIchoron->AI())
pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED);
me->DespawnOrUnsummon(2500);

View File

@@ -124,8 +124,8 @@ public:
{
bool found = false;
if (pInstance)
for (std::list<uint64>::iterator itr = spheres.begin(); itr != spheres.end(); ++itr)
if (Creature* c = pInstance->instance->GetCreature(*itr))
for (ObjectGuid guid : spheres)
if (Creature* c = pInstance->instance->GetCreature(guid))
if (me->GetDistance(c) < 3.0f)
{
c->CastSpell(me, SPELL_ARCANE_POWER, false);
@@ -155,7 +155,7 @@ public:
pSummoned->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
spheres.Summon(pSummoned);
if (pInstance)
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
}
}
@@ -165,7 +165,7 @@ public:
{
spheres.Despawn(pSummoned);
if (pInstance)
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
}
}

View File

@@ -139,7 +139,7 @@ public:
summons.Summon(pSummoned);
pSummoned->SetPhaseMask(16, true);
if (pInstance)
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
}
}
@@ -151,7 +151,7 @@ public:
if (pSummoned->IsAIEnabled)
pSummoned->AI()->DoAction(-1337);
if (pInstance)
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
}
}
@@ -183,19 +183,19 @@ public:
npc_vh_void_sentryAI(Creature* c) : NullCreatureAI(c)
{
pInstance = c->GetInstanceScript();
SummonedGUID = 0;
SummonedGUID.Clear();
checkTimer = 5000;
//me->CastSpell(me, SPELL_SUMMON_VOID_SENTRY_BALL, true);
if (Creature* pSummoned = me->SummonCreature(NPC_VOID_SENTRY_BALL, *me, TEMPSUMMON_TIMED_DESPAWN, 300000))
{
pSummoned->SetPhaseMask(1, true);
SummonedGUID = pSummoned->GetGUID();
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
}
}
InstanceScript* pInstance;
uint64 SummonedGUID;
ObjectGuid SummonedGUID;
uint16 checkTimer;
void DoAction(int32 a) override
@@ -219,7 +219,7 @@ public:
void SummonedCreatureDespawn(Creature* pSummoned) override
{
if (pSummoned)
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
}
void UpdateAI(uint32 diff) override

View File

@@ -42,32 +42,32 @@ public:
bool bAchiev;
bool bDefensesUsed;
std::vector<uint64> GO_ActivationCrystalGUID;
uint64 GO_MainGateGUID;
GuidVector GO_ActivationCrystalGUID;
ObjectGuid GO_MainGateGUID;
uint64 GO_MoraggCellGUID;
uint64 GO_ErekemCellGUID;
uint64 GO_ErekemRightGuardCellGUID;
uint64 GO_ErekemLeftGuardCellGUID;
uint64 GO_IchoronCellGUID;
uint64 GO_LavanthorCellGUID;
uint64 GO_XevozzCellGUID;
uint64 GO_ZuramatCellGUID;
ObjectGuid GO_MoraggCellGUID;
ObjectGuid GO_ErekemCellGUID;
ObjectGuid GO_ErekemRightGuardCellGUID;
ObjectGuid GO_ErekemLeftGuardCellGUID;
ObjectGuid GO_IchoronCellGUID;
ObjectGuid GO_LavanthorCellGUID;
ObjectGuid GO_XevozzCellGUID;
ObjectGuid GO_ZuramatCellGUID;
std::set<uint64> trashMobs;
uint64 NPC_SinclariGUID;
uint64 NPC_GuardGUID[4];
uint64 NPC_PortalGUID;
uint64 NPC_DoorSealGUID;
GuidSet trashMobs;
ObjectGuid NPC_SinclariGUID;
ObjectGuid NPC_GuardGUID[4];
ObjectGuid NPC_PortalGUID;
ObjectGuid NPC_DoorSealGUID;
uint64 NPC_MoraggGUID;
uint64 NPC_ErekemGUID;
uint64 NPC_ErekemGuardGUID[2];
uint64 NPC_IchoronGUID;
uint64 NPC_LavanthorGUID;
uint64 NPC_XevozzGUID;
uint64 NPC_ZuramatGUID;
uint64 NPC_CyanigosaGUID;
ObjectGuid NPC_MoraggGUID;
ObjectGuid NPC_ErekemGUID;
ObjectGuid NPC_ErekemGuardGUID[2];
ObjectGuid NPC_IchoronGUID;
ObjectGuid NPC_LavanthorGUID;
ObjectGuid NPC_XevozzGUID;
ObjectGuid NPC_ZuramatGUID;
ObjectGuid NPC_CyanigosaGUID;
void Initialize() override
{
@@ -84,30 +84,6 @@ public:
bDefensesUsed = false;
GO_ActivationCrystalGUID.clear();
GO_MainGateGUID = 0;
GO_MoraggCellGUID = 0;
GO_ErekemCellGUID = 0;
GO_ErekemRightGuardCellGUID = 0;
GO_ErekemLeftGuardCellGUID = 0;
GO_IchoronCellGUID = 0;
GO_LavanthorCellGUID = 0;
GO_XevozzCellGUID = 0;
GO_ZuramatCellGUID = 0;
NPC_SinclariGUID = 0;
memset(&NPC_GuardGUID, 0, sizeof(NPC_GuardGUID));
NPC_PortalGUID = 0;
NPC_DoorSealGUID = 0;
NPC_MoraggGUID = 0;
NPC_ErekemGUID = 0;
NPC_ErekemGuardGUID[0] = NPC_ErekemGuardGUID[1] = 0;
NPC_IchoronGUID = 0;
NPC_LavanthorGUID = 0;
NPC_XevozzGUID = 0;
NPC_ZuramatGUID = 0;
NPC_CyanigosaGUID = 0;
}
bool IsEncounterInProgress() const override
@@ -124,7 +100,7 @@ public:
break;
case NPC_VIOLET_HOLD_GUARD:
for (uint8 i = 0; i < 4; ++i)
if (NPC_GuardGUID[i] == 0)
if (!NPC_GuardGUID[i])
{
NPC_GuardGUID[i] = creature->GetGUID();
break;
@@ -156,7 +132,7 @@ public:
NPC_ErekemGUID = creature->GetGUID();
break;
case NPC_EREKEM_GUARD:
if (NPC_ErekemGuardGUID[0] == 0)
if (!NPC_ErekemGuardGUID[0])
NPC_ErekemGuardGUID[0] = creature->GetGUID();
else
NPC_ErekemGuardGUID[1] = creature->GetGUID();
@@ -175,7 +151,7 @@ public:
switch(go->GetEntry())
{
case GO_ACTIVATION_CRYSTAL:
HandleGameObject(0, false, go); // make go not used yet
HandleGameObject(ObjectGuid::Empty, false, go); // make go not used yet
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); // not useable at the beginning
GO_ActivationCrystalGUID.push_back(go->GetGUID());
break;
@@ -280,7 +256,7 @@ public:
}
}
void SetData64(uint32 type, uint64 data) override
void SetGuidData(uint32 type, ObjectGuid data) override
{
switch(type)
{
@@ -313,9 +289,9 @@ public:
return 0;
}
uint64 GetData64(uint32 identifier) const override
ObjectGuid GetGuidData(uint32 identifier) const override
{
switch(identifier)
switch (identifier)
{
case DATA_TELEPORTATION_PORTAL_GUID:
return NPC_PortalGUID;
@@ -331,7 +307,7 @@ public:
return NPC_IchoronGUID;
}
return 0;
return ObjectGuid::Empty;
}
void StartBossEncounter(uint8 uiBoss)
@@ -458,10 +434,10 @@ public:
DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, (uint32)GateHealth);
DoUpdateWorldState(WORLD_STATE_VH_WAVE_COUNT, (uint32)WaveCount);
for (std::vector<uint64>::iterator itr = GO_ActivationCrystalGUID.begin(); itr != GO_ActivationCrystalGUID.end(); ++itr)
if (GameObject* go = instance->GetGameObject(*itr))
for (ObjectGuid guid : GO_ActivationCrystalGUID)
if (GameObject* go = instance->GetGameObject(guid))
{
HandleGameObject(0, false, go); // not used yet
HandleGameObject(ObjectGuid::Empty, false, go); // not used yet
go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); // make it useable
}
events.RescheduleEvent(EVENT_SUMMON_PORTAL, 4000);
@@ -552,10 +528,10 @@ public:
CLEANED = true;
// reset defense crystals
for (std::vector<uint64>::iterator itr = GO_ActivationCrystalGUID.begin(); itr != GO_ActivationCrystalGUID.end(); ++itr)
if (GameObject* go = instance->GetGameObject(*itr))
for (ObjectGuid guid : GO_ActivationCrystalGUID)
if (GameObject* go = instance->GetGameObject(guid))
{
HandleGameObject(0, false, go); // not used yet
HandleGameObject(ObjectGuid::Empty, false, go); // not used yet
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); // not useable at the beginning
}
@@ -576,12 +552,13 @@ public:
// remove portal if any
if (Creature* c = instance->GetCreature(NPC_PortalGUID))
c->DespawnOrUnsummon();
NPC_PortalGUID = 0;
NPC_PortalGUID.Clear();
// remove trash
for (std::set<uint64>::iterator itr = trashMobs.begin(); itr != trashMobs.end(); ++itr)
if (Creature* c = instance->GetCreature(*itr))
for (ObjectGuid guid : trashMobs)
if (Creature* c = instance->GetCreature(guid))
c->DespawnOrUnsummon();
trashMobs.clear();
// clear door seal damaging auras:

View File

@@ -220,7 +220,7 @@ public:
if (pSummoned)
{
listOfMobs.Summon(pSummoned);
pInstance->SetData64(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_ADD_TRASH_MOB, pSummoned->GetGUID());
}
}
@@ -229,7 +229,7 @@ public:
if (pSummoned)
{
listOfMobs.Despawn(pSummoned);
pInstance->SetData64(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
pInstance->SetGuidData(DATA_DELETE_TRASH_MOB, pSummoned->GetGUID());
}
}
};
@@ -258,7 +258,7 @@ struct violet_hold_trashAI : public npc_escortAI
void ClearDoorSealAura()
{
if (pInstance)
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetData64(DATA_DOOR_SEAL_GUID)))
if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_DOOR_SEAL_GUID)))
c->RemoveAura(SPELL_DESTROY_DOOR_SEAL, me->GetGUID());
}
@@ -352,7 +352,7 @@ struct violet_hold_trashAI : public npc_escortAI
void JustDied(Unit* /*unit*/) override
{
if (pInstance)
if (Creature* portal = ObjectAccessor::GetCreature((*me), pInstance->GetData64(DATA_TELEPORTATION_PORTAL_GUID)))
if (Creature* portal = ObjectAccessor::GetCreature((*me), pInstance->GetGuidData(DATA_TELEPORTATION_PORTAL_GUID)))
CAST_AI(npc_vh_teleportation_portal::npc_vh_teleportation_portalAI, portal->AI())->SummonedMobDied(me);
}
@@ -1167,7 +1167,7 @@ public:
bool OnGossipHello(Player* player, GameObject* go) override
{
if (GameObject* gate = go->GetMap()->GetGameObject(MAKE_NEW_GUID(61606, 193019, HIGHGUID_GAMEOBJECT)))
if (GameObject* gate = go->GetMap()->GetGameObject(ObjectGuid::Create<HighGuid::GameObject>(193019, 61606)))
if (gate->getLootState() == GO_READY)
gate->UseDoorOrButton(0, false, player);