Advertisement
Guest User

Teleporter Script

a guest
Apr 3rd, 2013
3,135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.52 KB | None | 0 0
  1. /*
  2. Teleporter Script for Trinity
  3. Coded By Lhorath
  4. Coding Inspired From Rochet2 Teleporter
  5. */
  6.  
  7. //  Link Types//
  8. /*
  9. {#, #,  2,  "|cff4169E1 Non-Icon Links|r",  0,  0,  0,  0,  0,  0,  0,  0},
  10. {#, #,  2,  "|cff4169E1|TInterface\\icons\\Achievement_Leader_King_Varian_Wrynn:30|t Icon & Color Links|r", 0,  0,  0,  0,  0,  0,  0,  0},
  11. {#, #,  2,  "|TInterface\\icons\\Achievement_Leader_King_Varian_Wrynn:30|t Icon Links (NoColor)|t", 0,  0,  0,  0,  0,  0,  0,  0},
  12. {#, #,  2,  "Non-Formated Links Links", 0,  0,  0,  0,  0,  0,  0,  0},
  13. */
  14.  
  15. // Color List //
  16. /*
  17. ORANGE          "|cffFFA500"
  18. DARKORANGE      "|cffFF8C00"
  19. RED             "|cffFF0000"
  20. LIGHTRED        "|cffD63931"
  21. ROYALBLUE       "|cff4169E1"
  22. LIGHTBLUE       "|cffADD8E6"
  23. YELLOW          "|cffFFFF00"
  24. GREEN           "|cff008000"
  25. PURPLE          "|cffDA70D6"
  26. WHITE           "|cffffffff"
  27. SUBWHITE        "|cffbbbbbb"
  28. */
  29.    
  30. #include "ScriptPCH.h"
  31.  
  32. // Teleport data
  33.  
  34. struct Eric
  35. {
  36.     uint32 menu_id, next_menu_id;
  37.     uint8 icon;
  38.     std::string name;
  39.     uint32 cost;
  40.     uint8 level, faction; // 0 Both, 1 Horde, 2 Ally
  41.     uint32 map;
  42.     float x, y, z, o;
  43. };
  44. typedef struct Eric Rochet2;
  45.  
  46. //  {menu_id, next_menu_id, icon, name, cost, level, faction, map, x, y, z, o}
  47. Rochet2 TeLe [] = // key = i & Key
  48. {
  49.     {1, 22"|cff4169E1|TInterface\\icons\\Achievement_Leader_King_Varian_Wrynn:30|t Alliance Capital Cities|r",    00000000},
  50.     {1, 32"|cffFF0000|TInterface\\icons\\Achievement_Leader_Sylvanas:30|t Horde Capital Cities|r",    00000000},
  51.     {1, 42"|cffFFFF00|TInterface\\icons\\Temp:30|t Neutral Capital Cities|r", 00000000},
  52.     {1, 59"|cffFF8C00|TInterface\\icons\\Achievement_FeatsOfStrength_Gladiator_10:30|t PvP Areas|r"00000000},
  53.     {1, 63"|cffADD8E6|TInterface\\icons\\Achievement_Dungeon_Icecrown_Frostmourne:30|t Raids|r"00000000},
  54.    
  55.     {2, 02"Stormwind",    0020-8842.09f626.358f,   94.0867f,   3.61363f},
  56.     {2, 02"Darnassus",    00219869.91f,   2493.58f,   1315.88f,   2.78897f},
  57.     {2, 02"Ironforge",    0020-4900.47f-962.585f501.455f,   5.40538f},
  58.     {2, 02"Exodar",   002530,    -3864.92f-11643.7f-137.644f5.50862f},
  59.     {2, 09"|cffFF0000Attack Stormwind|r", 080, 10-9449.06f64.8392f,   56.3581f,   3.07047f},
  60.     {2, 09"|cffFF0000Attack Darnassus|r", 080, 119889.03f,   915.869f,   1307.43f,   1.9336f},
  61.     {2, 09"|cffFF0000Attack Ironforge|r", 080, 10-5603.76f-482.704f396.98f,    5.23499f},
  62.     {2, 09"|cffFF0000Attack Exodar|r",    080, 1530,    -4192.62f-12576.7f36.7598f,   1.62813f},
  63.     {2, 17"|cffffffffBack..|r",   00000000},
  64.  
  65.     {3, 02"Orgrimmar",    00111601.08f,   -4378.69f9.9846f,    2.14362f},
  66.     {3, 02"Thunder bluff",    0011-1274.45f71.8601f,   128.159f,   2.80623f},
  67.     {3, 02"Undercity",    00101633.75f,   240.167f,   -43.1034f6.26128f},
  68.     {3, 02"Silvermoon city"001530,    9738.28f,   -7454.19f13.5605f,   0.043914f},
  69.     {3, 09"|cffFF0000Attack Orgrimmar|r", 080, 21228.978f,   -4741.87f10.1027f,   0.416883f},
  70.     {3, 09"|cffFF0000Attack Thunder bluff|r", 080, 21-2473.87f-501.225f-9.42465f0.6525f},
  71.     {3, 09"|cffFF0000Attack Undercity|r", 080, 202274.95f,   323.918f,   34.1137f,   4.24367f},
  72.     {3, 09"|cffFF0000Attack Silvermoon|r",    080, 2530,    9024.37f,   -6682.55f16.8973f,   3.14131f},
  73.     {3, 17"|cffffffffBack..|r",   00000000},
  74.    
  75.     {4, 02"Dalaran"067, 0571,    5809.55f,   503.975f,   657.526f,   2.38338f},
  76.     {4, 02"Shattrath",    057, 0530,    -1887.62f5359.09f,   -12.4279f4.40435f},
  77.     {4, 02"Booty bay",    030, 00-14281.9f552.564f,   8.90422f,   0.860144f},
  78.     {4, 17"|cffffffffBack..|r",   00000000},
  79.    
  80.     {5, 02"Gurubashi arena"030, 00-13181.8f339.356f,   42.9805f,   1.18013f},
  81.     {5, 17"|cffffffffBack..|r",   00000000},
  82.    
  83.     {6, 02"Trial of the Crusader",    080, 0571,    8515.61f,   714.153f,   558.248f,   1.57753f},
  84.     {6, 02"Icecrown Citadel", 080, 0571,    5855.22f,   2102.03f,   635.991f,   3.57899f},
  85.     {6, 02"Naxxramas",    080, 0571,    3668.72f,   -1262.46f243.622f,   4.785f},
  86.     {6, 02"Onyxia's Lair",    080, 01-4708.27f-3727.64f54.5589f,   3.72786f},
  87.     {6, 02"The Eye of Eternity"080, 0571,    3784.17f,   7028.84f,   161.258f,   5.79993f},
  88.     {6, 02"The Obsidian Sanctum", 080, 0571,    3472.43f,   264.923f,   -120.146f3.27923f},
  89.     {6, 02"Ulduar",   080, 0571,    9222.88f,   -1113.59f1216.12f,   6.27549f},
  90.     {6, 02"Vault of Archavon",    080, 0571,    5453.72f,   2840.79f,   421.28f,    0.0f},
  91.     {6, 77"|cffffffffBack..|r",   00000000},
  92.    
  93. //  {10,    0,  2,  "Teleport", 0,  0,  0,  map,    xf, yf, zf, of},
  94. //  {10,    1,  7,  "Back..",   0,  0,  0,  0,  0,  0,  0,  0},
  95. };
  96.  
  97. // TextIDs from npc_text
  98. enum eEnums
  99. {
  100.     TEXT_MAIN_H     =   400000,         //Horde main menu text
  101.     TEXT_MAIN_A     =   400001,         //Alliance main menu text
  102.     TEXT_DUNGEON    =   400002,         //Dungeon teleport menu texts
  103.     TEXT_RAID       =   400003,         //Raid teleport menu text
  104.     TEXT_AREA       =   400004,         //Area teleport location menu texts
  105.    
  106.     TELEPORT_COUNT  =   sizeof TeLe/sizeof(*TeLe),
  107. };
  108.  
  109. #define ARE_YOU_SURE    "|cffffffffGetting a Move on to|r "
  110. #define ERROR_COMBAT    "|cffff0000Kill Whatever that thing is first!|r"
  111.  
  112. bool Custom_FactCheck (uint32 Fact, unsigned char Key)
  113. {
  114.     bool Show = false;
  115.     switch (TeLe[Key].faction)
  116.     {
  117.     case 0:
  118.         Show = true;
  119.         break;
  120.     case 1:
  121.         if (Fact == HORDE)
  122.             Show = true;
  123.         break;
  124.     case 2:
  125.         if (Fact == ALLIANCE)
  126.             Show = true;
  127.         break;
  128.     }
  129.     return (Show);
  130. }
  131.  
  132. uint32 Custom_GetText (unsigned int menu, Player* pPlayer)
  133. {
  134.     uint32 TEXT = TEXT_AREA;
  135.     switch (menu)
  136.     {
  137.     case 0:
  138.         switch (pPlayer->GetTeam())
  139.         {
  140.         case ALLIANCE:
  141.             TEXT = TEXT_MAIN_A;
  142.             break;
  143.         case HORDE:
  144.             TEXT = TEXT_MAIN_H;
  145.             break;
  146.         }
  147.     case 1:
  148.     case 2:
  149.     case 3:
  150.         TEXT = TEXT_DUNGEON;
  151.         break;
  152.     case 4:
  153.         TEXT = TEXT_RAID;
  154.         break;
  155.     }
  156.     return (TEXT);
  157. }
  158.  
  159. void Custom_GetMenu (Player* pPlayer, Creature* pCreature, uint32 Key)
  160. {
  161.     bool ENDMENU = false;
  162.     for(uint32 i = 0; i < TELEPORT_COUNT; i++)
  163.     {
  164.         if (ENDMENU && TeLe[i].menu_id != Key)
  165.             break;
  166.         if (TeLe[i].menu_id == Key && pPlayer->getLevel() >= TeLe[i].level && Custom_FactCheck(pPlayer->GetTeam(), i))
  167.         {
  168.             if (TeLe[i].next_menu_id != 0)
  169.                 pPlayer->ADD_GOSSIP_ITEM_EXTENDED(TeLe[i].icon, TeLe[i].name, GOSSIP_SENDER_MAIN, i, "", TeLe[i].cost, false);
  170.             else
  171.                 pPlayer->ADD_GOSSIP_ITEM_EXTENDED(TeLe[i].icon, TeLe[i].name, GOSSIP_SENDER_MAIN, i, ARE_YOU_SURE+TeLe[i].name, TeLe[i].cost, false);
  172.             ENDMENU = true;
  173.         }
  174.     }
  175.     pPlayer->PlayerTalkClass->SendGossipMenu(Custom_GetText(Key, pPlayer), pCreature->GetGUID());
  176. }
  177.  
  178. class tele_script_mortal : public CreatureScript
  179. {
  180.     public:
  181.     tele_script_mortal()
  182.     : CreatureScript("tele_script_mortal")
  183.     {
  184.     }
  185.  
  186.     bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  187.     {
  188.         Custom_GetMenu(pPlayer, pCreature, 1);
  189.         return true;
  190.     }
  191.  
  192.     bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
  193.     {
  194.         pPlayer->PlayerTalkClass->ClearMenus(); // clear the menu
  195.  
  196.         pPlayer->ModifyMoney(-1 * TeLe[uiAction].cost); // take cash
  197.         uint32 Key = TeLe[uiAction].next_menu_id;
  198.         if (Key == 0) // if no next_menu_id, then teleport to coords
  199.         {
  200.             if (!pPlayer->isInCombat())
  201.             {
  202.                 pPlayer->CLOSE_GOSSIP_MENU();
  203.                 pPlayer->TeleportTo(TeLe[uiAction].map, TeLe[uiAction].x, TeLe[uiAction].y, TeLe[uiAction].z, TeLe[uiAction].o);
  204.                 return true;
  205.             }
  206.             pPlayer->GetSession()->SendAreaTriggerMessage(ERROR_COMBAT);
  207.             Key = TeLe[uiAction].menu_id;
  208.         }
  209.  
  210.         Custom_GetMenu(pPlayer, pCreature, Key);
  211.         return true;
  212.     }
  213. };
  214.  
  215. void AddSC_tele_script_mortal()
  216. {
  217.     new tele_script_mortal();
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement