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

@@ -67,13 +67,6 @@ public:
boss_netherspiteAI(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
for (int i = 0; i < 3; ++i)
{
PortalGUID[i] = 0;
BeamTarget[i] = 0;
BeamerGUID[i] = 0;
}
}
InstanceScript* instance;
@@ -86,9 +79,9 @@ public:
uint32 NetherbreathTimer;
uint32 EmpowermentTimer;
uint32 PortalTimer; // timer for beam checking
uint64 PortalGUID[3]; // guid's of portals
uint64 BeamerGUID[3]; // guid's of auxiliary beaming portals
uint64 BeamTarget[3]; // guid's of portals' current targets
ObjectGuid PortalGUID[3]; // guid's of portals
ObjectGuid BeamerGUID[3]; // guid's of auxiliary beaming portals
ObjectGuid BeamTarget[3]; // guid's of portals' current targets
bool IsBetween(WorldObject* u1, WorldObject* target, WorldObject* u2) // the in-line checker
{
@@ -150,8 +143,8 @@ public:
portal->DisappearAndDie();
if (Creature* portal = ObjectAccessor::GetCreature(*me, BeamerGUID[i]))
portal->DisappearAndDie();
PortalGUID[i] = 0;
BeamTarget[i] = 0;
PortalGUID[i].Clear();
BeamTarget[i].Clear();
}
}
@@ -175,9 +168,9 @@ public:
Player* p = i->GetSource();
if (p && p->IsAlive() // alive
&& (!target || target->GetDistance2d(portal) > p->GetDistance2d(portal)) // closer than current best
&& !p->HasAura(PlayerDebuff[j], 0) // not exhausted
&& !p->HasAura(PlayerBuff[(j + 1) % 3], 0) // not on another beam
&& !p->HasAura(PlayerBuff[(j + 2) % 3], 0)
&& !p->HasAura(PlayerDebuff[j]) // not exhausted
&& !p->HasAura(PlayerBuff[(j + 1) % 3]) // not on another beam
&& !p->HasAura(PlayerBuff[(j + 2) % 3])
&& IsBetween(me, p, portal)) // on the beam
target = p;
}
@@ -197,7 +190,7 @@ public:
{
beamer->CastSpell(target, PortalBeam[j], false);
beamer->DisappearAndDie();
BeamerGUID[j] = 0;
BeamerGUID[j].Clear();
}
// create new one and start beaming on the target
if (Creature* beamer = portal->SummonCreature(PortalID[j], portal->GetPositionX(), portal->GetPositionY(), portal->GetPositionZ(), portal->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 60000))
@@ -241,7 +234,7 @@ public:
void HandleDoors(bool open) // Massive Door switcher
{
if (GameObject* Door = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_GO_MASSIVE_DOOR) ))
if (GameObject* Door = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_GO_MASSIVE_DOOR) ))
Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
}

View File

