feat(Core/Instance): InstanceScript: create Remove functions (#17702)

InstanceScript: create `Remove` helper functions
This commit is contained in:
KJack
2023-11-14 06:13:28 -05:00
committed by GitHub
parent 2e4ad36d20
commit 3d20f8902b
16 changed files with 77 additions and 47 deletions
+33 -8
View File
@@ -56,26 +56,26 @@ void InstanceScript::SaveToDB()
void InstanceScript::OnCreatureCreate(Creature* creature) void InstanceScript::OnCreatureCreate(Creature* creature)
{ {
AddObject(creature, true); AddObject(creature);
AddMinion(creature, true); AddMinion(creature);
} }
void InstanceScript::OnCreatureRemove(Creature* creature) void InstanceScript::OnCreatureRemove(Creature* creature)
{ {
AddObject(creature, false); RemoveObject(creature);
AddMinion(creature, false); RemoveMinion(creature);
} }
void InstanceScript::OnGameObjectCreate(GameObject* go) void InstanceScript::OnGameObjectCreate(GameObject* go)
{ {
AddObject(go, true); AddObject(go);
AddDoor(go, true); AddDoor(go);
} }
void InstanceScript::OnGameObjectRemove(GameObject* go) void InstanceScript::OnGameObjectRemove(GameObject* go)
{ {
AddObject(go, false); RemoveObject(go);
AddDoor(go, false); RemoveObject(go);
} }
ObjectGuid InstanceScript::GetObjectGuid(uint32 type) const ObjectGuid InstanceScript::GetObjectGuid(uint32 type) const
@@ -262,6 +262,11 @@ void InstanceScript::AddObject(Creature* obj, bool add)
} }
} }
void InstanceScript::RemoveObject(Creature* obj)
{
AddObject(obj, false);
}
void InstanceScript::AddObject(GameObject* obj, bool add) void InstanceScript::AddObject(GameObject* obj, bool add)
{ {
ObjectInfoMap::const_iterator j = _gameObjectInfo.find(obj->GetEntry()); ObjectInfoMap::const_iterator j = _gameObjectInfo.find(obj->GetEntry());
@@ -271,6 +276,11 @@ void InstanceScript::AddObject(GameObject* obj, bool add)
} }
} }
void InstanceScript::RemoveObject(GameObject* obj)
{
AddObject(obj, false);
}
void InstanceScript::AddObject(WorldObject* obj, uint32 type, bool add) void InstanceScript::AddObject(WorldObject* obj, uint32 type, bool add)
{ {
if (add) if (add)
@@ -287,6 +297,11 @@ void InstanceScript::AddObject(WorldObject* obj, uint32 type, bool add)
} }
} }
void InstanceScript::RemoveObject(WorldObject* obj, uint32 type)
{
AddObject(obj, type, false);
}
void InstanceScript::AddDoor(GameObject* door, bool add) void InstanceScript::AddDoor(GameObject* door, bool add)
{ {
DoorInfoMapBounds range = doors.equal_range(door->GetEntry()); DoorInfoMapBounds range = doors.equal_range(door->GetEntry());
@@ -309,6 +324,11 @@ void InstanceScript::AddDoor(GameObject* door, bool add)
UpdateDoorState(door); UpdateDoorState(door);
} }
void InstanceScript::RemoveDoor(GameObject* door)
{
AddDoor(door, false);
}
void InstanceScript::AddMinion(Creature* minion, bool add) void InstanceScript::AddMinion(Creature* minion, bool add)
{ {
MinionInfoMap::iterator itr = minions.find(minion->GetEntry()); MinionInfoMap::iterator itr = minions.find(minion->GetEntry());
@@ -321,6 +341,11 @@ void InstanceScript::AddMinion(Creature* minion, bool add)
itr->second.bossInfo->minion.erase(minion); itr->second.bossInfo->minion.erase(minion);
} }
void InstanceScript::RemoveMinion(Creature* minion)
{
AddMinion(minion, false);
}
bool InstanceScript::SetBossState(uint32 id, EncounterState state) bool InstanceScript::SetBossState(uint32 id, EncounterState state)
{ {
if (id < bosses.size()) if (id < bosses.size())
+10 -5
View File
@@ -275,12 +275,17 @@ protected:
void LoadMinionData(MinionData const* data); void LoadMinionData(MinionData const* data);
void LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData); void LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData);
void AddObject(Creature* obj, bool add); void AddObject(Creature* obj, bool add = true);
void AddObject(GameObject* obj, bool add); void RemoveObject(Creature* obj);
void AddObject(WorldObject* obj, uint32 type, bool add); void AddObject(GameObject* obj, bool add = true);
void RemoveObject(GameObject* obj);
void AddObject(WorldObject* obj, uint32 type, bool add = true);
void RemoveObject(WorldObject* obj, uint32 type);
void AddDoor(GameObject* door, bool add); void AddDoor(GameObject* door, bool add = true);
void AddMinion(Creature* minion, bool add); void RemoveDoor(GameObject* door);
void AddMinion(Creature* minion, bool add = true);
void RemoveMinion(Creature* minion);
void UpdateDoorState(GameObject* door); void UpdateDoorState(GameObject* door);
void UpdateMinionState(Creature* minion, EncounterState state); void UpdateMinionState(Creature* minion, EncounterState state);
@@ -176,7 +176,7 @@ public:
creature->AI()->Talk(SAY_FINKLE_GANG); creature->AI()->Talk(SAY_FINKLE_GANG);
break; break;
case NPC_CHROMATIC_ELITE_GUARD: case NPC_CHROMATIC_ELITE_GUARD:
AddMinion(creature, true); AddMinion(creature);
break; break;
} }
} }
@@ -111,7 +111,7 @@ public:
case NPC_FLAMEWALKER_HEALER: case NPC_FLAMEWALKER_HEALER:
case NPC_FLAMEWALKER_ELITE: case NPC_FLAMEWALKER_ELITE:
{ {
AddMinion(creature, true); AddMinion(creature);
break; break;
} }
} }
@@ -123,7 +123,7 @@ public:
{ {
case NPC_FIRESWORN: case NPC_FIRESWORN:
{ {
AddMinion(creature, false); RemoveMinion(creature);
break; break;
} }
case NPC_FLAMEWALKER: case NPC_FLAMEWALKER:
@@ -132,7 +132,7 @@ public:
case NPC_FLAMEWALKER_HEALER: case NPC_FLAMEWALKER_HEALER:
case NPC_FLAMEWALKER_ELITE: case NPC_FLAMEWALKER_ELITE:
{ {
AddMinion(creature, false); RemoveMinion(creature);
break; break;
} }
} }
@@ -154,7 +154,7 @@ public:
case GO_FIRE_BARRIER: case GO_FIRE_BARRIER:
case GO_MURUS_GATE_1: case GO_MURUS_GATE_1:
case GO_MURUS_GATE_2: case GO_MURUS_GATE_2:
AddDoor(go, true); AddDoor(go);
break; break;
case GO_ICE_BARRIER: case GO_ICE_BARRIER:
IceBarrierGUID = go->GetGUID(); IceBarrierGUID = go->GetGUID();
@@ -187,7 +187,7 @@ public:
case GO_BOSS_COLLISION_1: case GO_BOSS_COLLISION_1:
case GO_BOSS_COLLISION_2: case GO_BOSS_COLLISION_2:
case GO_FORCE_FIELD: case GO_FORCE_FIELD:
AddDoor(go, false); RemoveDoor(go);
break; break;
default: default:
break; break;
@@ -87,7 +87,7 @@ public:
case GO_ANUBARAK_DOORS1: case GO_ANUBARAK_DOORS1:
case GO_ANUBARAK_DOORS2: case GO_ANUBARAK_DOORS2:
case GO_ANUBARAK_DOORS3: case GO_ANUBARAK_DOORS3:
AddDoor(go, true); AddDoor(go);
break; break;
} }
} }
@@ -100,7 +100,7 @@ public:
case GO_ANUBARAK_DOORS1: case GO_ANUBARAK_DOORS1:
case GO_ANUBARAK_DOORS2: case GO_ANUBARAK_DOORS2:
case GO_ANUBARAK_DOORS3: case GO_ANUBARAK_DOORS3:
AddDoor(go, false); RemoveDoor(go);
break; break;
} }
} }
@@ -125,7 +125,7 @@ public:
case GO_BURNING_TREE_3: case GO_BURNING_TREE_3:
case GO_BURNING_TREE_4: case GO_BURNING_TREE_4:
case GO_TWILIGHT_FLAME_RING: case GO_TWILIGHT_FLAME_RING:
AddDoor(go, true); AddDoor(go);
break; break;
case GO_FLAME_RING: case GO_FLAME_RING:
FlameRingGUID = go->GetGUID(); FlameRingGUID = go->GetGUID();
@@ -143,7 +143,7 @@ public:
case GO_BURNING_TREE_2: case GO_BURNING_TREE_2:
case GO_BURNING_TREE_3: case GO_BURNING_TREE_3:
case GO_BURNING_TREE_4: case GO_BURNING_TREE_4:
AddDoor(go, false); RemoveDoor(go);
break; break;
} }
} }
@@ -50,7 +50,7 @@ public:
case GO_NOVOS_CRYSTAL_2: case GO_NOVOS_CRYSTAL_2:
case GO_NOVOS_CRYSTAL_3: case GO_NOVOS_CRYSTAL_3:
case GO_NOVOS_CRYSTAL_4: case GO_NOVOS_CRYSTAL_4:
AddDoor(go, true); AddDoor(go);
break; break;
} }
} }
@@ -63,7 +63,7 @@ public:
case GO_NOVOS_CRYSTAL_2: case GO_NOVOS_CRYSTAL_2:
case GO_NOVOS_CRYSTAL_3: case GO_NOVOS_CRYSTAL_3:
case GO_NOVOS_CRYSTAL_4: case GO_NOVOS_CRYSTAL_4:
AddDoor(go, false); RemoveDoor(go);
break; break;
} }
} }
@@ -107,7 +107,7 @@ public:
case GO_GAL_DARAH_DOORS0: case GO_GAL_DARAH_DOORS0:
case GO_GAL_DARAH_DOORS1: case GO_GAL_DARAH_DOORS1:
case GO_GAL_DARAH_DOORS2: case GO_GAL_DARAH_DOORS2:
AddDoor(gameobject, true); AddDoor(gameobject);
break; break;
} }
} }
@@ -121,7 +121,7 @@ public:
case GO_GAL_DARAH_DOORS0: case GO_GAL_DARAH_DOORS0:
case GO_GAL_DARAH_DOORS1: case GO_GAL_DARAH_DOORS1:
case GO_GAL_DARAH_DOORS2: case GO_GAL_DARAH_DOORS2:
AddDoor(gameobject, false); RemoveDoor(gameobject);
break; break;
} }
} }
@@ -727,7 +727,7 @@ public:
case GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR: case GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR:
case GO_ICE_WALL: case GO_ICE_WALL:
case GO_SINDRAGOSA_ENTRANCE_DOOR: case GO_SINDRAGOSA_ENTRANCE_DOOR:
AddDoor(go, true); AddDoor(go);
break; break;
case GO_SCIENTIST_ENTRANCE: case GO_SCIENTIST_ENTRANCE:
PutricideEnteranceDoorGUID = go->GetGUID(); PutricideEnteranceDoorGUID = go->GetGUID();
@@ -737,7 +737,7 @@ public:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01: case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01:
case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04: case GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04:
if (instance->Is25ManRaid()) if (instance->Is25ManRaid())
AddDoor(go, true); AddDoor(go);
break; break;
case GO_LADY_DEATHWHISPER_ELEVATOR: case GO_LADY_DEATHWHISPER_ELEVATOR:
LadyDeathwisperElevatorGUID = go->GetGUID(); LadyDeathwisperElevatorGUID = go->GetGUID();
@@ -758,7 +758,7 @@ public:
break; break;
case GO_SAURFANG_S_DOOR: case GO_SAURFANG_S_DOOR:
DeathbringerSaurfangDoorGUID = go->GetGUID(); DeathbringerSaurfangDoorGUID = go->GetGUID();
AddDoor(go, true); AddDoor(go);
break; break;
case GO_DEATHBRINGER_S_CACHE_10N: case GO_DEATHBRINGER_S_CACHE_10N:
case GO_DEATHBRINGER_S_CACHE_25N: case GO_DEATHBRINGER_S_CACHE_25N:
@@ -873,7 +873,7 @@ public:
go->SetRespawnTime(7 * DAY); go->SetRespawnTime(7 * DAY);
break; break;
case GO_SCOURGE_TRANSPORTER_FIRST: case GO_SCOURGE_TRANSPORTER_FIRST:
AddDoor(go, true); AddDoor(go);
ScourgeTransporterFirstGUID = go->GetGUID(); ScourgeTransporterFirstGUID = go->GetGUID();
if (GetBossState(DATA_LORD_MARROWGAR) == DONE) if (GetBossState(DATA_LORD_MARROWGAR) == DONE)
go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
@@ -911,7 +911,7 @@ public:
case GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR: case GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR:
case GO_ICE_WALL: case GO_ICE_WALL:
case GO_SCOURGE_TRANSPORTER_FIRST: case GO_SCOURGE_TRANSPORTER_FIRST:
AddDoor(go, false); RemoveDoor(go);
break; break;
case GO_THE_SKYBREAKER_A: case GO_THE_SKYBREAKER_A:
case GO_ORGRIMS_HAMMER_H: case GO_ORGRIMS_HAMMER_H:
@@ -93,17 +93,17 @@ public:
case GO_TELESTRA_SPHERE: case GO_TELESTRA_SPHERE:
if (GetBossState(DATA_TELESTRA_ORB) != DONE && GetBossState(DATA_MAGUS_TELESTRA_EVENT) == DONE) if (GetBossState(DATA_TELESTRA_ORB) != DONE && GetBossState(DATA_MAGUS_TELESTRA_EVENT) == DONE)
gameObject->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); gameObject->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
AddDoor(gameObject, true); AddDoor(gameObject);
break; break;
case GO_ANOMALUS_SPHERE: case GO_ANOMALUS_SPHERE:
if (GetBossState(DATA_ANOMALUS_ORB) != DONE && GetBossState(DATA_ANOMALUS_EVENT) == DONE) if (GetBossState(DATA_ANOMALUS_ORB) != DONE && GetBossState(DATA_ANOMALUS_EVENT) == DONE)
gameObject->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); gameObject->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
AddDoor(gameObject, true); AddDoor(gameObject);
break; break;
case GO_ORMOROK_SPHERE: case GO_ORMOROK_SPHERE:
if (GetBossState(DATA_ORMOROK_ORB) != DONE && GetBossState(DATA_ORMOROK_EVENT) == DONE) if (GetBossState(DATA_ORMOROK_ORB) != DONE && GetBossState(DATA_ORMOROK_EVENT) == DONE)
gameObject->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); gameObject->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
AddDoor(gameObject, true); AddDoor(gameObject);
break; break;
} }
} }
@@ -115,7 +115,7 @@ public:
case GO_TELESTRA_SPHERE: case GO_TELESTRA_SPHERE:
case GO_ANOMALUS_SPHERE: case GO_ANOMALUS_SPHERE:
case GO_ORMOROK_SPHERE: case GO_ORMOROK_SPHERE:
AddDoor(gameObject, false); RemoveDoor(gameObject);
break; break;
} }
} }
@@ -156,7 +156,7 @@ public:
case GO_ILLIDAN_GATE: case GO_ILLIDAN_GATE:
case GO_ILLIDAN_DOOR_R: case GO_ILLIDAN_DOOR_R:
case GO_ILLIDAN_DOOR_L: case GO_ILLIDAN_DOOR_L:
AddDoor(go, true); AddDoor(go);
break; break;
} }
} }
@@ -178,7 +178,7 @@ public:
case GO_ILLIDAN_GATE: case GO_ILLIDAN_GATE:
case GO_ILLIDAN_DOOR_R: case GO_ILLIDAN_DOOR_R:
case GO_ILLIDAN_DOOR_L: case GO_ILLIDAN_DOOR_L:
AddDoor(go, false); RemoveDoor(go);
break; break;
} }
} }
@@ -86,7 +86,7 @@ public:
case GO_COILFANG_BRIDGE1: case GO_COILFANG_BRIDGE1:
case GO_COILFANG_BRIDGE2: case GO_COILFANG_BRIDGE2:
case GO_COILFANG_BRIDGE3: case GO_COILFANG_BRIDGE3:
AddDoor(go, true); AddDoor(go);
break; break;
case GO_SHIELD_GENERATOR1: case GO_SHIELD_GENERATOR1:
case GO_SHIELD_GENERATOR2: case GO_SHIELD_GENERATOR2:
@@ -105,7 +105,7 @@ public:
case GO_COILFANG_BRIDGE1: case GO_COILFANG_BRIDGE1:
case GO_COILFANG_BRIDGE2: case GO_COILFANG_BRIDGE2:
case GO_COILFANG_BRIDGE3: case GO_COILFANG_BRIDGE3:
AddDoor(go, false); RemoveDoor(go);
break; break;
} }
} }
@@ -66,7 +66,7 @@ public:
_magtheridonGUID = creature->GetGUID(); _magtheridonGUID = creature->GetGUID();
break; break;
case NPC_HELLFIRE_CHANNELER: case NPC_HELLFIRE_CHANNELER:
AddMinion(creature, true); AddMinion(creature);
break; break;
case NPC_HELLFIRE_WARDER: case NPC_HELLFIRE_WARDER:
_wardersSet.insert(creature->GetGUID()); _wardersSet.insert(creature->GetGUID());
@@ -79,7 +79,7 @@ public:
switch (creature->GetEntry()) switch (creature->GetEntry())
{ {
case NPC_HELLFIRE_CHANNELER: case NPC_HELLFIRE_CHANNELER:
AddMinion(creature, false); RemoveMinion(creature);
break; break;
} }
} }
@@ -89,7 +89,7 @@ public:
switch (go->GetEntry()) switch (go->GetEntry())
{ {
case GO_MAGTHERIDON_DOORS: case GO_MAGTHERIDON_DOORS:
AddDoor(go, true); AddDoor(go);
break; break;
case GO_MANTICRON_CUBE: case GO_MANTICRON_CUBE:
_cubesSet.insert(go->GetGUID()); _cubesSet.insert(go->GetGUID());
@@ -111,7 +111,7 @@ public:
switch (go->GetEntry()) switch (go->GetEntry())
{ {
case GO_MAGTHERIDON_DOORS: case GO_MAGTHERIDON_DOORS:
AddDoor(go, false); RemoveDoor(go);
break; break;
case GO_MANTICRON_CUBE: case GO_MANTICRON_CUBE:
_cubesSet.erase(go->GetGUID()); _cubesSet.erase(go->GetGUID());
@@ -50,7 +50,7 @@ public:
case GO_DOOR_MOARG_1: case GO_DOOR_MOARG_1:
case GO_DOOR_MOARG_2: case GO_DOOR_MOARG_2:
case GO_DOOR_NETHERMANCER: case GO_DOOR_NETHERMANCER:
AddDoor(gameObject, true); AddDoor(gameObject);
break; break;
default: default:
break; break;
@@ -64,7 +64,7 @@ public:
case GO_DOOR_MOARG_1: case GO_DOOR_MOARG_1:
case GO_DOOR_MOARG_2: case GO_DOOR_MOARG_2:
case GO_DOOR_NETHERMANCER: case GO_DOOR_NETHERMANCER:
AddDoor(gameObject, false); RemoveDoor(gameObject);
break; break;
default: default:
break; break;
@@ -55,7 +55,7 @@ public:
{ {
case GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA: case GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA:
case GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA: case GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA:
AddDoor(go, true); AddDoor(go);
break; break;
case GO_STASIS_POD_ALPHA: case GO_STASIS_POD_ALPHA:
StasisPodGUIDs[0] = go->GetGUID(); StasisPodGUIDs[0] = go->GetGUID();