From 9301e31a4e895d79c518c0002da7cedeaff5df74 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 27 Feb 2013 13:17:20 +0100 Subject: Core/Spells: Allow free casting of player's own spells on vehicle seats with flag VEHICLE_SEAT_FLAG_CAN_ATTACK --- src/server/game/Spells/Spell.cpp | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8c9f51a0f0a..342f0cfbddf 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4832,34 +4832,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) - { - SpellShapeshiftEntry const* shapeShiftEntry = sSpellShapeshiftStore.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 @@ -7167,7 +7145,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::iterator areaTargetSelectHookEnd = (*itr)->OnObjectAreaTargetSelect.end(), areaTargetSelectHookItr = (*itr)->OnObjectAreaTargetSelect.begin(); for (; areaTargetSelectHookItr != areaTargetSelectHookEnd; ++areaTargetSelectHookItr) if (((*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndex) && !(*areaTargetSelectHookItr).IsEffectAffected(m_spellInfo, effIndexToCheck)) || -- cgit v1.2.3