Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- a/src/game/GridNotifiers.cpp
- +++ b/src/game/GridNotifiers.cpp
- @@ -42,18 +42,18 @@ VisibleNotifier::Notify()
- Player& player = *i_camera.GetOwner();
- // at this moment i_clientGUIDs have guids that not iterate at grid level checks
- // but exist one case when this possible and object not out of range: transports
- - if(Transport* transport = player.GetTransport())
- - {
- - for(Transport::PlayerSet::const_iterator itr = transport->GetPassengers().begin();itr!=transport->GetPassengers().end();++itr)
- - {
- - if (i_clientGUIDs.find((*itr)->GetGUID()) != i_clientGUIDs.end())
- - {
- - // ignore far sight case
- - (*itr)->UpdateVisibilityOf(*itr, &player);
- - player.UpdateVisibilityOf(&player, *itr, i_data, i_visibleNow);
- - i_clientGUIDs.erase((*itr)->GetGUID());
- - }
- - }
- + if(Transport* transport = player.GetTransport())
- + {
- + for(Transport::PlayerSet::const_iterator itr = transport->GetPlayerPassengers().begin();itr!=transport->GetPlayerPassengers().end();++itr)
- + {
- + if (i_clientGUIDs.find((*itr)->GetGUID()) != i_clientGUIDs.end())
- + {
- + // ignore far sight case
- + (*itr)->UpdateVisibilityOf(*itr, &player);
- + player.UpdateVisibilityOf(&player, *itr, i_data, i_visibleNow);
- + i_clientGUIDs.erase((*itr)->GetGUID());
- + }
- + }
- }
- // generate outOfRange for not iterate objects
- --- a/src/game/Level2.cpp
- +++ b/src/game/Level2.cpp
- @@ -37,6 +37,7 @@
- #include "GMTicketMgr.h"
- #include "WaypointManager.h"
- #include "Util.h"
- +#include "Transports.h"
- #include <cctype>
- #include <iostream>
- #include <fstream>
- @@ -1113,6 +1114,18 @@ bool ChatHandler::HandleNpcAddCommand(co
- return false;
- }
- + if (chr->GetTransport())
- + {
- + pCreature->SetTransport(chr->GetTransport());
- + pCreature->m_movementInfo.SetTransportData(ObjectGuid(HIGHGUID_MO_TRANSPORT, chr->GetTransport()->GetGUID()), chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO(), 0, -1);
- + map->CreatureRelocation(pCreature, chr->GetTransport()->GetPositionX() + chr->GetTransOffsetX(), chr->GetTransport()->GetPositionY() + chr->GetTransOffsetY(), chr->GetTransport()->GetPositionZ() + chr->GetTransOffsetZ(), chr->GetTransOffsetO());
- + chr->GetTransport()->AddCreaturePassenger(pCreature);
- + pCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn());
- + pCreature->AIM_Initialize();
- + map->Add(pCreature);
- + return true;
- + }
- +
- pCreature->Relocate(x,y,z,o);
- if (!pCreature->IsPositionValid())
- --- a/src/game/Map.cpp
- +++ b/src/game/Map.cpp
- @@ -1361,7 +1361,7 @@ void Map::SendInitSelf( Player * player
- // build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map
- if(Transport* transport = player->GetTransport())
- {
- - for(Transport::PlayerSet::const_iterator itr = transport->GetPassengers().begin();itr!=transport->GetPassengers().end();++itr)
- + for(Transport::PlayerSet::const_iterator itr = transport->GetPlayerPassengers().begin();itr!=transport->GetPlayerPassengers().end();++itr)
- {
- if(player!=(*itr) && player->HaveAtClient(*itr))
- {
- --- a/src/game/ObjectMgr.cpp
- +++ b/src/game/ObjectMgr.cpp
- @@ -1097,9 +1097,9 @@ void ObjectMgr::LoadCreatures()
- uint32 count = 0;
- // 0 1 2 3
- QueryResult *result = WorldDatabase.Query("SELECT creature.guid, id, map, modelid,"
- - // 4 5 6 7 8 9 10 11
- - "equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, spawndist, currentwaypoint,"
- - // 12 13 14 15 16 17 18 19
- + // 4 5 6 7 8 9 10 11 12 13 14 15 16
- + "equipment_id, position_x, position_y, position_z, orientation, trans_x, trans_y, trans_z, trans_o, transguid, spawntimesecs, spawndist, currentwaypoint,"
- + // 17 18 19 20 21 22 23 24
- "curhealth, curmana, DeathState, MovementType, spawnMask, phaseMask, event, pool_entry "
- "FROM creature LEFT OUTER JOIN game_event_creature ON creature.guid = game_event_creature.guid "
- "LEFT OUTER JOIN pool_creature ON creature.guid = pool_creature.guid");
- @@ -1158,17 +1158,22 @@ void ObjectMgr::LoadCreatures()
- data.posY = fields[ 6].GetFloat();
- data.posZ = fields[ 7].GetFloat();
- data.orientation = fields[ 8].GetFloat();
- - data.spawntimesecs = fields[ 9].GetUInt32();
- - data.spawndist = fields[10].GetFloat();
- - data.currentwaypoint= fields[11].GetUInt32();
- - data.curhealth = fields[12].GetUInt32();
- - data.curmana = fields[13].GetUInt32();
- - data.is_dead = fields[14].GetBool();
- - data.movementType = fields[15].GetUInt8();
- - data.spawnMask = fields[16].GetUInt8();
- - data.phaseMask = fields[17].GetUInt16();
- - int16 gameEvent = fields[18].GetInt16();
- - int16 PoolId = fields[19].GetInt16();
- + data.trans_x = fields[ 9].GetFloat();
- + data.trans_y = fields[10].GetFloat();
- + data.trans_z = fields[11].GetFloat();
- + data.trans_o = fields[12].GetFloat();
- + data.transguid = fields[13].GetUInt32();
- + data.spawntimesecs = fields[14].GetUInt32();
- + data.spawndist = fields[15].GetFloat();
- + data.currentwaypoint= fields[16].GetUInt32();
- + data.curhealth = fields[17].GetUInt32();
- + data.curmana = fields[18].GetUInt32();
- + data.is_dead = fields[19].GetBool();
- + data.movementType = fields[20].GetUInt8();
- + data.spawnMask = fields[21].GetUInt8();
- + data.phaseMask = fields[22].GetUInt16();
- + int16 gameEvent = fields[23].GetInt16();
- + int16 PoolId = fields[24].GetInt16();
- MapEntry const* mapEntry = sMapStore.LookupEntry(data.mapid);
- if(!mapEntry)
- --- a/src/game/Creature.h
- +++ b/src/game/Creature.h
- @@ -196,6 +196,11 @@ struct CreatureData
- float posY;
- float posZ;
- float orientation;
- + float trans_x;
- + float trans_y;
- + float trans_z;
- + float trans_o;
- + uint32 transguid;
- uint32 spawntimesecs;
- float spawndist;
- uint32 currentwaypoint;
- --- a/src/game/Player.h
- +++ b/src/game/Player.h
- @@ -2221,17 +2221,6 @@ class MANGOS_DLL_SPEC Player : public Un
- ObjectGuid const& GetFarSightGuid() const { return GetGuidValue(PLAYER_FARSIGHT); }
- - // Transports
- - Transport * GetTransport() const { return m_transport; }
- - void SetTransport(Transport * t) { m_transport = t; }
- -
- - float GetTransOffsetX() const { return m_movementInfo.GetTransportPos()->x; }
- - float GetTransOffsetY() const { return m_movementInfo.GetTransportPos()->y; }
- - float GetTransOffsetZ() const { return m_movementInfo.GetTransportPos()->z; }
- - float GetTransOffsetO() const { return m_movementInfo.GetTransportPos()->o; }
- - uint32 GetTransTime() const { return m_movementInfo.GetTransportTime(); }
- - int8 GetTransSeat() const { return m_movementInfo.GetTransportSeat(); }
- -
- uint32 GetSaveTimer() const { return m_nextSave; }
- void SetSaveTimer(uint32 timer) { m_nextSave = timer; }
- @@ -2555,10 +2544,6 @@ class MANGOS_DLL_SPEC Player : public Un
- float m_rest_bonus;
- RestType rest_type;
- ////////////////////Rest System/////////////////////
- -
- - // Transports
- - Transport * m_transport;
- -
- uint32 m_resetTalentsCost;
- time_t m_resetTalentsTime;
- uint32 m_usedTalentCount;
- --- a/src/game/Unit.h
- +++ b/src/game/Unit.h
- @@ -35,6 +35,7 @@
- #include "Path.h"
- #include "WorldPacket.h"
- #include "Timer.h"
- +#include "Transports.h"
- #include <list>
- enum SpellInterruptFlags
- @@ -1415,6 +1416,16 @@ class MANGOS_DLL_SPEC Unit : public Worl
- void NearTeleportTo(float x, float y, float z, float orientation, bool casting = false);
- + Transport* GetTransport() const { return m_transport; }
- + void SetTransport(Transport* t) { m_transport = t; }
- +
- + float GetTransOffsetX() const { return m_movementInfo.GetTransportPos()->x; }
- + float GetTransOffsetY() const { return m_movementInfo.GetTransportPos()->y; }
- + float GetTransOffsetZ() const { return m_movementInfo.GetTransportPos()->z; }
- + float GetTransOffsetO() const { return m_movementInfo.GetTransportPos()->o; }
- + uint32 GetTransTime() const { return m_movementInfo.GetTransportTime(); }
- + int8 GetTransSeat() const { return m_movementInfo.GetTransportSeat(); }
- +
- void MonsterMove(float x, float y, float z, uint32 transitTime);
- void MonsterMoveWithSpeed(float x, float y, float z, uint32 transitTime = 0);
- @@ -1962,6 +1973,8 @@ class MANGOS_DLL_SPEC Unit : public Worl
- GuardianPetList m_guardianPets;
- + Transport* m_transport;
- +
- uint64 m_TotemSlot[MAX_TOTEM_SLOT];
- };
- --- a/src/game/Creature.cpp
- +++ b/src/game/Creature.cpp
- @@ -136,6 +136,11 @@ Creature::~Creature()
- {
- CleanupsBeforeDelete();
- + if (GetTransport())
- + {
- + GetTransport()->RemoveCreaturePassenger(this);
- + }
- +
- m_vendorItemCounts.clear();
- delete i_AI;
- @@ -924,6 +929,7 @@ void Creature::SaveToDB(uint32 mapid, ui
- CreatureData& data = sObjectMgr.NewOrExistCreatureData(m_DBTableGuid);
- uint32 displayId = GetNativeDisplayId();
- + uint32 transGUID = (GetTransport()) ? GetTransport()->GetGUID() : 0;
- // check if it's a custom model and if not, use 0 for displayId
- CreatureInfo const *cinfo = GetCreatureInfo();
- @@ -966,6 +972,11 @@ void Creature::SaveToDB(uint32 mapid, ui
- data.posY = GetPositionY();
- data.posZ = GetPositionZ();
- data.orientation = GetOrientation();
- + data.trans_x = GetTransOffsetX();
- + data.trans_y = GetTransOffsetY();
- + data.trans_y = GetTransOffsetZ();
- + data.trans_o = GetTransOffsetO();
- + data.transguid = transGUID;
- data.spawntimesecs = m_respawnDelay;
- // prevent add data integrity problems
- data.spawndist = GetDefaultMovementType()==IDLE_MOTION_TYPE ? 0 : m_respawnradius;
- @@ -996,6 +1007,11 @@ void Creature::SaveToDB(uint32 mapid, ui
- << GetPositionY() << ","
- << GetPositionZ() << ","
- << GetOrientation() << ","
- + << GetTransOffsetX() << ","
- + << GetTransOffsetY() << ","
- + << GetTransOffsetZ() << ","
- + << GetTransOffsetO() << ","
- + << transGUID << ","
- << m_respawnDelay << "," //respawn time
- << (float) m_respawnradius << "," //spawn distance (float)
- << (uint32) (0) << "," //currentwaypoint
- @@ -1164,7 +1180,32 @@ bool Creature::LoadFromDB(uint32 guid, M
- if(!Create(guid, map, data->phaseMask, data->id, team, data))
- return false;
- - Relocate(data->posX, data->posY, data->posZ, data->orientation);
- + if (data->transguid > 0)
- + {
- + m_movementInfo.SetTransportData(ObjectGuid(HIGHGUID_MO_TRANSPORT, data->transguid), data->trans_x, data->trans_y, data->trans_z, data->trans_o, 0, -1);
- + for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter)
- + {
- + if( (*iter)->GetGUIDLow() == data->transguid)
- + {
- + SetTransport(*iter);
- + GetTransport()->AddCreaturePassenger(this);
- + SetLocationMapId(GetTransport()->GetMapId());
- + Relocate(GetTransport()->GetPositionX() + data->trans_x, GetTransport()->GetPositionY() + data->trans_y, GetTransport()->GetPositionZ() + data->trans_z, data->trans_o);
- + break;
- + }
- + }
- + }
- + else if (GetTransport())
- + {
- + m_movementInfo.SetTransportData(ObjectGuid(HIGHGUID_MO_TRANSPORT, GetTransport()->GetGUID()), GetTransOffsetX(), GetTransOffsetY(), GetTransOffsetZ(), GetTransOffsetO(), 0, -1);
- + GetTransport()->AddCreaturePassenger(this);
- + SetLocationMapId(GetTransport()->GetMapId());
- + Relocate(GetTransport()->GetPositionX() + GetTransOffsetX(), GetTransport()->GetPositionY() + GetTransOffsetY(), GetTransport()->GetPositionZ() + GetTransOffsetZ(), GetTransOffsetO());
- + }
- + else
- + {
- + Relocate(data->posX, data->posY, data->posZ, data->orientation);
- + }
- if(!IsPositionValid())
- {
- --- a/src/game/Transports.cpp
- +++ b/src/game/Transports.cpp
- @@ -23,6 +23,7 @@
- #include "ObjectMgr.h"
- #include "ObjectGuid.h"
- #include "Path.h"
- +#include "Unit.h"
- #include "WorldPacket.h"
- #include "DBCStores.h"
- @@ -431,7 +432,7 @@ void Transport::TeleportTransport(uint32
- Map const* oldMap = GetMap();
- Relocate(x, y, z);
- - for(PlayerSet::iterator itr = m_passengers.begin(); itr != m_passengers.end();)
- + for(PlayerSet::iterator itr = m_player_passengers.begin(); itr != m_player_passengers.end();)
- {
- PlayerSet::iterator it2 = itr;
- ++itr;
- @@ -439,7 +440,7 @@ void Transport::TeleportTransport(uint32
- Player *plr = *it2;
- if(!plr)
- {
- - m_passengers.erase(it2);
- + m_player_passengers.erase(it2);
- continue;
- }
- @@ -458,6 +459,19 @@ void Transport::TeleportTransport(uint32
- //player far teleport would try to create same instance, but we need it NOW for transport...
- //correct me if I'm wrong O.o
- Map * newMap = sMapMgr.CreateMap(newMapid, this);
- + for (CreatureSet::iterator itr = m_creature_passengers.begin(); itr != m_creature_passengers.end(); ++itr)
- + {
- + if(!(*itr))
- + {
- + m_creature_passengers.erase(itr);
- + continue;
- + }
- +
- + (*itr)->RemoveFromWorld();
- + (*itr)->SetMap(newMap);
- + newMap->CreatureRelocation(*itr, GetPositionX() + x, GetPositionY() + y, GetPositionZ() + z, (*itr)->GetOrientation());
- + newMap->Add(*itr);
- + }
- SetMap(newMap);
- if(oldMap != newMap)
- @@ -467,23 +481,66 @@ void Transport::TeleportTransport(uint32
- }
- }
- -bool Transport::AddPassenger(Player* passenger)
- +bool Transport::AddPlayerPassenger(Player* passenger)
- {
- - if (m_passengers.find(passenger) == m_passengers.end())
- - {
- - DETAIL_LOG("Player %s boarded transport %s.", passenger->GetName(), GetName());
- - m_passengers.insert(passenger);
- - }
- + if (m_player_passengers.find(passenger) != m_player_passengers.end())
- + return false;
- +
- + m_player_passengers.insert(passenger);
- +
- + DEBUG_LOG("Player %s boarded transport %s.", passenger->GetName(), GetName());
- +
- return true;
- }
- -bool Transport::RemovePassenger(Player* passenger)
- +bool Transport::AddCreaturePassenger(Creature* passenger)
- {
- - if (m_passengers.erase(passenger))
- - DETAIL_LOG("Player %s removed from transport %s.", passenger->GetName(), GetName());
- + if (m_creature_passengers.find(passenger) != m_creature_passengers.end())
- + return false;
- +
- + m_creature_passengers.insert(passenger);
- +
- + DEBUG_LOG("Creature %s boarded transport %s.", passenger->GetName(), GetName());
- +
- return true;
- }
- +bool Transport::RemovePlayerPassenger(Player* passenger)
- +{
- + if (!m_player_passengers.erase(passenger))
- + return false;
- +
- + DEBUG_LOG("Player %s removed from transport %s.", passenger->GetName(), GetName());
- +
- + return true;
- +}
- +
- +bool Transport::RemoveCreaturePassenger(Creature* passenger)
- +{
- + if (!m_creature_passengers.erase(passenger))
- + return false;
- +
- + DEBUG_LOG("Creature %s removed from transport %s.", passenger->GetName(), GetName());
- +
- + return true;
- +}
- +
- +void Transport::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target)
- +{
- + for (CreatureSet::const_iterator itr = m_creature_passengers.begin(); itr != m_creature_passengers.end(); ++itr)
- + {
- + if (!(*itr))
- + {
- + m_creature_passengers.erase(itr);
- + continue;
- + }
- +
- + (*itr)->BuildCreateUpdateBlockForPlayer(data, target);
- + }
- +
- + Object::BuildCreateUpdateBlockForPlayer(data, target);
- +}
- +
- void Transport::Update(uint32 /*p_time*/)
- {
- if (m_WayPoints.size() <= 1)
- @@ -519,6 +576,17 @@ void Transport::Update(uint32 /*p_time*/
- }
- */
- + for (CreatureSet::const_iterator itr = m_creature_passengers.begin(); itr != m_creature_passengers.end(); itr++)
- + {
- + if (!(*itr))
- + {
- + m_creature_passengers.erase(itr);
- + continue;
- + }
- +
- + (*itr)->GetMap()->CreatureRelocation(*itr, m_curr->second.x + (*itr)->GetTransOffsetX(), m_curr->second.y + (*itr)->GetTransOffsetY(), m_curr->second.z + (*itr)->GetTransOffsetZ(), (*itr)->GetTransOffsetO());
- + }
- +
- m_nextNodeTime = m_curr->first;
- if (m_curr == m_WayPoints.begin())
- --- a/src/game/Transports.h
- +++ b/src/game/Transports.h
- @@ -33,11 +33,18 @@ class Transport : public GameObject
- bool Create(uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress, uint32 dynflags);
- bool GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids);
- void Update(uint32 p_time);
- - bool AddPassenger(Player* passenger);
- - bool RemovePassenger(Player* passenger);
- + bool AddPlayerPassenger(Player* passenger);
- + bool AddCreaturePassenger(Creature* passenger);
- + bool RemovePlayerPassenger(Player* passenger);
- + bool RemoveCreaturePassenger(Creature* passenger);
- typedef std::set<Player*> PlayerSet;
- - PlayerSet const& GetPassengers() const { return m_passengers; }
- + typedef std::set<Creature*> CreatureSet;
- +
- + PlayerSet const& GetPlayerPassengers() const { return m_player_passengers; }
- + CreatureSet const& GetCreaturePassengers() const { return m_creature_passengers; }
- +
- + void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target);
- private:
- struct WayPoint
- @@ -65,7 +72,8 @@ class Transport : public GameObject
- uint32 m_pathTime;
- uint32 m_timer;
- - PlayerSet m_passengers;
- + PlayerSet m_player_passengers;
- + CreatureSet m_creature_passengers;
- public:
- WayPointMap m_WayPoints;
- --- a/src/game/Unit.cpp
- +++ b/src/game/Unit.cpp
- @@ -48,6 +48,7 @@
- #include "Traveller.h"
- #include "VMapFactory.h"
- #include "MovementGenerator.h"
- +#include "Transports.h"
- #include <math.h>
- #include <stdarg.h>
- @@ -230,6 +231,8 @@ Unit::Unit()
- m_CombatTimer = 0;
- m_lastManaUseTimer = 0;
- + m_transport = NULL;
- +
- //m_victimThreat = 0.0f;
- for (int i = 0; i < MAX_SPELL_SCHOOL; ++i)
- m_threatModifier[i] = 1.0f;
- @@ -344,8 +347,13 @@ void Unit::SendMonsterMove(float NewPosX
- float moveTime = (float)Time;
- - WorldPacket data( SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) );
- + WorldPacket data( (m_transport) ? SMSG_MONSTER_MOVE_TRANSPORT : SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) );
- data << GetPackGUID();
- + if (m_transport)
- + {
- + data.appendPackGUID(m_transport->GetGUID());
- + data << uint8(0);
- + }
- data << uint8(0); // new in 3.1 bool, used to toggle MOVEFLAG2_UNK4 = 0x0040 on client side
- data << GetPositionX() << GetPositionY() << GetPositionZ();
- data << uint32(getMSTime());
- @@ -377,7 +385,14 @@ void Unit::SendMonsterMove(float NewPosX
- data << uint32(flags); // splineflags
- data << uint32(moveTime); // Time in between points
- data << uint32(1); // 1 single waypoint
- - data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B
- + if (m_transport)
- + {
- + data << m_movementInfo.GetTransportPos()->x << m_movementInfo.GetTransportPos()->y << m_movementInfo.GetTransportPos()->z;
- + }
- + else
- + {
- + data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B
- + }
- va_end(vargs);
- --- a/src/game/MovementHandler.cpp
- +++ b/src/game/MovementHandler.cpp
- @@ -266,24 +266,24 @@ void WorldSession::HandleMovementOpcodes
- }
- // if we boarded a transport, add us to it
- - if (plMover && !plMover->m_transport)
- + if (plMover && !plMover->GetTransport())
- {
- // elevators also cause the client to send MOVEFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
- for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter)
- {
- if ((*iter)->GetObjectGuid() == movementInfo.GetTransportGuid())
- {
- - plMover->m_transport = (*iter);
- - (*iter)->AddPassenger(plMover);
- + plMover->SetTransport(*iter);
- + (*iter)->AddPlayerPassenger(plMover);
- break;
- }
- }
- }
- }
- - else if (plMover && plMover->m_transport) // if we were on a transport, leave
- + else if (plMover && plMover->GetTransport()) // if we were on a transport, leave
- {
- - plMover->m_transport->RemovePassenger(plMover);
- - plMover->m_transport = NULL;
- + plMover->GetTransport()->RemovePlayerPassenger(plMover);
- + plMover->SetTransport(NULL);
- movementInfo.ClearTransportData();
- }
- --- a/src/game/Player.cpp
- +++ b/src/game/Player.cpp
- @@ -407,8 +407,6 @@ UpdateMask Player::updateVisualBits;
- Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputationMgr(this), m_mover(this), m_camera(this)
- {
- - m_transport = 0;
- -
- m_speakTime = 0;
- m_speakCount = 0;
- @@ -621,9 +619,9 @@ Player::~Player ()
- delete PlayerTalkClass;
- - if (m_transport)
- - {
- - m_transport->RemovePassenger(this);
- + if (GetTransport())
- + {
- + GetTransport()->RemovePlayerPassenger(this);
- }
- for(size_t x = 0; x < ItemSetEff.size(); x++)
- @@ -1749,10 +1747,10 @@ bool Player::TeleportTo(uint32 mapid, fl
- }
- // if we were on a transport, leave
- - if (!(options & TELE_TO_NOT_LEAVE_TRANSPORT) && m_transport)
- - {
- - m_transport->RemovePassenger(this);
- - m_transport = NULL;
- + if (!(options & TELE_TO_NOT_LEAVE_TRANSPORT) && GetTransport())
- + {
- + GetTransport()->RemovePlayerPassenger(this);
- + SetTransport(NULL);
- m_movementInfo.ClearTransportData();
- }
- @@ -1769,7 +1767,7 @@ bool Player::TeleportTo(uint32 mapid, fl
- // reset movement flags at teleport, because player will continue move with these flags after teleport
- m_movementInfo.SetMovementFlags(MOVEFLAG_NONE);
- - if ((GetMapId() == mapid) && (!m_transport))
- + if ((GetMapId() == mapid) && !GetTransport())
- {
- //lets reset far teleport flag if it wasn't reset during chained teleports
- SetSemaphoreTeleportFar(false);
- @@ -1877,15 +1875,15 @@ bool Player::TeleportTo(uint32 mapid, fl
- // send transfer packets
- WorldPacket data(SMSG_TRANSFER_PENDING, (4+4+4));
- data << uint32(mapid);
- - if (m_transport)
- - {
- - data << uint32(m_transport->GetEntry());
- + if (GetTransport())
- + {
- + data << uint32(GetTransport()->GetEntry());
- data << uint32(GetMapId());
- }
- GetSession()->SendPacket(&data);
- data.Initialize(SMSG_NEW_WORLD, (20));
- - if (m_transport)
- + if (GetTransport())
- {
- data << uint32(mapid);
- data << float(m_movementInfo.GetTransportPos()->x);
- @@ -1915,7 +1913,7 @@ bool Player::TeleportTo(uint32 mapid, fl
- float final_z = z;
- float final_o = orientation;
- - if (m_transport)
- + if (GetTransport())
- {
- final_x += m_movementInfo.GetTransportPos()->x;
- final_y += m_movementInfo.GetTransportPos()->y;
- @@ -15201,14 +15199,14 @@ bool Player::LoadFromDB( uint32 guid, Sq
- break;
- }
- - m_transport = *iter;
- - m_transport->AddPassenger(this);
- - SetLocationMapId(m_transport->GetMapId());
- - break;
- - }
- - }
- -
- - if(!m_transport)
- + SetTransport(*iter);
- + GetTransport()->AddPlayerPassenger(this);
- + SetLocationMapId(GetTransport()->GetMapId());
- + break;
- + }
- + }
- +
- + if(!GetTransport())
- {
- sLog.outError("Player (guidlow %d) have problems with transport guid (%u). Teleport to default race/class locations.",
- guid,transGUID);
- @@ -16736,8 +16734,8 @@ void Player::SaveToDB()
- ss << finiteAlways(m_movementInfo.GetTransportPos()->y) << ", ";
- ss << finiteAlways(m_movementInfo.GetTransportPos()->z) << ", ";
- ss << finiteAlways(m_movementInfo.GetTransportPos()->o) << ", ";
- - if (m_transport)
- - ss << m_transport->GetGUIDLow();
- + if (GetTransport())
- + ss << GetTransport()->GetGUIDLow();
- else
- ss << "0";
- ss << ", ";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement