From 6590cf4f9e3101a0406d900a5441c309de5697ce Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Sun, 17 Feb 2013 08:03:27 +0100 Subject: Core/Vehicles: Fix another crash Don't set Unit::m_vehicle until VehicleJoinEvent::Execute --- src/server/game/Entities/Unit/Unit.cpp | 10 +++------- src/server/game/Entities/Vehicle/Vehicle.cpp | 5 ++++- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9223dfad533..f607e7930a6 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3149,7 +3149,7 @@ Aura* Unit::_TryStackingOrRefreshingExistingAura(SpellInfo const* newAura, uint8 ASSERT(casterGUID || caster); // Check if these can stack anyway - if (!casterGUID && !newAura->IsStackableOnOneSlotWithDifferentCasters()) + if (!casterGUID && (newAura->IsChanneled() || newAura->AttributesEx3 & SPELL_ATTR3_STACK_FOR_DIFF_CASTERS)) casterGUID = caster->GetGUID(); // passive and Incanter's Absorption and auras with different type can stack with themselves any number of times @@ -16599,13 +16599,9 @@ void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* a } ASSERT(!m_vehicle); - m_vehicle = vehicle; - if (!m_vehicle->AddPassenger(this, seatId)) - { - m_vehicle = NULL; - return; - } + + (void)vehicle->AddPassenger(this, seatId); } void Unit::ChangeSeat(int8 seatId, bool next) diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 7469e522ee0..58cf6773c59 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -535,6 +535,7 @@ void Vehicle::CancelJoinEvent(VehicleJoinEvent* e) bool VehicleJoinEvent::Execute(uint64, uint32) { ASSERT(Passenger->GetVehicle() == Target); + Passenger->m_vehicle = Target; Seat->second.Passenger = Passenger->GetGUID(); if (Seat->second.SeatInfo->CanEnterOrExit()) @@ -598,5 +599,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32) void VehicleJoinEvent::Abort(uint64) { - Passenger->m_vehicle = NULL; + 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); + // Passenger->m_vehicle = NULL; } -- cgit v1.2.3