diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-03-07 13:33:19 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-03-07 13:33:19 -0300 |
commit | 804257b99a26ca2dc1941a7577e5ae06c954f9cb (patch) | |
tree | 24cfc255123232935c0fe6dc20498a561460c4d7 /src | |
parent | c7a5aa3902ca548ac4355d659e29c6c88cef3525 (diff) |
Core/Scripts: converted Argent Tournament pennants to AI
Closes #14616
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 260 | ||||
-rw-r--r-- | src/server/scripts/World/npcs_special.cpp | 244 |
2 files changed, 244 insertions, 260 deletions
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 0a5890f4a5d..4f218a04680 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -2410,265 +2410,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: @@ -4547,7 +4288,6 @@ void AddSC_generic_spell_scripts() new spell_gen_netherbloom(); new spell_gen_nightmare_vine(); 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 d5901632ff1..0edde6cd571 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -33,6 +33,7 @@ #include "SpellAuras.h" #include "Pet.h" #include "CreatureTextMgr.h" +#include "CombatAI.h" #include "SmartAI.h" #include "Vehicle.h" #include "MoveSplineInit.h" @@ -1481,6 +1482,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 ####*/ @@ -2731,6 +2974,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(); |