diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-09-11 14:13:10 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-09-11 14:13:10 +0200 |
commit | 78698463ff6b20255148fb647e9ad33a487bb09d (patch) | |
tree | 3140019ebcee5c7d9e4e80f40c5689ff5d4c791c /src | |
parent | 2556d6d705c519fd461b9d9f10a4387d9beb199e (diff) |
Core/Spells: Remove all hardcoded restrictions for pick pocket spell effect and rely only on presence of pickpocket loot in db
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_rogue.cpp | 19 |
4 files changed, 28 insertions, 12 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2f2adf81c90..138fe450158 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9018,7 +9018,7 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa if (loot_type == LOOT_PICKPOCKETING) { - if (loot->loot_type != LOOT_PICKPOCKETING) + if (!loot || loot->loot_type != LOOT_PICKPOCKETING) { if (creature->CanGeneratePickPocketLoot()) { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 4c6474c2d38..c75041d30d0 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2223,13 +2223,7 @@ void Spell::EffectPickPocket() if (m_caster->GetTypeId() != TYPEID_PLAYER) return; - // victim must be creature and attackable - if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT || m_caster->IsFriendlyTo(unitTarget)) - return; - - // victim have to be alive and humanoid or undead - if (unitTarget->IsAlive() && (unitTarget->GetCreatureTypeMask() &CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD) != 0) - m_caster->ToPlayer()->SendLoot(unitTarget->GetGUID(), LOOT_PICKPOCKETING); + m_caster->ToPlayer()->SendLoot(unitTarget->GetGUID(), LOOT_PICKPOCKETING); } void Spell::EffectAddFarsight() diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index b8802af30ab..a1c84545a6a 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -25,6 +25,7 @@ #include "Item.h" #include "ItemTemplate.h" #include "Log.h" +#include "LootMgr.h" #include "Map.h" #include "ObjectAccessor.h" #include "Pet.h" @@ -2132,10 +2133,12 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co if (HasAttribute(SPELL_ATTR0_CU_PICKPOCKET)) { - if (unitTarget->GetTypeId() == TYPEID_PLAYER) - return SPELL_FAILED_BAD_TARGETS; - else if ((unitTarget->GetCreatureTypeMask() & CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD) == 0) - return SPELL_FAILED_TARGET_NO_POCKETS; + Creature const* targetCreature = unitTarget->ToCreature(); + if (!targetCreature) + return SPELL_FAILED_BAD_TARGETS; + + if (!LootTemplates_Pickpocketing.HaveLootFor(targetCreature->GetCreatureTemplate()->pickpocketLootId)) + return SPELL_FAILED_TARGET_NO_POCKETS; } // Not allow disarm unarmed player diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 540724747f0..4372d3bbf24 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -402,6 +402,24 @@ class spell_rog_mastery_main_gauche : public AuraScript } }; +class spell_rog_pickpocket : public SpellScript +{ + PrepareSpellScript(spell_rog_pickpocket); + + SpellCastResult CheckCast() + { + if (!GetExplTargetUnit() || !GetCaster()->IsValidAttackTarget(GetExplTargetUnit(), GetSpellInfo())) + return SPELL_FAILED_BAD_TARGETS; + + return SPELL_CAST_OK; + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_rog_pickpocket::CheckCast); + } +}; + // 79096 - Restless Blades class spell_rog_restless_blades : public AuraScript { @@ -976,6 +994,7 @@ void AddSC_rogue_spell_scripts() RegisterSpellScript(spell_rog_grand_melee); RegisterSpellAndAuraScriptPair(spell_rog_killing_spree, spell_rog_killing_spree_aura); RegisterSpellScript(spell_rog_mastery_main_gauche); + RegisterSpellScript(spell_rog_pickpocket); RegisterSpellScript(spell_rog_restless_blades); RegisterSpellScript(spell_rog_roll_the_bones); RegisterSpellScript(spell_rog_rupture); |