aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/zone_felwood.cpp89
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp32
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp32
-rw-r--r--src/tools/map_extractor/System.cpp14
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp8
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