aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGustavo <sirikfoll@hotmail.com>2016-08-25 03:31:48 -0300
committerAokromes <Aokromes@users.noreply.github.com>2016-08-25 08:31:48 +0200
commit989aaaa8b5284bc707c94c62e6c50e9df3cbfc84 (patch)
tree3bae0b3aefa134430af427d54f916e7e848af2a2 /src
parent0d2ef2ac7155cedead2c7a7cafcd937a4e1dcd99 (diff)
Scripts/Pet Implemented Argent Squire/Gruntling and Argent Pony Bridle
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp47
-rw-r--r--src/server/scripts/World/npcs_special.cpp159
2 files changed, 206 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index e8ad73ceadb..168284b31bc 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -4244,6 +4244,52 @@ class spell_gen_clear_debuffs : public SpellScriptLoader
}
};
+enum PonySpells
+{
+ ACHIEV_PONY_UP = 3736,
+ MOUNT_PONY = 29736
+};
+
+class spell_gen_pony_mount_check : public SpellScriptLoader
+{
+ public:
+ spell_gen_pony_mount_check() : SpellScriptLoader("spell_gen_pony_mount_check") { }
+
+ class spell_gen_pony_mount_check_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_pony_mount_check_AuraScript);
+
+ void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
+ {
+ Unit* caster = GetCaster();
+ Player* owner = caster->GetOwner()->ToPlayer();
+ if (!caster || !owner || !owner->HasAchieved(ACHIEV_PONY_UP))
+ return;
+
+ if (owner->IsMounted())
+ {
+ caster->Mount(MOUNT_PONY);
+ caster->SetSpeedRate(MOVE_RUN, owner->GetSpeedRate(MOVE_RUN));
+ }
+ else if (caster->IsMounted())
+ {
+ caster->Dismount();
+ caster->SetSpeedRate(MOVE_RUN, owner->GetSpeedRate(MOVE_RUN));
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_pony_mount_check_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_gen_pony_mount_check_AuraScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -4332,4 +4378,5 @@ void AddSC_generic_spell_scripts()
new spell_gen_mixology_bonus();
new spell_gen_landmine_knockback_achievement();
new spell_gen_clear_debuffs();
+ new spell_gen_pony_mount_check();
}
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index c33d74d0faa..eed92818e83 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -2528,6 +2528,164 @@ class npc_train_wrecker : public CreatureScript
}
};
+/*######
+## npc_argent_squire/gruntling
+######*/
+
+enum Pennants
+{
+ SPELL_DARNASSUS_PENNANT = 63443,
+ SPELL_EXODAR_PENNANT = 63439,
+ SPELL_GNOMEREGAN_PENNANT = 63442,
+ SPELL_IRONFORGE_PENNANT = 63440,
+ SPELL_STORMWIND_PENNANT = 62727,
+ SPELL_SENJIN_PENNANT = 63446,
+ SPELL_UNDERCITY_PENNANT = 63441,
+ SPELL_ORGRIMMAR_PENNANT = 63444,
+ SPELL_SILVERMOON_PENNANT = 63438,
+ SPELL_THUNDERBLUFF_PENNANT = 63445,
+ SPELL_AURA_POSTMAN_S = 67376,
+ SPELL_AURA_SHOP_S = 67377,
+ SPELL_AURA_BANK_S = 67368,
+ SPELL_AURA_TIRED_S = 67401,
+ SPELL_AURA_BANK_G = 68849,
+ SPELL_AURA_POSTMAN_G = 68850,
+ SPELL_AURA_SHOP_G = 68851,
+ SPELL_AURA_TIRED_G = 68852,
+ SPELL_TIRED_PLAYER = 67334
+};
+
+enum ArgentPetGossipOptions
+{
+ GOSSIP_OPTION_BANK = 0,
+ GOSSIP_OPTION_SHOP = 1,
+ GOSSIP_OPTION_MAIL = 2,
+ GOSSIP_OPTION_DARNASSUS_SENJIN_PENNANT = 3,
+ GOSSIP_OPTION_EXODAR_UNDERCITY_PENNANT = 4,
+ GOSSIP_OPTION_GNOMEREGAN_ORGRIMMAR_PENNANT = 5,
+ GOSSIP_OPTION_IRONFORGE_SILVERMOON_PENNANT = 6,
+ GOSSIP_OPTION_STORMWIND_THUNDERBLUFF_PENNANT = 7
+};
+
+enum Misc
+{
+ NPC_ARGENT_SQUIRE = 33238
+};
+
+struct ArgentPonyBannerSpells
+{
+ uint32 spellSquire;
+ uint32 spellGruntling;
+};
+
+ArgentPonyBannerSpells const bannerSpells[5] =
+{
+ { SPELL_DARNASSUS_PENNANT, SPELL_SENJIN_PENNANT },
+ { SPELL_EXODAR_PENNANT, SPELL_UNDERCITY_PENNANT },
+ { SPELL_GNOMEREGAN_PENNANT, SPELL_ORGRIMMAR_PENNANT },
+ { SPELL_IRONFORGE_PENNANT, SPELL_SILVERMOON_PENNANT },
+ { SPELL_STORMWIND_PENNANT, SPELL_THUNDERBLUFF_PENNANT }
+};
+
+class npc_argent_squire_gruntling : public CreatureScript
+{
+public:
+ npc_argent_squire_gruntling() : CreatureScript("npc_argent_squire_gruntling") { }
+
+ struct npc_argent_squire_gruntlingAI : public ScriptedAI
+ {
+ npc_argent_squire_gruntlingAI(Creature* creature) : ScriptedAI(creature)
+ {
+ ScheduleTasks();
+ }
+
+ void ScheduleTasks()
+ {
+ _scheduler
+ .Schedule(Seconds(1), [this](TaskContext /*context*/)
+ {
+ if (Aura* ownerTired = me->GetOwner()->GetAura(SPELL_TIRED_PLAYER))
+ if (Aura* squireTired = me->AddAura(IsArgentSquire() ? SPELL_AURA_TIRED_S : SPELL_AURA_TIRED_G, me))
+ squireTired->SetDuration(ownerTired->GetDuration());
+ })
+ .Schedule(Seconds(1), [this](TaskContext context)
+ {
+ if ((me->HasAura(SPELL_AURA_TIRED_S) || me->HasAura(SPELL_AURA_TIRED_G)) && me->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR))
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR);
+ context.Repeat();
+ });
+ }
+
+ void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ switch (gossipListId)
+ {
+ case GOSSIP_OPTION_BANK:
+ {
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER);
+ uint32 _bankAura = IsArgentSquire() ? SPELL_AURA_BANK_S : SPELL_AURA_BANK_G;
+ if (!me->HasAura(_bankAura))
+ DoCastSelf(_bankAura);
+
+ if (!player->HasAura(SPELL_TIRED_PLAYER))
+ player->CastSpell(player, SPELL_TIRED_PLAYER, true);
+ break;
+ }
+ case GOSSIP_OPTION_SHOP:
+ {
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR);
+ uint32 _shopAura = IsArgentSquire() ? SPELL_AURA_SHOP_S : SPELL_AURA_SHOP_G;
+ if (!me->HasAura(_shopAura))
+ DoCastSelf(_shopAura);
+
+ if (!player->HasAura(SPELL_TIRED_PLAYER))
+ player->CastSpell(player, SPELL_TIRED_PLAYER, true);
+ break;
+ }
+ case GOSSIP_OPTION_MAIL:
+ {
+ me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_MAILBOX);
+ player->GetSession()->SendShowMailBox(me->GetGUID());
+
+ uint32 _mailAura = IsArgentSquire() ? SPELL_AURA_POSTMAN_S : SPELL_AURA_POSTMAN_G;
+ if (!me->HasAura(_mailAura))
+ DoCastSelf(_mailAura);
+
+ if (!player->HasAura(SPELL_TIRED_PLAYER))
+ player->CastSpell(player, SPELL_TIRED_PLAYER, true);
+ break;
+ }
+ case GOSSIP_OPTION_DARNASSUS_SENJIN_PENNANT:
+ case GOSSIP_OPTION_EXODAR_UNDERCITY_PENNANT:
+ case GOSSIP_OPTION_GNOMEREGAN_ORGRIMMAR_PENNANT:
+ case GOSSIP_OPTION_IRONFORGE_SILVERMOON_PENNANT:
+ case GOSSIP_OPTION_STORMWIND_THUNDERBLUFF_PENNANT:
+ if (IsArgentSquire())
+ DoCastSelf(bannerSpells[gossipListId - 3].spellSquire, true);
+ else
+ DoCastSelf(bannerSpells[gossipListId - 3].spellGruntling, true);
+ break;
+ }
+ player->PlayerTalkClass->SendCloseGossip();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+ bool IsArgentSquire() const { return me->GetEntry() == NPC_ARGENT_SQUIRE; }
+
+ private:
+ TaskScheduler _scheduler;
+ };
+
+ CreatureAI* GetAI(Creature *creature) const override
+ {
+ return new npc_argent_squire_gruntlingAI(creature);
+ }
+};
+
void AddSC_npcs_special()
{
new npc_air_force_bots();
@@ -2553,4 +2711,5 @@ void AddSC_npcs_special()
new npc_imp_in_a_ball();
new npc_stable_master();
new npc_train_wrecker();
+ new npc_argent_squire_gruntling();
}