@@ -120,10 +120,10 @@ public:
if (instance)
{
if (instance->GetData64(DATA_NIGHTBANE) == DONE)
if (instance->GetData(DATA_NIGHTBANE) == DONE)
me->DisappearAndDie();
else
instance->SetData64(DATA_NIGHTBANE, NOT_STARTED);
instance->SetData(DATA_NIGHTBANE, NOT_STARTED);
}
HandleTerraceDoors(true);
@@ -142,15 +142,15 @@ public:
{
if (instance)
{
instance->HandleGameObject(instance->GetData64(DATA_MASTERS_TERRACE_DOOR_1), open);
instance->HandleGameObject(instance->GetData64(DATA_MASTERS_TERRACE_DOOR_2), open);
instance->HandleGameObject(instance->GetGuidData(DATA_MASTERS_TERRACE_DOOR_1), open);
instance->HandleGameObject(instance->GetGuidData(DATA_MASTERS_TERRACE_DOOR_2), open);
}
}
void EnterCombat(Unit* /*who*/) override
{
if (instance)
instance->SetData64(DATA_NIGHTBANE, IN_PROGRESS);
instance->SetData(DATA_NIGHTBANE, IN_PROGRESS);
HandleTerraceDoors(false);
Talk(YELL_AGGRO);
@@ -428,7 +428,7 @@ public:
if (InstanceScript* pInstance = go->GetInstanceScript())
{
if (pInstance->GetData(DATA_NIGHTBANE) != DONE && !go->FindNearestCreature(NPC_NIGHTBANE, 40.0f))
if (Creature* cr = ObjectAccessor::GetCreature(*player, pInstance->GetData64(DATA_NIGHTBANE)))
if (Creature* cr = ObjectAccessor::GetCreature(*player, pInstance->GetGuidData(DATA_NIGHTBANE)))
cr->GetMotionMaster()->MovePoint(0, IntroWay[0][0], IntroWay[0][1], IntroWay[0][2]);
}

View File

@@ -87,11 +87,11 @@ public:
struct netherspite_infernalAI : public ScriptedAI
{
netherspite_infernalAI(Creature* creature) : ScriptedAI(creature),
HellfireTimer(0), CleanupTimer(0), malchezaar(0), point(nullptr) { }
HellfireTimer(0), CleanupTimer(0), point(nullptr) { }
uint32 HellfireTimer;
uint32 CleanupTimer;
uint64 malchezaar;
ObjectGuid malchezaar;
InfernalPoint* point;
void Reset() override { }
@@ -176,9 +176,9 @@ public:
uint32 InfernalCleanupTimer;
uint32 phase;
uint32 enfeeble_health[5];
uint64 enfeeble_targets[5];
ObjectGuid enfeeble_targets[5];
std::vector<uint64> infernals;
GuidVector infernals;
std::vector<InfernalPoint*> positions;
void Initialize()
@@ -194,7 +194,7 @@ public:
phase = 1;
clearweapons();
positions.clear();
instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), true);
}
void clearweapons()
@@ -216,7 +216,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), true);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), true);
if (Creature* Axe = me->FindNearestCreature(MALCHEZARS_AXE, 100.0f))
{
Axe->DespawnOrUnsummon();
@@ -227,7 +227,7 @@ public:
{
Talk(SAY_AGGRO);
DoZoneInCombat();
instance->HandleGameObject(instance->GetData64(DATA_GO_NETHER_DOOR), false);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_NETHER_DOOR), false);
}
void SummonAxes()
@@ -278,7 +278,7 @@ public:
Unit* target = ObjectAccessor::GetUnit(*me, enfeeble_targets[i]);
if (target && target->IsAlive())
target->SetHealth(enfeeble_health[i]);
enfeeble_targets[i] = 0;
enfeeble_targets[i].Clear();
enfeeble_health[i] = 0;
}
}

View File

@@ -78,7 +78,7 @@ public:
uint32 FlameWreathTimer;
uint32 FlameWreathCheckTime;
uint64 FlameWreathTarget[3];
ObjectGuid FlameWreathTarget[3];
float FWTargPosX[3];
float FWTargPosY[3];
@@ -105,6 +105,9 @@ public:
FlameWreathTimer = 0;
FlameWreathCheckTime = 0;
for (uint8 i = 0; i < 3; ++i)
FlameWreathTarget[i].Clear();
CurrentNormalSpell = 0;
ArcaneCooldown = 0;
FireCooldown = 0;
@@ -118,7 +121,7 @@ public:
// Not in progress
instance->SetData(DATA_ARAN, NOT_STARTED);
instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), true);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), true);
}
void KilledUnit(Unit* /*victim*/) override
@@ -131,7 +134,7 @@ public:
Talk(SAY_DEATH);
instance->SetData(DATA_ARAN, DONE);
instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), true);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), true);
}
void EnterCombat(Unit* /*who*/) override
@@ -139,7 +142,7 @@ public:
Talk(SAY_AGGRO);
instance->SetData(DATA_ARAN, IN_PROGRESS);
instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), false);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), false);
DoZoneInCombat();
}
@@ -187,7 +190,7 @@ public:
{
if (CloseDoorTimer <= diff)
{
instance->HandleGameObject(instance->GetData64(DATA_GO_LIBRARY_DOOR), false);
instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), false);
CloseDoorTimer = 0;
}
else
@@ -362,9 +365,9 @@ public:
FlameWreathTimer = 20000;
FlameWreathCheckTime = 500;
FlameWreathTarget[0] = 0;
FlameWreathTarget[1] = 0;
FlameWreathTarget[2] = 0;
FlameWreathTarget[0].Clear();
FlameWreathTarget[1].Clear();
FlameWreathTarget[2].Clear();
FlameWreathEffect();
break;
@@ -496,7 +499,7 @@ public:
{
unit->CastSpell(unit, 20476, true, 0, 0, me->GetGUID());
unit->CastSpell(unit, 11027, true);
FlameWreathTarget[i] = 0;
FlameWreathTarget[i].Clear();
}
}
FlameWreathCheckTime = 500;

View File

@@ -70,13 +70,13 @@ public:
InstanceScript* instance;
uint64 TerestianGUID;
ObjectGuid TerestianGUID;
uint32 AmplifyTimer;
void Reset() override
{
TerestianGUID = 0;
TerestianGUID.Clear();
AmplifyTimer = 2000;
}
@@ -86,7 +86,7 @@ public:
void JustDied(Unit* /*killer*/) override
{
uint64 TerestianGUID = instance->GetData64(DATA_TERESTIAN);
ObjectGuid TerestianGUID = instance->GetGuidData(DATA_TERESTIAN);
if (TerestianGUID)
{
Unit* Terestian = ObjectAccessor::GetUnit(*me, TerestianGUID);
@@ -130,11 +130,11 @@ public:
{
npc_demon_chainAI(Creature* creature) : ScriptedAI(creature) { }
uint64 SacrificeGUID;
ObjectGuid SacrificeGUID;
void Reset() override
{
SacrificeGUID = 0;
SacrificeGUID.Clear();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -243,14 +243,12 @@ public:
{
boss_terestianAI(Creature* creature) : ScriptedAI(creature)
{
for (uint8 i = 0; i < 2; ++i)
PortalGUID[i] = 0;
instance = creature->GetInstanceScript();
}
InstanceScript* instance;
uint64 PortalGUID[2];
ObjectGuid PortalGUID[2];
uint8 PortalsCount;
uint32 SacrificeTimer;
@@ -274,7 +272,7 @@ public:
pPortal->DespawnOrUnsummon();
}
PortalGUID[i] = 0;
PortalGUID[i].Clear();
}
}
@@ -339,7 +337,7 @@ public:
if (Creature* pPortal = ObjectAccessor::GetCreature((*me), PortalGUID[i]))
pPortal->DespawnOrUnsummon();
PortalGUID[i] = 0;
PortalGUID[i].Clear();
}
}

View File

