Advertisement
Rochet2

Untitled

Dec 31st, 2013
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "ScriptPCH.h"
  2.  
  3. /*
  4.     Script made by Blyitgen
  5.     Script converted to TC C++ by Rochet2
  6.     @ AC-Web.org
  7.     These credits must stay in place!
  8. */
  9.  
  10. namespace
  11. {
  12. #define REWARD  125 // Reward (in honor) for the winner
  13.    
  14.     // WorldLocation(map, x, y, z, o)
  15.     // Start locations
  16.     static const WorldLocation startLoc1 = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
  17.     static const WorldLocation startLoc2 = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
  18.     // Location after arena
  19.     static const WorldLocation allyAA = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
  20.     static const WorldLocation hordeAA = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
  21.  
  22.     // Dont edit below
  23.  
  24.     static std::list<uint64> que;
  25.     uint64 p1 = 0;
  26.     uint64 p2 = 0;
  27.  
  28.     static Player* getPlayer()
  29.     {
  30.         if (que.empty())
  31.             return NULL;
  32.         Player* player = sObjectAccessor->FindPlayer(que.front());
  33.         que.pop_front();
  34.         return player;
  35.     }
  36.  
  37.     static void sendPlayers()
  38.     {
  39.         if(!p1 || !p2)
  40.             return;
  41.         if (que.size() < 2)
  42.             return;
  43.  
  44.         Player* player1 = NULL;
  45.         Player* player2 = NULL;
  46.         while (!p1 && que.size >= 2)
  47.             player1 = getPlayer();
  48.         while (!p2 && que.size >= 2)
  49.             player2 = getPlayer();
  50.  
  51.         if(!player1 || !player2)
  52.             return;
  53.  
  54.         p1 = player1->GetGUID();
  55.         p2 = player2->GetGUID();
  56.         player1->TeleportTo(startLoc1);
  57.         player2->TeleportTo(startLoc2);
  58.     }
  59. }
  60.  
  61. class FightMaster : public CreatureScript
  62. {
  63. public:
  64.     FightMaster() : CreatureScript("FightMaster")
  65.     {
  66.     }
  67.  
  68.     bool OnGossipHello(Player* player, Creature* creature)
  69.     {
  70.         player->ADD_GOSSIP_ITEM(GOSSIP_ICON_BATTLE, "Add me to the queue", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
  71.         player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Nevermind..", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
  72.         player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
  73.         return true;
  74.     }
  75.  
  76.     bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
  77.     {
  78.         if (sender == GOSSIP_SENDER_MAIN && action == GOSSIP_ACTION_INFO_DEF+1)
  79.         {
  80.             que.push_back(player->GetGUID());
  81.             ChatHandler(player->GetSession()).SendSysMessage("You are now added to the queue! Good luck!");
  82.         }
  83.         player->CLOSE_GOSSIP_MENU();
  84.     }
  85. };
  86.  
  87. class FightChecker : public WorldScript
  88. {
  89. public:
  90.     static const char* rew_msg;
  91.  
  92.     FightChecker() : WorldScript("FightChecker")
  93.     {
  94.         std::ostringstream oss;
  95.         oss << "Congratulations! You won " << REWARD << " honor!";
  96.         rew_msg = oss.str().c_str();
  97.     }
  98.  
  99.     static void checkArena()
  100.     {
  101.         if(!p1 || !p2)
  102.             return;
  103.         Player* player1 = sObjectAccessor->FindPlayer(p1);
  104.         Player* player2 = sObjectAccessor->FindPlayer(p2);
  105.         if (player1 && player1->isDead())
  106.         {
  107.             ChatHandler(player2->GetSession()).SendSysMessage(rew_msg);
  108.             ChatHandler(player1->GetSession()).SendSysMessage("You can do better than that.");
  109.             player2->ModifyHonorPoints(REWARD);
  110.             player1->ResurrectPlayer(100);
  111.         }
  112.         else if (player2 && player2->isDead())
  113.         {
  114.             ChatHandler(player1->GetSession()).SendSysMessage(rew_msg);
  115.             ChatHandler(player2->GetSession()).SendSysMessage("You can do better than that.");
  116.             player1->ModifyHonorPoints(REWARD);
  117.             player2->ResurrectPlayer(100);
  118.         }
  119.         else
  120.             return;
  121.         if (player1)
  122.             player1->TeleportTo(player1->GetTeam() == HORDE ? hordeAA : allyAA);
  123.         if (player2)
  124.             player2->TeleportTo(player2->GetTeam() == HORDE ? hordeAA : allyAA);
  125.         p1 = 0;
  126.         p2 = 0;
  127.     }
  128.  
  129.     struct FightEvent : BasicEvent
  130.     {
  131.         typedef void (*callback)(void);
  132.         FightEvent(callback func) : BasicEvent()
  133.         {
  134.             _func = func;
  135.         }
  136.         bool Execute(uint64, uint32)
  137.         {
  138.             if(_func)
  139.                 _func();
  140.             return true;
  141.         }
  142.         callback _func;
  143.     };
  144.  
  145.     void OnUpdate(uint32 diff)
  146.     {
  147.         processor.Update(diff);
  148.     }
  149.  
  150.     void OnStartup()
  151.     {
  152.         processor.AddEvent(new FightEvent(sendPlayers), processor.CalculateTime(30000));
  153.         processor.AddEvent(new FightEvent(checkArena), processor.CalculateTime(5000));
  154.     }
  155.  
  156.     EventProcessor processor;
  157. };
  158.  
  159. void AddSC_FightScript()
  160. {
  161.     new FightChecker();
  162.     new FightMaster();
  163. }
  164.  
  165. #undef REWARD
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement