Guest User

teleguy free emu

a guest
Sep 13th, 2025
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.49 KB | None | 0 0
  1. #include "ScriptMgr.h"
  2. #include "ScriptedCreature.h"
  3. #include "ScriptedGossip.h"
  4. #include "Creature.h"
  5. #include "Player.h"
  6. #include "World.h"
  7.  
  8. static const uint32 LOC_OFFSET = 1200;
  9.  
  10. struct TeleportInfo
  11. {
  12.     float x, y, z, orientation;
  13.     uint32 mapid;
  14.     int reqLevel;
  15.     uint32 cost;
  16.     bool CastParachute = false;
  17. };
  18.  
  19. static const TeleportInfo locations[] =
  20. {
  21.     //      x          y         z      o   map   l  c
  22.     // Alliance capitals
  23.     { 10037.42f,   2499.61f, 1318.43f, 3.30f,   1,  0, 1}, // 00 Darnassus
  24.     {-8802.53f,   636.65f,   94.45f, 3.65f,   0,  0, 1}, // 01 Stormwind
  25.     {-4823.27f,  -1161.57f,  502.21f,  1.4f,   0,  0, 1}, // 02 Ironforge
  26.     {-3868.21f, -11640.79f, -137.66f, 2.51f, 530,  0, 1}, // 03 Exodar
  27.     // Horde capitals
  28.     { 9928.50f,   -7131.41f,  47.94f, 4.0f,   530,  0, 1 }, // 04 Silvermoon
  29.     { 1569.97f, -4397.41f,   16.05f,  0.5f,   1,  0, 1}, // 05 Orgrimmar
  30.     { 1771.33f,  62.51f,   -46.32f,  0.78f, 0,  0, 1 },   // 06 Undercity
  31.     {-1277.37f,   124.8f,   131.29f,  5.22f,   1,  0, 1}, // 07 Thunder Bluff
  32.     // Neutral cities
  33.     {-1850.21f,  5435.82f,  -10.96f,  3.4f, 530, 58, 1}, // 08 Shattrath
  34.     { 5804.14f,   624.77f,  647.77f,  1.6f, 571, 68, 1}, // 09 Dalaran
  35.     {12947.40f, -6893.31f,    5.68f,  3.1f, 530, 65, 1}, // 10 Isle of Quel'Danas
  36.     // Classic instances
  37.     { 1800.53f, -4394.68f,  -17.93f,  5.5f,   1,  8, 2}, // 11 Ragefire Chasm
  38.     { -722.53f, -2226.30f,   16.94f,  2.7f,   1, 10, 2}, // 12 The Wailing Caverns
  39.     {-11212.0f,  1658.58f,   25.67f,  1.5f,   0, 10, 2}, // 13 Deadmines
  40.     { 4254.58f,   664.74f,  -29.04f, 1.97f,   1, 15, 2}, // 14 Blackfathom Deeps
  41.     { -254.47f,  1524.68f,   76.89f,  1.6f,   0, 15, 2}, // 15 Shadowfang Keep
  42.     {-8769.76f,   813.08f,   97.63f, 2.26f,   0, 20, 2}, // 16 Stockade
  43.     {-4484.04f, -1739.40f,   86.47f, 1.23f,   1, 24, 4}, // 17 Razorfen Kraul
  44.     {-5162.62f,   667.81f,  248.05f, 1.48f,   0, 20, 4}, // 18 Gnomeregan
  45.     {-4645.08f, -2470.85f,   85.53f, 4.39f,   1, 25, 4}, // 19 Razorfen Downs
  46.     { 2843.89f,  -693.74f,  139.32f, 5.11f,   0, 25, 4}, // 20 Scarlet Monastery
  47.     {-6119.70f, -2957.30f,  204.11f, 0.03f,   0, 35, 6}, // 21 Uldaman
  48.     {-6839.39f, -2911.03f,    8.87f, 0.41f,   1, 35, 6}, // 22 Zul'Farrak
  49.     {-1433.33f,  2955.34f,   96.21f, 4.82f,   1, 40, 8}, // 23 Maraudon
  50.     {-10346.9f,- 3851.90f,  -43.41f, 6.09f,   0, 45, 8}, // 24 The Sunken Temple
  51.     {-7301.03f,  -913.19f,  165.37f, 0.08f,   0, 45, 8}, // 25 Blackrock Depths
  52.     {-3982.47f,  1127.79f,  161.02f, 0.05f,   1, 50, 10}, // 26 Dire Maul
  53.     {-7535.43f, -1212.04f,  285.45f, 5.29f,   0, 50, 10}, // 27 Blackrock Spire
  54.     { 3263.54f, -3379.46f,  143.59f, 0.00f,   0, 50, 10}, // 28 Stratholme
  55.     { 1219.01f, -2604.66f,   85.61f, 0.50f,   0, 50, 10}, // 29 Scholomance
  56.     {-11915.4f,  -866.96f,   30.79f, 4.72f,   0, 55, 10}, // 30 Zul'Gurub
  57.     {-4707.01f, -3726.64f,   54.72f, 3.83f,   1, 55, 10}, // 31 Onyxia's Lair
  58.     {-8252.78f,  1536.68f, -  4.76f, 3.04f,   1, 55, 10}, // 32 Ahn'Qiraj
  59.     // BC instances
  60.     {-11118.8f, -2010.84f, 47.0807f,  0.0f,   0, 70, 20}, // 33 Karazhan
  61.     { 3539.01f,  5082.36f,    1.70f,  0.0f, 530, 65, 20}, // 34 Gruul's Lair
  62.     { -305.82f,  3056.40f,   -2.47f, 2.01f, 530, 58, 20}, // 35 Hellfire Citadel
  63.     {  517.29f,  6976.28f,   32.01f,  0.0f, 530, 58, 20}, // 36 Coilfang Reservoir
  64.     { 3089.58f,  1399.05f,  187.65f, 4.79f, 530, 70, 20}, // 37 Tempest Keep
  65.     {-8173.66f, -4746.36f,   33.84f, 4.94f,   1, 66, 20}, // 38 Caverns of Time
  66.     { 6846.95f,  -7954.5f, 170.028f, 4.62f, 530, 70, 20}, // 39 Zul'Aman
  67.     {-3610.72f,   324.99f,   37.40f, 3.28f, 530, 70, 20}, // 40 Black Temple
  68.     { 12884.6f, -7317.69f,   65.50f,  4.8f, 530, 70, 40}, // 41 Magister's Terrace
  69.     { 12574.1f, -6774.81f,   15.09f, 3.14f, 530, 70, 40}, // 42 Sunwell Plateau
  70.     {-2045.23f,  6657.76f,   13.05f, 1.84f, 530, 70, 1}, // 43 PvP Zone #1
  71.     { -782.06f,  6943.68f,   35.0f,  2.59f, 530, 70, 1}, // 44 PvP Zone #2
  72.     { 3439.76f,  2917.41f,   144.01f, 5.81f, 530, 70, 1}, // 45 PvP Zone #3
  73.     { 496.94f,  199.93f,   40.515f, 3.35f, 1101, 70, 1}, // 46 Duel Zone v2
  74. };
  75.  
  76. class Teleguy : public CreatureScript
  77. {
  78. public:
  79.     Teleguy() : CreatureScript("teleguy") {}
  80.  
  81.     enum
  82.     {
  83.         SPELL_PARACHUTE = 45472
  84.     };
  85.  
  86.     void TeleportTo(Player *player, Creature *creature, uint32 action)
  87.     {
  88.         player->CLOSE_GOSSIP_MENU();
  89.  
  90.         TeleportInfo const& tp = locations[action - LOC_OFFSET];
  91.  
  92.         //if( !player->HasEnoughMoney(500 * locations[idx].cost))
  93.         //{
  94.         //    creature->MonsterSay("You don't have enough money!", LANG_UNIVERSAL, NULL);
  95.         //}
  96.         //else if( player->getLevel() < locations[idx].reqLevel)
  97.         if( player->getLevel() < tp.reqLevel)
  98.         {
  99.             //creature->MonsterSay("You level is too low!", LANG_UNIVERSAL, NULL);
  100.         }
  101.         else
  102.         {
  103.             player->RemoveAurasByType(SPELL_AURA_MOUNTED);
  104.             player->TeleportTo(tp.mapid, tp.x, tp.y, tp.z + (tp.CastParachute ? 50.0f : 0.0f), tp.orientation);
  105.             if (tp.CastParachute)
  106.                 player->CastSpell(player, SPELL_PARACHUTE, true);
  107.             //player->ModifyMoney(-500 * locations[idx].cost);
  108.         }
  109.     }
  110.  
  111.     void ShowMainMenu(Player* player, Creature *creature)
  112.     {
  113.         player->PlayerTalkClass->ClearMenus();
  114.       player->ADD_GOSSIP_ITEM( 5, "Duel Zone."     , GOSSIP_SENDER_MAIN, LOC_OFFSET + 46);
  115.         //player->ADD_GOSSIP_ITEM( 5, "PvP Zone #1"     , GOSSIP_SENDER_MAIN, LOC_OFFSET + 43);
  116.         //player->ADD_GOSSIP_ITEM( 5, "PvP Zone #2"    , GOSSIP_SENDER_MAIN, LOC_OFFSET + 44);
  117.         //player->ADD_GOSSIP_ITEM( 5, "PvP Zone #3"     , GOSSIP_SENDER_MAIN, LOC_OFFSET + 45);
  118.         if( player->GetTeam() == ALLIANCE )
  119.         {
  120.             if (!sWorld->IsX5Realm())
  121.             {
  122.                 player->ADD_GOSSIP_ITEM(5, "Darnassus.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 0);
  123.                 player->ADD_GOSSIP_ITEM(5, "Exodar.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 3);
  124.                 player->ADD_GOSSIP_ITEM(5, "Stormwind.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 1);
  125.                 player->ADD_GOSSIP_ITEM(5, "Ironforge.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 2);
  126.             }
  127.             else
  128.                 player->ADD_GOSSIP_ITEM(5, "Stormwind.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 1);
  129.         }
  130.         else
  131.         {
  132.             if (!sWorld->IsX5Realm())
  133.             {
  134.                 player->ADD_GOSSIP_ITEM(5, "Orgrimmar.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 5);
  135.                 player->ADD_GOSSIP_ITEM(5, "Silvermoon.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 4);
  136.                 player->ADD_GOSSIP_ITEM(5, "Undercity.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 6);
  137.                 player->ADD_GOSSIP_ITEM(5, "Thunder Bluff.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 7);
  138.             }
  139.             else
  140.                 player->ADD_GOSSIP_ITEM(5, "Orgrimmar.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 5);
  141.         }
  142.         if (!sWorld->IsX5Realm())
  143.         {
  144.             player->ADD_GOSSIP_ITEM(5, "Shattrath City.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 8);
  145.             //player->ADD_GOSSIP_ITEM( 5, "Dalaran."           , GOSSIP_SENDER_MAIN, LOC_OFFSET + 9);
  146.             player->ADD_GOSSIP_ITEM(5, "Isle Of Quel'Danas.", GOSSIP_SENDER_MAIN, LOC_OFFSET + 10);
  147.             //player->ADD_GOSSIP_ITEM( 7, "[Instances] ->"              , GOSSIP_SENDER_MAIN, 5551);
  148.             //player->ADD_GOSSIP_ITEM( 7, "[Instances BC] ->"           , GOSSIP_SENDER_MAIN, 5561);
  149.         }
  150.         player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
  151.     }
  152.  
  153.     /*void ShowClassicInstances(Player *player, Creature *creature, int page)
  154.     {
  155.         player->PlayerTalkClass->ClearMenus();
  156.         if( page == 1 ) {
  157.             player->ADD_GOSSIP_ITEM( 5, "Ragefire Chasm. 10 Silver"      , GOSSIP_SENDER_MAIN, LOC_OFFSET + 11);
  158.             player->ADD_GOSSIP_ITEM( 5, "The Wailing Caverns. 10 Silver" , GOSSIP_SENDER_MAIN, LOC_OFFSET + 12);
  159.             player->ADD_GOSSIP_ITEM( 5, "The Stockade. 10 Silver"        , GOSSIP_SENDER_MAIN, LOC_OFFSET + 16);
  160.             player->ADD_GOSSIP_ITEM( 5, "Deadmines. 10 Silver"           , GOSSIP_SENDER_MAIN, LOC_OFFSET + 13);
  161.             player->ADD_GOSSIP_ITEM( 5, "Shadowfang Keep. 10 Silver"     , GOSSIP_SENDER_MAIN, LOC_OFFSET + 15);
  162.             player->ADD_GOSSIP_ITEM( 5, "Blackfathom Deeps. 10 Silver"   , GOSSIP_SENDER_MAIN, LOC_OFFSET + 14);
  163.             player->ADD_GOSSIP_ITEM( 5, "Razorfen Kraul. 20 Silver"      , GOSSIP_SENDER_MAIN, LOC_OFFSET + 17);
  164.             player->ADD_GOSSIP_ITEM( 5, "Razorfen Downs. 20 Silver"      , GOSSIP_SENDER_MAIN, LOC_OFFSET + 19);
  165.             player->ADD_GOSSIP_ITEM( 7, "[More] ->"                      , GOSSIP_SENDER_MAIN, 5552);
  166.         } else if( page == 2) {
  167.             player->ADD_GOSSIP_ITEM( 5, "Scarlet Monastery. 20 Silver"   , GOSSIP_SENDER_MAIN, LOC_OFFSET + 20);
  168.             player->ADD_GOSSIP_ITEM( 5, "Gnomeregan. 20 Silver"          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 18);
  169.             player->ADD_GOSSIP_ITEM( 5, "Uldaman. 30 Silver"             , GOSSIP_SENDER_MAIN, LOC_OFFSET + 21);
  170.             player->ADD_GOSSIP_ITEM( 5, "Zul'Farrak. 30 Silver"          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 22);
  171.             player->ADD_GOSSIP_ITEM( 5, "Maraudon. 40 Silver"            , GOSSIP_SENDER_MAIN, LOC_OFFSET + 23);
  172.             player->ADD_GOSSIP_ITEM( 5, "The Sunken Temple. 40 Silver"   , GOSSIP_SENDER_MAIN, LOC_OFFSET + 24);
  173.             player->ADD_GOSSIP_ITEM( 5, "Blackrock Depths. 40 Silver"    , GOSSIP_SENDER_MAIN, LOC_OFFSET + 25);
  174.             player->ADD_GOSSIP_ITEM( 7, "[More] ->"                      , GOSSIP_SENDER_MAIN, 5553);
  175.             player->ADD_GOSSIP_ITEM( 7, "[Back] ->"                      , GOSSIP_SENDER_MAIN, 5551);
  176.         } else if( page == 3) {
  177.             player->ADD_GOSSIP_ITEM( 5, "Dire Maul. 50 Silver"           , GOSSIP_SENDER_MAIN, LOC_OFFSET + 26);
  178.             player->ADD_GOSSIP_ITEM( 5, "Blackrock Spire. 50 Silver"     , GOSSIP_SENDER_MAIN, LOC_OFFSET + 27);
  179.             player->ADD_GOSSIP_ITEM( 5, "Stratholme. 50 Silver"          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 28);
  180.             player->ADD_GOSSIP_ITEM( 5, "Scholomance. 50 Silver"         , GOSSIP_SENDER_MAIN, LOC_OFFSET + 29);
  181.             player->ADD_GOSSIP_ITEM( 5, "Zul'Gurub. 50 Silver."          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 30);
  182.             player->ADD_GOSSIP_ITEM( 5, "Onyxia's Lair. 50 Silver."      , GOSSIP_SENDER_MAIN, LOC_OFFSET + 31);
  183.             player->ADD_GOSSIP_ITEM( 5, "Ahn'Qiraj. 50 Silver."          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 32);
  184.             player->ADD_GOSSIP_ITEM( 7, "[Back] ->"                      , GOSSIP_SENDER_MAIN, 5552);
  185.         }
  186.         player->ADD_GOSSIP_ITEM( 7, "[Main Menu] ->"                     , GOSSIP_SENDER_MAIN, 5550);
  187.         player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
  188.     }*/
  189.  
  190.     /*void ShowInstancesBC(Player *player, Creature *creature, int page)
  191.     {
  192.         player->PlayerTalkClass->ClearMenus();
  193.         if( page == 1){
  194.             player->ADD_GOSSIP_ITEM( 5, "Karazhan. 1 Gold"              , GOSSIP_SENDER_MAIN, LOC_OFFSET + 33);
  195.             player->ADD_GOSSIP_ITEM( 5, "Gruul's Lair. 1 Gold"          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 34);
  196.             player->ADD_GOSSIP_ITEM( 5, "Hellfire Citadel. 1 Gold"      , GOSSIP_SENDER_MAIN, LOC_OFFSET + 35);
  197.             player->ADD_GOSSIP_ITEM( 5, "Coilfang Reservoir. 1 Gold"    , GOSSIP_SENDER_MAIN, LOC_OFFSET + 36);
  198.             player->ADD_GOSSIP_ITEM( 5, "Tempest Keep. 1 Gold"          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 37);
  199.             player->ADD_GOSSIP_ITEM( 5, "Caverns of Time. 1 Gold"       , GOSSIP_SENDER_MAIN, LOC_OFFSET + 38);
  200.             player->ADD_GOSSIP_ITEM( 5, "Zul'Aman. 1 Gold"              , GOSSIP_SENDER_MAIN, LOC_OFFSET + 39);
  201.             player->ADD_GOSSIP_ITEM( 7, "[More] ->"                     , GOSSIP_SENDER_MAIN, 5562);
  202.         } else if( page == 2) {
  203.             player->ADD_GOSSIP_ITEM( 5, "Black Temple. 1 Gold"          , GOSSIP_SENDER_MAIN, LOC_OFFSET + 40);
  204.             player->ADD_GOSSIP_ITEM( 5, "Magister's Terrace. 2 Gold"    , GOSSIP_SENDER_MAIN, LOC_OFFSET + 41);
  205.             player->ADD_GOSSIP_ITEM( 5, "Sunwell Plateau. 2 Gold"       , GOSSIP_SENDER_MAIN, LOC_OFFSET + 42);
  206.             player->ADD_GOSSIP_ITEM( 7, "[Back] ->"                     , GOSSIP_SENDER_MAIN, 5561);
  207.         }
  208.         player->ADD_GOSSIP_ITEM( 7, "[Main Menu] ->"                    , GOSSIP_SENDER_MAIN, 5550);
  209.         player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
  210.     }*/
  211.  
  212.  
  213.     bool OnGossipHello(Player* player, Creature* creature) override
  214.     {
  215.         ShowMainMenu(player, creature);
  216.         return true;
  217.     }
  218.  
  219.     bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
  220.     {
  221.         if (sender != GOSSIP_SENDER_MAIN)
  222.             return false;
  223.  
  224.         if(!player->getAttackers().empty())
  225.         {
  226.             player->CLOSE_GOSSIP_MENU();
  227.             creature->MonsterSay("You are in combat!", LANG_UNIVERSAL, NULL);
  228.             return true;
  229.         }
  230.  
  231.         if( action >= LOC_OFFSET && action < LOC_OFFSET + sizeof(locations) )
  232.         {
  233.             TeleportTo(player, creature, action);
  234.             return true;
  235.         }
  236.  
  237.         switch( action ){
  238.             case 5550: ShowMainMenu(player, creature); break;
  239.             //case 5551: ShowClassicInstances(player, creature, 1); break;
  240.             //case 5552: ShowClassicInstances(player, creature, 2); break;
  241.             //case 5553: ShowClassicInstances(player, creature, 3); break;
  242.             //case 5561: ShowInstancesBC(player, creature, 1); break;
  243.             //case 5562: ShowInstancesBC(player, creature, 2); break;
  244.         }
  245.  
  246.         return true;
  247.     }
  248.  
  249.     struct TeleguyAI : public ScriptedAI
  250.     {
  251.         explicit TeleguyAI(Creature* creature) : ScriptedAI(creature)
  252.         {
  253.             ApplyAllImmunities(true);
  254.         }
  255.  
  256.         void Reset() override
  257.         {
  258.             ScriptedAI::Reset();
  259.  
  260.             if (sWorld->IsX5Realm())
  261.             {
  262.                 if (me->GetZoneId() != 6573 && me->GetZoneId() != 1637 && me->GetZoneId() != 1519)
  263.                     me->DespawnOrUnsummon(1_ms);
  264.             }
  265.         }
  266.  
  267.         void DamageTaken(Unit* who, uint32& damage) override
  268.         {
  269.             damage = 0;
  270.         }
  271.     };
  272.  
  273.     CreatureAI* GetAI(Creature* creature) const override
  274.     {
  275.         return new TeleguyAI(creature);
  276.     }
  277. };
  278.  
  279. #ifndef __clang_analyzer__
  280. void AddSC_teleguy()
  281. {
  282.     new Teleguy();
  283. }
  284. #endif
  285.  
Advertisement
Add Comment
Please, Sign In to add comment