Advertisement
Rochet2

Crumpets

Dec 1st, 2012
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.14 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2. struct CoordData { uint32 map; float x, y, z, o; };
  3.  
  4. #define MAX_PLAYERS 24
  5. #define COUNTDOWNSECONDS 5
  6. struct CoordData Coords[] =
  7. {
  8.     //  {map, x, y ,z ,o},
  9.     {37, 78.435f, 43.171f, 230.198f, 0.665f},
  10.     {37, 66.207f, 48.055f, 233.108f, 0.374f},
  11.     {37, 71.224f, 60.573f, 230.487f, 0.060f},
  12.     {37, 70.335f, 77.316f, 230.655f, 6.281f},
  13.     {37, 63.399f, 90.139f, 233.777f, 5.978f},
  14.     {37, 75.196f, 96.457f, 230.735f, 5.476f},
  15.     {37, 90.892f, 107.936f, 230.687f, 5.322f},
  16.     {37, 93.509f, 124.852f, 235.606f, 5.206f},
  17.     {37, 106.143f, 116.944f, 230.980f, 5.128f},
  18.     {37, 125.035f, 121.985f, 231.222f, 4.782f},
  19.     {37, 135.641f, 133.698f, 234.832f, 4.688f},
  20.     {37, 145.978f, 123.116f, 230.728f, 4.641f},
  21.     {37, 167.477f, 119.328f, 229.118f, 4.001f},
  22.     {37, 176.141f, 97.227f, 230.376f, 3.867f},
  23.     {37, 193.244f, 77.802f, 231.257f, 3.514f},
  24.     {37, 204.523f, 64.648f, 233.862f, 2.999f},
  25.     {37, 190.647f, 55.572f, 231.448f, 2.279f},
  26.     {37, 178.287f, 40.348f, 232.187f, 2.642f},
  27.     {37, 165.608f, 24.132f, 231.472f, 2.194f},
  28.     {37, 147.554f, 15.504f, 232.119f, 1.743f},
  29.     {37, 127.466f, 16.810f, 230.177f, 1.478f},
  30.     {37, 108.817f, 19.988f, 230.199f, 1.228f},
  31.     {37, 91.601f, 28.932f, 230.341f, 0.898f},
  32.     {37, 60.758f, 92.920f, 235.488f, 5.940f},
  33. };
  34.  
  35.  
  36. typedef std::set<Player*> infoType; // Define infoType to be the set
  37. infoType info;
  38. bool Counting = false;
  39.  
  40. class hunger_queue_npc : public CreatureScript
  41. {
  42. public:
  43.     hunger_queue_npc() : CreatureScript("hunger_queue_npc") {}
  44.  
  45.     bool OnGossipHello(Player * player, Creature * creature)
  46.     {
  47.         player->ADD_GOSSIP_ITEM(1, "Queue me for the survival games!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
  48.         player->ADD_GOSSIP_ITEM(1, "I wish to leave the queue!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
  49.  
  50.         player->PlayerTalkClass->SendGossipMenu(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
  51.         return true;
  52.     }
  53.  
  54.     bool OnGossipSelect(Player * player, Creature * creature, uint32 sender, uint32 actions)
  55.     {
  56.         player->PlayerTalkClass->ClearMenus();
  57.         switch(actions)
  58.         {
  59.         case GOSSIP_ACTION_INFO_DEF+1:
  60.             if(info.find(player) == info.end()) // check if player is not in the set
  61.                 player->GetSession()->SendAreaTriggerMessage("You are already queued for The Survival Games");
  62.             else
  63.             {
  64.                 bool insert = true;
  65.                 if(info.size() >= MAX_PLAYERS) // if queue full, check if players offline:
  66.                 {
  67.                     ErasePlayers();
  68.                     if(info.size() >= MAX_PLAYERS)
  69.                     {
  70.                         if(!Counting)
  71.                         {
  72.                             sWorld->SendServerMessage(SERVER_MSG_STRING, "Countdown: "+COUNTDOWNSECONDS);
  73.                             events.ScheduleEvent(COUNTDOWNSECONDS, 1000); // start countdown // 5 is the amount of seconds
  74.                             Counting = true;
  75.                         }
  76.                         insert = false;
  77.                         ChatHandler(player).SendSysMessage("The queue is currently full");
  78.                     }
  79.                 }
  80.                 if(insert)
  81.                 {
  82.                     info.insert(player); // save player pointer to the set
  83.                     ChatHandler(player).SendSysMessage("You are now in the queue for The Survival Games");
  84.                 }
  85.             }
  86.             break;
  87.  
  88.         case GOSSIP_ACTION_INFO_DEF+3:
  89.             if (info.find(player) == info.end())
  90.                 ChatHandler(player).SendSysMessage("You are not in the queue yet");
  91.             else
  92.             {
  93.                 info.erase(player);
  94.                 ChatHandler(player).SendSysMessage("You have been removed from the queue");
  95.             }
  96.             break;
  97.         }
  98.         OnGossipHello(player, creature);
  99.         return true;
  100.     }
  101.  
  102.     void ErasePlayers()
  103.     {
  104.         for(infoType::iterator it = info.begin(); it != info.end(); ++it) // loop records
  105.         {
  106.             Player* plr = (*it); // get player pointer from record
  107.             if(!plr || !plr->IsInWorld()) // check if the player does not exist
  108.                 info.erase(it);
  109.         }
  110.     }
  111.  
  112.     void UpdateAI(const uint32 diff)
  113.     {
  114.         events.Update(diff);
  115.         while (uint32 eventId = events.ExecuteEvent())
  116.         {
  117.             if(eventId == 1) // 1 is the last ID, so we need to teleport when it is called
  118.             {
  119.                 uint32 i = 0;
  120.                 for(infoType::iterator it = info.begin(); it != info.end(); ++it, ++i)
  121.                 {
  122.                     (*it)->TeleportTo(Coords[i].map, Coords[i].x, Coords[i].y, Coords[i].z, Coords[i].o);
  123.                 }
  124.             }
  125.             else // id was something else than 1, wait more and announce the countdown
  126.             {
  127.                 sWorld->SendServerMessage(SERVER_MSG_STRING, "Countdown: "+(--eventId));
  128.                 events.ScheduleEvent(eventId, 1000);
  129.             }
  130.         }
  131.     };
  132.  
  133.     EventMap events;
  134. };
  135.  
  136. void AddSC_hunger_queue_npc()
  137. {
  138.     new hunger_queue_npc;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement