Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ScriptMgr.h"
- #include "ScriptedCreature.h"
- #include "ScriptedGossip.h"
- #include "Creature.h"
- #include "Player.h"
- #include "World.h"
- static const uint32 LOC_OFFSET = 1200;
- struct TeleportInfo
- {
- float x, y, z, orientation;
- uint32 mapid;
- int reqLevel;
- uint32 cost;
- bool CastParachute = false;
- };
- static const TeleportInfo locations[] =
- {
- // x y z o map l c
- // Alliance capitals
- { 10037.42f, 2499.61f, 1318.43f, 3.30f, 1, 0, 1}, // 00 Darnassus
- {-8802.53f, 636.65f, 94.45f, 3.65f, 0, 0, 1}, // 01 Stormwind
- {-4823.27f, -1161.57f, 502.21f, 1.4f, 0, 0, 1}, // 02 Ironforge
- {-3868.21f, -11640.79f, -137.66f, 2.51f, 530, 0, 1}, // 03 Exodar
- // Horde capitals
- { 9928.50f, -7131.41f, 47.94f, 4.0f, 530, 0, 1 }, // 04 Silvermoon
- { 1569.97f, -4397.41f, 16.05f, 0.5f, 1, 0, 1}, // 05 Orgrimmar
- { 1771.33f, 62.51f, -46.32f, 0.78f, 0, 0, 1 }, // 06 Undercity
- {-1277.37f, 124.8f, 131.29f, 5.22f, 1, 0, 1}, // 07 Thunder Bluff
- // Neutral cities
- {-1850.21f, 5435.82f, -10.96f, 3.4f, 530, 58, 1}, // 08 Shattrath
- { 5804.14f, 624.77f, 647.77f, 1.6f, 571, 68, 1}, // 09 Dalaran
- {12947.40f, -6893.31f, 5.68f, 3.1f, 530, 65, 1}, // 10 Isle of Quel'Danas
- // Classic instances
- { 1800.53f, -4394.68f, -17.93f, 5.5f, 1, 8, 2}, // 11 Ragefire Chasm
- { -722.53f, -2226.30f, 16.94f, 2.7f, 1, 10, 2}, // 12 The Wailing Caverns
- {-11212.0f, 1658.58f, 25.67f, 1.5f, 0, 10, 2}, // 13 Deadmines
- { 4254.58f, 664.74f, -29.04f, 1.97f, 1, 15, 2}, // 14 Blackfathom Deeps
- { -254.47f, 1524.68f, 76.89f, 1.6f, 0, 15, 2}, // 15 Shadowfang Keep
- {-8769.76f, 813.08f, 97.63f, 2.26f, 0, 20, 2}, // 16 Stockade
- {-4484.04f, -1739.40f, 86.47f, 1.23f, 1, 24, 4}, // 17 Razorfen Kraul
- {-5162.62f, 667.81f, 248.05f, 1.48f, 0, 20, 4}, // 18 Gnomeregan
- {-4645.08f, -2470.85f, 85.53f, 4.39f, 1, 25, 4}, // 19 Razorfen Downs
- { 2843.89f, -693.74f, 139.32f, 5.11f, 0, 25, 4}, // 20 Scarlet Monastery
- {-6119.70f, -2957.30f, 204.11f, 0.03f, 0, 35, 6}, // 21 Uldaman
- {-6839.39f, -2911.03f, 8.87f, 0.41f, 1, 35, 6}, // 22 Zul'Farrak
- {-1433.33f, 2955.34f, 96.21f, 4.82f, 1, 40, 8}, // 23 Maraudon
- {-10346.9f,- 3851.90f, -43.41f, 6.09f, 0, 45, 8}, // 24 The Sunken Temple
- {-7301.03f, -913.19f, 165.37f, 0.08f, 0, 45, 8}, // 25 Blackrock Depths
- {-3982.47f, 1127.79f, 161.02f, 0.05f, 1, 50, 10}, // 26 Dire Maul
- {-7535.43f, -1212.04f, 285.45f, 5.29f, 0, 50, 10}, // 27 Blackrock Spire
- { 3263.54f, -3379.46f, 143.59f, 0.00f, 0, 50, 10}, // 28 Stratholme
- { 1219.01f, -2604.66f, 85.61f, 0.50f, 0, 50, 10}, // 29 Scholomance
- {-11915.4f, -866.96f, 30.79f, 4.72f, 0, 55, 10}, // 30 Zul'Gurub
- {-4707.01f, -3726.64f, 54.72f, 3.83f, 1, 55, 10}, // 31 Onyxia's Lair
- {-8252.78f, 1536.68f, - 4.76f, 3.04f, 1, 55, 10}, // 32 Ahn'Qiraj
- // BC instances
- {-11118.8f, -2010.84f, 47.0807f, 0.0f, 0, 70, 20}, // 33 Karazhan
- { 3539.01f, 5082.36f, 1.70f, 0.0f, 530, 65, 20}, // 34 Gruul's Lair
- { -305.82f, 3056.40f, -2.47f, 2.01f, 530, 58, 20}, // 35 Hellfire Citadel
- { 517.29f, 6976.28f, 32.01f, 0.0f, 530, 58, 20}, // 36 Coilfang Reservoir
- { 3089.58f, 1399.05f, 187.65f, 4.79f, 530, 70, 20}, // 37 Tempest Keep
- {-8173.66f, -4746.36f, 33.84f, 4.94f, 1, 66, 20}, // 38 Caverns of Time
- { 6846.95f, -7954.5f, 170.028f, 4.62f, 530, 70, 20}, // 39 Zul'Aman
- {-3610.72f, 324.99f, 37.40f, 3.28f, 530, 70, 20}, // 40 Black Temple
- { 12884.6f, -7317.69f, 65.50f, 4.8f, 530, 70, 40}, // 41 Magister's Terrace
- { 12574.1f, -6774.81f, 15.09f, 3.14f, 530, 70, 40}, // 42 Sunwell Plateau
- {-2045.23f, 6657.76f, 13.05f, 1.84f, 530, 70, 1}, // 43 PvP Zone #1
- { -782.06f, 6943.68f, 35.0f, 2.59f, 530, 70, 1}, // 44 PvP Zone #2
- { 3439.76f, 2917.41f, 144.01f, 5.81f, 530, 70, 1}, // 45 PvP Zone #3
- { 496.94f, 199.93f, 40.515f, 3.35f, 1101, 70, 1}, // 46 Duel Zone v2
- };
- class Teleguy : public CreatureScript
- {
- public:
- Teleguy() : CreatureScript("teleguy") {}
- enum
- {
- SPELL_PARACHUTE = 45472
- };
- void TeleportTo(Player *player, Creature *creature, uint32 action)
- {
- player->CLOSE_GOSSIP_MENU();
- TeleportInfo const& tp = locations[action - LOC_OFFSET];
- //if( !player->HasEnoughMoney(500 * locations[idx].cost))
- //{
- // creature->MonsterSay("You don't have enough money!", LANG_UNIVERSAL, NULL);
- //}
- //else if( player->getLevel() < locations[idx].reqLevel)
- if( player->getLevel() < tp.reqLevel)
- {
- //creature->MonsterSay("You level is too low!", LANG_UNIVERSAL, NULL);
- }
- else
- {
- player->RemoveAurasByType(SPELL_AURA_MOUNTED);
- player->TeleportTo(tp.mapid, tp.x, tp.y, tp.z + (tp.CastParachute ? 50.0f : 0.0f), tp.orientation);
- if (tp.CastParachute)
- player->CastSpell(player, SPELL_PARACHUTE, true);
- //player->ModifyMoney(-500 * locations[idx].cost);
- }
- }
- void ShowMainMenu(Player* player, Creature *creature)
- {
- player->PlayerTalkClass->ClearMenus();
- player->ADD_GOSSIP_ITEM( 5, "Duel Zone." , GOSSIP_SENDER_MAIN, LOC_OFFSET + 46);
- //player->ADD_GOSSIP_ITEM( 5, "PvP Zone #1" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 43);
- //player->ADD_GOSSIP_ITEM( 5, "PvP Zone #2" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 44);
- //player->ADD_GOSSIP_ITEM( 5, "PvP Zone #3" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 45);
- if( player->GetTeam() == ALLIANCE )
- {
- if (!sWorld->IsX5Realm())
- {
- player->ADD_GOSSIP_ITEM(5, "Darnassus.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 0);
- player->ADD_GOSSIP_ITEM(5, "Exodar.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 3);
- player->ADD_GOSSIP_ITEM(5, "Stormwind.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 1);
- player->ADD_GOSSIP_ITEM(5, "Ironforge.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 2);
- }
- else
- player->ADD_GOSSIP_ITEM(5, "Stormwind.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 1);
- }
- else
- {
- if (!sWorld->IsX5Realm())
- {
- player->ADD_GOSSIP_ITEM(5, "Orgrimmar.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 5);
- player->ADD_GOSSIP_ITEM(5, "Silvermoon.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 4);
- player->ADD_GOSSIP_ITEM(5, "Undercity.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 6);
- player->ADD_GOSSIP_ITEM(5, "Thunder Bluff.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 7);
- }
- else
- player->ADD_GOSSIP_ITEM(5, "Orgrimmar.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 5);
- }
- if (!sWorld->IsX5Realm())
- {
- player->ADD_GOSSIP_ITEM(5, "Shattrath City.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 8);
- //player->ADD_GOSSIP_ITEM( 5, "Dalaran." , GOSSIP_SENDER_MAIN, LOC_OFFSET + 9);
- player->ADD_GOSSIP_ITEM(5, "Isle Of Quel'Danas.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 10);
- //player->ADD_GOSSIP_ITEM( 7, "[Instances] ->" , GOSSIP_SENDER_MAIN, 5551);
- //player->ADD_GOSSIP_ITEM( 7, "[Instances BC] ->" , GOSSIP_SENDER_MAIN, 5561);
- }
- player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
- }
- /*void ShowClassicInstances(Player *player, Creature *creature, int page)
- {
- player->PlayerTalkClass->ClearMenus();
- if( page == 1 ) {
- player->ADD_GOSSIP_ITEM( 5, "Ragefire Chasm. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 11);
- player->ADD_GOSSIP_ITEM( 5, "The Wailing Caverns. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 12);
- player->ADD_GOSSIP_ITEM( 5, "The Stockade. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 16);
- player->ADD_GOSSIP_ITEM( 5, "Deadmines. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 13);
- player->ADD_GOSSIP_ITEM( 5, "Shadowfang Keep. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 15);
- player->ADD_GOSSIP_ITEM( 5, "Blackfathom Deeps. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 14);
- player->ADD_GOSSIP_ITEM( 5, "Razorfen Kraul. 20 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 17);
- player->ADD_GOSSIP_ITEM( 5, "Razorfen Downs. 20 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 19);
- player->ADD_GOSSIP_ITEM( 7, "[More] ->" , GOSSIP_SENDER_MAIN, 5552);
- } else if( page == 2) {
- player->ADD_GOSSIP_ITEM( 5, "Scarlet Monastery. 20 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 20);
- player->ADD_GOSSIP_ITEM( 5, "Gnomeregan. 20 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 18);
- player->ADD_GOSSIP_ITEM( 5, "Uldaman. 30 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 21);
- player->ADD_GOSSIP_ITEM( 5, "Zul'Farrak. 30 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 22);
- player->ADD_GOSSIP_ITEM( 5, "Maraudon. 40 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 23);
- player->ADD_GOSSIP_ITEM( 5, "The Sunken Temple. 40 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 24);
- player->ADD_GOSSIP_ITEM( 5, "Blackrock Depths. 40 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 25);
- player->ADD_GOSSIP_ITEM( 7, "[More] ->" , GOSSIP_SENDER_MAIN, 5553);
- player->ADD_GOSSIP_ITEM( 7, "[Back] ->" , GOSSIP_SENDER_MAIN, 5551);
- } else if( page == 3) {
- player->ADD_GOSSIP_ITEM( 5, "Dire Maul. 50 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 26);
- player->ADD_GOSSIP_ITEM( 5, "Blackrock Spire. 50 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 27);
- player->ADD_GOSSIP_ITEM( 5, "Stratholme. 50 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 28);
- player->ADD_GOSSIP_ITEM( 5, "Scholomance. 50 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 29);
- player->ADD_GOSSIP_ITEM( 5, "Zul'Gurub. 50 Silver." , GOSSIP_SENDER_MAIN, LOC_OFFSET + 30);
- player->ADD_GOSSIP_ITEM( 5, "Onyxia's Lair. 50 Silver." , GOSSIP_SENDER_MAIN, LOC_OFFSET + 31);
- player->ADD_GOSSIP_ITEM( 5, "Ahn'Qiraj. 50 Silver." , GOSSIP_SENDER_MAIN, LOC_OFFSET + 32);
- player->ADD_GOSSIP_ITEM( 7, "[Back] ->" , GOSSIP_SENDER_MAIN, 5552);
- }
- player->ADD_GOSSIP_ITEM( 7, "[Main Menu] ->" , GOSSIP_SENDER_MAIN, 5550);
- player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
- }*/
- /*void ShowInstancesBC(Player *player, Creature *creature, int page)
- {
- player->PlayerTalkClass->ClearMenus();
- if( page == 1){
- player->ADD_GOSSIP_ITEM( 5, "Karazhan. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 33);
- player->ADD_GOSSIP_ITEM( 5, "Gruul's Lair. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 34);
- player->ADD_GOSSIP_ITEM( 5, "Hellfire Citadel. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 35);
- player->ADD_GOSSIP_ITEM( 5, "Coilfang Reservoir. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 36);
- player->ADD_GOSSIP_ITEM( 5, "Tempest Keep. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 37);
- player->ADD_GOSSIP_ITEM( 5, "Caverns of Time. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 38);
- player->ADD_GOSSIP_ITEM( 5, "Zul'Aman. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 39);
- player->ADD_GOSSIP_ITEM( 7, "[More] ->" , GOSSIP_SENDER_MAIN, 5562);
- } else if( page == 2) {
- player->ADD_GOSSIP_ITEM( 5, "Black Temple. 1 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 40);
- player->ADD_GOSSIP_ITEM( 5, "Magister's Terrace. 2 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 41);
- player->ADD_GOSSIP_ITEM( 5, "Sunwell Plateau. 2 Gold" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 42);
- player->ADD_GOSSIP_ITEM( 7, "[Back] ->" , GOSSIP_SENDER_MAIN, 5561);
- }
- player->ADD_GOSSIP_ITEM( 7, "[Main Menu] ->" , GOSSIP_SENDER_MAIN, 5550);
- player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
- }*/
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- ShowMainMenu(player, creature);
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
- {
- if (sender != GOSSIP_SENDER_MAIN)
- return false;
- if(!player->getAttackers().empty())
- {
- player->CLOSE_GOSSIP_MENU();
- creature->MonsterSay("You are in combat!", LANG_UNIVERSAL, NULL);
- return true;
- }
- if( action >= LOC_OFFSET && action < LOC_OFFSET + sizeof(locations) )
- {
- TeleportTo(player, creature, action);
- return true;
- }
- switch( action ){
- case 5550: ShowMainMenu(player, creature); break;
- //case 5551: ShowClassicInstances(player, creature, 1); break;
- //case 5552: ShowClassicInstances(player, creature, 2); break;
- //case 5553: ShowClassicInstances(player, creature, 3); break;
- //case 5561: ShowInstancesBC(player, creature, 1); break;
- //case 5562: ShowInstancesBC(player, creature, 2); break;
- }
- return true;
- }
- struct TeleguyAI : public ScriptedAI
- {
- explicit TeleguyAI(Creature* creature) : ScriptedAI(creature)
- {
- ApplyAllImmunities(true);
- }
- void Reset() override
- {
- ScriptedAI::Reset();
- if (sWorld->IsX5Realm())
- {
- if (me->GetZoneId() != 6573 && me->GetZoneId() != 1637 && me->GetZoneId() != 1519)
- me->DespawnOrUnsummon(1_ms);
- }
- }
- void DamageTaken(Unit* who, uint32& damage) override
- {
- damage = 0;
- }
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new TeleguyAI(creature);
- }
- };
- #ifndef __clang_analyzer__
- void AddSC_teleguy()
- {
- new Teleguy();
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment