/* * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Affero General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "CreatureScript.h" #include "Player.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" enum Npcs { NPC_NETHER_DRAKE = 20903, // Netherstorm - Protectorate Nether Drake NPC_IRONWING = 29154, // Stormwind City - Thargold Ironwing NPC_DABIR = 19409, // Hellfire Peninsula - Wing Commander Dabir'ee NPC_BRACK = 19401, // Hellfire Peninsula - Wing Commander Brack NPC_IRENA = 23413, // Blade's Edge Mountains - Skyguard Handler Irena NPC_AYREN = 25059, // Isle of Quel'Danas - Ayren Cloudbreaker NPC_DRAGONHAWK = 25236, // Isle of Quel'Danas - Unrestrained Dragonhawk NPC_VERONIA = 20162, // Netherstorm - Veronia NPC_DEESAK = 23415, // Terokkar Forest - Skyguard Handler Deesak NPC_AFRASASTRASZ = 27575, // Dragonblight - Lord Afrasastrasz NPC_TARIOLSTRASZ = 26443, // Dragonblight - Tariolstrasz NPC_TORASTRASZA = 26949, // Dragonblight - Torastrasza NPC_CESSA = 23704, // Dustwallow Marsh - Cassa Crimsonwing NPC_KIELAR = 17209, // William Kielar - Eastern Plaguelands Towers }; enum Misc { REP_SKYGUARD = 1031, // Sha'tari Skyguard Reputation // Netherstorm QUEST_NETHERY_WINGS = 10438, // On Nethery Wings ITEM_DISRUPTOR = 29778, // Phase Disruptor (Needed for On Nethery Wings) QUEST_BEHIND_ENEMY = 10652, // Behind Enemy Lines // Hellfire Peninsula - Alliance QUEST_GATEWAYS_A = 10146, // Mission: The Murketh and Shaadraz Gateways QUEST_SHATTER_POINT = 10340, // Shatter Point // Hellfire Peninsula - Horde QUEST_GATEWAYS_H = 10129, // Mission: The Murketh and Shaadraz Gateways QUEST_ABBYSAL = 10162, // Mission: The Abyssal Shelf QUEST_ABBYSAL_DAILY = 10347, // Return to the Abyssal Shelf (Daily) QUEST_SPINEBREAKER = 10242, // Spinebreaker Post // Isle of Quel'Danas (Daily) QUEST_DEAD_SCAR = 11532, // Mission: Distraction at the Dead Scar QUEST_AIR_STRIKE = 11533, // The Air Strikes Must Continue QUEST_INTERCEPT = 11542, // Mission: Intercept the Reinforcements QUEST_KEEP_AT_BEY = 11543, // Keeping the Enemy at Bay // Dustwallow Marsh QUEST_SURVEY_ALCAZ = 11142, // Survey Alcaz Island }; class npc_taxi : public CreatureScript { public: npc_taxi() : CreatureScript("npc_taxi") { } bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); uint32 gossipmenuid = 0; gossipmenuid = creature->GetCreatureTemplate()->GossipMenuId; switch (creature->GetEntry()) { case NPC_NETHER_DRAKE: if (player->GetQuestStatus(QUEST_NETHERY_WINGS) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(ITEM_DISRUPTOR)) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); break; case NPC_IRONWING: AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); break; case NPC_DABIR: if (player->GetQuestStatus(QUEST_GATEWAYS_A) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); if (!player->GetQuestRewardStatus(QUEST_SHATTER_POINT)) AddGossipItemFor(player, gossipmenuid, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); break; case NPC_BRACK: if (player->GetQuestStatus(QUEST_GATEWAYS_H) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, gossipmenuid, 5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); if (player->GetQuestStatus(QUEST_ABBYSAL) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_ABBYSAL_DAILY) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); if (player->GetQuestStatus(QUEST_SPINEBREAKER) == QUEST_STATUS_COMPLETE) AddGossipItemFor(player, gossipmenuid, 4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); break; case NPC_IRENA: if (player->GetReputationRank(REP_SKYGUARD) >= REP_HONORED) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); break; case NPC_AYREN: if (player->GetQuestStatus(QUEST_DEAD_SCAR) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_AIR_STRIKE) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); if (player->GetQuestStatus(QUEST_INTERCEPT) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_KEEP_AT_BEY) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); break; case NPC_DRAGONHAWK: if (player->GetQuestStatus(QUEST_INTERCEPT) == QUEST_STATUS_COMPLETE || player->GetQuestStatus(QUEST_KEEP_AT_BEY) == QUEST_STATUS_COMPLETE) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14); break; case NPC_VERONIA: if (player->GetQuestStatus(QUEST_BEHIND_ENEMY) != QUEST_STATUS_REWARDED) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); break; case NPC_DEESAK: if (player->GetReputationRank(REP_SKYGUARD) >= REP_HONORED) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 16); break; case NPC_AFRASASTRASZ: // middle -> ground AddGossipItemFor(player, gossipmenuid, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 17); // middle -> top AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 18); break; case NPC_TARIOLSTRASZ: // ground -> top AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 19); // ground -> middle AddGossipItemFor(player, gossipmenuid, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 20); break; case NPC_TORASTRASZA: // top -> middle AddGossipItemFor(player, gossipmenuid, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 21); // top -> ground AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22); break; case NPC_CESSA: if (player->GetQuestStatus(QUEST_SURVEY_ALCAZ) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 25); break; case NPC_KIELAR: AddGossipItemFor(player, gossipmenuid, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 26); // Northpass Tower. AddGossipItemFor(player, gossipmenuid, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 27); // Eastwall Tower. AddGossipItemFor(player, gossipmenuid, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 28); // Crown Guard Tower. break; } SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); return true; } bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { ClearGossipMenuFor(player); switch (action) { case GOSSIP_ACTION_INFO_DEF + 1: CloseGossipMenuFor(player); player->CastSpell(player, 35731, true); //TaxiPath 628 break; case GOSSIP_ACTION_INFO_DEF + 3: CloseGossipMenuFor(player); player->CastSpell(player, 53335, true); //TaxiPath 1041 (Stormwind Harbor) break; case GOSSIP_ACTION_INFO_DEF + 4: CloseGossipMenuFor(player); player->CastSpell(player, 33768, true); //TaxiPath 585 (Gateways Murket and Shaadraz) break; case GOSSIP_ACTION_INFO_DEF + 5: CloseGossipMenuFor(player); player->CastSpell(player, 35069, true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) break; case GOSSIP_ACTION_INFO_DEF + 8: CloseGossipMenuFor(player); player->CastSpell(player, 33659, true); //TaxiPath 584 (Gateways Murket and Shaadraz) break; case GOSSIP_ACTION_INFO_DEF + 9: CloseGossipMenuFor(player); player->CastSpell(player, 33825, true); //TaxiPath 587 (Aerial Assault Flight (Horde)) break; case GOSSIP_ACTION_INFO_DEF + 10: CloseGossipMenuFor(player); player->CastSpell(player, 34578, true); //TaxiPath 604 (Taxi - Reaver's Fall to Spinebreaker Ridge) break; case GOSSIP_ACTION_INFO_DEF + 11: CloseGossipMenuFor(player); player->CastSpell(player, 41278, true); //TaxiPath 706 break; case GOSSIP_ACTION_INFO_DEF + 12: CloseGossipMenuFor(player); player->CastSpell(player, 45071, true); //TaxiPath 779 break; case GOSSIP_ACTION_INFO_DEF + 13: CloseGossipMenuFor(player); player->CastSpell(player, 45113, true); //TaxiPath 784 break; case GOSSIP_ACTION_INFO_DEF + 14: CloseGossipMenuFor(player); player->CastSpell(player, 45353, true); //TaxiPath 788 break; case GOSSIP_ACTION_INFO_DEF + 15: CloseGossipMenuFor(player); player->CastSpell(player, 34905, true); //TaxiPath 606 break; case GOSSIP_ACTION_INFO_DEF + 16: CloseGossipMenuFor(player); player->CastSpell(player, 41279, true); //TaxiPath 705 (Taxi - Skettis to Skyguard Outpost) break; case GOSSIP_ACTION_INFO_DEF + 17: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(882); break; case GOSSIP_ACTION_INFO_DEF + 18: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(881); break; case GOSSIP_ACTION_INFO_DEF + 19: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(878); break; case GOSSIP_ACTION_INFO_DEF + 20: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(883); break; case GOSSIP_ACTION_INFO_DEF + 21: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(880); break; case GOSSIP_ACTION_INFO_DEF + 22: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(879); break; case GOSSIP_ACTION_INFO_DEF + 25: CloseGossipMenuFor(player); player->CastSpell(player, 42295, true); break; case GOSSIP_ACTION_INFO_DEF + 26: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(494); break; case GOSSIP_ACTION_INFO_DEF + 27: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(495); break; case GOSSIP_ACTION_INFO_DEF + 28: CloseGossipMenuFor(player); player->ActivateTaxiPathTo(496); break; } return true; } }; void AddSC_npc_taxi() { new npc_taxi; }