diff options
Diffstat (limited to 'src/server/scripts')
21 files changed, 119 insertions, 116 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index f2294044af3..be216e79d94 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -38,6 +38,7 @@ EndScriptData */ #include "MapManager.h" #include "MovementPackets.h" #include "ObjectMgr.h" +#include "PhasingHandler.h" #include "RBAC.h" #include "SpellPackets.h" #include "Transport.h" @@ -945,7 +946,7 @@ public: if (!v) return false; - v->CopyPhaseFrom(handler->GetSession()->GetPlayer()); + PhasingHandler::InheritPhaseShift(v, handler->GetSession()->GetPlayer()); map->AddToMap(v); @@ -974,22 +975,20 @@ public: if (!t) return false; - std::set<uint32> terrainswap; - std::set<uint32> phaseId; - std::set<uint32> worldMapSwap; + PhaseShift phaseShift; if (uint32 ut = (uint32)atoi(t)) - terrainswap.insert(ut); + phaseShift.AddVisibleMapId(ut, nullptr); if (p) if (uint32 up = (uint32)atoi(p)) - phaseId.insert(up); + phaseShift.AddPhase(up, PhaseFlags::None, nullptr); if (m) if (uint32 um = (uint32)atoi(m)) - worldMapSwap.insert(um); + phaseShift.AddUiWorldMapAreaIdSwap(um); - handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap, worldMapSwap); + PhasingHandler::SendToPlayer(handler->GetSession()->GetPlayer(), phaseShift); return true; } @@ -1472,17 +1471,7 @@ public: else if (target->GetDBPhase() < 0) handler->PSendSysMessage("Target creature's PhaseGroup in DB: %d", abs(target->GetDBPhase())); - std::stringstream phases; - - for (uint32 phase : target->GetPhases()) - { - phases << phase << " "; - } - - if (!phases.str().empty()) - handler->PSendSysMessage("Target's current phases: %s", phases.str().c_str()); - else - handler->SendSysMessage("Target is not phased"); + PhasingHandler::PrintToChat(handler, target->GetPhaseShift()); return true; } diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 3f57f2c0fbc..e2a1f8172a4 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -34,6 +34,7 @@ EndScriptData */ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Opcodes.h" +#include "PhasingHandler.h" #include "Player.h" #include "PoolMgr.h" #include "RBAC.h" @@ -146,7 +147,7 @@ public: if (!object) return false; - object->CopyPhaseFrom(player); + PhasingHandler::InheritPhaseShift(object, player); if (spawntimeSecs) { diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index a914f2e99fc..bae4a73d959 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -26,6 +26,7 @@ #include "MotionMaster.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" +#include "PhasingHandler.h" #include "Player.h" #include "RBAC.h" #include "WorldSession.h" @@ -352,7 +353,7 @@ public: { // ... than, it prints information like "is online", where he is, etc... onlineState = "online"; - phases = StringJoin(p->GetPhases(), ", "); + phases = PhasingHandler::FormatPhases(p->GetPhaseShift()); AreaTableEntry const* area = sAreaTableStore.LookupEntry(p->GetAreaId()); if (area) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 0993794d204..c75b528521c 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -39,6 +39,7 @@ #include "ObjectMgr.h" #include "Opcodes.h" #include "Pet.h" +#include "PhasingHandler.h" #include "Player.h" #include "Realm.h" #include "ScriptMgr.h" @@ -258,8 +259,8 @@ public: sDB2Manager.Map2ZoneCoordinates(zoneId, zoneX, zoneY); Map const* map = object->GetMap(); - float groundZ = map->GetHeight(object->GetPhases(), object->GetPositionX(), object->GetPositionY(), MAX_HEIGHT); - float floorZ = map->GetHeight(object->GetPhases(), object->GetPositionX(), object->GetPositionY(), object->GetPositionZ()); + float groundZ = map->GetHeight(object->GetPhaseShift(), object->GetPositionX(), object->GetPositionY(), MAX_HEIGHT); + float floorZ = map->GetHeight(object->GetPhaseShift(), object->GetPositionX(), object->GetPositionY(), object->GetPositionZ()); GridCoord gridCoord = Trinity::ComputeGridCoord(object->GetPositionX(), object->GetPositionY()); @@ -286,7 +287,6 @@ public: mapId, (mapEntry ? mapEntry->MapName->Str[handler->GetSessionDbcLocale()] : unknown), zoneId, (zoneEntry ? zoneEntry->AreaName->Str[handler->GetSessionDbcLocale()] : unknown), areaId, (areaEntry ? areaEntry->AreaName->Str[handler->GetSessionDbcLocale()] : unknown), - StringJoin(object->GetPhases(), ", ").c_str(), object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation()); if (Transport* transport = object->GetTransport()) handler->PSendSysMessage(LANG_TRANSPORT_POSITION, @@ -302,20 +302,7 @@ public: if (status) handler->PSendSysMessage(LANG_LIQUID_STATUS, liquidStatus.level, liquidStatus.depth_level, liquidStatus.entry, liquidStatus.type_flags, status); - if (!object->GetTerrainSwaps().empty()) - { - std::stringstream ss; - for (uint32 swap : object->GetTerrainSwaps()) - ss << swap << " "; - handler->PSendSysMessage("Target's active terrain swaps: %s", ss.str().c_str()); - } - if (!object->GetWorldMapAreaSwaps().empty()) - { - std::stringstream ss; - for (uint32 swap : object->GetWorldMapAreaSwaps()) - ss << swap << " "; - handler->PSendSysMessage("Target's active world map area swaps: %s", ss.str().c_str()); - } + PhasingHandler::PrintToChat(handler, object->GetPhaseShift()); return true; } @@ -479,7 +466,8 @@ public: target->GetContactPoint(_player, x, y, z); _player->TeleportTo(target->GetMapId(), x, y, z, _player->GetAngle(target), TELE_TO_GM_MODE); - _player->CopyPhaseFrom(target, true); + PhasingHandler::InheritPhaseShift(_player, target); + _player->UpdateObjectVisibility(); } else { @@ -603,7 +591,8 @@ public: float x, y, z; handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, target->GetObjectSize()); target->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, target->GetOrientation()); - target->CopyPhaseFrom(handler->GetSession()->GetPlayer(), true); + PhasingHandler::InheritPhaseShift(target, handler->GetSession()->GetPlayer()); + target->UpdateObjectVisibility(); } else { @@ -1692,7 +1681,6 @@ public: // Position data print uint32 mapId; uint32 areaId; - std::set<uint32> phases; std::string areaName = handler->GetTrinityString(LANG_UNKNOWN); std::string zoneName = handler->GetTrinityString(LANG_UNKNOWN); @@ -1724,7 +1712,6 @@ public: areaId = target->GetAreaId(); alive = target->IsAlive() ? handler->GetTrinityString(LANG_YES) : handler->GetTrinityString(LANG_NO); gender = target->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); - phases = target->GetPhases(); } // get additional information from DB else @@ -1909,9 +1896,9 @@ public: // Output XII. LANG_PINFO_CHR_ALIVE handler->PSendSysMessage(LANG_PINFO_CHR_ALIVE, alive.c_str()); - // Output XIII. LANG_PINFO_CHR_PHASES - if (target && !phases.empty()) - handler->PSendSysMessage(LANG_PINFO_CHR_PHASES, StringJoin(phases, ", ").c_str()); + // Output XIII. phases + if (target) + PhasingHandler::PrintToChat(handler, target->GetPhaseShift()); // Output XIV. LANG_PINFO_CHR_MONEY uint32 gold = money / GOLD; diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index d7be9d12c18..a17824a0127 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -28,6 +28,7 @@ EndScriptData */ #include "Log.h" #include "ObjectMgr.h" #include "Pet.h" +#include "PhasingHandler.h" #include "Player.h" #include "RBAC.h" #include "ReputationMgr.h" @@ -831,9 +832,18 @@ public: if (!*args) return false; - uint32 phaseId = uint32(atoul(args)); + char* phaseText = strtok((char*)args, " "); + if (!phaseText) + return false; + + uint32 phaseId = uint32(strtoul(phaseText, nullptr, 10)); + uint32 visibleMapId = 0; + + char* visibleMapIdText = strtok(nullptr, " "); + if (visibleMapIdText) + visibleMapId = uint32(strtoul(visibleMapIdText, nullptr, 10)); - if (!sPhaseStore.LookupEntry(phaseId)) + if (phaseId && !sPhaseStore.LookupEntry(phaseId)) { handler->SendSysMessage(LANG_PHASE_NOTFOUND); handler->SetSentErrorMessage(true); @@ -841,13 +851,30 @@ public: } Unit* target = handler->getSelectedUnit(); - if (!target) - target = handler->GetSession()->GetPlayer(); - target->SetInPhase(phaseId, true, !target->IsInPhase(phaseId)); + if (visibleMapId) + { + MapEntry const* visibleMap = sMapStore.LookupEntry(visibleMapId); + if (!visibleMap || visibleMap->ParentMapID != int32(target->GetMapId())) + { + handler->SendSysMessage(LANG_PHASE_NOTFOUND); + handler->SetSentErrorMessage(true); + return false; + } - if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->SendUpdatePhasing(); + if (!target->GetPhaseShift().HasVisibleMapId(visibleMapId)) + PhasingHandler::AddVisibleMapId(target, visibleMapId); + else + PhasingHandler::RemoveVisibleMapId(target, visibleMapId); + } + + if (phaseId) + { + if (!target->GetPhaseShift().HasPhase(phaseId)) + PhasingHandler::AddPhase(target, phaseId, true); + else + PhasingHandler::RemovePhase(target, phaseId, true); + } return true; } diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 2ecdd51b230..7b9d16502bb 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -33,6 +33,7 @@ EndScriptData */ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Pet.h" +#include "PhasingHandler.h" #include "Player.h" #include "RBAC.h" #include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand @@ -310,7 +311,7 @@ public: if (!creature) return false; - creature->CopyPhaseFrom(chr); + PhasingHandler::InheritPhaseShift(creature, chr); creature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); ObjectGuid::LowType db_guid = creature->GetSpawnId(); @@ -762,17 +763,7 @@ public: if (CreatureData const* data = sObjectMgr->GetCreatureData(target->GetSpawnId())) { handler->PSendSysMessage(LANG_NPCINFO_PHASES, data->phaseId, data->phaseGroup); - if (data->phaseGroup) - { - std::set<uint32> _phases = target->GetPhases(); - - if (!_phases.empty()) - { - handler->PSendSysMessage(LANG_NPCINFO_PHASE_IDS); - for (uint32 phaseId : _phases) - handler->PSendSysMessage("%u", phaseId); - } - } + PhasingHandler::PrintToChat(handler, target->GetPhaseShift()); } handler->PSendSysMessage(LANG_NPCINFO_ARMOR, target->GetArmor()); @@ -1122,12 +1113,8 @@ public: return false; } - creature->ClearPhases(); - - for (uint32 id : sDB2Manager.GetPhasesForGroup(phaseGroupId)) - creature->SetInPhase(id, false, true); // don't send update here for multiple phases, only send it once after adding all phases - - creature->UpdateObjectVisibility(); + PhasingHandler::ResetPhaseShift(creature); + PhasingHandler::AddPhaseGroup(creature, phaseGroupId, true); creature->SetDBPhase(-phaseGroupId); creature->SaveToDB(); @@ -1158,8 +1145,8 @@ public: return false; } - creature->ClearPhases(); - creature->SetInPhase(phaseID, true, true); + PhasingHandler::ResetPhaseShift(creature); + PhasingHandler::AddPhase(creature, phaseID, true); creature->SetDBPhase(phaseID); creature->SaveToDB(); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 438a662f2aa..df24f26bd5d 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -1127,14 +1127,6 @@ public: return true; } - static bool HandleReloadPhaseDefinitionsCommand(ChatHandler* handler, const char* /*args*/) - { - TC_LOG_INFO("misc", "Reloading terrain_phase_info table..."); - sObjectMgr->LoadTerrainPhaseInfo(); - handler->SendGlobalGMSysMessage("Terrain phase infos reloaded."); - return true; - } - static bool HandleReloadAreaTriggerTemplateCommand(ChatHandler* handler, const char* /*args*/) { TC_LOG_INFO("misc", "Reloading areatrigger_template table..."); diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 2fa3a081435..47f466c7c61 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -30,6 +30,7 @@ EndScriptData */ #include "Map.h" #include "MotionMaster.h" #include "ObjectMgr.h" +#include "PhasingHandler.h" #include "Player.h" #include "RBAC.h" #include "WaypointManager.h" @@ -672,7 +673,7 @@ public: return false; } - wpCreature->CopyPhaseFrom(chr); + PhasingHandler::InheritPhaseShift(wpCreature, chr); wpCreature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); ObjectGuid::LowType dbGuid = wpCreature->GetSpawnId(); @@ -890,7 +891,7 @@ public: return false; } - wpCreature->CopyPhaseFrom(chr); + PhasingHandler::InheritPhaseShift(wpCreature, chr); wpCreature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); ObjectGuid::LowType dbGuid = wpCreature->GetSpawnId(); @@ -959,7 +960,7 @@ public: return false; } - creature->CopyPhaseFrom(chr); + PhasingHandler::InheritPhaseShift(creature, chr); creature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); ObjectGuid::LowType dbGuid = creature->GetSpawnId(); @@ -1016,7 +1017,7 @@ public: return false; } - creature->CopyPhaseFrom(chr); + PhasingHandler::InheritPhaseShift(creature, chr); creature->SaveToDB(map->GetId(), UI64LIT(1) << map->GetSpawnMode()); ObjectGuid::LowType dbGuid = creature->GetSpawnId(); diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp index 9f19dd92598..f16ad9f3f26 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp @@ -543,7 +543,7 @@ public: float x = caster->GetPositionX() + dist * std::cos(angle); float y = caster->GetPositionY() + dist * std::sin(angle); - float z = caster->GetMap()->GetHeight(caster->GetPhases(), x, y, caster->GetPositionZ()); + float z = caster->GetMap()->GetHeight(caster->GetPhaseShift(), x, y, caster->GetPositionZ()); float o = dest._position.GetOrientation(); dest.Relocate({ x, y, z, o }); diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp index 0a324f1164b..52fd5df153c 100644 --- a/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp @@ -484,7 +484,7 @@ public: { Unit* caster = GetCaster(); Position pos = caster->GetPosition(); - pos.m_positionZ = caster->GetMap()->GetHeight(caster->GetPhases(), pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, 100.0f); + pos.m_positionZ = caster->GetMap()->GetHeight(caster->GetPhaseShift(), pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, 100.0f); dest.Relocate(pos); } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 79aae3f5863..6488bc1f5d5 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -24,6 +24,7 @@ #include "InstanceScript.h" #include "Map.h" #include "ObjectAccessor.h" +#include "PhasingHandler.h" #include "Player.h" #include "ScriptedCreature.h" #include "SpellInfo.h" @@ -147,7 +148,7 @@ public: // clone player->CastSpell(summon, SPELL_CLONE_PLAYER, true); // phase the summon - summon->SetInPhase(spellInfo->GetEffect(EFFECT_0)->MiscValueB, true, true); + PhasingHandler::AddPhase(summon, spellInfo->GetEffect(EFFECT_0)->MiscValueB, true); } } ++insanityHandled; @@ -173,9 +174,9 @@ public: instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT); // Visible for all players in insanity - me->SetInPhase(169, true, true); for (uint32 i = 173; i <= 177; ++i) - me->SetInPhase(i, true, true); + PhasingHandler::AddPhase(me, i, false); + PhasingHandler::AddPhase(me, 169, true); ResetPlayersPhase(); @@ -213,7 +214,7 @@ public: return; else { - nextPhase = *visage->GetPhases().begin(); + nextPhase = visage->GetPhaseShift().GetPhases().begin()->Id; break; } } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index d889dd42cdd..1880bfc61e6 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -22,6 +22,7 @@ #include "InstanceScript.h" #include "Map.h" #include "ObjectAccessor.h" +#include "PhasingHandler.h" #include "Player.h" #include "ruby_sanctum.h" #include "ScriptedCreature.h" @@ -408,7 +409,7 @@ class boss_twilight_halion : public CreatureScript DoCast(me, SPELL_DUSK_SHROUD, true); me->SetHealth(halion->GetHealth()); - me->SetInPhase(174, false, true); + PhasingHandler::AddPhase(me, 174, false); me->SetReactState(REACT_DEFENSIVE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); events.ScheduleEvent(EVENT_TAIL_LASH, Seconds(12)); @@ -1211,16 +1212,16 @@ class npc_combustion_consumption : public CreatureScript case NPC_COMBUSTION: _explosionSpell = SPELL_FIERY_COMBUSTION_EXPLOSION; _damageSpell = SPELL_COMBUSTION_DAMAGE_AURA; - creature->SetInPhase(DEFAULT_PHASE, false, true); + PhasingHandler::AddPhase(creature, DEFAULT_PHASE, false); if (IsHeroic()) - creature->SetInPhase(174, false, true); + PhasingHandler::AddPhase(creature, 174, false); break; case NPC_CONSUMPTION: _explosionSpell = SPELL_SOUL_CONSUMPTION_EXPLOSION; _damageSpell = SPELL_CONSUMPTION_DAMAGE_AURA; - creature->SetInPhase(174, false, true); + PhasingHandler::AddPhase(creature, 174, false); if (IsHeroic()) - creature->SetInPhase(DEFAULT_PHASE, false, true); + PhasingHandler::AddPhase(creature, DEFAULT_PHASE, false); break; default: // Should never happen _explosionSpell = 0; @@ -1357,12 +1358,12 @@ class go_twilight_portal : public GameObjectScript switch (gameobject->GetEntry()) { case GO_HALION_PORTAL_EXIT: - gameobject->SetInPhase(174, false, true); + PhasingHandler::AddPhase(gameobject, 174, false); _spellId = gameobject->GetGOInfo()->goober.spell; break; case GO_HALION_PORTAL_1: case GO_HALION_PORTAL_2: - gameobject->SetInPhase(DEFAULT_PHASE, false, true); + PhasingHandler::AddPhase(gameobject, DEFAULT_PHASE, false); /// Because WDB template has non-existent spell ID, not seen in sniffs either, meh _spellId = SPELL_TWILIGHT_REALM; break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index f829093c5a5..ecd030b9304 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -23,6 +23,7 @@ #include "halls_of_reflection.h" #include "InstanceScript.h" #include "Map.h" +#include "PhasingHandler.h" #include "Player.h" #include "TemporarySummon.h" #include "Transport.h" @@ -143,7 +144,10 @@ class instance_halls_of_reflection : public InstanceMapScript break; case NPC_FROSTSWORN_GENERAL: FrostswornGeneralGUID = creature->GetGUID(); - creature->SetInPhase(170, true, GetBossState(DATA_MARWYN) != DONE); + if (GetBossState(DATA_MARWYN) != DONE) + PhasingHandler::AddPhase(creature, 170, true); + else + PhasingHandler::RemovePhase(creature, 170, true); break; case NPC_JAINA_ESCAPE: case NPC_SYLVANAS_ESCAPE: @@ -325,7 +329,7 @@ class instance_halls_of_reflection : public InstanceMapScript HandleGameObject(ImpenetrableDoorGUID, true); DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0); if (Creature* general = instance->GetCreature(FrostswornGeneralGUID)) - general->SetInPhase(170, true, false); + PhasingHandler::RemovePhase(general, 170, true); SpawnGunship(); SpawnEscapeEvent(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 9fd0eb7beb6..a9c638c010d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -816,7 +816,7 @@ class boss_prince_valanar_icc : public CreatureScript { float x, y, z; summon->GetPosition(x, y, z); - float ground_Z = summon->GetMap()->GetHeight(summon->GetPhases(), x, y, z, true, 500.0f); + float ground_Z = summon->GetMap()->GetHeight(summon->GetPhaseShift(), x, y, z, true, 500.0f); summon->GetMotionMaster()->MovePoint(POINT_KINETIC_BOMB_IMPACT, x, y, ground_Z); summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); break; @@ -1058,7 +1058,7 @@ class npc_kinetic_bomb : public CreatureScript me->SetReactState(REACT_PASSIVE); me->GetPosition(_x, _y, _groundZ); me->DespawnOrUnsummon(60000); - _groundZ = me->GetMap()->GetHeight(me->GetPhases(), _x, _y, _groundZ, true, 500.0f); + _groundZ = me->GetMap()->GetHeight(me->GetPhaseShift(), _x, _y, _groundZ, true, 500.0f); } void DoAction(int32 action) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 52d6ce43b23..32f26de6698 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -21,6 +21,7 @@ #include "InstanceScript.h" #include "MotionMaster.h" #include "ObjectAccessor.h" +#include "PhasingHandler.h" #include "ScriptedCreature.h" #include "SpellAuraEffects.h" #include "SpellInfo.h" @@ -637,7 +638,7 @@ class npc_the_lich_king_controller : public CreatureScript void JustSummoned(Creature* summon) override { // must not be in dream phase - summon->SetInPhase(173, true, false); + PhasingHandler::RemovePhase(summon, 173, true); if (summon->GetEntry() != NPC_SUPPRESSER) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) summon->AI()->AttackStart(target); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 16807804090..7b83c2bc43d 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -24,6 +24,7 @@ #include "Map.h" #include "MotionMaster.h" #include "oculus.h" +#include "PhasingHandler.h" #include "TemporarySummon.h" #include "WorldStatePackets.h" @@ -62,15 +63,24 @@ class instance_oculus : public InstanceMapScript break; case NPC_VAROS: VarosGUID = creature->GetGUID(); - creature->SetInPhase(170, true, GetBossState(DATA_DRAKOS) != DONE); + if (GetBossState(DATA_DRAKOS) != DONE) + PhasingHandler::AddPhase(creature, 170, true); + else + PhasingHandler::RemovePhase(creature, 170, true); break; case NPC_UROM: UromGUID = creature->GetGUID(); - creature->SetInPhase(170, true, GetBossState(DATA_VAROS) != DONE); + if (GetBossState(DATA_VAROS) != DONE) + PhasingHandler::AddPhase(creature, 170, true); + else + PhasingHandler::RemovePhase(creature, 170, true); break; case NPC_EREGOS: EregosGUID = creature->GetGUID(); - creature->SetInPhase(170, true, GetBossState(DATA_UROM) != DONE); + if (GetBossState(DATA_UROM) != DONE) + PhasingHandler::AddPhase(creature, 170, true); + else + PhasingHandler::RemovePhase(creature, 170, true); break; case NPC_CENTRIFUGE_CONSTRUCT: if (creature->IsAlive()) @@ -104,8 +114,7 @@ class instance_oculus : public InstanceMapScript if (GetBossState(DATA_UROM) == DONE) GreaterWhelpList.push_back(creature->GetGUID()); else - creature->SetInPhase(170, true, true); - + PhasingHandler::AddPhase(creature, 170, true); break; default: break; @@ -194,7 +203,7 @@ class instance_oculus : public InstanceMapScript DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_AMOUNT, CentrifugueConstructCounter); FreeDragons(); if (Creature* varos = instance->GetCreature(VarosGUID)) - varos->SetInPhase(170, true, false); + PhasingHandler::RemovePhase(varos, 170, true); events.ScheduleEvent(EVENT_VAROS_INTRO, 15000); } break; @@ -203,7 +212,7 @@ class instance_oculus : public InstanceMapScript { DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_SHOW, 0); if (Creature* urom = instance->GetCreature(UromGUID)) - urom->SetInPhase(170, true, false); + PhasingHandler::RemovePhase(urom, 170, true); } break; case DATA_UROM: @@ -211,7 +220,7 @@ class instance_oculus : public InstanceMapScript { if (Creature* eregos = instance->GetCreature(EregosGUID)) { - eregos->SetInPhase(170, true, false); + PhasingHandler::RemovePhase(eregos, 170, true); GreaterWhelps(); events.ScheduleEvent(EVENT_EREGOS_INTRO, 5000); } @@ -313,7 +322,7 @@ class instance_oculus : public InstanceMapScript { for (ObjectGuid guid : GreaterWhelpList) if (Creature* gwhelp = instance->GetCreature(guid)) - gwhelp->SetInPhase(170, true, false); + PhasingHandler::RemovePhase(gwhelp, 170, true); } protected: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 04f9f8e46bb..93f1f515409 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -777,7 +777,7 @@ class boss_flame_leviathan_safety_container : public CreatureScript { float x, y, z; me->GetPosition(x, y, z); - z = me->GetMap()->GetHeight(me->GetPhases(), x, y, z); + z = me->GetMap()->GetHeight(me->GetPhaseShift(), x, y, z); me->GetMotionMaster()->MovePoint(0, x, y, z); me->SetPosition(x, y, z, 0); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 5a726140a70..8ecccb016ea 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -872,7 +872,7 @@ class boss_sara : public CreatureScript float angle = frand(0.0f, 2.0f * float(M_PI)); pos.m_positionX = YoggSaronSpawnPos.GetPositionX() + radius * cosf(angle); pos.m_positionY = YoggSaronSpawnPos.GetPositionY() + radius * sinf(angle); - pos.m_positionZ = me->GetMap()->GetHeight(me->GetPhases(), pos.GetPositionX(), pos.GetPositionY(), YoggSaronSpawnPos.GetPositionZ() + 5.0f); + pos.m_positionZ = me->GetMap()->GetHeight(me->GetPhaseShift(), pos.GetPositionX(), pos.GetPositionY(), YoggSaronSpawnPos.GetPositionZ() + 5.0f); me->SummonCreature(NPC_DEATH_RAY, pos, TEMPSUMMON_TIMED_DESPAWN, 20000); } break; diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 3cd437f4111..7ee188693fb 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -38,6 +38,7 @@ EndContentData */ #include "MotionMaster.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" +#include "PhasingHandler.h" #include "Player.h" #include "ScriptedEscortAI.h" #include "ScriptedFollowerAI.h" @@ -1678,7 +1679,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); break; case 20: - me->SetInPhase(170, true, false); + PhasingHandler::RemovePhase(me, 170, true); Talk(SAY_5); me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); player->GroupEventHappens(QUEST_ESCAPING_THE_MIST, me); diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 2b0e071d239..f3eb8735bcf 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -783,7 +783,7 @@ public: bird->KillSelf(); crunchy->GetMotionMaster()->MovePoint(0, bird->GetPositionX(), bird->GetPositionY(), - bird->GetMap()->GetWaterOrGroundLevel(bird->GetPhases(), bird->GetPositionX(), bird->GetPositionY(), bird->GetPositionZ())); + bird->GetMap()->GetWaterOrGroundLevel(bird->GetPhaseShift(), bird->GetPositionX(), bird->GetPositionY(), bird->GetPositionZ())); /// @todo Make crunchy perform emote eat when he reaches the bird break; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index d259e8585c6..5c5bf2d967b 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -22,6 +22,7 @@ #include "Map.h" #include "ObjectMgr.h" #include "OutdoorPvPSI.h" +#include "PhasingHandler.h" #include "Player.h" #include "ReputationMgr.h" #include "World.h" @@ -158,7 +159,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) Map* map = player->GetMap(); if (GameObject* go = GameObject::CreateGameObject(SI_SILITHYST_MOUND, map, *player, QuaternionData(), 255, GO_STATE_READY)) { - go->CopyPhaseFrom(player); + PhasingHandler::InheritPhaseShift(go, player); go->SetRespawnTime(0); if (!map->AddToMap(go)) |