aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp27
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp3
-rw-r--r--src/server/scripts/Commands/cs_group.cpp3
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp35
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp41
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp27
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp8
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp9
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp2
-rw-r--r--src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp9
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp15
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp8
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp3
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp27
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp3
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp2
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp3
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))