void VehicleKit::DisableDismount(Unit* passenger) { if (!passenger) return; SeatId seatId = GetSeatId(passenger); if (seatId == -1) return; m_Seats[seatId].b_dismount = false; }
void VehicleKit::InstallAccessory(VehicleAccessory const* accessory) { if (Unit* passenger = GetPassenger(accessory->seatId)) { // already installed if (passenger->GetEntry() == accessory->passengerEntry) return; GetBase()->RemoveSpellsCausingAura(SPELL_AURA_CONTROL_VEHICLE, passenger->GetObjectGuid()); } if (Creature* summoned = GetBase()->SummonCreature(accessory->passengerEntry, GetBase()->GetPositionX() + accessory->m_offsetX, GetBase()->GetPositionY() + accessory->m_offsetY, GetBase()->GetPositionZ() + accessory->m_offsetZ, GetBase()->GetOrientation() + accessory->m_offsetX, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000)) { summoned->SetCreatorGuid(ObjectGuid()); summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); int32 seatId = accessory->seatId + 1; SetDestination(accessory->m_offsetX,accessory->m_offsetY,accessory->m_offsetZ,accessory->m_offsetO,0.0f,0.0f); summoned->CastCustomSpell(GetBase(), SPELL_RIDE_VEHICLE_HARDCODED, &seatId, &seatId, NULL, true); SetDestination(); if (summoned->GetVehicle()) DEBUG_LOG("Vehicle::InstallAccessory %s accessory added, seat %i (real %i) of %s",summoned->GetObjectGuid().GetString().c_str(), accessory->seatId, GetSeatId(summoned), GetBase()->GetObjectGuid().GetString().c_str()); else { sLog.outError("Vehicle::InstallAccessory cannot install %s to seat %u of %s",summoned->GetObjectGuid().GetString().c_str(), accessory->seatId, GetBase()->GetObjectGuid().GetString().c_str()); summoned->ForcedDespawn(); } } else sLog.outError("Vehicle::InstallAccessory cannot summon creature id %u (seat %u of %s)",accessory->passengerEntry, accessory->seatId,GetBase()->GetObjectGuid().GetString().c_str()); }
SeatId VehicleKit::GetSeatId(Unit* passenger) { if (m_Seats.empty() || !passenger || passenger->GetMap() != GetBase()->GetMap()) return -1; return GetSeatId(passenger->GetObjectGuid()); }
void VehicleKit::InstallAccessory(VehicleAccessory const* accessory) { if (Unit* passenger = GetPassenger(accessory->seatId)) { // already installed if (passenger->GetEntry() == accessory->passengerEntry) return; GetBase()->RemoveSpellsCausingAura(SPELL_AURA_CONTROL_VEHICLE, passenger->GetObjectGuid()); } if (Creature* summoned = GetBase()->SummonCreature(accessory->passengerEntry, GetBase()->GetPositionX() + accessory->m_offsetX, GetBase()->GetPositionY() + accessory->m_offsetY, GetBase()->GetPositionZ() + accessory->m_offsetZ, GetBase()->GetOrientation() + accessory->m_offsetO, TEMPSUMMON_DEAD_DESPAWN, 0)) { summoned->SetCreatorGuid(ObjectGuid()); summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); bool hideAccessory = false; SeatMap::const_iterator seat = m_Seats.find(accessory->seatId); if (seat != m_Seats.end()) { if (seat->second.seatInfo->m_flags & SEAT_FLAG_HIDE_PASSENGER) // coommon case hideAccessory = true; } if (!hideAccessory && (accessory->m_flags & ACCESSORY_FLAG_HIDE)) hideAccessory = true; if (hideAccessory) summoned->SetDisplayId(DEFAULT_HIDDEN_MODEL_ID); // set to empty model SetDestination(accessory->m_offsetX, accessory->m_offsetY, accessory->m_offsetZ, accessory->m_offsetO, 0.0f, 0.0f); int32 seatId = accessory->seatId + 1; summoned->SetPhaseMask(GetBase()->GetPhaseMask(), true); summoned->CastCustomSpell(GetBase(), SPELL_RIDE_VEHICLE_HARDCODED, &seatId, &seatId, NULL, true); SetDestination(); if (summoned->GetVehicle()) DEBUG_LOG("Vehicle::InstallAccessory %s accessory added, seat %i (real %i) of %s", summoned->GetGuidStr().c_str(), accessory->seatId, GetSeatId(summoned), GetBase()->GetGuidStr().c_str()); else { sLog.outError("Vehicle::InstallAccessory cannot install %s to seat %u of %s", summoned->GetGuidStr().c_str(), accessory->seatId, GetBase()->GetGuidStr().c_str()); summoned->ForcedDespawn(); } } else sLog.outError("Vehicle::InstallAccessory cannot summon creature id %u (seat %u of %s)", accessory->passengerEntry, accessory->seatId, GetBase()->GetGuidStr().c_str()); }