aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/Player.cpp4
-rw-r--r--src/game/Traveller.h6
-rw-r--r--src/game/Unit.cpp11
-rw-r--r--src/game/Vehicle.cpp6
-rw-r--r--src/game/WaypointMovementGenerator.cpp2
5 files changed, 20 insertions, 9 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 4f931a24aad..117def75164 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -1835,6 +1835,7 @@ void Player::RemoveFromWorld()
///- Release charmed creatures, unsummon totems and remove pets/guardians
StopCastingCharm();
StopCastingBindSight();
+ UnsummonPetTemporaryIfAny();
sOutdoorPvPMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId);
}
@@ -16695,6 +16696,9 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
if(pet)
sLog.outDebug("RemovePet %u, %u, %u", pet->GetEntry(), mode, returnreagent);
+ if(pet->m_removed)
+ return;
+
if(returnreagent && (pet || m_temporaryUnsummonedPetNumber))
{
//returning of reagents only for players, so best done here
diff --git a/src/game/Traveller.h b/src/game/Traveller.h
index b5d0fb28ecc..e68aa3d6a32 100644
--- a/src/game/Traveller.h
+++ b/src/game/Traveller.h
@@ -63,11 +63,11 @@ template<class T>
inline uint32 Traveller<T>::GetTotalTrevelTimeTo(float x, float y, float z)
{
float dist = GetMoveDestinationTo(x,y,z);
- float speed = 0.001f;
- if (Speed() <= 0.0f)
+ float speed = Speed();;
+ if (speed <= 0.0f)
return 0xfffffffe; // almost infinity-unit should stop
else
- speed *= Speed(); // speed is in seconds so convert from second to millisecond
+ speed *= 0.001f; // speed is in seconds so convert from second to millisecond
return static_cast<uint32>(dist/speed);
}
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index b1946870a26..53b3d8cf569 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -8935,8 +8935,10 @@ void Unit::RemoveAllControlled()
sLog.outError("Unit %u is trying to release unit %u which is neither charmed nor owned by it", GetEntry(), target->GetEntry());
}
}
- if(GetPetGUID() != GetMinionGUID())
- sLog.outCrash("Unit %u is not able to release its summon " I64FMT, GetEntry(), GetMinionGUID());
+ if(GetPetGUID())
+ sLog.outCrash("Unit %u is not able to release its pet " I64FMT, GetEntry(), GetPetGUID());
+ if(GetMinionGUID())
+ sLog.outCrash("Unit %u is not able to release its minion " I64FMT, GetEntry(), GetMinionGUID());
if(GetCharmGUID())
sLog.outCrash("Unit %u is not able to release its charm " I64FMT, GetEntry(), GetCharmGUID());
}
@@ -12054,12 +12056,13 @@ void Unit::RemoveFromWorld()
if(IsInWorld())
{
- UnsummonAllTotems();
- RemoveAllControlled();
RemoveCharmAuras();
RemoveBindSightAuras();
RemoveNotOwnSingleTargetAuras();
+
ExitVehicle();
+ UnsummonAllTotems();
+ RemoveAllControlled();
if(m_NotifyListPos >= 0)
{
diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp
index fd1fbae5926..2a688dd254a 100644
--- a/src/game/Vehicle.cpp
+++ b/src/game/Vehicle.cpp
@@ -161,7 +161,11 @@ void Vehicle::RemoveAllPassengers()
if(passenger->GetTypeId() == TYPEID_UNIT && ((Creature*)passenger)->isVehicle())
((Vehicle*)passenger)->RemoveAllPassengers();
passenger->ExitVehicle();
- assert(!itr->second.passenger);
+ if(itr->second.passenger)
+ {
+ sLog.outCrash("Vehicle %u cannot remove passenger %u.", GetEntry(), itr->second.passenger->GetEntry());
+ assert(!itr->second.passenger);
+ }
}
}
diff --git a/src/game/WaypointMovementGenerator.cpp b/src/game/WaypointMovementGenerator.cpp
index cef7fd8d596..34be9d3179b 100644
--- a/src/game/WaypointMovementGenerator.cpp
+++ b/src/game/WaypointMovementGenerator.cpp
@@ -202,7 +202,7 @@ WaypointMovementGenerator<Creature>::Update(Creature &unit, const uint32 &diff)
MovementInform(unit);
unit.UpdateWaypointID(i_currentNode);
- unit.clearUnitState(UNIT_STAT_MOVING);
+ unit.clearUnitState(UNIT_STAT_ROAMING);
unit.Relocate(node->x, node->y, node->z);
}
}