diff options
author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-02-27 03:53:24 +0100 |
---|---|---|
committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-02-27 03:58:41 +0100 |
commit | 683cea9e83408b4d87b6e156f28f2905e46dc3ff (patch) | |
tree | 4d5569ae0bdbadb4571db4b0c212aefa238972fb /src/server/game/Spells/SpellMgr.cpp | |
parent | aa2455b586f5db22a1fa2f844a182c7e5478aee8 (diff) |
Core/Vehicles:
- Grab correct npc entry from npc_spellclick_spells in case of player vehicle. Fixes DB errors added in my previous changeset
- Allow aura's with SPELL_AURA_CONTROL_VEHICLE to stack if there are enough free seats, even if spellIds are identical.
- Fix a possible infinite loop. Thanks to manuel for spotting
Diffstat (limited to 'src/server/game/Spells/SpellMgr.cpp')
-rwxr-xr-x | src/server/game/Spells/SpellMgr.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 0b8276f2c74..e0f50baba41 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3177,6 +3177,34 @@ bool SpellMgr::CanAurasStack(Aura const *aura1, Aura const *aura2, bool sameCast } } + bool isVehicleAura1 = false; + bool isVehicleAura2 = false; + uint8 i = 0; + while (i < MAX_SPELL_EFFECTS && !(isVehicleAura1 && isVehicleAura2)) + { + if (spellInfo_1->EffectApplyAuraName[i] == SPELL_AURA_CONTROL_VEHICLE) + isVehicleAura1 = true; + if (spellInfo_2->EffectApplyAuraName[i] == SPELL_AURA_CONTROL_VEHICLE) + isVehicleAura2 = true; + + ++i; + } + + if (isVehicleAura1 && isVehicleAura2) + { + Vehicle* veh = NULL; + if (aura1->GetOwner()->ToUnit()) + veh = aura1->GetOwner()->ToUnit()->GetVehicleKit(); + + if (!veh) // We should probably just let it stack. Vehicle system will prevent undefined behaviour later + return true; + + if (!veh->GetAvailableSeatCount()) + return false; // No empty seat available + + return true; // Empty seat available (skip rest) + } + uint32 spellId_1 = GetLastSpellInChain(spellInfo_1->Id); uint32 spellId_2 = GetLastSpellInChain(spellInfo_2->Id); |