// Update the global position of a passenger void TransportBase::UpdateGlobalPositionOf(ObjectGuid const& passengerGuid, Position const& pos) const { WorldObject* passenger = GetOwner()->GetMap()->GetWorldObject(passengerGuid); if (!passenger) return; Position g = CalculateGlobalPositionOf(pos); switch(passenger->GetTypeId()) { case TYPEID_GAMEOBJECT: case TYPEID_DYNAMICOBJECT: m_owner->GetMap()->Relocation((GameObject*)passenger, g); break; case TYPEID_UNIT: m_owner->GetMap()->Relocation((Creature*)passenger, g); // If passenger is vehicle if (((Unit*)passenger)->IsVehicle()) ((Unit*)passenger)->GetVehicleKit()->UpdateGlobalPositions(); break; case TYPEID_PLAYER: m_owner->GetMap()->Relocation((Player*)passenger, g); // If passenger is vehicle if (((Unit*)passenger)->IsVehicle()) ((Unit*)passenger)->GetVehicleKit()->UpdateGlobalPositions(); break; case TYPEID_CORPSE: // TODO - add corpse relocation default: break; } }
// Update the global position of a passenger void TransportBase::UpdateGlobalPositionOf(WorldObject* passenger, float lx, float ly, float lz, float lo) const { float gx, gy, gz, go; CalculateGlobalPositionOf(lx, ly, lz, lo, gx, gy, gz, go); if (passenger->GetTypeId() == TYPEID_PLAYER || passenger->GetTypeId() == TYPEID_UNIT) { if (passenger->GetTypeId() == TYPEID_PLAYER) { m_owner->GetMap()->PlayerRelocation((Player*)passenger, gx, gy, gz, go); } else m_owner->GetMap()->CreatureRelocation((Creature*)passenger, gx, gy, gz, go); } // ToDo: Add gameobject relocation // ToDo: Add passenger relocation for MO transports }