diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 6 | ||||
-rwxr-xr-x | src/server/game/Entities/Vehicle/Vehicle.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.h | 5 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 5 |
4 files changed, 16 insertions, 20 deletions
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 64980b9551e..362b6aca631 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -28,6 +28,7 @@ #include "QuestDef.h" #include "SpellMgr.h" #include "Unit.h" +#include "Opcodes.h" #include <string> #include <vector> @@ -1628,6 +1629,11 @@ class Player : public Unit, public GridObject<Player> return mMitems.erase(id) ? true : false; } + void SendOnCancelExpectedVehicleRideAura() + { + WorldPacket data(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); + GetSession()->SendPacket(&data); + } void PetSpellInitialize(); void CharmSpellInitialize(); void PossessSpellInitialize(); diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 9dd25577fe1..8b4516ca47a 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -35,7 +35,7 @@ #include "Battleground.h" Vehicle::Vehicle(Unit* unit, VehicleEntry const* vehInfo, uint32 creatureEntry) : -_me(unit), _vehicleInfo(vehInfo), UsableSeatNum(0), _creatureEntry(creatureEntry), _status(STATUS_NONE) +UsableSeatNum(0), _me(unit), _vehicleInfo(vehInfo), _creatureEntry(creatureEntry), _status(STATUS_NONE) { for (uint32 i = 0; i < MAX_VEHICLE_SEATS; ++i) { @@ -429,7 +429,7 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId) sLog->outDebug(LOG_FILTER_VEHICLES, "Unit %s scheduling enter vehicle (entry: %u, vehicleId: %u, guid: %u (dbguid: %s) on seat %d", unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(), - (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : 0), seatId); + (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : 0), (int32)seatId); // The seat selection code may kick other passengers off the vehicle. // While the validity of the following may be arguable, it is possible that when such a passenger @@ -749,8 +749,9 @@ bool VehicleJoinEvent::Execute(uint64, uint32) if (Battleground* bg = player->GetBattleground()) bg->EventPlayerDroppedFlag(player); - WorldPacket data(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); - player->GetSession()->SendPacket(&data); + player->StopCastingCharm(); + player->StopCastingBindSight(); + player->SendOnCancelExpectedVehicleRideAura(); player->UnsummonPetTemporaryIfAny(); } @@ -774,7 +775,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Movement::MoveSplineInit init(Passenger); init.DisableTransportPathTransformations(); - init.MoveTo(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ); + init.MoveTo(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ, false, true); init.SetFacing(0.0f); init.SetTransportEnter(); init.Launch(); @@ -811,11 +812,6 @@ bool VehicleJoinEvent::Execute(uint64, uint32) void VehicleJoinEvent::Abort(uint64) { - // Prevent recursion - if (_executedAbort) - return; - - _executedAbort = true; sLog->outDebug(LOG_FILTER_VEHICLES, "Passenger GuidLow: %u, Entry: %u, board on vehicle GuidLow: %u, Entry: %u SeatId: %i cancelled", Passenger->GetGUIDLow(), Passenger->GetEntry(), Target->GetBase()->GetGUIDLow(), Target->GetBase()->GetEntry(), (int32)Seat->first); @@ -824,6 +820,6 @@ void VehicleJoinEvent::Abort(uint64) /// the aura manually. Target->GetBase()->RemoveAurasByType(SPELL_AURA_CONTROL_VEHICLE, Passenger->GetGUID()); - if (Passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY)) - Passenger->ToTempSummon()->UnSummon(); + if (Passenger->IsInWorld() && Passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY)) + Passenger->ToCreature()->DespawnOrUnsummon(); } diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index 01b8a0c581f..7ec0df8e533 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -107,15 +107,12 @@ class VehicleJoinEvent : public BasicEvent { friend class Vehicle; protected: - VehicleJoinEvent(Vehicle* v, Unit* u) : Target(v), Passenger(u), Seat(Target->Seats.end()), _executedAbort(false) {} + VehicleJoinEvent(Vehicle* v, Unit* u) : Target(v), Passenger(u), Seat(Target->Seats.end()) {} bool Execute(uint64, uint32); void Abort(uint64); Vehicle* Target; Unit* Passenger; SeatMap::iterator Seat; - - private: - bool _executedAbort; }; #endif diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index d6b19e6010a..a51d591f54c 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -5296,10 +5296,7 @@ void AuraEffect::HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, target->SendMessageToSet(&data, true); if (apply) - { - data.Initialize(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); - target->ToPlayer()->GetSession()->SendPacket(&data); - } + target->ToPlayer()->SendOnCancelExpectedVehicleRideAura(); } void AuraEffect::HandlePreventResurrection(AuraApplication const* aurApp, uint8 mode, bool apply) const |