Advertisement
Rochet2

tele request

Apr 29th, 2013
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.79 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2.  
  3. /*
  4. Portal Master convert to C++ for Trinitycore
  5. By Rochet2
  6.  
  7. Credits:
  8. Rochet2
  9. Eric
  10. Lhorath
  11.  
  12. ScriptName: TeLe_gossip_codebox
  13. */
  14.  
  15. //      Link Types//
  16. /*
  17. {#,     #,      2,      "|cff4169E1 Non-Icon Links|r",  0,      0,      0,      0,      0,      0,      0,      0},
  18. {#,     #,      2,      "|cff4169E1|TInterface\\icons\\Achievement_Leader_King_Varian_Wrynn:30|t Icon & Color Links|r", 0,      0,      0,      0,      0,      0,      0,      0},
  19. {#,     #,      2,      "|TInterface\\icons\\Achievement_Leader_King_Varian_Wrynn:30|t Icon Links (NoColor)|t", 0,      0,      0,      0,      0,      0,      0,      0},
  20. {#,     #,      2,      "Non-Formated Links Links",     0,      0,      0,      0,      0,      0,      0,      0},
  21. */
  22.  
  23. // Color List //
  24. /*
  25. ORANGE                  "|cffFFA500"
  26. DARKORANGE              "|cffFF8C00"
  27. RED                             "|cffFF0000"
  28. LIGHTRED                "|cffD63931"
  29. ROYALBLUE               "|cff4169E1"
  30. LIGHTBLUE               "|cffADD8E6"
  31. YELLOW                  "|cffFFFF00"
  32. GREEN                   "|cff008000"
  33. PURPLE                  "|cffDA70D6"
  34. WHITE                   "|cffffffff"
  35. SUBWHITE                "|cffbbbbbb"
  36. */
  37.  
  38. #include "ScriptPCH.h"
  39.  
  40. #define SERVER_WHISPER "|cff0022ffBe Server|r [Insain Fun Server] |cff0022ffKhosh Amadid|r"
  41. #define ARE_YOU_SURE    "|cffffffffGetting a Move on to|r "
  42. #define ERROR_COMBAT    "|cffff0000You Are In Combat!|r"
  43.  
  44. // TextIDs from npc_text
  45. enum npc_text_ids
  46. {
  47.     TEXT_MAIN_H             =       400000,                 //Horde main menu text
  48.     TEXT_MAIN_A             =       400001,                 //Alliance main menu text
  49.     TEXT_DUNGEON            =       400002,                 //Dungeon teleport menu texts
  50.     TEXT_RAID               =       400003,                 //Raid teleport menu text
  51.     TEXT_AREA               =       400004,                 //Area teleport location menu texts
  52. };
  53.  
  54. // Teleport data
  55.  
  56. struct Rochet2
  57. {
  58.     uint32 menu_id; uint32 next_menu_id; uint8 icon; std::string name; uint32 cost; uint8 level; uint8 faction; // 0 Both, 1 Horde, 2 Ally
  59.     uint32 map; float x; float y; float z; float o;
  60. };
  61.  
  62. //  {menu_id, next_menu_id, icon, name, cost, level, faction, map, x, y, z, o}
  63. struct Rochet2 TeLe [] = // key = i & Key
  64. {
  65.     {1,     0,      0,      "Insain Fun Server Info",   0,      0,      0,      1,      0,      0,      0,      0},
  66.     {1,     0,      2,      "|CFFE55BB0|TInterface\\icons\\Inv_misc_coin_02:30|t Shopping mall|r",  0,      80,     0,      530,    10213.2f,       -6110.493f,       17.04641f,       1.917863f},
  67.     {1,     0,      2,      "|CFF20C000|TInterface\\icons\\Achievement_level_80:30|t Levelup Area|r",  0,      80,     0,      1,    4610.387695f,       -3865.781738f,       944.186401f,       1.135738f},
  68.     {1,     2,      2,      "|cff4169E1|TInterface\\icons\\INV_BannerPVP_02:30|t Alliance Cities|r",    0,      0,      0,      0,      0,      0,      0,      0},
  69.     {1,     8,      0,      "Buff menu",   0,      0,      0,      0,      0,      0,      0,      0},
  70.     {1,     3,      2,      "|cffFF0000|TInterface\\icons\\INV_BannerPVP_01:30|t Horde Cities|r",        0,      0,      0,      0,      0,      0,      0,      0},
  71.     {1,     1,      0,      "Heal me",   0,      0,      0,      2,      0,      0,      0,      0},
  72.     {1,     4,      2,      "|cffFFFF00|TInterface\\icons\\Achievement_Zone_Hinterlands_01:30|t Neutral Cities|r",     0,      0,      0,      0,      0,      0,      0,      0},
  73.     {1,     5,      9,      "|cffFF8C00|TInterface\\icons\\Achievement_BG_winWSG:30|t PvP & Duel Areas|r",      0,      0,      0,      0,      0,      0,      0,      0},
  74.     {1,     6,      9,      "|cffADD8E6|TInterface\\icons\\Achievement_kickandfrick:30|t Custom Instance|r",  0,      0,      0,      0,      0,      0,      0,      0},
  75.     {1,     7,      9,      "|CFF106246|TInterface\\icons\\Achievement_Halloween_Spider_01:30|t World Boss|r & |CFFFFFF01Custom Area|r",  0,      0,      0,      0,      0,      0,      0,      0},
  76.  
  77.     {2,     0,      2,      "|cff4169E1|TInterface\\icons\\Spell_arcane_teleportstormwind:30|t Stormwind|r",    0,      0,      2,      0,      -8842.09f,      626.358f,       94.0867f,       3.61363f},
  78.     {2,     0,      2,      "|CFF540081|TInterface\\icons\\Spell_arcane_teleportdarnassus:30|t Darnassus|r",    0,      0,      2,      1,      9869.91f,       2493.58f,       1315.88f,       2.78897f},
  79.     {2,     0,      2,      "|cFF00FFFF|TInterface\\icons\\Spell_arcane_teleportironforge:30|t Ironforge|r",    0,      0,      2,      0,      -4900.47f,      -962.585f,      501.455f,       5.40538f},
  80.     {2,     0,      2,      "|cffff9696|TInterface\\icons\\Spell_arcane_teleportexodar:30|t The Exodar|r",       0,      0,      2,      530,    -3864.92f,      -11643.7f,      -137.644f,      5.50862f},
  81.     {2,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_leader_king_varian_wrynn:30|t Attack|r To |cff4169E1Stormwind|r", 0,      80,     1,      0,      -9154.49f,      363.471f,      90.0444f,       0.79674f},
  82.     {2,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_leader_tyrande_whisperwind:30|t Attack|r To |CFF540081Darnassus|r", 0,      80,     1,      1,      9983.334f,       1948.610f,       1325.28f,       1.59779f},
  83.     {2,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_leader_king_magni_bronzebeard:30|t Attack|r To |cFF00FFFFIronforge|r", 0,      80,     1,      0,      -5050.398f,      -800.744f,      495.127f,        0.94253f},
  84.     {2,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_leader_prophet_velen:30|t Attack|r To |cffff9696Exodar|r",    0,      80,     1,      530,    -3997.85f,      -11848.70f,      0.33635f,       4.20624f},
  85.     {2,     1,      7,      "|cffffffffBack..|r",   0,      0,      0,      0,      0,      0,      0,      0},
  86.  
  87.     {3,     0,      2,      "|CFFFE8A0E|TInterface\\icons\\Spell_arcane_teleportorgrimmar:30|t Orgrimmar|r",    0,      0,      1,      1,      1601.08f,       -4378.69f,      9.9846f,        2.14362f},
  88.     {3,     0,      2,      "|cFF00FFFF|TInterface\\icons\\Spell_arcane_teleportthunderbluff:30|t Thunder bluff |r",        0,      0,      1,      1,      -1274.45f,      71.8601f,       128.159f,       2.80623f},
  89.     {3,     0,      2,      "|cFF00FF00|TInterface\\icons\\Spell_arcane_teleportundercity:30|t Undercity|r",    0,      0,      1,      0,      1633.75f,       240.167f,       -43.1034f,      6.26128f},
  90.     {3,     0,      2,      "|cFFFF0303|TInterface\\icons\\Spell_arcane_teleportsilvermoon:30|t Silvermoon|r",      0,      0,      1,      530,    9738.28f,       -7454.19f,      13.5605f,       0.043914f},
  91.     {3,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_character_orc_male:30|t Attack|r To |CFFFE8A0EOrgrimmar|r", 0,      80,     2,      1,      1324.28f,       -4380.951f,      26.2216f,       0.172750f},
  92.     {3,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_character_tauren_male:30|t Attack|r To |cFF00FFFFThunder bluff|r",     0,      80,     2,      1,      -1304.11f,      205.72355f,      68.6815f,      5.06174f},
  93.     {3,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_leader_sylvanas:30|t Attack|r To |cFF00FF00Undercity|r", 0,      80,     2,      0,      1892.555f,       237.426f,       56.4824f,       3.542357f},
  94.     {3,     0,      9,      "|CFFFE8A0E|TInterface\\icons\\Achievement_character_bloodelf_male:30|t Attack|r To |CFFFF0303Silvermoon|r",        0,      80,     2,      530,    9375.61f,       -7279.03f,      14.23984f,       6.24227f},
  95.     {3,     1,      7,      "|cffffffffBack..|r",   0,      0,      0,      0,      0,      0,      0,      0},
  96.  
  97.     {4,     0,      2,      "|CFFE55BB0|TInterface\\icons\\Spell_arcane_teleportdalaran:30|t Dalaran|r",      0,      67,     0,      571,    5809.55f,       503.975f,       657.526f,       2.38338f},
  98.     {4,     0,      2,      "|CFF008000|TInterface\\icons\\Spell_arcane_teleportshattrath:30|t Shattrath|r",    0,      57,     0,      530,    -1887.62f,      5359.09f,       -12.4279f,      4.40435f},
  99.     {4,     0,      2,      "|CFF00FFFF|TInterface\\icons\\Achievement_zone_howlingfjord_01:30|t Booty bay|r",    0,      30,     0,      0,      -14281.9f,      552.564f,       8.90422f,       0.860144f},
  100.     {4,     1,      7,      "|cffffffffBack..|r",   0,      0,      0,      0,      0,      0,      0,      0},
  101.  
  102.     {5,     0,      2,      "|CFF4E2A04|TInterface\\icons\\Achievement_bg_masterofallbgs:30|t Gurubashi|r |CFFFE8A0Earena|r",      0,      30,     0,      0,      -13181.8f,      339.356f,       42.9805f,       1.18013f},
  103.     {5,     1,      7,      "|cffffffffBack..|r",   0,      0,      0,      0,      0,      0,      0,      0},
  104.  
  105.     {6,     0,      2,      "|CFF959697|TInterface\\icons\\Achievement_boss_chiefukorzsandscalp:30|t Zul'farrak|r",        0,      80,     0,      1,    -6823.86f,       -2905.677f,       8.88190f,       4.14057f},
  106.     {6,     0,      2,      "|CFF959697|TInterface\\icons\\Achievement_boss_warpsplinter:30|t The Botanica|r",     0,      80,     0,      530,    3395.251f,       1497.463f,       179.563f,       5.63485f},
  107.     {6,     0,      2,      "|CFF959697|TInterface\\icons\\Achievement_boss_nexus_prince_shaffar:30|t Mana Tomb|r",    0,      80,     0,      530,    -3108.542f,       4961.383f,      -100.36090f,       0.715019f},
  108.     {6,     0,      2,      "|CFF959697|TInterface\\icons\\Achievement_boss_exarch_maladaar:30|t Auchenai Crypts|r",        0,      80,     0,      530,      -3361.902588f,      5177.31f,      -101.049683f,       1.60924f},
  109.     {6,     0,      2,      "|CFF959697|TInterface\\icons\\Achievement_boss_zuljin:30|t Zul'aman|r",  0,      80,     0,      530,    6851.92f,       -7943.100f,       169.9930f,       4.73158f},
  110.     {6,     1,      7,      "|cffffffffBack..|r",   0,      0,      0,      0,      0,      0,      0,      0},
  111.  
  112.     {7,     0,      2,      "|CFFFE8A0E|TInterface\\icons\\Achievement_boss_gruulthedragonkiller:30|t Gruul The Dragonkiller|r",  0,      0,     0,      1,    5514.30f,       -2675.88f,       1481.25f,       4.18298f},
  113.     {7,     0,      2,      "|CFF0000FF|TInterface\\icons\\Achievement_boss_ossiriantheunscarred:30|t Og'mar The Eaglekiller|r",  0,      0,     0,      1,    4870.604004f,       -1826.872070f,       1132.371f,       6.067519f},
  114.     {7,     0,      2,      "|CFFFFFFFF|TInterface\\icons\\Ability_Druid_ManaTree:30|t Sarutra The Wasp|r",  0,      0,     0,      0,    -10553.658203f,       -444.551147f,       56.084888f,       0.237595f},
  115.     {7,     1,      7,      "|cffffffffBack..|r",   0,      0,      0,      0,      0,      0,      0,      0},
  116.  
  117.     // Buff menu, mapID used in the OnGossipSelect function
  118.     {8,    1,      0,      "buff 1",       0,      0,      0,      3,      0,      0,      0,      0},
  119.     {8,    1,      0,      "buff 2",       0,      0,      0,      4,      0,      0,      0,      0},
  120.     {8,    1,      0,      "buff 3",       0,      0,      0,      5,      0,      0,      0,      0},
  121.     {8,    1,      7,      "Back..",       0,      0,      0,      0,      0,      0,      0,      0},
  122.  
  123.     //      {10,    0,      2,      "Teleport",     0,      0,      0,      map,    xf,     yf,     zf,     of},
  124.     //      {10,    1,      7,      "Back..",       0,      0,      0,      0,      0,      0,      0,      0},
  125. };
  126.  
  127. const uint32 size = sizeof TeLe/sizeof(*TeLe);
  128.  
  129. class TeLe_gossip_codebox : public CreatureScript
  130. {
  131. public:
  132.     struct Range {
  133.         Range(uint32 startValue) : start(startValue), stop(startValue) {}
  134.         Range() : start(0), stop(0) {}
  135.         uint32 start, stop;
  136.     };
  137.     typedef std::map<uint32, Range> menuRangeMap;
  138.     menuRangeMap menuRanges;
  139.  
  140.     TeLe_gossip_codebox() : CreatureScript("TeLe_gossip_codebox")
  141.     {
  142.         if(size < 1)
  143.             return;
  144.         uint32 lastMenuId = TeLe[0].menu_id;
  145.         Range* temp = new Range(0);
  146.         for(uint32 i = 0; i <= sizeof TeLe/sizeof(*TeLe); ++i)
  147.         {
  148.             Rochet2* data = &TeLe[i];
  149.             if(data->menu_id != lastMenuId)
  150.             {
  151.                 temp->stop = i;
  152.                 menuRanges[lastMenuId] = *temp;
  153.                 lastMenuId = data->menu_id;
  154.                 temp = new Range(i);
  155.                 temp->start = i;
  156.             }
  157.         }
  158.         temp->stop = size;
  159.         menuRanges[lastMenuId] = *temp;
  160.     }
  161.  
  162.     bool OnGossipHello(Player* player, Creature* creature)
  163.     {
  164.         //Teleports
  165.         Custom_GetMenu(player, creature, 1); // 1 = main menu
  166.         return true;
  167.     }
  168.  
  169.     bool OnGossipSelect(Player* player, Creature* creature, uint32 menu_id, uint32 id) // ID means the key in the array
  170.     {
  171.         player->PlayerTalkClass->ClearMenus(); // clear the menu
  172.  
  173.         Rochet2* data = &TeLe[id];
  174.         player->ModifyMoney(-1 * data->cost); // take cash
  175.  
  176.         if (data->next_menu_id)
  177.         {
  178.             switch(data->map) // MapID used to identify option used
  179.             {
  180.             case 1:
  181.                 player->GetSession()->SendAreaTriggerMessage(SERVER_WHISPER);
  182.                 ChatHandler(player->GetSession()).PSendSysMessage(SERVER_WHISPER);
  183.             case 2:
  184.                 player->SetFullHealth(); // heal player to full
  185.             case 3:
  186.                 player->CastSpell(player, 11, true); // the player gets spell 11 casted on himself
  187.             case 4:
  188.                 player->CastSpell(player, 11, true); // the player gets spell 11 casted on himself
  189.             case 5:
  190.                 player->CastSpell(player, 11, true); // the player gets spell 11 casted on himself
  191.             default:
  192.                 Custom_GetMenu(player, creature, data->next_menu_id);
  193.                 return true;
  194.             }
  195.             Custom_GetMenu(player, creature, 1);
  196.         }
  197.         else if (player->isInCombat())
  198.         {
  199.             player->GetSession()->SendNotification(ERROR_COMBAT);
  200.             Custom_GetMenu(player, creature, data->menu_id);
  201.         }
  202.         else
  203.         {
  204.             player->CLOSE_GOSSIP_MENU();
  205.             player->TeleportTo(data->map, data->x, data->y, data->z, data->o);
  206.         }
  207.         return true;
  208.     }
  209.  
  210.     static bool Custom_FactCheck(uint32 team, uint32 fact)
  211.     {
  212.         switch (fact)
  213.         {
  214.         case 0: return true;
  215.         case 1: return (team == HORDE);
  216.         case 2: return (team == ALLIANCE);
  217.         }
  218.         return false;
  219.     }
  220.  
  221.     static uint32 Custom_GetText(uint32 menu, uint32 team)
  222.     {
  223.         switch (menu)
  224.         {
  225.         case 1:
  226.             if (team == ALLIANCE)
  227.                 return TEXT_MAIN_A;
  228.             else
  229.                 return TEXT_MAIN_H;
  230.         case 2:
  231.         case 3:
  232.         case 4:
  233.             return TEXT_DUNGEON;
  234.         case 5:
  235.             return TEXT_RAID;
  236.         }
  237.         return TEXT_AREA;
  238.     }
  239.  
  240.     void Custom_GetMenu(Player* player, Creature* creature, uint32 menu_id)
  241.     {
  242.         if(!creature || !player)
  243.             return;
  244.         menuRangeMap::const_iterator it = menuRanges.find(menu_id);
  245.         if(it == menuRanges.end()) // invalid menu_id
  246.             return;
  247.         for (uint32 i = it->second.start; i < it->second.stop; ++i)
  248.         {
  249.             Rochet2* data = &TeLe[i];
  250.             if (player->getLevel() >= data->level && Custom_FactCheck(player->GetTeam(), data->faction))
  251.             {
  252.                 if (data->next_menu_id)
  253.                     player->ADD_GOSSIP_ITEM_EXTENDED(data->icon, data->name, menu_id, i, "", data->cost, false);
  254.                 else
  255.                     player->ADD_GOSSIP_ITEM_EXTENDED(data->icon, data->name, menu_id, i, ARE_YOU_SURE+data->name, data->cost, false);
  256.             }
  257.         }
  258.         player->SEND_GOSSIP_MENU(Custom_GetText(menu_id, player->GetTeam()), creature->GetGUID());
  259.     }
  260. };
  261.  
  262. void AddSC_TeLe_gossip_codebox()
  263. {
  264.     new TeLe_gossip_codebox();
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement