From 1a1fe18a9b210199ff17b41cf168305ccad29edf Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 21 Aug 2022 15:45:35 +0200 Subject: [PATCH] fix(Scripts/AhnQiraj): Spawn 3 crystals at start. (#12804) * fix(Scripts/AhnQiraj): Spawn 3 crystals at start. Fixes #12762 * Update. --- .../RuinsOfAhnQiraj/boss_ossirian.cpp | 83 +++++++++++-------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 336eb55b9..426d844bf 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -65,9 +65,10 @@ enum Events EVENT_SPEEDUP = 4 }; -uint8 const NUM_CRYSTALS = 11; +uint8 const NUM_CRYSTALS = 12; Position CrystalCoordinates[NUM_CRYSTALS] = { + { -9407.7197265625f, 1960.20996093750f, 85.6390991210937f, 1.11700999736786f }, { -9388.4404296875f, 1940.20996093750f, 85.6390991210937f, 3.17650008201599f }, { -9357.8603515625f, 1929.07995605469f, 85.6390991210937f, 1.06465005874634f }, { -9383.2900390625f, 2012.68005371094f, 85.6511001586914f, 2.93214988708496f }, @@ -81,8 +82,6 @@ Position CrystalCoordinates[NUM_CRYSTALS] = { -9367.1699218750f, 1780.89001464844f, 85.6390991210937f, 1.90241003036499f } }; -Position initialCrystalPosition = { -9407.7197265625f, 1960.2099609375f, 85.6390991210937f, 1.11700999736786f }; - uint8 const NUM_WEAKNESS = 5; uint32 const spellWeakness[NUM_WEAKNESS] = { SPELL_FIRE_WEAKNESS, SPELL_FROST_WEAKNESS, SPELL_NATURE_WEAKNESS, SPELL_ARCANE_WEAKNESS, SPELL_SHADOW_WEAKNESS }; @@ -98,13 +97,13 @@ struct boss_ossirian : public BossAI { Reset(); - if (Creature* trigger = me->GetMap()->SummonCreature(NPC_OSSIRIAN_TRIGGER, initialCrystalPosition)) + if (Creature* trigger = me->GetMap()->SummonCreature(NPC_OSSIRIAN_TRIGGER, CrystalCoordinates[0])) { _triggerGUID[0] = trigger->GetGUID(); if (GameObject* crystal = trigger->SummonGameObject(GO_OSSIRIAN_CRYSTAL, - initialCrystalPosition.GetPositionX(), - initialCrystalPosition.GetPositionY(), - initialCrystalPosition.GetPositionZ(), + CrystalCoordinates[0].GetPositionX(), + CrystalCoordinates[0].GetPositionY(), + CrystalCoordinates[0].GetPositionZ(), 0, 0, 0, 0, 0, uint32(-1))) { _crystalGUID[0] = crystal->GetGUID(); @@ -118,9 +117,13 @@ struct boss_ossirian : public BossAI { BossAI::Reset(); - _crystalIterator = urand(0, NUM_CRYSTALS - 1); - _triggerGUID[1].Clear(); - _crystalGUID[1].Clear(); + _crystalIterator = urand(1, NUM_CRYSTALS - 1); + + for (uint8 i = 1; i < NUM_CRYSTALS; ++i) + { + _triggerGUID[i].Clear(); + _crystalGUID[i].Clear(); + } } void JustReachedHome() override @@ -135,14 +138,14 @@ struct boss_ossirian : public BossAI crystal->Delete(); } - trigger = me->GetMap()->SummonCreature(NPC_OSSIRIAN_TRIGGER, initialCrystalPosition); + trigger = me->GetMap()->SummonCreature(NPC_OSSIRIAN_TRIGGER, CrystalCoordinates[0]); if (trigger) { _triggerGUID[0] = trigger->GetGUID(); if (GameObject* crystal = trigger->SummonGameObject(GO_OSSIRIAN_CRYSTAL, - initialCrystalPosition.GetPositionX(), - initialCrystalPosition.GetPositionY(), - initialCrystalPosition.GetPositionZ(), + CrystalCoordinates[0].GetPositionX(), + CrystalCoordinates[0].GetPositionY(), + CrystalCoordinates[0].GetPositionZ(), 0, 0, 0, 0, 0, uint32(-1))) { _crystalGUID[0] = crystal->GetGUID(); @@ -161,11 +164,16 @@ struct boss_ossirian : public BossAI { me->RemoveAurasDueToSpell(SPELL_STRENGHT_OF_OSSIRIAN); - if (caster->GetGUID() == _triggerGUID[1]) + for (uint8 i = 1; i < NUM_CRYSTALS; ++i) { - if (Creature* creatureCaster = caster->ToCreature()) + if (caster->GetGUID() == _triggerGUID[i]) { - creatureCaster->DespawnOrUnsummon(); + if (Creature* creatureCaster = caster->ToCreature()) + { + creatureCaster->DespawnOrUnsummon(); + } + + break; } } } @@ -176,7 +184,7 @@ struct boss_ossirian : public BossAI { if (action == ACTION_TRIGGER_WEAKNESS) { - for (uint8 i = 0; i < 2; ++i) + for (uint8 i = 0; i < NUM_CRYSTALS; ++i) { if (_crystalGUID[i] == guid) { @@ -215,7 +223,7 @@ struct boss_ossirian : public BossAI WorldPackets::Misc::Weather weather(WEATHER_STATE_HEAVY_SANDSTORM, 1.0f); map->SendToPlayers(weather.Write()); - SpawnNextCrystal(); + SpawnNextCrystal(3); } void SummonedCreatureDespawn(Creature* summon) override @@ -233,24 +241,27 @@ struct boss_ossirian : public BossAI Talk(SAY_SLAY); } - void SpawnNextCrystal() + void SpawnNextCrystal(uint8 count = 1) { - if (_crystalIterator == NUM_CRYSTALS) - _crystalIterator = 0; - - if (Creature* trigger = me->SummonCreature(NPC_OSSIRIAN_TRIGGER, CrystalCoordinates[_crystalIterator])) + for (uint8 i = 0; i < count; ++i) { - _triggerGUID[1] = trigger->GetGUID(); - if (GameObject* crystal = trigger->SummonGameObject(GO_OSSIRIAN_CRYSTAL, - CrystalCoordinates[_crystalIterator].GetPositionX(), - CrystalCoordinates[_crystalIterator].GetPositionY(), - CrystalCoordinates[_crystalIterator].GetPositionZ(), - 0, 0, 0, 0, 0, uint32(-1))) + if (_crystalIterator == NUM_CRYSTALS) + _crystalIterator = 1; + + if (Creature* trigger = me->SummonCreature(NPC_OSSIRIAN_TRIGGER, CrystalCoordinates[_crystalIterator])) { - _crystalGUID[1] = crystal->GetGUID(); - ++_crystalIterator; - crystal->SetOwnerGUID(ObjectGuid::Empty); - crystal->RemoveGameObjectFlag(GO_FLAG_IN_USE); + _triggerGUID[i] = trigger->GetGUID(); + if (GameObject* crystal = trigger->SummonGameObject(GO_OSSIRIAN_CRYSTAL, + CrystalCoordinates[_crystalIterator].GetPositionX(), + CrystalCoordinates[_crystalIterator].GetPositionY(), + CrystalCoordinates[_crystalIterator].GetPositionZ(), + 0, 0, 0, 0, 0, uint32(-1))) + { + _crystalGUID[i] = crystal->GetGUID(); + ++_crystalIterator; + crystal->SetOwnerGUID(ObjectGuid::Empty); + crystal->RemoveGameObjectFlag(GO_FLAG_IN_USE); + } } } } @@ -322,8 +333,8 @@ struct boss_ossirian : public BossAI } protected: - std::array _triggerGUID; - std::array _crystalGUID; + std::array _triggerGUID; + std::array _crystalGUID; uint8 _crystalIterator; bool _saidIntro; };