diff options
| author | Jeremy <Golrag@users.noreply.github.com> | 2024-07-19 11:39:29 +0200 |
|---|---|---|
| committer | Ovahlord <dreadkiller@gmx.de> | 2024-07-25 23:16:22 +0200 |
| commit | 746bdc55c4fc2816a0fe48fe2033ad23af3a0d47 (patch) | |
| tree | 73e45d87fe557e211b0bd3a4aa397f036f2fd5fa /src | |
| parent | 09885238ac6860c51e8bb3bd971069e0358dc7cc (diff) | |
Core/Vehicle: Fix an assertion when applying SPELL_AURA_SET_VEHICLE_ID on creatures that are already vehicles (#30102)
(cherry picked from commit 53f0f2e5da3e7e6a9e6fa926e2f51ac8b506caa9)
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index f68486d7439..0b8b3b20af5 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -52,7 +52,7 @@ UsableSeatNum(0), _me(unit), _vehicleInfo(vehInfo), _creatureEntry(creatureEntry // Set or remove correct flags based on available seats. Will overwrite db data (if wrong). if (UsableSeatNum) _me->SetNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); - else + else if (!unit->m_unitData->InteractSpellID) _me->RemoveNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); InitMovementInfoForBase(); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 5be5832e743..22d9e258f64 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -5371,13 +5371,19 @@ void AuraEffect::HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, uint32 vehicleId = GetMiscValue(); + target->RemoveVehicleKit(); + if (apply) { if (!target->CreateVehicleKit(vehicleId, 0)) return; } - else if (target->GetVehicleKit()) - target->RemoveVehicleKit(); + else + { + if (Creature* creature = target->ToCreature()) + if (uint32 originalVehicleId = creature->GetCreatureTemplate()->VehicleId) + creature->CreateVehicleKit(originalVehicleId, creature->GetEntry()); + } if (target->GetTypeId() != TYPEID_PLAYER) return; |
