fix(Scripts/Instances): Fixed some problems with getting proper unit'… (#10193)

* fix(Scripts/Instances): Fixed some problems with getting proper unit's GUID in BlackwingLair raid.

Fixes #5054
Fixes #10156

* Update.
This commit is contained in:
UltraNix
2022-01-17 00:38:57 +01:00
committed by GitHub
parent 19b68ffb57
commit b74fb81b8c
2 changed files with 41 additions and 16 deletions
@@ -305,22 +305,25 @@ class go_chromaggus_lever : public GameObjectScript
{ {
go_chromaggus_leverAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { } go_chromaggus_leverAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
bool OnGossipHello(Player* player) bool GossipHello(Player* player, bool reportUse) override
{ {
if (_instance->GetBossState(DATA_CHROMAGGUS) != DONE && _instance->GetBossState(DATA_CHROMAGGUS) != IN_PROGRESS) if (reportUse)
{ {
_instance->SetBossState(DATA_CHROMAGGUS, IN_PROGRESS); if (_instance->GetBossState(DATA_CHROMAGGUS) != DONE && _instance->GetBossState(DATA_CHROMAGGUS) != IN_PROGRESS)
{
_instance->SetBossState(DATA_CHROMAGGUS, IN_PROGRESS);
if (Creature* creature = _instance->instance->GetCreature(_instance->GetGuidData(DATA_CHROMAGGUS))) if (Creature* creature = _instance->instance->GetCreature(_instance->GetGuidData(DATA_CHROMAGGUS)))
creature->AI()->AttackStart(player); creature->AI()->AttackStart(player);
if (GameObject* go = _instance->instance->GetGameObject(_instance->GetGuidData(DATA_GO_CHROMAGGUS_DOOR))) if (GameObject* go = _instance->instance->GetGameObject(_instance->GetGuidData(DATA_GO_CHROMAGGUS_DOOR)))
_instance->HandleGameObject(ObjectGuid::Empty, true, go); _instance->HandleGameObject(ObjectGuid::Empty, true, go);
}
me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE | GO_FLAG_IN_USE);
me->SetGoState(GO_STATE_ACTIVE);
} }
me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE | GO_FLAG_IN_USE);
me->SetGoState(GO_STATE_ACTIVE);
return true; return true;
} }
@@ -84,6 +84,9 @@ public:
case NPC_RAZORGORE: case NPC_RAZORGORE:
razorgoreGUID = creature->GetGUID(); razorgoreGUID = creature->GetGUID();
break; break;
case NPC_CHROMAGGUS:
chromaggusGUID = creature->GetGUID();
break;
case NPC_BLACKWING_DRAGON: case NPC_BLACKWING_DRAGON:
case NPC_BLACKWING_TASKMASTER: case NPC_BLACKWING_TASKMASTER:
case NPC_BLACKWING_LEGIONAIRE: case NPC_BLACKWING_LEGIONAIRE:
@@ -92,6 +95,12 @@ public:
if (CreatureAI* razorAI = razor->AI()) if (CreatureAI* razorAI = razor->AI())
razorAI->JustSummoned(creature); razorAI->JustSummoned(creature);
break; break;
case NPC_NEFARIAN:
nefarianGUID = creature->GetGUID();
break;
case NPC_VICTOR_NEFARIUS:
victorNefariusGUID = creature->GetGUID();
break;
default: default:
break; break;
} }
@@ -114,10 +123,14 @@ public:
case GO_PORTCULLIS_VAELASTRASZ: case GO_PORTCULLIS_VAELASTRASZ:
case GO_PORTCULLIS_BROODLORD: case GO_PORTCULLIS_BROODLORD:
case GO_PORTCULLIS_THREEDRAGONS: case GO_PORTCULLIS_THREEDRAGONS:
case GO_PORTCULLIS_CHROMAGGUS:
case GO_PORTCULLIS_NEFARIAN: case GO_PORTCULLIS_NEFARIAN:
AddDoor(go, true); AddDoor(go, true);
break; break;
case GO_PORTCULLIS_CHROMAGGUS:
AddDoor(go, true);
chromaggusDoorGUID = go->GetGUID();
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
break;
default: default:
break; break;
} }
@@ -186,7 +199,7 @@ public:
switch (state) switch (state)
{ {
case NOT_STARTED: case NOT_STARTED:
if (Creature* nefarian = instance->GetCreature(GetGuidData(DATA_NEFARIAN))) if (Creature* nefarian = instance->GetCreature(nefarianGUID))
nefarian->DespawnOrUnsummon(); nefarian->DespawnOrUnsummon();
break; break;
case FAIL: case FAIL:
@@ -242,6 +255,10 @@ public:
{ {
case DATA_RAZORGORE_THE_UNTAMED: case DATA_RAZORGORE_THE_UNTAMED:
return razorgoreGUID; return razorgoreGUID;
case DATA_CHROMAGGUS:
return chromaggusGUID;
case DATA_GO_CHROMAGGUS_DOOR:
return chromaggusDoorGUID;
default: default:
break; break;
} }
@@ -279,7 +296,7 @@ public:
razor->AI()->DoAction(ACTION_PHASE_TWO); razor->AI()->DoAction(ACTION_PHASE_TWO);
break; break;
case EVENT_RESPAWN_NEFARIUS: case EVENT_RESPAWN_NEFARIUS:
if (Creature* nefarius = instance->GetCreature(GetGuidData(DATA_LORD_VICTOR_NEFARIUS))) if (Creature* nefarius = instance->GetCreature(victorNefariusGUID))
{ {
nefarius->SetPhaseMask(1, true); nefarius->SetPhaseMask(1, true);
nefarius->setActive(true); nefarius->setActive(true);
@@ -292,14 +309,19 @@ public:
} }
protected: protected:
// Misc ObjectGuid razorgoreGUID;
EventMap _events; ObjectGuid chromaggusGUID;
ObjectGuid chromaggusDoorGUID;
ObjectGuid nefarianGUID;
ObjectGuid victorNefariusGUID;
// Razorgore // Razorgore
ObjectGuid razorgoreGUID;
uint8 EggCount; uint8 EggCount;
uint32 EggEvent; uint32 EggEvent;
GuidList EggList; GuidList EggList;
// Misc
EventMap _events;
}; };
InstanceScript* GetInstanceScript(InstanceMap* map) const InstanceScript* GetInstanceScript(InstanceMap* map) const