aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Corpse.cpp7
-rw-r--r--src/game/Corpse.h7
-rw-r--r--src/game/MapManager.cpp6
-rw-r--r--src/game/MovementHandler.cpp10
-rw-r--r--src/game/Object.h2
-rw-r--r--src/game/ObjectAccessor.cpp4
-rw-r--r--src/game/ObjectAccessor.h2
-rw-r--r--src/game/ObjectMgr.cpp6
-rw-r--r--src/game/Player.cpp4
9 files changed, 26 insertions, 22 deletions
diff --git a/src/game/Corpse.cpp b/src/game/Corpse.cpp
index 31cfb700d4b..83d21bb3b14 100644
--- a/src/game/Corpse.cpp
+++ b/src/game/Corpse.cpp
@@ -182,7 +182,7 @@ bool Corpse::LoadFromDB(uint32 guid, QueryResult *result, uint32 InstanceId)
return true;
}*/
-bool Corpse::LoadFromDB(uint32 guid, Field *fields, uint32 & mapId, uint32 & instanceId)
+bool Corpse::LoadFromDB(uint32 guid, Field *fields)
{
// 0 1 2 3 4 5 6 7 8 9
//result = CharacterDatabase.PQuery("SELECT position_x,position_y,position_z,orientation,map,data,time,corpse_type,instance,phaseMask FROM corpse WHERE guid = '%u'",guid);
@@ -199,9 +199,8 @@ bool Corpse::LoadFromDB(uint32 guid, Field *fields, uint32 & mapId, uint32 & in
return false;
}
- mapId = fields[4].GetUInt32();
- SetMapId(mapId);
- instanceId = fields[8].GetUInt32();
+ SetMapId(fields[4].GetUInt32());
+ SetInstanceId(fields[8].GetUInt32());
m_time = time_t(fields[6].GetUInt64());
m_type = CorpseType(fields[7].GetUInt32());
diff --git a/src/game/Corpse.h b/src/game/Corpse.h
index 8e6b43b9d3d..ee6556e3436 100644
--- a/src/game/Corpse.h
+++ b/src/game/Corpse.h
@@ -62,15 +62,17 @@ class Corpse : public WorldObject
void SaveToDB();
//bool LoadFromDB(uint32 guid, QueryResult *result, uint32 InstanceId);
- bool LoadFromDB(uint32 guid, Field *fields, uint32 & mapId, uint32 & instanceId);
+ bool LoadFromDB(uint32 guid, Field *fields);
void DeleteBonesFromWorld();
void DeleteFromDB();
- void SetMap (Map * map) {WorldObject::SetMap(map); m_mapId = map->GetId();}
+ void SetMap (Map * map) {WorldObject::SetMap(map); m_mapId = map->GetId(); SetInstanceId(map->GetInstanceId());}
// Used to check object existence in unloaded grids
uint32 GetMapId() const {return m_mapId;}
void SetMapId (uint32 id) {m_mapId = id;}
+ uint32 GetInstanceId() const {return m_instanceId;}
+ void SetInstanceId (uint32 id) {m_instanceId = id;}
uint64 const& GetOwnerGUID() const { return GetUInt64Value(CORPSE_FIELD_OWNER); }
@@ -101,6 +103,7 @@ class Corpse : public WorldObject
time_t m_time;
GridPair m_grid; // gride for corpse position for fast search
uint32 m_mapId; // map id for fast corpse check at packet requests and in other situations with unloaded map of corpse.
+ uint32 m_instanceId;
};
#endif
diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp
index 1645419fd4d..74405462749 100644
--- a/src/game/MapManager.cpp
+++ b/src/game/MapManager.cpp
@@ -117,10 +117,14 @@ MapManager::_createBaseMap(uint32 id)
{
m = new MapInstanced(id, i_gridCleanUpDelay);
}
- else
+ else if (entry)
{
m = new Map(id, i_gridCleanUpDelay, 0, 0);
}
+ else
+ {
+ assert(false);
+ }
i_maps[id] = m;
}
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp
index 5ec73f9cb48..85514353152 100644
--- a/src/game/MovementHandler.cpp
+++ b/src/game/MovementHandler.cpp
@@ -66,8 +66,6 @@ void WorldSession::HandleMoveWorldportAckOpcode()
GetPlayer()->SetSemaphoreTeleportFar(false);
- GetPlayer()->ResetMap();
-
// relocate the player to the teleport destination
Map * newMap = MapManager::Instance().CreateMap(loc.mapid, GetPlayer(), 0);
// the CanEnter checks are done in TeleporTo but conditions may change
@@ -75,19 +73,21 @@ void WorldSession::HandleMoveWorldportAckOpcode()
if (!newMap || !newMap->CanEnter(GetPlayer()))
{
sLog.outError("Map %d could not be created for player %d, porting player to homebind", loc.mapid, GetPlayer()->GetGUIDLow());
- GetPlayer()->RelocateToHomebind(loc.mapid);
- newMap = MapManager::Instance().CreateMap(loc.mapid, GetPlayer(), 0);
+ GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
+ return;
}
else
GetPlayer()->Relocate(loc.coord_x, loc.coord_y, loc.coord_z, loc.orientation);
+ GetPlayer()->ResetMap();
GetPlayer()->SetMap(newMap);
GetPlayer()->SendInitialPacketsBeforeAddToMap();
if(!GetPlayer()->GetMap()->Add(GetPlayer()))
{
sLog.outError("WORLD: failed to teleport player %s (%d) to map %d because of unknown reason!", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), loc.mapid);
- assert(false);
+ GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation());
+ return;
}
// battleground state prepare (in case join to BG), at relogin/tele player not invited
diff --git a/src/game/Object.h b/src/game/Object.h
index 0e5bcd25a09..e8f9d9aafd7 100644
--- a/src/game/Object.h
+++ b/src/game/Object.h
@@ -440,7 +440,7 @@ class TRINITY_DLL_SPEC WorldObject : public Object
void GetRandomPoint( float x, float y, float z, float distance, float &rand_x, float &rand_y, float &rand_z ) const;
virtual uint32 GetMapId() const { return m_currMap ? m_currMap->GetId() : 0; }
- uint32 GetInstanceId() const { return m_currMap ? m_currMap->GetInstanceId() : 0; }
+ virtual uint32 GetInstanceId() const { return m_currMap ? m_currMap->GetInstanceId() : 0; }
virtual void SetPhaseMask(uint32 newPhaseMask, bool update);
uint32 GetPhaseMask() const { return m_phaseMask; }
diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp
index b334ef8c5a8..cd58d564106 100644
--- a/src/game/ObjectAccessor.cpp
+++ b/src/game/ObjectAccessor.cpp
@@ -268,7 +268,7 @@ ObjectAccessor::RemoveCorpse(Corpse *corpse)
}
void
-ObjectAccessor::AddCorpse(Corpse *corpse, uint32 mapId, uint32 instanceId)
+ObjectAccessor::AddCorpse(Corpse *corpse)
{
assert(corpse && corpse->GetType() != CORPSE_BONES);
@@ -280,7 +280,7 @@ ObjectAccessor::AddCorpse(Corpse *corpse, uint32 mapId, uint32 instanceId)
CellPair cell_pair = Trinity::ComputeCellPair(corpse->GetPositionX(), corpse->GetPositionY());
uint32 cell_id = (cell_pair.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
- objmgr.AddCorpseCellData(mapId, cell_id, corpse->GetOwnerGUID(), instanceId);
+ objmgr.AddCorpseCellData(corpse->GetMapId(), cell_id, corpse->GetOwnerGUID(), corpse->GetInstanceId());
}
void
diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h
index 403470f9446..1941ccea30c 100644
--- a/src/game/ObjectAccessor.h
+++ b/src/game/ObjectAccessor.h
@@ -229,7 +229,7 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton<ObjectAccessor,
Corpse* GetCorpseForPlayerGUID(uint64 guid);
void RemoveCorpse(Corpse *corpse);
- void AddCorpse(Corpse *corpse, uint32 mapId, uint32 instanceId);
+ void AddCorpse(Corpse *corpse);
void AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* map);
Corpse* ConvertCorpseForPlayer(uint64 player_guid, bool insignia = false);
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index d249c60a175..7557c23d072 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -6483,16 +6483,14 @@ void ObjectMgr::LoadCorpses()
uint32 guid = fields[result->GetFieldCount()-1].GetUInt32();
- uint32 mapId;
- uint32 instanceId;
Corpse *corpse = new Corpse;
- if(!corpse->LoadFromDB(guid,fields,mapId,instanceId))
+ if(!corpse->LoadFromDB(guid,fields))
{
delete corpse;
continue;
}
- ObjectAccessor::Instance().AddCorpse(corpse,mapId,instanceId);
+ ObjectAccessor::Instance().AddCorpse(corpse);
++count;
}
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 613181ead72..a319bf4317e 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -4359,7 +4359,7 @@ void Player::CreateCorpse()
corpse->SaveToDB();
// register for player, but not show
- ObjectAccessor::Instance().AddCorpse(corpse, corpse->GetMapId(), corpse->GetInstanceId());
+ ObjectAccessor::Instance().AddCorpse(corpse);
}
void Player::SpawnCorpseBones()
@@ -19850,7 +19850,7 @@ bool Player::IsAtGroupRewardDistance(WorldObject const* pRewardSource) const
const WorldObject* player = GetCorpse();
if(!player || isAlive())
player = this;
-
+
if(player->GetMapId() != pRewardSource->GetMapId() || player->GetInstanceId() != pRewardSource->GetInstanceId())
return false;