aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-03-07 13:33:19 -0300
committerShauren <shauren.trinity@gmail.com>2019-08-17 20:04:14 +0200
commit590009b0849f5b71cc21d479d19f4d02a6843709 (patch)
tree94a31f27c05bd0b7fb42be0e60537369bd1ae3b7
parent40a9055a5fe994dd0b79ebb099e29dbc1d517b0b (diff)
Core/Scripts: converted Argent Tournament pennants to AI
Closes #14616 (cherrypicked from 804257b99a26ca2dc1941a7577e5ae06c954f9cb)
-rw-r--r--sql/updates/world/master/2019_08_05_00_world_2017_03_07_00_world.sql2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp260
-rw-r--r--src/server/scripts/World/npcs_special.cpp244
3 files changed, 246 insertions, 260 deletions
diff --git a/sql/updates/world/master/2019_08_05_00_world_2017_03_07_00_world.sql b/sql/updates/world/master/2019_08_05_00_world_2017_03_07_00_world.sql
new file mode 100644
index 00000000000..22844e5c488
--- /dev/null
+++ b/sql/updates/world/master/2019_08_05_00_world_2017_03_07_00_world.sql
@@ -0,0 +1,2 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_on_tournament_mount';
+UPDATE `creature_template` SET `ScriptName`='npc_tournament_mount' WHERE `entry` IN (33217,33316,33317,33318,33319,33320,33321,33322,33323,33324,33782,33845,33844);
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 148009a780a..2747f9aeb39 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2221,265 +2221,6 @@ class spell_gen_obsidian_armor : public SpellScriptLoader
}
};
-enum TournamentPennantSpells
-{
- SPELL_PENNANT_STORMWIND_ASPIRANT = 62595,
- SPELL_PENNANT_STORMWIND_VALIANT = 62596,
- SPELL_PENNANT_STORMWIND_CHAMPION = 62594,
- SPELL_PENNANT_GNOMEREGAN_ASPIRANT = 63394,
- SPELL_PENNANT_GNOMEREGAN_VALIANT = 63395,
- SPELL_PENNANT_GNOMEREGAN_CHAMPION = 63396,
- SPELL_PENNANT_SEN_JIN_ASPIRANT = 63397,
- SPELL_PENNANT_SEN_JIN_VALIANT = 63398,
- SPELL_PENNANT_SEN_JIN_CHAMPION = 63399,
- SPELL_PENNANT_SILVERMOON_ASPIRANT = 63401,
- SPELL_PENNANT_SILVERMOON_VALIANT = 63402,
- SPELL_PENNANT_SILVERMOON_CHAMPION = 63403,
- SPELL_PENNANT_DARNASSUS_ASPIRANT = 63404,
- SPELL_PENNANT_DARNASSUS_VALIANT = 63405,
- SPELL_PENNANT_DARNASSUS_CHAMPION = 63406,
- SPELL_PENNANT_EXODAR_ASPIRANT = 63421,
- SPELL_PENNANT_EXODAR_VALIANT = 63422,
- SPELL_PENNANT_EXODAR_CHAMPION = 63423,
- SPELL_PENNANT_IRONFORGE_ASPIRANT = 63425,
- SPELL_PENNANT_IRONFORGE_VALIANT = 63426,
- SPELL_PENNANT_IRONFORGE_CHAMPION = 63427,
- SPELL_PENNANT_UNDERCITY_ASPIRANT = 63428,
- SPELL_PENNANT_UNDERCITY_VALIANT = 63429,
- SPELL_PENNANT_UNDERCITY_CHAMPION = 63430,
- SPELL_PENNANT_ORGRIMMAR_ASPIRANT = 63431,
- SPELL_PENNANT_ORGRIMMAR_VALIANT = 63432,
- SPELL_PENNANT_ORGRIMMAR_CHAMPION = 63433,
- SPELL_PENNANT_THUNDER_BLUFF_ASPIRANT = 63434,
- SPELL_PENNANT_THUNDER_BLUFF_VALIANT = 63435,
- SPELL_PENNANT_THUNDER_BLUFF_CHAMPION = 63436,
- SPELL_PENNANT_ARGENT_CRUSADE_ASPIRANT = 63606,
- SPELL_PENNANT_ARGENT_CRUSADE_VALIANT = 63500,
- SPELL_PENNANT_ARGENT_CRUSADE_CHAMPION = 63501,
- SPELL_PENNANT_EBON_BLADE_ASPIRANT = 63607,
- SPELL_PENNANT_EBON_BLADE_VALIANT = 63608,
- SPELL_PENNANT_EBON_BLADE_CHAMPION = 63609
-};
-
-enum TournamentMounts
-{
- NPC_STORMWIND_STEED = 33217,
- NPC_IRONFORGE_RAM = 33316,
- NPC_GNOMEREGAN_MECHANOSTRIDER = 33317,
- NPC_EXODAR_ELEKK = 33318,
- NPC_DARNASSIAN_NIGHTSABER = 33319,
- NPC_ORGRIMMAR_WOLF = 33320,
- NPC_DARK_SPEAR_RAPTOR = 33321,
- NPC_THUNDER_BLUFF_KODO = 33322,
- NPC_SILVERMOON_HAWKSTRIDER = 33323,
- NPC_FORSAKEN_WARHORSE = 33324,
- NPC_ARGENT_WARHORSE = 33782,
- NPC_ARGENT_STEED_ASPIRANT = 33845,
- NPC_ARGENT_HAWKSTRIDER_ASPIRANT = 33844
-};
-
-enum TournamentQuestsAchievements
-{
- ACHIEVEMENT_CHAMPION_STORMWIND = 2781,
- ACHIEVEMENT_CHAMPION_DARNASSUS = 2777,
- ACHIEVEMENT_CHAMPION_IRONFORGE = 2780,
- ACHIEVEMENT_CHAMPION_GNOMEREGAN = 2779,
- ACHIEVEMENT_CHAMPION_THE_EXODAR = 2778,
- ACHIEVEMENT_CHAMPION_ORGRIMMAR = 2783,
- ACHIEVEMENT_CHAMPION_SEN_JIN = 2784,
- ACHIEVEMENT_CHAMPION_THUNDER_BLUFF = 2786,
- ACHIEVEMENT_CHAMPION_UNDERCITY = 2787,
- ACHIEVEMENT_CHAMPION_SILVERMOON = 2785,
- ACHIEVEMENT_ARGENT_VALOR = 2758,
- ACHIEVEMENT_CHAMPION_ALLIANCE = 2782,
- ACHIEVEMENT_CHAMPION_HORDE = 2788,
-
- QUEST_VALIANT_OF_STORMWIND = 13593,
- QUEST_A_VALIANT_OF_STORMWIND = 13684,
- QUEST_VALIANT_OF_DARNASSUS = 13706,
- QUEST_A_VALIANT_OF_DARNASSUS = 13689,
- QUEST_VALIANT_OF_IRONFORGE = 13703,
- QUEST_A_VALIANT_OF_IRONFORGE = 13685,
- QUEST_VALIANT_OF_GNOMEREGAN = 13704,
- QUEST_A_VALIANT_OF_GNOMEREGAN = 13688,
- QUEST_VALIANT_OF_THE_EXODAR = 13705,
- QUEST_A_VALIANT_OF_THE_EXODAR = 13690,
- QUEST_VALIANT_OF_ORGRIMMAR = 13707,
- QUEST_A_VALIANT_OF_ORGRIMMAR = 13691,
- QUEST_VALIANT_OF_SEN_JIN = 13708,
- QUEST_A_VALIANT_OF_SEN_JIN = 13693,
- QUEST_VALIANT_OF_THUNDER_BLUFF = 13709,
- QUEST_A_VALIANT_OF_THUNDER_BLUFF = 13694,
- QUEST_VALIANT_OF_UNDERCITY = 13710,
- QUEST_A_VALIANT_OF_UNDERCITY = 13695,
- QUEST_VALIANT_OF_SILVERMOON = 13711,
- QUEST_A_VALIANT_OF_SILVERMOON = 13696
-};
-
-class spell_gen_on_tournament_mount : public SpellScriptLoader
-{
- public:
- spell_gen_on_tournament_mount() : SpellScriptLoader("spell_gen_on_tournament_mount") { }
-
- class spell_gen_on_tournament_mount_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_on_tournament_mount_AuraScript);
-
- public:
- spell_gen_on_tournament_mount_AuraScript()
- {
- _pennantSpellId = 0;
- }
-
- private:
- uint32 _pennantSpellId;
-
- bool Load() override
- {
- return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- {
- if (Unit* vehicle = caster->GetVehicleBase())
- {
- _pennantSpellId = GetPennatSpellId(caster->ToPlayer(), vehicle);
- caster->CastSpell(caster, _pennantSpellId, true);
- }
- }
- }
-
- void HandleRemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- caster->RemoveAurasDueToSpell(_pennantSpellId);
- }
-
- uint32 GetPennatSpellId(Player* player, Unit* mount)
- {
- switch (mount->GetEntry())
- {
- case NPC_ARGENT_STEED_ASPIRANT:
- case NPC_STORMWIND_STEED:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_STORMWIND))
- return SPELL_PENNANT_STORMWIND_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_STORMWIND) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_STORMWIND))
- return SPELL_PENNANT_STORMWIND_VALIANT;
- else
- return SPELL_PENNANT_STORMWIND_ASPIRANT;
- }
- case NPC_GNOMEREGAN_MECHANOSTRIDER:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_GNOMEREGAN))
- return SPELL_PENNANT_GNOMEREGAN_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_GNOMEREGAN) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_GNOMEREGAN))
- return SPELL_PENNANT_GNOMEREGAN_VALIANT;
- else
- return SPELL_PENNANT_GNOMEREGAN_ASPIRANT;
- }
- case NPC_DARK_SPEAR_RAPTOR:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_SEN_JIN))
- return SPELL_PENNANT_SEN_JIN_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_SEN_JIN) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_SEN_JIN))
- return SPELL_PENNANT_SEN_JIN_VALIANT;
- else
- return SPELL_PENNANT_SEN_JIN_ASPIRANT;
- }
- case NPC_ARGENT_HAWKSTRIDER_ASPIRANT:
- case NPC_SILVERMOON_HAWKSTRIDER:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_SILVERMOON))
- return SPELL_PENNANT_SILVERMOON_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_SILVERMOON) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_SILVERMOON))
- return SPELL_PENNANT_SILVERMOON_VALIANT;
- else
- return SPELL_PENNANT_SILVERMOON_ASPIRANT;
- }
- case NPC_DARNASSIAN_NIGHTSABER:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_DARNASSUS))
- return SPELL_PENNANT_DARNASSUS_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_DARNASSUS) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_DARNASSUS))
- return SPELL_PENNANT_DARNASSUS_VALIANT;
- else
- return SPELL_PENNANT_DARNASSUS_ASPIRANT;
- }
- case NPC_EXODAR_ELEKK:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_THE_EXODAR))
- return SPELL_PENNANT_EXODAR_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_THE_EXODAR) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_THE_EXODAR))
- return SPELL_PENNANT_EXODAR_VALIANT;
- else
- return SPELL_PENNANT_EXODAR_ASPIRANT;
- }
- case NPC_IRONFORGE_RAM:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_IRONFORGE))
- return SPELL_PENNANT_IRONFORGE_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_IRONFORGE) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_IRONFORGE))
- return SPELL_PENNANT_IRONFORGE_VALIANT;
- else
- return SPELL_PENNANT_IRONFORGE_ASPIRANT;
- }
- case NPC_FORSAKEN_WARHORSE:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_UNDERCITY))
- return SPELL_PENNANT_UNDERCITY_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_UNDERCITY) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_UNDERCITY))
- return SPELL_PENNANT_UNDERCITY_VALIANT;
- else
- return SPELL_PENNANT_UNDERCITY_ASPIRANT;
- }
- case NPC_ORGRIMMAR_WOLF:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_ORGRIMMAR))
- return SPELL_PENNANT_ORGRIMMAR_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_ORGRIMMAR) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_ORGRIMMAR))
- return SPELL_PENNANT_ORGRIMMAR_VALIANT;
- else
- return SPELL_PENNANT_ORGRIMMAR_ASPIRANT;
- }
- case NPC_THUNDER_BLUFF_KODO:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_THUNDER_BLUFF))
- return SPELL_PENNANT_THUNDER_BLUFF_CHAMPION;
- else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_THUNDER_BLUFF) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_THUNDER_BLUFF))
- return SPELL_PENNANT_THUNDER_BLUFF_VALIANT;
- else
- return SPELL_PENNANT_THUNDER_BLUFF_ASPIRANT;
- }
- case NPC_ARGENT_WARHORSE:
- {
- if (player->HasAchieved(ACHIEVEMENT_CHAMPION_ALLIANCE) || player->HasAchieved(ACHIEVEMENT_CHAMPION_HORDE))
- return player->getClass() == CLASS_DEATH_KNIGHT ? SPELL_PENNANT_EBON_BLADE_CHAMPION : SPELL_PENNANT_ARGENT_CRUSADE_CHAMPION;
- else if (player->HasAchieved(ACHIEVEMENT_ARGENT_VALOR))
- return player->getClass() == CLASS_DEATH_KNIGHT ? SPELL_PENNANT_EBON_BLADE_VALIANT : SPELL_PENNANT_ARGENT_CRUSADE_VALIANT;
- else
- return player->getClass() == CLASS_DEATH_KNIGHT ? SPELL_PENNANT_EBON_BLADE_ASPIRANT : SPELL_PENNANT_ARGENT_CRUSADE_ASPIRANT;
- }
- default:
- return 0;
- }
- }
-
- void Register() override
- {
- AfterEffectApply += AuraEffectApplyFn(spell_gen_on_tournament_mount_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_on_tournament_mount_AuraScript::HandleRemoveEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_gen_on_tournament_mount_AuraScript();
- }
-};
-
class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader
{
public:
@@ -4779,7 +4520,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_mounted_charge();
new spell_gen_netherbloom();
new spell_gen_obsidian_armor();
- new spell_gen_on_tournament_mount();
new spell_gen_oracle_wolvar_reputation();
new spell_gen_orc_disguise();
new spell_gen_paralytic_poison();
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
index 5c2cc89eea7..4ef51624b13 100644
--- a/src/server/scripts/World/npcs_special.cpp
+++ b/src/server/scripts/World/npcs_special.cpp
@@ -19,6 +19,7 @@
#include "ScriptMgr.h"
#include "CellImpl.h"
#include "CreatureTextMgr.h"
+#include "CombatAI.h"
#include "GameEventMgr.h"
#include "GameObject.h"
#include "GameObjectAI.h"
@@ -1478,6 +1479,248 @@ public:
}
};
+enum TournamentPennantSpells
+{
+ SPELL_PENNANT_STORMWIND_ASPIRANT = 62595,
+ SPELL_PENNANT_STORMWIND_VALIANT = 62596,
+ SPELL_PENNANT_STORMWIND_CHAMPION = 62594,
+ SPELL_PENNANT_GNOMEREGAN_ASPIRANT = 63394,
+ SPELL_PENNANT_GNOMEREGAN_VALIANT = 63395,
+ SPELL_PENNANT_GNOMEREGAN_CHAMPION = 63396,
+ SPELL_PENNANT_SEN_JIN_ASPIRANT = 63397,
+ SPELL_PENNANT_SEN_JIN_VALIANT = 63398,
+ SPELL_PENNANT_SEN_JIN_CHAMPION = 63399,
+ SPELL_PENNANT_SILVERMOON_ASPIRANT = 63401,
+ SPELL_PENNANT_SILVERMOON_VALIANT = 63402,
+ SPELL_PENNANT_SILVERMOON_CHAMPION = 63403,
+ SPELL_PENNANT_DARNASSUS_ASPIRANT = 63404,
+ SPELL_PENNANT_DARNASSUS_VALIANT = 63405,
+ SPELL_PENNANT_DARNASSUS_CHAMPION = 63406,
+ SPELL_PENNANT_EXODAR_ASPIRANT = 63421,
+ SPELL_PENNANT_EXODAR_VALIANT = 63422,
+ SPELL_PENNANT_EXODAR_CHAMPION = 63423,
+ SPELL_PENNANT_IRONFORGE_ASPIRANT = 63425,
+ SPELL_PENNANT_IRONFORGE_VALIANT = 63426,
+ SPELL_PENNANT_IRONFORGE_CHAMPION = 63427,
+ SPELL_PENNANT_UNDERCITY_ASPIRANT = 63428,
+ SPELL_PENNANT_UNDERCITY_VALIANT = 63429,
+ SPELL_PENNANT_UNDERCITY_CHAMPION = 63430,
+ SPELL_PENNANT_ORGRIMMAR_ASPIRANT = 63431,
+ SPELL_PENNANT_ORGRIMMAR_VALIANT = 63432,
+ SPELL_PENNANT_ORGRIMMAR_CHAMPION = 63433,
+ SPELL_PENNANT_THUNDER_BLUFF_ASPIRANT = 63434,
+ SPELL_PENNANT_THUNDER_BLUFF_VALIANT = 63435,
+ SPELL_PENNANT_THUNDER_BLUFF_CHAMPION = 63436,
+ SPELL_PENNANT_ARGENT_CRUSADE_ASPIRANT = 63606,
+ SPELL_PENNANT_ARGENT_CRUSADE_VALIANT = 63500,
+ SPELL_PENNANT_ARGENT_CRUSADE_CHAMPION = 63501,
+ SPELL_PENNANT_EBON_BLADE_ASPIRANT = 63607,
+ SPELL_PENNANT_EBON_BLADE_VALIANT = 63608,
+ SPELL_PENNANT_EBON_BLADE_CHAMPION = 63609
+};
+
+ enum TournamentMounts
+{
+ NPC_STORMWIND_STEED = 33217,
+ NPC_IRONFORGE_RAM = 33316,
+ NPC_GNOMEREGAN_MECHANOSTRIDER = 33317,
+ NPC_EXODAR_ELEKK = 33318,
+ NPC_DARNASSIAN_NIGHTSABER = 33319,
+ NPC_ORGRIMMAR_WOLF = 33320,
+ NPC_DARK_SPEAR_RAPTOR = 33321,
+ NPC_THUNDER_BLUFF_KODO = 33322,
+ NPC_SILVERMOON_HAWKSTRIDER = 33323,
+ NPC_FORSAKEN_WARHORSE = 33324,
+ NPC_ARGENT_WARHORSE = 33782,
+ NPC_ARGENT_STEED_ASPIRANT = 33845,
+ NPC_ARGENT_HAWKSTRIDER_ASPIRANT = 33844
+};
+
+ enum TournamentQuestsAchievements
+{
+ ACHIEVEMENT_CHAMPION_STORMWIND = 2781,
+ ACHIEVEMENT_CHAMPION_DARNASSUS = 2777,
+ ACHIEVEMENT_CHAMPION_IRONFORGE = 2780,
+ ACHIEVEMENT_CHAMPION_GNOMEREGAN = 2779,
+ ACHIEVEMENT_CHAMPION_THE_EXODAR = 2778,
+ ACHIEVEMENT_CHAMPION_ORGRIMMAR = 2783,
+ ACHIEVEMENT_CHAMPION_SEN_JIN = 2784,
+ ACHIEVEMENT_CHAMPION_THUNDER_BLUFF = 2786,
+ ACHIEVEMENT_CHAMPION_UNDERCITY = 2787,
+ ACHIEVEMENT_CHAMPION_SILVERMOON = 2785,
+ ACHIEVEMENT_ARGENT_VALOR = 2758,
+ ACHIEVEMENT_CHAMPION_ALLIANCE = 2782,
+ ACHIEVEMENT_CHAMPION_HORDE = 2788,
+
+ QUEST_VALIANT_OF_STORMWIND = 13593,
+ QUEST_A_VALIANT_OF_STORMWIND = 13684,
+ QUEST_VALIANT_OF_DARNASSUS = 13706,
+ QUEST_A_VALIANT_OF_DARNASSUS = 13689,
+ QUEST_VALIANT_OF_IRONFORGE = 13703,
+ QUEST_A_VALIANT_OF_IRONFORGE = 13685,
+ QUEST_VALIANT_OF_GNOMEREGAN = 13704,
+ QUEST_A_VALIANT_OF_GNOMEREGAN = 13688,
+ QUEST_VALIANT_OF_THE_EXODAR = 13705,
+ QUEST_A_VALIANT_OF_THE_EXODAR = 13690,
+ QUEST_VALIANT_OF_ORGRIMMAR = 13707,
+ QUEST_A_VALIANT_OF_ORGRIMMAR = 13691,
+ QUEST_VALIANT_OF_SEN_JIN = 13708,
+ QUEST_A_VALIANT_OF_SEN_JIN = 13693,
+ QUEST_VALIANT_OF_THUNDER_BLUFF = 13709,
+ QUEST_A_VALIANT_OF_THUNDER_BLUFF = 13694,
+ QUEST_VALIANT_OF_UNDERCITY = 13710,
+ QUEST_A_VALIANT_OF_UNDERCITY = 13695,
+ QUEST_VALIANT_OF_SILVERMOON = 13711,
+ QUEST_A_VALIANT_OF_SILVERMOON = 13696
+};
+
+ class npc_tournament_mount : public CreatureScript
+{
+ public:
+ npc_tournament_mount() : CreatureScript("npc_tournament_mount") { }
+
+ struct npc_tournament_mountAI : public VehicleAI
+ {
+ npc_tournament_mountAI(Creature* creature) : VehicleAI(creature)
+ {
+ _pennantSpellId = 0;
+ }
+
+ void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override
+ {
+ Player* player = passenger->ToPlayer();
+ if (!player)
+ return;
+
+ if (apply)
+ {
+ _pennantSpellId = GetPennantSpellId(player);
+ player->CastSpell((Unit*)nullptr, _pennantSpellId, true);
+ }
+ else
+ player->RemoveAurasDueToSpell(_pennantSpellId);
+ }
+
+ private:
+ uint32 _pennantSpellId;
+
+ uint32 GetPennantSpellId(Player* player) const
+ {
+ switch (me->GetEntry())
+ {
+ case NPC_ARGENT_STEED_ASPIRANT:
+ case NPC_STORMWIND_STEED:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_STORMWIND))
+ return SPELL_PENNANT_STORMWIND_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_STORMWIND) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_STORMWIND))
+ return SPELL_PENNANT_STORMWIND_VALIANT;
+ else
+ return SPELL_PENNANT_STORMWIND_ASPIRANT;
+ }
+ case NPC_GNOMEREGAN_MECHANOSTRIDER:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_GNOMEREGAN))
+ return SPELL_PENNANT_GNOMEREGAN_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_GNOMEREGAN) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_GNOMEREGAN))
+ return SPELL_PENNANT_GNOMEREGAN_VALIANT;
+ else
+ return SPELL_PENNANT_GNOMEREGAN_ASPIRANT;
+ }
+ case NPC_DARK_SPEAR_RAPTOR:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_SEN_JIN))
+ return SPELL_PENNANT_SEN_JIN_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_SEN_JIN) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_SEN_JIN))
+ return SPELL_PENNANT_SEN_JIN_VALIANT;
+ else
+ return SPELL_PENNANT_SEN_JIN_ASPIRANT;
+ }
+ case NPC_ARGENT_HAWKSTRIDER_ASPIRANT:
+ case NPC_SILVERMOON_HAWKSTRIDER:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_SILVERMOON))
+ return SPELL_PENNANT_SILVERMOON_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_SILVERMOON) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_SILVERMOON))
+ return SPELL_PENNANT_SILVERMOON_VALIANT;
+ else
+ return SPELL_PENNANT_SILVERMOON_ASPIRANT;
+ }
+ case NPC_DARNASSIAN_NIGHTSABER:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_DARNASSUS))
+ return SPELL_PENNANT_DARNASSUS_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_DARNASSUS) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_DARNASSUS))
+ return SPELL_PENNANT_DARNASSUS_VALIANT;
+ else
+ return SPELL_PENNANT_DARNASSUS_ASPIRANT;
+ }
+ case NPC_EXODAR_ELEKK:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_THE_EXODAR))
+ return SPELL_PENNANT_EXODAR_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_THE_EXODAR) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_THE_EXODAR))
+ return SPELL_PENNANT_EXODAR_VALIANT;
+ else
+ return SPELL_PENNANT_EXODAR_ASPIRANT;
+ }
+ case NPC_IRONFORGE_RAM:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_IRONFORGE))
+ return SPELL_PENNANT_IRONFORGE_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_IRONFORGE) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_IRONFORGE))
+ return SPELL_PENNANT_IRONFORGE_VALIANT;
+ else
+ return SPELL_PENNANT_IRONFORGE_ASPIRANT;
+ }
+ case NPC_FORSAKEN_WARHORSE:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_UNDERCITY))
+ return SPELL_PENNANT_UNDERCITY_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_UNDERCITY) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_UNDERCITY))
+ return SPELL_PENNANT_UNDERCITY_VALIANT;
+ else
+ return SPELL_PENNANT_UNDERCITY_ASPIRANT;
+ }
+ case NPC_ORGRIMMAR_WOLF:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_ORGRIMMAR))
+ return SPELL_PENNANT_ORGRIMMAR_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_ORGRIMMAR) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_ORGRIMMAR))
+ return SPELL_PENNANT_ORGRIMMAR_VALIANT;
+ else
+ return SPELL_PENNANT_ORGRIMMAR_ASPIRANT;
+ }
+ case NPC_THUNDER_BLUFF_KODO:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_THUNDER_BLUFF))
+ return SPELL_PENNANT_THUNDER_BLUFF_CHAMPION;
+ else if (player->GetQuestRewardStatus(QUEST_VALIANT_OF_THUNDER_BLUFF) || player->GetQuestRewardStatus(QUEST_A_VALIANT_OF_THUNDER_BLUFF))
+ return SPELL_PENNANT_THUNDER_BLUFF_VALIANT;
+ else
+ return SPELL_PENNANT_THUNDER_BLUFF_ASPIRANT;
+ }
+ case NPC_ARGENT_WARHORSE:
+ {
+ if (player->HasAchieved(ACHIEVEMENT_CHAMPION_ALLIANCE) || player->HasAchieved(ACHIEVEMENT_CHAMPION_HORDE))
+ return player->getClass() == CLASS_DEATH_KNIGHT ? SPELL_PENNANT_EBON_BLADE_CHAMPION : SPELL_PENNANT_ARGENT_CRUSADE_CHAMPION;
+ else if (player->HasAchieved(ACHIEVEMENT_ARGENT_VALOR))
+ return player->getClass() == CLASS_DEATH_KNIGHT ? SPELL_PENNANT_EBON_BLADE_VALIANT : SPELL_PENNANT_ARGENT_CRUSADE_VALIANT;
+ else
+ return player->getClass() == CLASS_DEATH_KNIGHT ? SPELL_PENNANT_EBON_BLADE_ASPIRANT : SPELL_PENNANT_ARGENT_CRUSADE_ASPIRANT;
+ }
+ default:
+ return 0;
+ }
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_tournament_mountAI(creature);
+ }
+};
+
/*####
## npc_brewfest_reveler
####*/
@@ -2631,6 +2874,7 @@ void AddSC_npcs_special()
new npc_sayge();
new npc_steam_tonk();
new npc_tonk_mine();
+ new npc_tournament_mount();
new npc_brewfest_reveler();
new npc_training_dummy();
new npc_wormhole();