Rochet2

Portal master C++ edited

Apr 11th, 2012
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.20 KB | None | 0 0
  1. /*
  2. Portal Master convert to C++ for Trinitycore
  3. By Rochet2
  4.  
  5. Credits:
  6. Rochet2
  7. Eric
  8.  
  9. ScriptName: TeLe_gossip_codebox
  10. */
  11.  
  12. #include "ScriptPCH.h"
  13.  
  14. // Teleport data
  15.  
  16. struct Eric
  17. {
  18.     uint32 menu_id, next_menu_id;
  19.     uint8 icon;
  20.     std::string name;
  21.     uint32 cost;
  22.     uint8 level, faction; // 0 Both, 1 Horde, 2 Ally
  23.     uint32 map;
  24.     float x, y, z, o;
  25. };
  26. typedef struct Eric Rochet2;
  27.  
  28. //  {menu_id, next_menu_id, icon, name, cost, level, faction, map, x, y, z, o}
  29. Rochet2 TeLe [] = // key = i & Key
  30. {
  31.     {1, 0,  2,  "Mall", 0,  0,  2,  0,  -8322.487305f,  2091.193115f,   125.813408f,    3.489510f}, // A
  32.     {1, 0,  2,  "Mall", 0,  0,  1,  1,  -8564.412109f,  -1998.245483f,  100.350288f,    0.356550f}, // H
  33.     {1, 0,  2,  "Duel Zone",    0,  0,  0,  MAP,    4298.943848f,   -2761.944336f,  16.662846f, 3.664825f},
  34.     {1, 0,  2,  "Gurubashi Arena",  0,  0,  0,  MAP,    -13263.814453f, 158.768204f,    36.077797f, 1.079510f},
  35.     {1, 2,  3,  "Eastern Kingdoms", 0,  0,  0,  0,  0,  0,  0,  0},
  36.     {1, 3,  3,  "Kalimdor", 0,  0,  0,  0,  0,  0,  0,  0},
  37.     {1, 4,  3,  "Outland",  0,  58, 0,  0,  0,  0,  0,  0},
  38.     {1, 5,  9,  "Raid Teleports",   0,  70, 0,  0,  0,  0,  0,  0},
  39.    
  40.     {2, 0,  2,  "Elwynn Forest",    0,  0,  2,  0,  -9449.06f,  64.8392f,   56.3581f,   3.07047f},
  41.     {2, 0,  2,  "Eversong Woods",   0,  0,  1,  530,    9024.37f,   -6682.55f,  16.8973f,   3.14131f},
  42.     {2, 0,  2,  "Dun Morogh",   0,  0,  2,  0,  -5603.76f,  -482.704f,  396.98f,    5.23499f},
  43.     {2, 0,  2,  "Tirisfal Glades",  0,  0,  1,  0,  2274.95f,   323.918f,   34.1137f,   4.24367f},
  44.     {2, 0,  2,  "Ghostlands",   0,  10, 1,  530,    7595.73f,   -6819.6f,   84.3718f,   2.56561f},
  45.     {2, 0,  2,  "Loch modan",   0,  10, 2,  0,  -5405.85f,  -2894.15f,  341.972f,   5.48238f},
  46.     {2, 0,  2,  "Silverpine Forest",    0,  10, 1,  0,  505.126f,   1504.63f,   124.808f,   1.77987f},
  47.     {2, 0,  2,  "Westfall", 0,  10, 2,  0,  -10684.9f,  1033.63f,   32.5389f,   6.07384f},
  48.     {2, 0,  2,  "Redridge mountains",   0,  15, 2,  0,  -9447.8f,   -2270.85f,  71.8224f,   0.283853f},
  49.     {2, 0,  2,  "Duskwood", 0,  18, 2,  0,  -10531.7f,  -1281.91f,  38.8647f,   1.56959f},
  50.     {2, 0,  2,  "Hillsbrad Foothills",  0,  20, 0,  0,  -385.805f,  -787.954f,  54.6655f,   1.03926f},
  51.     {2, 0,  2,  "Wetlands", 0,  20, 2,  0,  -3517.75f,  -913.401f,  8.86625f,   2.60705f},
  52.     {2, 0,  2,  "Alterac Mountains",    0,  30, 0,  0,  275.049f,   -652.044f,  130.296f,   0.502032f},
  53.     {2, 0,  2,  "Arathi Highlands", 0,  30, 0,  0,  -1581.45f,  -2704.06f,  35.4168f,   0.490373f},
  54.     {2, 0,  2,  "Stranglethorn Vale",   0,  30, 0,  0,  -11921.7f,  -59.544f,   39.7262f,   3.73574f},
  55.     {2, 0,  2,  "Badlands", 0,  35, 0,  0,  -6782.56f,  -3128.14f,  240.48f,    5.65912f},
  56.     {2, 0,  2,  "Swamp of Sorrows", 0,  35, 0,  0,  -10368.6f,  -2731.3f,   21.6537f,   5.29238f},
  57.     {2, 0,  2,  "The Hinterlands",  0,  40, 0,  0,  112.406f,   -3929.74f,  136.358f,   0.981903f},
  58.     {2, 0,  2,  "Searing Gorge",    0,  43, 0,  0,  -6686.33f,  -1198.55f,  240.027f,   0.916887f},
  59.     {2, 0,  2,  "The Blasted Lands",    0,  45, 0,  0,  -11184.7f,  -3019.31f,  7.29238f,   3.20542f},
  60.     {2, 0,  2,  "Burning Steppes",  0,  50, 0,  0,  -7979.78f,  -2105.72f,  127.919f,   5.10148f},
  61.     {2, 0,  2,  "Western Plaguelands",  0,  51, 0,  0,  1743.69f,   -1723.86f,  59.6648f,   5.23722f},
  62.     {2, 0,  2,  "Eastern Plaguelands",  0,  53, 0,  0,  2280.64f,   -5275.05f,  82.0166f,   4.7479f},
  63.     {2, 0,  2,  "Isle of Quel'Danas",   0,  70, 0,  530,    12806.5f,   -6911.11f,  41.1156f,   2.22935f},
  64.     {2, 1,  7,  "Back..",   0,  0,  0,  0,  0,  0,  0,  0},
  65.  
  66.     {3, 0,  2,  "Azuremyst Isle",   0,  0,  2,  530,    -4192.62f,  -12576.7f,  36.7598f,   1.62813f},
  67.     {3, 0,  2,  "Teldrassil",   0,  0,  2,  1,  9889.03f,   915.869f,   1307.43f,   1.9336f},
  68.     {3, 0,  2,  "Durotar",  0,  0,  1,  1,  228.978f,   -4741.87f,  10.1027f,   0.416883f},
  69.     {3, 0,  2,  "Mulgore",  0,  0,  1,  1,  -2473.87f,  -501.225f,  -9.42465f,  0.6525f},
  70.     {3, 0,  2,  "Bloodmyst Isle",   0,  15, 2,  530,    -2095.7f,   -11841.1f,  51.1557f,   6.19288f},
  71.     {3, 0,  2,  "Darkshore",    0,  10, 2,  1,  6463.25f,   683.986f,   8.92792f,   4.33534f},
  72.     {3, 0,  2,  "The Barrens",  0,  10, 1,  1,  -575.772f,  -2652.45f,  95.6384f,   0.006469f},
  73.     {3, 0,  2,  "Stonetalon Mountains", 0,  15, 0,  1,  1574.89f,   1031.57f,   137.442f,   3.8013f},
  74.     {3, 0,  2,  "Ashenvale Forest", 0,  18, 0,  1,  1919.77f,   -2169.68f,  94.6729f,   6.14177f},
  75.     {3, 0,  2,  "Thousand Needles", 0,  25, 1,  1,  -5375.53f,  -2509.2f,   -40.432f,   2.41885f},
  76.     {3, 0,  2,  "Desolace", 0,  30, 0,  1,  -656.056f,  1510.12f,   88.3746f,   3.29553f},
  77.     {3, 0,  2,  "Dustwallow Marsh", 0,  35, 0,  1,  -3350.12f,  -3064.85f,  33.0364f,   5.12666f},
  78.     {3, 0,  2,  "Feralas",  0,  40, 0,  1,  -4808.31f,  1040.51f,   103.769f,   2.90655f},
  79.     {3, 0,  2,  "Tanaris Desert",   0,  40, 0,  1,  -6940.91f,  -3725.7f,   48.9381f,   3.11174f},
  80.     {3, 0,  2,  "Azshara",  0,  45, 0,  1,  3117.12f,   -4387.97f,  91.9059f,   5.49897f},
  81.     {3, 0,  2,  "Felwood",  0,  48, 0,  1,  3898.8f,    -1283.33f,  220.519f,   6.24307f},
  82.     {3, 0,  2,  "Un'Goro Crater",   0,  48, 0,  1,  -6291.55f,  -1158.62f,  -258.138f,  0.457099f},
  83.     {3, 0,  2,  "Silithus", 0,  55, 0,  1,  -6815.25f,  730.015f,   40.9483f,   2.39066f},
  84.     {3, 0,  2,  "Winterspring", 0,  55, 0,  1,  6658.57f,   -4553.48f,  718.019f,   5.18088f},
  85.     {3, 1,  7,  "Back..",   0,  0,  0,  0,  0,  0,  0,  0},
  86.    
  87.     {4, 0,  2,  "Hellfire Peninsula",   0,  58, 0,  530,    -207.335f,  2035.92f,   96.464f,    1.59676f},
  88.     {4, 0,  2,  "Zangarmarsh",  0,  60, 0,  530,    -220.297f,  5378.58f,   23.3223f,   1.61718f},
  89.     {4, 0,  2,  "Terokkar Forest",  0,  62, 0,  530,    -2266.23f,  4244.73f,   1.47728f,   3.68426f},
  90.     {4, 0,  2,  "Nagrand",  0,  64, 0,  530,    -1610.85f,  7733.62f,   -17.2773f,  1.33522f},
  91.     {4, 0,  2,  "Blade's Edge Mountains",   0,  65, 0,  530,    2029.75f,   6232.07f,   133.495f,   1.30395f},
  92.     {4, 0,  2,  "Netherstorm",  0,  67, 0,  530,    3271.2f,    3811.61f,   143.153f,   3.44101f},
  93.     {4, 0,  2,  "Shadowmoon Valley",    0,  67, 0,  530,    -3681.01f,  2350.76f,   76.587f,    4.25995f},
  94.     {4, 1,  7,  "Back..",   0,  0,  0,  0,  0,  0,  0,  0},
  95.    
  96.     {5, 0,  2,  "Black Temple", 0,  70, 0,  MAP,    -3637.785400f,  314.684021f,    35.578209f, 2.900472f},
  97.     {5, 0,  2,  "Hyjal Summit", 0,  70, 0,  MAP,    -8174.817871f,  -4175.274902f,  -166.112244f,   0.921193f},
  98.     {5, 0,  2,  "Karazhan", 0,  70, 0,  MAP,    -11118.900391f, -2010.329956f,  47.081902f, 0.649895f},
  99.     {5, 0,  2,  "Serpentshrine Cavern", 0,  70, 0,  MAP,    796.593384f,    6866.157227f,   -65.125031f,    6.275439f},
  100.     {5, 0,  2,  "Gruul's Lair", 0,  70, 0,  MAP,    3532.722168f,   5101.472168f,   3.636398f,  5.648614f},
  101.     {5, 0,  2,  "Sunwel Plateau",   0,  70, 0,  MAP,    12562.410156f,  -6774.766602f,  15.090400f, 3.137880f},
  102.     {5, 0,  2,  "Tempest Keep", 0,  70, 0,  MAP,    3087.918457f,   1379.465820f,   184.908508f,    4.615966f},
  103.     {5, 0,  2,  "Zul'Aman", 0,  70, 0,  MAP,    6851.916016f,   -7988.957520f,  189.120056f,    4.690108f},
  104.     {5, 1,  7,  "Back..",   0,  0,  0,  0,  0,  0,  0,  0},
  105.  
  106. //  {6, 0,  2,  "Teleport", 0,  0,  0,  map,    xf, yf, zf, of},
  107. //  {6, 1,  7,  "Back..",   0,  0,  0,  0,  0,  0,  0,  0},
  108. };
  109.  
  110. // TextIDs from npc_text
  111. enum eEnums
  112. {
  113.     TEXT_MAIN_H     =   300000,         //Horde main menu text
  114.     TEXT_MAIN_A     =   300001,         //Alliance main menu text
  115.     TEXT_DUNGEON    =   300002,         //Dungeon teleport menu texts
  116.     TEXT_RAID       =   300003,         //Raid teleport menu text
  117.     TEXT_AREA       =   300004,         //Area teleport location menu texts
  118.    
  119.     TELEPORT_COUNT  =   sizeof TeLe/sizeof(*TeLe),
  120. };
  121.  
  122. #define ARE_YOU_SURE    "Are you sure, that you want to go to "
  123. #define ERROR_COMBAT    "|cffff0000You are in combat|r"
  124.  
  125. bool Custom_FactCheck (uint32 Fact, unsigned char Key)
  126. {
  127.     bool Show = false;
  128.     switch (TeLe[Key].faction)
  129.     {
  130.     case 0:
  131.         Show = true;
  132.         break;
  133.     case 1:
  134.         if (Fact == HORDE)
  135.             Show = true;
  136.         break;
  137.     case 2:
  138.         if (Fact == ALLIANCE)
  139.             Show = true;
  140.         break;
  141.     }
  142.     return (Show);
  143. }
  144.  
  145. uint32 Custom_GetText (unsigned int menu, Player* pPlayer)
  146. {
  147.     uint32 TEXT = TEXT_AREA;
  148.     switch (menu)
  149.     {
  150.     case 0:
  151.         switch (pPlayer->GetTeam())
  152.         {
  153.         case ALLIANCE:
  154.             TEXT = TEXT_MAIN_A;
  155.             break;
  156.         case HORDE:
  157.             TEXT = TEXT_MAIN_H;
  158.             break;
  159.         }
  160.     case 1:
  161.     case 2:
  162.     case 3:
  163.         TEXT = TEXT_DUNGEON;
  164.         break;
  165.     case 4:
  166.         TEXT = TEXT_RAID;
  167.         break;
  168.     }
  169.     return (TEXT);
  170. }
  171.  
  172. void Custom_GetMenu (Player* pPlayer, Creature* pCreature, uint32 Key)
  173. {
  174.     bool ENDMENU = false;
  175.     for(uint32 i = 0; i < TELEPORT_COUNT; i++)
  176.     {
  177.         if (ENDMENU && TeLe[i].menu_id != Key)
  178.             break;
  179.         if (TeLe[i].menu_id == Key && pPlayer->getLevel() >= TeLe[i].level && Custom_FactCheck(pPlayer->GetTeam(), i))
  180.         {
  181.             if (TeLe[i].next_menu_id != 0)
  182.                 pPlayer->ADD_GOSSIP_ITEM_EXTENDED(TeLe[i].icon, TeLe[i].name, GOSSIP_SENDER_MAIN, i, "", TeLe[i].cost, false);
  183.             else
  184.                 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);
  185.             ENDMENU = true;
  186.         }
  187.     }
  188.     pPlayer->PlayerTalkClass->SendGossipMenu(Custom_GetText(Key, pPlayer), pCreature->GetGUID());
  189. }
  190.  
  191. class TeLe_gossip_codebox : public CreatureScript
  192. {
  193.     public:
  194.     TeLe_gossip_codebox()
  195.     : CreatureScript("TeLe_gossip_codebox")
  196.     {
  197.     }
  198.  
  199.     bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  200.     {
  201.         Custom_GetMenu(pPlayer, pCreature, 1);
  202.         return true;
  203.     }
  204.  
  205.     bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
  206.     {
  207.         pPlayer->PlayerTalkClass->ClearMenus(); // clear the menu
  208.  
  209.         pPlayer->ModifyMoney(-1 * TeLe[uiAction].cost); // take cash
  210.         uint32 Key = TeLe[uiAction].next_menu_id;
  211.         if (Key == 0) // if no next_menu_id, then teleport to coords
  212.         {
  213.             if (!pPlayer->isInCombat())
  214.             {
  215.                 pPlayer->CLOSE_GOSSIP_MENU();
  216.                 pPlayer->TeleportTo(TeLe[uiAction].map, TeLe[uiAction].x, TeLe[uiAction].y, TeLe[uiAction].z, TeLe[uiAction].o);
  217.                 return true;
  218.             }
  219.             pPlayer->GetSession()->SendAreaTriggerMessage(ERROR_COMBAT);
  220.             Key = TeLe[uiAction].menu_id;
  221.         }
  222.  
  223.         Custom_GetMenu(pPlayer, pCreature, Key);
  224.         return true;
  225.     }
  226. };
  227.  
  228. void AddSC_TeLe_gossip_codebox()
  229. {
  230.     new TeLe_gossip_codebox();
  231. }
Advertisement
Add Comment
Please, Sign In to add comment