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