void WorldSession::HandleEjectPassenger(WorldPacket &recv_data) { recv_data.hexlike(); ObjectGuid guid; recv_data >> guid; DEBUG_LOG("WORLD: Received CMSG_EJECT_PASSENGER %s",guid.GetString().c_str()); Unit* passenger = ObjectAccessor::GetUnit(*GetPlayer(), guid); if (!passenger) return; VehicleKit* pVehicle = passenger->GetVehicle(); if (!pVehicle || ((pVehicle != GetPlayer()->GetVehicleKit()) && !(pVehicle->GetBase()->GetVehicleInfo()->GetEntry()->m_flags & (VEHICLE_FLAG_ACCESSORY)))) { sLog.outError("WorldSession::HandleEjectPassenger %s try eject %s, but not may do this!",GetPlayer()->GetObjectGuid().GetString().c_str(),guid.GetString().c_str()); return; } passenger->ExitVehicle(); // eject and remove creatures of player mounts if (passenger->GetTypeId() == TYPEID_UNIT) { if (((Creature*)passenger)->IsTemporarySummon()) { // Fixme: delay must be calculated not from this, but from creature template parameters (off traders ...?). uint32 delay = passenger->GetObjectGuid().IsVehicle() ? 1000: 60000; ((TemporarySummon*)passenger)->UnSummon(delay); } else passenger->AddObjectToRemoveList(); } }
void WorldSession::HandleEjectPasenger(WorldPacket &recv_data) { DEBUG_LOG("WORLD: Received CMSG_CONTROLLER_EJECT_PASSENGER"); recv_data.hexlike(); ObjectGuid guid; recv_data >> guid; Unit* passenger = ObjectAccessor::GetUnit(*GetPlayer(), guid); if (!passenger) return; if (!passenger->GetVehicle() || passenger->GetVehicle() != GetPlayer()->GetVehicleKit()) return; passenger->ExitVehicle(); // eject and remove creatures of player mounts if (passenger->GetTypeId() == TYPEID_UNIT) passenger->AddObjectToRemoveList(); }