diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Kalimdor/zone_felwood.cpp | 89 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp | 32 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 32 | ||||
-rw-r--r-- | src/tools/map_extractor/System.cpp | 14 | ||||
-rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 8 |
5 files changed, 136 insertions, 39 deletions
diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp index 7e698348a0c..f8d9d1bbc2a 100644 --- a/src/server/scripts/Kalimdor/zone_felwood.cpp +++ b/src/server/scripts/Kalimdor/zone_felwood.cpp @@ -25,6 +25,94 @@ #include "GridNotifiersImpl.h" #include "SpellScript.h" +/*###### +## npc_whisperwind_lasher +######*/ + +enum WhisperwindLasher +{ + EVENT_CHECK_OOC = 1, + SPELL_INFECTED_WOULD = 52225, + SPELL_STAND = 37752, + NPC_WHISPERWIND_LASHER = 47747, + NPC_CORRUPTED_LASHER = 48387, + FACTION_HOSTILE = 14, + CHANCE_HOSTILE = 30 +}; + +class npc_whisperwind_lasher : public CreatureScript +{ +public: + npc_whisperwind_lasher() : CreatureScript("npc_whisperwind_lasher") { } + + struct npc_whisperwind_lasherAI : public ScriptedAI + { + npc_whisperwind_lasherAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + lasher_clicked = false; + } + + void OnSpellClick(Unit* clicker, bool& result) override + { + if (!result) + return; + + if (roll_chance_i(CHANCE_HOSTILE)) + { + me->CastSpell(me, SPELL_INFECTED_WOULD); + me->SetEntry(NPC_CORRUPTED_LASHER); + me->setFaction(FACTION_HOSTILE); + } + else + { + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + } + + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + me->CastSpell(me, SPELL_STAND); + me->GetMotionMaster()->MoveRandom(8.0f); + events.ScheduleEvent(EVENT_CHECK_OOC, 20000); + lasher_clicked = true; + + if (Player* player = clicker->ToPlayer()) + player->KilledMonsterCredit(NPC_WHISPERWIND_LASHER, 0); + } + + void UpdateAI(uint32 diff) override + { + if (!lasher_clicked) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CHECK_OOC: + if (!me->IsInCombat()) + me->DespawnOrUnsummon(); + else + events.ScheduleEvent(EVENT_CHECK_OOC, 5000); + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap events; + bool lasher_clicked; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_whisperwind_lasherAI(creature); + } +}; + /*##### # Spell 88254 "Swipe Honey" scripted for quest 27989 "Ruumbo Demands Honey" #####*/ @@ -174,6 +262,7 @@ public: spell_ruumbos_silly_dance() : SpellScriptLoader("spell_ruumbos_silly_dan void AddSC_felwood() { + new npc_whisperwind_lasher(); new spell_swipe_honey(); new spell_beesbees(); new spell_ruumbos_silly_dance(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 3ec5109cbb9..0be61cc2ec8 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -1037,37 +1037,6 @@ class spell_xt002_submerged : public SpellScriptLoader } }; -class spell_xt002_stand : public SpellScriptLoader -{ - public: - spell_xt002_stand() : SpellScriptLoader("spell_xt002_stand") { } - - class spell_xt002_stand_SpellScript : public SpellScript - { - PrepareSpellScript(spell_xt002_stand_SpellScript); - - void HandleScript(SpellEffIndex /*eff*/) - { - Creature* target = GetHitCreature(); - if (!target) - return; - - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_STAND); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_xt002_stand_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_xt002_stand_SpellScript(); - } -}; - class achievement_nerf_engineering : public AchievementCriteriaScript { public: @@ -1126,7 +1095,6 @@ void AddSC_boss_xt002() new spell_xt002_heart_overload_periodic(); new spell_xt002_tympanic_tantrum(); new spell_xt002_submerged(); - new spell_xt002_stand(); new achievement_nerf_engineering(); new achievement_heartbreaker(); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 35d3985cfa1..94d2a95f618 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3670,6 +3670,37 @@ class spell_gen_gm_freeze : public SpellScriptLoader } }; +class spell_gen_stand : public SpellScriptLoader +{ +public: + spell_gen_stand() : SpellScriptLoader("spell_gen_stand") { } + + class spell_gen_stand_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_stand_SpellScript); + + void HandleScript(SpellEffIndex /*eff*/) + { + Creature* target = GetHitCreature(); + if (!target) + return; + + target->SetByteValue(UNIT_FIELD_BYTES_1, 0, UNIT_STAND_STATE_STAND); + target->HandleEmoteCommand(EMOTE_STATE_NONE); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_stand_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gen_stand_SpellScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -3753,4 +3784,5 @@ void AddSC_generic_spell_scripts() new spell_gen_whisper_gulch_yogg_saron_whisper(); new spell_gen_eject_all_passengers(); new spell_gen_gm_freeze(); + new spell_gen_stand(); } diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index a4de6f92a8d..ab3ebda584d 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -111,17 +111,21 @@ uint32 const Builds[] = {13164, 13205, 13287, 13329, 13596, 13623, 13914, 14007, #define LAST_DBC_IN_DATA_BUILD 13623 // after this build mpqs with dbc are back to locale folder #define NEW_BASE_SET_BUILD 15211 -char const* Locales[] = +#define LOCALES_COUNT 15 + +char const* Locales[LOCALES_COUNT] = { "enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", - "esMX", "ruRU" + "esMX", "ruRU", + "ptBR", "ptPT", + "itIT" }; -TCHAR const* LocalesT[] = +TCHAR const* LocalesT[LOCALES_COUNT] = { _T("enGB"), _T("enUS"), _T("deDE"), _T("esES"), @@ -129,10 +133,10 @@ TCHAR const* LocalesT[] = _T("zhCN"), _T("zhTW"), _T("enCN"), _T("enTW"), _T("esMX"), _T("ruRU"), + _T("ptBR"), _T("ptPT"), + _T("itIT"), }; -#define LOCALES_COUNT 12 - void CreateDir(std::string const& path) { if (chdir(path.c_str()) == 0) diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index fbb7cb87ebe..92878e680dc 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -77,7 +77,7 @@ uint32 const Builds[] = {13164, 13205, 13287, 13329, 13596, 13623, 13914, 14007, #define LAST_DBC_IN_DATA_BUILD 13623 // after this build mpqs with dbc are back to locale folder #define NEW_BASE_SET_BUILD 15211 -#define LOCALES_COUNT 12 +#define LOCALES_COUNT 15 char const* Locales[LOCALES_COUNT] = { @@ -86,7 +86,9 @@ char const* Locales[LOCALES_COUNT] = "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", - "esMX", "ruRU" + "esMX", "ruRU", + "ptBR", "ptPT", + "itIT" }; TCHAR const* LocalesT[LOCALES_COUNT] = @@ -97,6 +99,8 @@ TCHAR const* LocalesT[LOCALES_COUNT] = _T("zhCN"), _T("zhTW"), _T("enCN"), _T("enTW"), _T("esMX"), _T("ruRU"), + _T("ptBR"), _T("ptPT"), + _T("itIT"), }; typedef struct |