Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ScriptPCH.h"
- /*
- Script made by Blyitgen
- Script converted to TC C++ by Rochet2
- @ AC-Web.org
- These credits must stay in place!
- */
- namespace
- {
- #define REWARD 125 // Reward (in honor) for the winner
- // WorldLocation(map, x, y, z, o)
- // Start locations
- static const WorldLocation startLoc1 = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
- static const WorldLocation startLoc2 = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
- // Location after arena
- static const WorldLocation allyAA = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
- static const WorldLocation hordeAA = WorldLocation(1, 1.2f, 1.3f, 1.4f, 1.5f);
- // Dont edit below
- static std::list<uint64> que;
- uint64 p1 = 0;
- uint64 p2 = 0;
- static Player* getPlayer()
- {
- if (que.empty())
- return NULL;
- Player* player = sObjectAccessor->FindPlayer(que.front());
- que.pop_front();
- return player;
- }
- static void sendPlayers()
- {
- if(!p1 || !p2)
- return;
- if (que.size() < 2)
- return;
- Player* player1 = NULL;
- Player* player2 = NULL;
- while (!p1 && que.size >= 2)
- player1 = getPlayer();
- while (!p2 && que.size >= 2)
- player2 = getPlayer();
- if(!player1 || !player2)
- return;
- p1 = player1->GetGUID();
- p2 = player2->GetGUID();
- player1->TeleportTo(startLoc1);
- player2->TeleportTo(startLoc2);
- }
- }
- class FightMaster : public CreatureScript
- {
- public:
- FightMaster() : CreatureScript("FightMaster")
- {
- }
- bool OnGossipHello(Player* player, Creature* creature)
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_BATTLE, "Add me to the queue", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Nevermind..", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
- {
- if (sender == GOSSIP_SENDER_MAIN && action == GOSSIP_ACTION_INFO_DEF+1)
- {
- que.push_back(player->GetGUID());
- ChatHandler(player->GetSession()).SendSysMessage("You are now added to the queue! Good luck!");
- }
- player->CLOSE_GOSSIP_MENU();
- }
- };
- class FightChecker : public WorldScript
- {
- public:
- static const char* rew_msg;
- FightChecker() : WorldScript("FightChecker")
- {
- std::ostringstream oss;
- oss << "Congratulations! You won " << REWARD << " honor!";
- rew_msg = oss.str().c_str();
- }
- static void checkArena()
- {
- if(!p1 || !p2)
- return;
- Player* player1 = sObjectAccessor->FindPlayer(p1);
- Player* player2 = sObjectAccessor->FindPlayer(p2);
- if (player1 && player1->isDead())
- {
- ChatHandler(player2->GetSession()).SendSysMessage(rew_msg);
- ChatHandler(player1->GetSession()).SendSysMessage("You can do better than that.");
- player2->ModifyHonorPoints(REWARD);
- player1->ResurrectPlayer(100);
- }
- else if (player2 && player2->isDead())
- {
- ChatHandler(player1->GetSession()).SendSysMessage(rew_msg);
- ChatHandler(player2->GetSession()).SendSysMessage("You can do better than that.");
- player1->ModifyHonorPoints(REWARD);
- player2->ResurrectPlayer(100);
- }
- else
- return;
- if (player1)
- player1->TeleportTo(player1->GetTeam() == HORDE ? hordeAA : allyAA);
- if (player2)
- player2->TeleportTo(player2->GetTeam() == HORDE ? hordeAA : allyAA);
- p1 = 0;
- p2 = 0;
- }
- struct FightEvent : BasicEvent
- {
- typedef void (*callback)(void);
- FightEvent(callback func) : BasicEvent()
- {
- _func = func;
- }
- bool Execute(uint64, uint32)
- {
- if(_func)
- _func();
- return true;
- }
- callback _func;
- };
- void OnUpdate(uint32 diff)
- {
- processor.Update(diff);
- }
- void OnStartup()
- {
- processor.AddEvent(new FightEvent(sendPlayers), processor.CalculateTime(30000));
- processor.AddEvent(new FightEvent(checkArena), processor.CalculateTime(5000));
- }
- EventProcessor processor;
- };
- void AddSC_FightScript()
- {
- new FightChecker();
- new FightMaster();
- }
- #undef REWARD
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement