diff options
-rw-r--r-- | sql/updates/world/master/2017_02_11_00_world.sql | 3 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 52 |
5 files changed, 67 insertions, 2 deletions
diff --git a/sql/updates/world/master/2017_02_11_00_world.sql b/sql/updates/world/master/2017_02_11_00_world.sql new file mode 100644 index 00000000000..2b28e31773c --- /dev/null +++ b/sql/updates/world/master/2017_02_11_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_fishing'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(131474,'spell_gen_fishing'); diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index a3905f8a421..b5260c70961 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -315,7 +315,7 @@ enum AuraType SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT = 255, SPELL_AURA_NO_REAGENT_USE = 256, SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS = 257, - SPELL_AURA_258 = 258, + SPELL_AURA_OVERRIDE_SUMMONED_OBJECT = 258, SPELL_AURA_259 = 259, // old SPELL_AURA_MOD_HOT_PCT, unused 4.3.4 SPELL_AURA_SCREEN_EFFECT = 260, SPELL_AURA_PHASE = 261, diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 250457d0d0d..4d373e9f0b8 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -317,7 +317,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //255 SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT implemented in Unit::SpellDamageBonus &AuraEffect::HandleNoReagentUseAura, //256 SPELL_AURA_NO_REAGENT_USE Use SpellClassMask for spell select &AuraEffect::HandleNULL, //257 SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS Use SpellClassMask for spell select - &AuraEffect::HandleNULL, //258 SPELL_AURA_MOD_SPELL_VISUAL + &AuraEffect::HandleNoImmediateEffect, //258 SPELL_AURA_OVERRIDE_SUMMONED_OBJECT implemented in Spell::EffectTransmitted &AuraEffect::HandleUnused, //259 unused (4.3.4) old SPELL_AURA_MOD_HOT_PCT &AuraEffect::HandleNoImmediateEffect, //260 SPELL_AURA_SCREEN_EFFECT (miscvalue = id in ScreenEffect.dbc) not required any code &AuraEffect::HandlePhase, //261 SPELL_AURA_PHASE diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 2bd23ee79dc..2837d320d06 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4740,6 +4740,16 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) uint32 name_id = effectInfo->MiscValue; + Unit::AuraEffectList const& overrideSummonedGameObjects = m_caster->GetAuraEffectsByType(SPELL_AURA_OVERRIDE_SUMMONED_OBJECT); + for (AuraEffect const* aurEff : overrideSummonedGameObjects) + { + if (uint32(aurEff->GetMiscValue()) == name_id) + { + name_id = uint32(aurEff->GetMiscValueB()); + break; + } + } + GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(name_id); if (!goinfo) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 7e51fd7b24e..681a5efde3e 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1629,6 +1629,57 @@ class spell_gen_elune_candle : public SpellScriptLoader } }; +enum FishingSpells +{ + SPELL_FISHING_NO_FISHING_POLE = 131476, + SPELL_FISHING_WITH_POLE = 131490 +}; + +// 131474 - Fishing +class spell_gen_fishing : public SpellScriptLoader +{ +public: + spell_gen_fishing() : SpellScriptLoader("spell_gen_fishing") { } + + class spell_gen_fishing_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_fishing_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_FISHING_NO_FISHING_POLE, SPELL_FISHING_WITH_POLE }); + } + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void HandleDummy(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + uint32 spellId; + Item* mainHand = GetCaster()->ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); + if (!mainHand || mainHand->GetTemplate()->GetClass() != ITEM_CLASS_WEAPON || mainHand->GetTemplate()->GetSubClass() != ITEM_SUBCLASS_WEAPON_FISHING_POLE) + spellId = SPELL_FISHING_NO_FISHING_POLE; + else + spellId = SPELL_FISHING_WITH_POLE; + + GetCaster()->CastSpell(GetCaster(), spellId, false); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_fishing_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gen_fishing_SpellScript(); + } +}; + enum TransporterBackfires { SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH = 23444, @@ -4547,6 +4598,7 @@ void AddSC_generic_spell_scripts() new spell_gen_dummy_trigger(); new spell_gen_dungeon_credit(); new spell_gen_elune_candle(); + new spell_gen_fishing(); new spell_gen_gadgetzan_transporter_backfire(); new spell_gen_gift_of_naaru(); new spell_gen_gnomish_transporter(); |