diff options
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 34 |
1 files changed, 6 insertions, 28 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d8eb279a5bc..0dc463bedc9 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4862,34 +4862,12 @@ SpellCastResult Spell::CheckCast(bool strict) return SPELL_FAILED_MOVING; } - - Vehicle* vehicle = m_caster->GetVehicle(); - if (vehicle && !(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE)) + // Check vehicle flags + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE)) { - uint16 checkMask = 0; - for (uint8 effIndex = EFFECT_0; effIndex < MAX_SPELL_EFFECTS; ++effIndex) - { - SpellEffectInfo const* effInfo = &m_spellInfo->Effects[effIndex]; - if (effInfo->ApplyAuraName == SPELL_AURA_MOD_SHAPESHIFT) - { - SpellShapeshiftFormEntry const* shapeShiftEntry = sSpellShapeshiftFormStore.LookupEntry(effInfo->MiscValue); - if (shapeShiftEntry && (shapeShiftEntry->flags1 & 1) == 0) // unk flag - checkMask |= VEHICLE_SEAT_FLAG_UNCONTROLLED; - break; - } - } - - if (m_spellInfo->HasAura(SPELL_AURA_MOUNTED)) - checkMask |= VEHICLE_SEAT_FLAG_CAN_CAST_MOUNT_SPELL; - - if (!checkMask) - checkMask = VEHICLE_SEAT_FLAG_CAN_ATTACK; - - // All creatures should be able to cast as passengers freely, restriction and attribute are only for players - VehicleSeatEntry const* vehicleSeat = vehicle->GetSeatForPassenger(m_caster); - if (!(m_spellInfo->AttributesEx6 & SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !(m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_MOUNTED) - && (vehicleSeat->m_flags & checkMask) != checkMask && m_caster->GetTypeId() == TYPEID_PLAYER) - return SPELL_FAILED_DONT_REPORT; + SpellCastResult vehicleCheck = m_spellInfo->CheckVehicle(m_caster); + if (vehicleCheck != SPELL_CAST_OK) + return vehicleCheck; } // check spell cast conditions from database @@ -7176,7 +7154,7 @@ bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToC if (((*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) || (!(*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && (*targetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck))) return false; - + std::list<SpellScript::ObjectAreaTargetSelectHandler>::iterator areaTargetSelectHookEnd = (*itr)->OnObjectAreaTargetSelect.end(), areaTargetSelectHookItr = (*itr)->OnObjectAreaTargetSelect.begin(); for (; areaTargetSelectHookItr != areaTargetSelectHookEnd; ++areaTargetSelectHookItr) if (((*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) || |