diff options
| -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);          }      }  | 
