diff options
| author | sirikfoll <sirikfoll@hotmail.com> | 2016-01-12 15:24:55 -0200 | 
|---|---|---|
| committer | sirikfoll <sirikfoll@hotmail.com> | 2016-01-12 15:24:55 -0200 | 
| commit | fc2a570d09e58563f1b123ee5e8c8e8151a66c2b (patch) | |
| tree | bbb2ffb60a5ed365e5ea2fb6382ba89750ed8dd9 | |
| parent | 8ef9ea9157ca6c04194888a2118be7daf303856f (diff) | |
Core/Spells Implement SpellScript needed for Achievement The Turkinator
Closes #3997
| -rw-r--r-- | sql/updates/world/2016_01_12_99_world.sql | 15 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_holiday.cpp | 75 | 
2 files changed, 90 insertions, 0 deletions
diff --git a/sql/updates/world/2016_01_12_99_world.sql b/sql/updates/world/2016_01_12_99_world.sql new file mode 100644 index 00000000000..6ff3a769918 --- /dev/null +++ b/sql/updates/world/2016_01_12_99_world.sql @@ -0,0 +1,15 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=32820; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=32820; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(32820,0,0,0,6,0,100,0,0,0,0,0,11,62014,2,0,0,0,0,7,0,0,0,0,0,0,0,"Wild Turkey - On Just Died - Cast 'Turkey Tracker'"); + +DELETE FROM `creature_text` WHERE `entry`=32820; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(32820,0,0,'Turkey Hunter!',42,0,100,0,0,0,33163,0,'Wild Turkey'), +(32820,1,0,'Turkey Domination!',42,0,100,0,0,0,33164,0,'Wild Turkey'), +(32820,2,0,'Turkey Slaughter!',42,0,100,0,0,0,33165,0,'Wild Turkey'), +(32820,3,0,'TURKEY TRIUMPH!',42,0,100,0,0,0,33167,0,'Wild Turkey'); + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pilgrims_bounty_turkey_tracker'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(62014,'spell_pilgrims_bounty_turkey_tracker'); diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index 94f12d8cda4..7fe1f54a594 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -410,6 +410,80 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader          }  }; +enum TheTurkinator +{ +    SPELL_KILL_COUNTER_VISUAL       = 62015, +    SPELL_KILL_COUNTER_VISUAL_MAX   = 62021, +    EMOTE_TURKEY_HUNTER             = 0, +    EMOTE_TURKEY_DOMINATION         = 1, +    EMOTE_TURKEY_SLAUGHTER          = 2, +    EMOTE_TURKEY_TRIUMPH            = 3 +}; + +class spell_pilgrims_bounty_turkey_tracker : public SpellScriptLoader +{ +    public: +        spell_pilgrims_bounty_turkey_tracker() : SpellScriptLoader("spell_pilgrims_bounty_turkey_tracker") { } + +        class spell_pilgrims_bounty_turkey_tracker_SpellScript : public SpellScript +        { +            PrepareSpellScript(spell_pilgrims_bounty_turkey_tracker_SpellScript); + +            bool Validate(SpellInfo const* /*spell*/) +            { +                if (!sSpellMgr->GetSpellInfo(SPELL_KILL_COUNTER_VISUAL) || !sSpellMgr->GetSpellInfo(SPELL_KILL_COUNTER_VISUAL_MAX)) +                    return false; +                return true; +            } + +            void HandleScript(SpellEffIndex /*effIndex*/) +            { +                Creature* caster = GetCaster()->ToCreature(); +                Unit* target = GetHitUnit(); + +                if (!target || !caster) +                    return; + +                if (target->HasAura(SPELL_KILL_COUNTER_VISUAL_MAX)) +                    return; + +                if (Aura const* aura = target->GetAura(GetSpellInfo()->Id)) +                { +                    switch (aura->GetStackAmount()) +                    { +                        case 10: +                            caster->AI()->Talk(EMOTE_TURKEY_HUNTER, target); +                            break; +                        case 20: +                            caster->AI()->Talk(EMOTE_TURKEY_DOMINATION, target); +                            break; +                        case 30: +                            caster->AI()->Talk(EMOTE_TURKEY_SLAUGHTER, target); +                            break; +                        case 40: +                            caster->AI()->Talk(EMOTE_TURKEY_TRIUMPH, target); +                            target->CastSpell(target, SPELL_KILL_COUNTER_VISUAL_MAX, true); +                            target->RemoveAurasDueToSpell(GetSpellInfo()->Id); +                            break; +                        default: +                            return; +                    } +                    target->CastSpell(target, SPELL_KILL_COUNTER_VISUAL, true); +                } +            } + +            void Register() +            { +                OnEffectHitTarget += SpellEffectFn(spell_pilgrims_bounty_turkey_tracker_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); +            } +        }; + +        SpellScript* GetSpellScript() const +        { +            return new spell_pilgrims_bounty_turkey_tracker_SpellScript(); +        } +}; +  enum Mistletoe  {      SPELL_CREATE_MISTLETOE          = 26206, @@ -973,6 +1047,7 @@ void AddSC_holiday_spell_scripts()      new spell_pilgrims_bounty_buff_food("spell_gen_spice_bread_stuffing", SPELL_WELL_FED_HIT_TRIGGER);      new spell_pilgrims_bounty_buff_food("spell_gen_pumpkin_pie", SPELL_WELL_FED_SPIRIT_TRIGGER);      new spell_pilgrims_bounty_buff_food("spell_gen_candied_sweet_potato", SPELL_WELL_FED_HASTE_TRIGGER); +    new spell_pilgrims_bounty_turkey_tracker();      // Winter Veil      new spell_winter_veil_mistletoe();      new spell_winter_veil_px_238_winter_wondervolt();  | 