@@ -242,12 +242,12 @@ public:
{
npc_titoAI(Creature* creature) : ScriptedAI(creature) { }
uint64 DorotheeGUID;
ObjectGuid DorotheeGUID;
uint32 YipTimer;
void Reset() override
{
DorotheeGUID = 0;
DorotheeGUID.Clear();
YipTimer = 10000;
}
@@ -260,7 +260,7 @@ public:
{
if (DorotheeGUID)
{
Creature* Dorothee = (ObjectAccessor::GetCreature((*me), DorotheeGUID));
Creature* Dorothee = ObjectAccessor::GetCreature(*me, DorotheeGUID);
if (Dorothee && Dorothee->IsAlive())
{
CAST_AI(boss_dorothee::boss_dorotheeAI, Dorothee->AI())->TitoDied = true;
@@ -848,7 +848,7 @@ public:
uint32 FearTimer;
uint32 SwipeTimer;
uint64 HoodGUID;
ObjectGuid HoodGUID;
float TempThreat;
bool IsChasing;
@@ -859,7 +859,7 @@ public:
FearTimer = urand(25000, 35000);
SwipeTimer = 5000;
HoodGUID = 0;
HoodGUID.Clear();
TempThreat = 0;
IsChasing = false;
@@ -918,7 +918,7 @@ public:
if (Unit* target = ObjectAccessor::GetUnit(*me, HoodGUID))
{
HoodGUID = 0;
HoodGUID.Clear();
if (DoGetThreat(target))
DoModifyThreatPercent(target, -100);
me->AddThreat(target, TempThreat);
@@ -1050,7 +1050,7 @@ public:
uint32 EntryYellTimer;
uint32 AggroYellTimer;
uint64 RomuloGUID;
ObjectGuid RomuloGUID;
uint32 Phase;
@@ -1069,7 +1069,7 @@ public:
void Reset() override
{
RomuloGUID = 0;
RomuloGUID.Clear();
Phase = PHASE_JULIANNE;
BlindingPassionTimer = 30000;
@@ -1165,7 +1165,7 @@ public:
InstanceScript* instance;
uint64 JulianneGUID;
ObjectGuid JulianneGUID;
uint32 Phase;
uint32 EntryYellTimer;
@@ -1181,7 +1181,7 @@ public:
void Reset() override
{
JulianneGUID = 0;
JulianneGUID.Clear();
Phase = PHASE_ROMULO;
BackwardLungeTimer = 15000;
@@ -1259,7 +1259,7 @@ public:
Talk(SAY_ROMULO_AGGRO);
if (JulianneGUID)
{
Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID));
Creature* Julianne = ObjectAccessor::GetCreature(*me, JulianneGUID);
if (Julianne && Julianne->GetVictim())
{
me->AddThreat(Julianne->GetVictim(), 1.0f);

View File

@@ -142,7 +142,7 @@ public:
return true;
}
void SetData64(uint32 type, uint64 data) override
void SetGuidData(uint32 type, ObjectGuid data) override
{
if (type == DATA_IMAGE_OF_MEDIVH)
ImageGUID = data;
@@ -228,43 +228,12 @@ public:
return OperaEvent;
case DATA_OPERA_OZ_DEATHCOUNT:
return OzDeathCount;
case DATA_KILREK:
return m_uiKilrekGUID;
case DATA_TERESTIAN:
return m_uiTerestianGUID;
case DATA_MOROES:
return m_uiMoroesGUID;
case DATA_GO_STAGEDOORLEFT:
return m_uiStageDoorLeftGUID;
case DATA_GO_STAGEDOORRIGHT:
return m_uiStageDoorRightGUID;
case DATA_GO_CURTAINS:
return m_uiCurtainGUID;
case DATA_GO_LIBRARY_DOOR:
return m_uiLibraryDoor;
case DATA_GO_MASSIVE_DOOR:
return m_uiMassiveDoor;
case DATA_GO_SIDE_ENTRANCE_DOOR:
return m_uiSideEntranceDoor;
case DATA_GO_GAME_DOOR:
return m_uiGamesmansDoor;
case DATA_GO_GAME_EXIT_DOOR:
return m_uiGamesmansExitDoor;
case DATA_GO_NETHER_DOOR:
return m_uiNetherspaceDoor;
case DATA_MASTERS_TERRACE_DOOR_1:
return MastersTerraceDoor[0];
case DATA_MASTERS_TERRACE_DOOR_2:
return MastersTerraceDoor[1];
case DATA_IMAGE_OF_MEDIVH:
return ImageGUID;
}
return 0;
}
uint64 GetData64(uint32 data) const override
ObjectGuid GetGuidData(uint32 data) const override
{
switch (data)
{
@@ -302,7 +271,7 @@ public:
return m_uiNightBaneGUID;
}
return 0;
return ObjectGuid::Empty;
}
private:
@@ -311,25 +280,25 @@ public:
uint32 OptionalBossCount;
//uint32 m_auiEncounter[MAX_ENCOUNTERS];
//uint32 m_uiTeam;
uint64 m_uiCurtainGUID;
uint64 m_uiStageDoorLeftGUID;
uint64 m_uiStageDoorRightGUID;
uint64 m_uiKilrekGUID;
uint64 m_uiTerestianGUID;
uint64 m_uiMoroesGUID;
uint64 m_uiNightBaneGUID;
//uint64 EchoOfMedivhGUID;
uint64 m_uiLibraryDoor; // Door at Shade of Aran
uint64 m_uiMassiveDoor; // Door at Netherspite
uint64 m_uiSideEntranceDoor; // Side Entrance
uint64 m_uiGamesmansDoor; // Door before Chess
uint64 m_uiGamesmansExitDoor; // Door after Chess
uint64 m_uiNetherspaceDoor; // Door at Malchezaar
//uint64 m_uiServantsAccessDoor; // Door to Brocken Stair
uint64 MastersTerraceDoor[2];
uint64 ImageGUID;
uint64 DustCoveredChest;
uint64 m_uiRelayGUID;
ObjectGuid m_uiCurtainGUID;
ObjectGuid m_uiStageDoorLeftGUID;
ObjectGuid m_uiStageDoorRightGUID;
ObjectGuid m_uiKilrekGUID;
ObjectGuid m_uiTerestianGUID;
ObjectGuid m_uiMoroesGUID;
ObjectGuid m_uiNightBaneGUID;
//ObjectGuid EchoOfMedivhGUID;
ObjectGuid m_uiLibraryDoor; // Door at Shade of Aran
ObjectGuid m_uiMassiveDoor; // Door at Netherspite
ObjectGuid m_uiSideEntranceDoor; // Side Entrance
ObjectGuid m_uiGamesmansDoor; // Door before Chess
ObjectGuid m_uiGamesmansExitDoor; // Door after Chess
ObjectGuid m_uiNetherspaceDoor; // Door at Malchezaar
//ObjectGuid m_uiServantsAccessDoor; // Door to Brocken Stair
ObjectGuid MastersTerraceDoor[2];
ObjectGuid ImageGUID;
ObjectGuid DustCoveredChest;
ObjectGuid m_uiRelayGUID;
};
};

View File

@@ -126,7 +126,7 @@ public:
InstanceScript* instance;
uint64 m_uiSpotlightGUID;
ObjectGuid m_uiSpotlightGUID;
uint32 TalkCount;
uint32 TalkTimer;
@@ -138,7 +138,7 @@ public:
void Reset() override
{
m_uiSpotlightGUID = 0;
m_uiSpotlightGUID.Clear();
TalkCount = 0;
TalkTimer = 2000;
@@ -168,7 +168,7 @@ public:
{
case 0:
DoCast(me, SPELL_TUXEDO, false);
instance->DoUseDoorOrButton(instance->GetData64(DATA_GO_STAGEDOORLEFT));
instance->DoUseDoorOrButton(instance->GetGuidData(DATA_GO_STAGEDOORLEFT));
break;
case 4:
TalkCount = 0;
@@ -184,12 +184,12 @@ public:
}
break;
case 8:
instance->DoUseDoorOrButton(instance->GetData64(DATA_GO_STAGEDOORLEFT));
instance->DoUseDoorOrButton(instance->GetGuidData(DATA_GO_STAGEDOORLEFT));
PerformanceReady = true;
break;
case 9:
PrepareEncounter();
instance->DoUseDoorOrButton(instance->GetData64(DATA_GO_CURTAINS));
instance->DoUseDoorOrButton(instance->GetGuidData(DATA_GO_CURTAINS));
break;
}
}
@@ -437,7 +437,7 @@ public:
InstanceScript* instance;
uint64 ArcanagosGUID;
ObjectGuid ArcanagosGUID;
uint32 YellTimer;
uint8 Step;
@@ -448,11 +448,11 @@ public:
void Reset() override
{
ArcanagosGUID = 0;
ArcanagosGUID.Clear();
MTimer = 0;
ATimer = 0;
if (instance && instance->GetData64(DATA_IMAGE_OF_MEDIVH) == 0)
if (instance && !instance->GetGuidData(DATA_IMAGE_OF_MEDIVH))
{
Creature* Arcanagos = me->SummonCreature(NPC_ARCANAGOS, ArcanagosPos[0], ArcanagosPos[1], ArcanagosPos[2], 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000);
if (!Arcanagos)
@@ -461,7 +461,7 @@ public:
return;
}
instance->SetData64(DATA_IMAGE_OF_MEDIVH, me->GetGUID());
instance->SetGuidData(DATA_IMAGE_OF_MEDIVH, me->GetGUID());
EventStarted = true;
ArcanagosGUID = Arcanagos->GetGUID();