diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Player.cpp | 4 | ||||
-rw-r--r-- | src/game/Traveller.h | 6 | ||||
-rw-r--r-- | src/game/Unit.cpp | 11 | ||||
-rw-r--r-- | src/game/Vehicle.cpp | 6 | ||||
-rw-r--r-- | src/game/WaypointMovementGenerator.cpp | 2 |
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); } } |