aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2014-08-17 18:31:41 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2014-08-17 18:31:41 +0200
commitacfbb612045ec4cbddb5c13aa15518b2e9612af0 (patch)
tree88b79cad0a351a63fcfb01f6d31fbc839c5b95cb /src
parent2f5b8ade6cd3640a9d70890c32f572d4dd7f16d0 (diff)
parent8257338dc7bb0d69960568896b47fcca96aae94d (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp4
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp7
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp12
-rw-r--r--src/server/game/Entities/Transport/Transport.h4
-rw-r--r--src/server/shared/Database/QueryHolder.cpp8
-rw-r--r--src/server/shared/Database/QueryHolder.h8
6 files changed, 36 insertions, 7 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 584117e7666..ed39c3fd6b2 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -897,12 +897,14 @@ void Battleground::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac
Player* player = ObjectAccessor::FindPlayer(guid);
- // should remove spirit of redemption
if (player)
{
+ // should remove spirit of redemption
if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION))
player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
+ player->RemoveAurasByType(SPELL_AURA_MOUNTED);
+
if (!player->IsAlive()) // resurrect on exit
{
player->ResurrectPlayer(1.0f);
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index e5cbf2f3ac9..71e223527f3 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -143,7 +143,12 @@ void GameObject::AddToWorld()
// The state can be changed after GameObject::Create but before GameObject::AddToWorld
bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : (GetGoState() == GO_STATE_READY || IsTransport());
if (m_model)
- GetMap()->InsertGameObjectModel(*m_model);
+ {
+ if (Transport* trans = ToTransport())
+ trans->SetDelayedAddModelToMap();
+ else
+ GetMap()->InsertGameObjectModel(*m_model);
+ }
EnableCollision(toggledState);
WorldObject::AddToWorld();
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 0c22caed882..4d4b28d6082 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -35,7 +35,8 @@
Transport::Transport() : GameObject(),
_transportInfo(NULL), _isMoving(true), _pendingStop(false),
- _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), _passengerTeleportItr(_passengers.begin())
+ _triggeredArrivalEvent(false), _triggeredDepartureEvent(false),
+ _passengerTeleportItr(_passengers.begin()), _delayedAddModel(false)
{
m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION;
}
@@ -186,6 +187,14 @@ void Transport::Update(uint32 diff)
return; // Update more in new map thread
}
+ // Add model to map after we are fully done with moving maps
+ if (_delayedAddModel)
+ {
+ _delayedAddModel = false;
+ if (m_model)
+ GetMap()->InsertGameObjectModel(*m_model);
+ }
+
// Set position
_positionChangeTimer.Update(diff);
if (_positionChangeTimer.Passed())
@@ -635,7 +644,6 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl
}
Relocate(x, y, z, o);
- UpdateModelPosition();
GetMap()->AddToMap<Transport>(this);
return true;
}
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 7da8c11861c..6fd13e76034 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -95,6 +95,8 @@ class Transport : public GameObject, public TransportBase
void EnableMovement(bool enabled);
+ void SetDelayedAddModelToMap() { _delayedAddModel = true; }
+
TransportTemplate const* GetTransportTemplate() const { return _transportInfo; }
private:
@@ -123,6 +125,8 @@ class Transport : public GameObject, public TransportBase
PassengerSet _passengers;
PassengerSet::iterator _passengerTeleportItr;
PassengerSet _staticPassengers;
+
+ bool _delayedAddModel;
};
#endif
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index bd938561b50..f0dc3c96e4e 100644
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -166,8 +166,16 @@ void SQLQueryHolder::SetSize(size_t size)
m_queries.resize(size);
}
+SQLQueryHolderTask::~SQLQueryHolderTask()
+{
+ if (!m_executed)
+ delete m_holder;
+}
+
bool SQLQueryHolderTask::Execute()
{
+ m_executed = true;
+
if (!m_holder)
return false;
diff --git a/src/server/shared/Database/QueryHolder.h b/src/server/shared/Database/QueryHolder.h
index 273980c3ac5..39e51b591c5 100644
--- a/src/server/shared/Database/QueryHolder.h
+++ b/src/server/shared/Database/QueryHolder.h
@@ -47,14 +47,16 @@ class SQLQueryHolderTask : public SQLOperation
private:
SQLQueryHolder* m_holder;
QueryResultHolderPromise m_result;
+ bool m_executed;
public:
SQLQueryHolderTask(SQLQueryHolder* holder)
- : m_holder(holder) { };
+ : m_holder(holder), m_executed(false) { }
+
+ ~SQLQueryHolderTask();
bool Execute() override;
QueryResultHolderFuture GetFuture() { return m_result.get_future(); }
-
};
-#endif \ No newline at end of file
+#endif