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.cpp42
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp3
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp23
-rw-r--r--src/server/scripts/Commands/cs_mmaps.cpp12
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp11
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp45
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp6
-rw-r--r--src/server/scripts/Commands/cs_wp.cpp12
-rw-r--r--src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp6
9 files changed, 109 insertions, 51 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 5b60fc81229..e08557dd357 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -934,8 +934,7 @@ public:
return false;
}
- for (auto phase : handler->GetSession()->GetPlayer()->GetPhases())
- v->SetInPhase(phase, false, true);
+ v->CopyPhaseFrom(handler->GetSession()->GetPlayer());
map->AddToMap(v->ToCreature());
@@ -959,6 +958,7 @@ public:
char* t = strtok((char*)args, " ");
char* p = strtok(NULL, " ");
+ char* m = strtok(NULL, " ");
if (!t)
return false;
@@ -967,10 +967,16 @@ public:
std::set<uint32> phaseId;
std::set<uint32> worldMapSwap;
- terrainswap.insert((uint32)atoi(t));
+ if (uint32 ut = (uint32)atoi(t))
+ terrainswap.insert(ut);
if (p)
- phaseId.insert((uint32)atoi(p));
+ if (uint32 up = (uint32)atoi(p))
+ phaseId.insert(up);
+
+ if (m)
+ if (uint32 um = (uint32)atoi(m))
+ worldMapSwap.insert(um);
handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap, worldMapSwap);
return true;
@@ -1390,14 +1396,28 @@ public:
return true;
}
- static bool HandleDebugPhaseCommand(ChatHandler* /*handler*/, char const* /*args*/)
+ static bool HandleDebugPhaseCommand(ChatHandler* handler, char const* /*args*/)
{
- /*/
- Unit* unit = handler->getSelectedUnit();
- Player* player = handler->GetSession()->GetPlayer();
- if (unit && unit->GetTypeId() == TYPEID_PLAYER)
- player = unit->ToPlayer();
- */
+ Unit* target = handler->getSelectedUnit();
+
+ if (!target)
+ {
+ handler->SendSysMessage(LANG_SELECT_CREATURE);
+ handler->SetSentErrorMessage(true);
+ return false;
+ }
+
+ 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");
return true;
}
};
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index 59d32f9e418..36876a9be34 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -158,8 +158,7 @@ public:
return false;
}
- for (auto phase : player->GetPhases())
- object->SetInPhase(phase, false, true);
+ object->CopyPhaseFrom(player);
if (spawntimeSecs)
{
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index bc8f7bad5fb..d437e72b933 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -219,7 +219,7 @@ public:
uint32 haveMap = Map::ExistMap(mapId, gridX, gridY) ? 1 : 0;
uint32 haveVMap = Map::ExistVMap(mapId, gridX, gridY) ? 1 : 0;
- uint32 haveMMap = (DisableMgr::IsPathfindingEnabled(mapId) && MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId())) ? 1 : 0;
+ uint32 haveMMap = (DisableMgr::IsPathfindingEnabled(mapId) && MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId(), handler->GetSession()->GetPlayer()->GetTerrainSwaps())) ? 1 : 0;
if (haveVMap)
{
@@ -247,6 +247,21 @@ 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());
+ }
return true;
}
@@ -407,8 +422,7 @@ public:
target->GetContactPoint(_player, x, y, z);
_player->TeleportTo(target->GetMapId(), x, y, z, _player->GetAngle(target), TELE_TO_GM_MODE);
- for (auto phase : target->GetPhases())
- _player->SetInPhase(phase, true, true);
+ _player->CopyPhaseFrom(target, true);
}
else
{
@@ -532,8 +546,7 @@ 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());
- for (auto phase : handler->GetSession()->GetPlayer()->GetPhases())
- target->SetInPhase(phase, true, true);
+ target->CopyPhaseFrom(handler->GetSession()->GetPlayer(), true);
}
else
{
diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp
index 16edb91873f..166afec6b39 100644
--- a/src/server/scripts/Commands/cs_mmaps.cpp
+++ b/src/server/scripts/Commands/cs_mmaps.cpp
@@ -64,7 +64,7 @@ public:
static bool HandleMmapPathCommand(ChatHandler* handler, char const* args)
{
- if (!MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId()))
+ if (!MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId(), handler->GetSession()->GetPlayer()->GetTerrainSwaps()))
{
handler->PSendSysMessage("NavMesh not loaded for current map.");
return true;
@@ -132,8 +132,8 @@ public:
handler->PSendSysMessage("gridloc [%i, %i]", gy, gx);
// calculate navmesh tile location
- dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId());
- dtNavMeshQuery const* navmeshquery = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMeshQuery(handler->GetSession()->GetPlayer()->GetMapId(), player->GetInstanceId());
+ dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId(), handler->GetSession()->GetPlayer()->GetTerrainSwaps());
+ dtNavMeshQuery const* navmeshquery = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMeshQuery(handler->GetSession()->GetPlayer()->GetMapId(), player->GetInstanceId(), handler->GetSession()->GetPlayer()->GetTerrainSwaps());
if (!navmesh || !navmeshquery)
{
handler->PSendSysMessage("NavMesh not loaded for current map.");
@@ -184,8 +184,8 @@ public:
static bool HandleMmapLoadedTilesCommand(ChatHandler* handler, char const* /*args*/)
{
uint32 mapid = handler->GetSession()->GetPlayer()->GetMapId();
- dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(mapid);
- dtNavMeshQuery const* navmeshquery = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMeshQuery(mapid, handler->GetSession()->GetPlayer()->GetInstanceId());
+ dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(mapid, handler->GetSession()->GetPlayer()->GetTerrainSwaps());
+ dtNavMeshQuery const* navmeshquery = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMeshQuery(mapid, handler->GetSession()->GetPlayer()->GetInstanceId(), handler->GetSession()->GetPlayer()->GetTerrainSwaps());
if (!navmesh || !navmeshquery)
{
handler->PSendSysMessage("NavMesh not loaded for current map.");
@@ -215,7 +215,7 @@ public:
MMAP::MMapManager* manager = MMAP::MMapFactory::createOrGetMMapManager();
handler->PSendSysMessage(" %u maps loaded with %u tiles overall", manager->getLoadedMapsCount(), manager->getLoadedTilesCount());
- dtNavMesh const* navmesh = manager->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId());
+ dtNavMesh const* navmesh = manager->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId(), handler->GetSession()->GetPlayer()->GetTerrainSwaps());
if (!navmesh)
{
handler->PSendSysMessage("NavMesh not loaded for current map.");
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index c22edf52dd3..5af9b150572 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -1279,10 +1279,13 @@ public:
uint32 phase = (uint32)atoi((char*)args);
Unit* target = handler->getSelectedUnit();
- if (target)
- target->SetInPhase(phase, true, !target->IsInPhase(phase));
- else
- handler->GetSession()->GetPlayer()->SetInPhase(phase, true, !handler->GetSession()->GetPlayer()->IsInPhase(phase));
+ if (!target)
+ target = handler->GetSession()->GetPlayer();
+
+ target->SetInPhase(phase, true, !target->IsInPhase(phase));
+
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ target->ToPlayer()->SendUpdatePhasing();
return true;
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 70086c94988..9ee32d0c6e5 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -206,6 +206,7 @@ public:
{ "model", rbac::RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "", NULL },
{ "movetype", rbac::RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "", NULL },
{ "phase", rbac::RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "", NULL },
+ { "phasegroup", rbac::RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseGroup, "", NULL },
{ "spawndist", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "", NULL },
{ "spawntime", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
{ "data", rbac::RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "", NULL },
@@ -285,9 +286,6 @@ public:
return false;
}
- for (auto phase : chr->GetPhases())
- creature->SetInPhase(phase, false, true);
-
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask());
ObjectGuid::LowType db_guid = creature->GetDBTableGUIDLow();
@@ -1100,7 +1098,37 @@ public:
}
//npc phase handling
- //change phase of creature or pet
+ //change phase of creature
+ static bool HandleNpcSetPhaseGroup(ChatHandler* handler, char const* args)
+ {
+ if (!*args)
+ return false;
+
+ uint32 phaseGroupId = (uint32)atoi((char*)args);
+
+ Creature* creature = handler->getSelectedCreature();
+ if (!creature || creature->IsPet())
+ {
+ handler->SendSysMessage(LANG_SELECT_CREATURE);
+ handler->SetSentErrorMessage(true);
+ 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();
+ creature->SetDBPhase(-int(phaseGroupId));
+
+ creature->SaveToDB();
+
+ return true;
+ }
+
+ //npc phase handling
+ //change phase of creature
static bool HandleNpcSetPhaseCommand(ChatHandler* handler, char const* args)
{
if (!*args)
@@ -1109,17 +1137,18 @@ public:
uint32 phase = (uint32) atoi((char*)args);
Creature* creature = handler->getSelectedCreature();
- if (!creature)
+ if (!creature || creature->IsPet())
{
handler->SendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
return false;
}
- creature->SetInPhase(phase, true, !creature->IsInPhase(phase));
+ creature->ClearPhases();
+ creature->SetInPhase(phase, true, true);
+ creature->SetDBPhase(phase);
- if (!creature->IsPet())
- creature->SaveToDB();
+ creature->SaveToDB();
return true;
}
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index 99cec7bed95..78f23ceab25 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -1104,10 +1104,10 @@ public:
static bool HandleReloadPhaseDefinitionsCommand(ChatHandler* handler, const char* /*args*/)
{
- TC_LOG_INFO("misc", "Reloading phase_definitions table...");
- sObjectMgr->LoadPhaseDefinitions();
+ TC_LOG_INFO("misc", "Reloading terrain_phase_info table...");
+ sObjectMgr->LoadTerrainPhaseInfo();
sWorld->UpdatePhaseDefinitions();
- handler->SendGlobalGMSysMessage("Phase Definitions reloaded.");
+ handler->SendGlobalGMSysMessage("Terrain phase infos reloaded.");
return true;
}
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp
index 35b142e9e5e..a4e0ce3af61 100644
--- a/src/server/scripts/Commands/cs_wp.cpp
+++ b/src/server/scripts/Commands/cs_wp.cpp
@@ -682,8 +682,7 @@ public:
return false;
}
- for (auto phase : chr->GetPhases())
- wpCreature2->SetInPhase(phase, false, true);
+ wpCreature2->CopyPhaseFrom(chr);
wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask());
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells();
@@ -902,8 +901,7 @@ public:
return false;
}
- for (auto phase : chr->GetPhases())
- wpCreature->SetInPhase(phase, false, true);
+ wpCreature->CopyPhaseFrom(chr);
// Set "wpguid" column to the visual waypoint
stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID);
@@ -967,8 +965,7 @@ public:
return false;
}
- for (auto phase : chr->GetPhases())
- creature->SetInPhase(phase, false, true);
+ creature->CopyPhaseFrom(chr);
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask());
if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map))
@@ -1019,8 +1016,7 @@ public:
return false;
}
- for (auto phase : chr->GetPhases())
- creature->SetInPhase(phase, false, true);
+ creature->CopyPhaseFrom(chr);
creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask());
if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map))
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
index dd261d4014c..a8da4ff7438 100644
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp
@@ -172,8 +172,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId)
return true;
}
- for (auto phase : player->GetPhases())
- go->SetInPhase(phase, false, true);
+ go->CopyPhaseFrom(player);
go->SetRespawnTime(0);
@@ -209,8 +208,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId)
return true;
}
- for (auto phase : player->GetPhases())
- go->SetInPhase(phase, false, true);
+ go->CopyPhaseFrom(player);
go->SetRespawnTime(0);