Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Feb 9th, 2010 | Syntax: C++ | Size: 3.99 KB | Hits: 25 | Expires: Never
Copy text to clipboard
  1. #include "Common.h"
  2. #include "Database/DatabaseEnv.h"
  3. #include "Database/SQLStorage.h"
  4. #include "Database/SQLStorageImpl.h"
  5. #include "Policies/SingletonImp.h"
  6.  
  7. #include "Common.h"
  8. #include "ObjectMgr.h"
  9. #include "AnarchyBoss.h"
  10. #include "World.h"
  11. #include "Player.h"
  12. #include "Util.h"
  13. #include "Group.h"
  14. #include "GameEventMgr.h"
  15.  
  16. INSTANTIATE_SINGLETON_1(AnarchyBoss);
  17.  
  18. AnarchyBoss::AnarchyBoss()
  19. {
  20.         isActiveEvent   =       false;
  21.         m_BossRaids     =   NULL;
  22. }
  23.  
  24. AnarchyBoss::~AnarchyBoss()
  25. {
  26. }
  27.  
  28. //Update AnarchyBoss
  29. void AnarchyBoss::Update(uint32 diff)
  30. {
  31.  
  32.         //Boucle à garder, get all player in BG
  33.         // for (PlayerList::const_iterator i = m_Players.begin(); i != m_Players.end(); ++i)
  34.         // {
  35.                 // (*i)->SendMessage("Bouh SA MARCHE!");
  36.         // }
  37.  
  38. }
  39.  
  40. //Ajout Player
  41. void AnarchyBoss::AddPlayer(Player* player)
  42. {
  43.         if(player->isInAnarchyBoss) // Already in AnarchyBoss
  44.                 return;
  45.        
  46.         if(GetPlayersSize() >= 40)
  47.         {
  48.                 player->SendMessage("L'arène boss est déjà complète. Réessayer plustard.");
  49.                 return;
  50.         }
  51.        
  52.         //Tp
  53.         player->TeleportTo(1, -3668.946533f, 1197.047729f, 150.103607f, 4.638344f);
  54.        
  55.         //Set Player in AnarchyBoss
  56.         player->isInAnarchyBoss = true;
  57.        
  58.         //Ajout entré liste
  59.         m_Players.push_front(player);
  60.        
  61.         //Set Faction
  62.         player->setFaction(1);
  63.        
  64.         //Création groupe
  65.         if(!GetBossRaid())
  66.                 CreateGroupLeader(player);
  67.         else
  68.         {
  69.                 if(!JoinGroup(player))
  70.                         RemovePlayer(player);
  71.         }
  72. }
  73.  
  74. //Suppression Player
  75. void AnarchyBoss::RemovePlayer(Player* player)
  76. {
  77.         if(!player->isInAnarchyBoss) // Already off AnarchyBoss
  78.                 return;
  79.                
  80.         //Tp
  81.         player->TeleportTo(1, -6180.382812f, -1260.104492f, -159.657272f, 1.688601f);
  82.        
  83.         //Set Player off AnarchyBoss
  84.         player->isInAnarchyBoss = false;
  85.        
  86.         //Suppression de la list
  87.         _removePlayer(player);
  88.        
  89.         //Faction for race
  90.         player->setFactionForRace(player->getRace());
  91.        
  92.         //Suppression du group
  93.         RemoveFromGroup(player);       
  94. }
  95.  
  96. //Création du group
  97. void AnarchyBoss::CreateGroupLeader(Player* player)
  98. {
  99.     Group * group = new Group;
  100.     group->Create(player->GetGUID(), player->GetName());
  101.         group->ConvertToRaid();
  102.         group->setAnarchyBossGroup(true);
  103.         m_BossRaids = group;
  104. }
  105.  
  106. //Join group
  107. bool AnarchyBoss::JoinGroup(Player* player)
  108. {
  109.         Group* group = GetBossRaid();
  110.         if(!group)
  111.         {
  112.                 sLog.outError("AnarchyBoss::Group non existant. Player removed.");
  113.                 return false;
  114.         }
  115.         else
  116.         {
  117.                 group->AddMember(player->GetGUID(), player->GetName());
  118.         if (Group* originalGroup = player->GetOriginalGroup())
  119.            if (originalGroup->IsLeader(player->GetGUID()))
  120.                 group->ChangeLeader(player->GetGUID());
  121.         }
  122.        
  123.         return true;
  124. }
  125.  
  126. //Remove Group
  127. void AnarchyBoss::RemoveFromGroup(Player* player)
  128. {
  129.         Group *group = GetBossRaid();
  130.     if (group)
  131.     {
  132.         if(!group->RemoveMember(player->GetGUID(), 0))
  133.         {
  134.                         //Suppression du Group Si dernier player
  135.                         group->Disband(true);
  136.                         m_BossRaids = NULL;
  137.             delete group;
  138.                        
  139.                         //Nettoyage
  140.                         Clear();
  141.         }
  142.     }
  143. }
  144.  
  145. //Nettoyage
  146. void AnarchyBoss::Clear()
  147. {
  148.         //Player list Clear
  149.         m_Players.clear();
  150.         m_BossRaids = NULL;
  151. }
  152.  
  153. bool AnarchyBoss::StartEvent(uint32 eventid, std::string announce, Player* starter)
  154. {
  155.         //Si event déjà en cours
  156.         if(isActiveEvent)
  157.         {
  158.                 starter->SendMessage("Un boss est déjà en cours, terminé le pour en lancer un nouveaux.");
  159.                 return false;
  160.         }
  161.        
  162.         //Nouveaux leaders
  163.         Group* group = GetBossRaid();
  164.         if(group)
  165.                 group->ChangeLeader(starter->GetGUID());
  166.        
  167.         //Game Event Start
  168.         sGameEventMgr.StartEvent(eventid, true);
  169.        
  170.         //Announce start boss
  171.         starter->AnnouncePlayerStartBoss(announce);
  172.        
  173.         //Teleport All Player In Arena
  174.         for (PlayerList::const_iterator i = m_Players.begin(); i != m_Players.end(); ++i)
  175.         {
  176.                 (*i)->TeleportTo(1, -3810.720215f, 1096.368286f, 131.969330f, 6.194228f);
  177.         }
  178.        
  179.         //Active event
  180.         isActiveEvent = true;
  181.        
  182.         return true;
  183. }
  184.  
  185. void AnarchyBoss::StopEvent(uint32 eventid)
  186. {
  187.         //Game Event Stop
  188.         sGameEventMgr.StopEvent(eventid, true);
  189.        
  190.         //Desactive event
  191.         isActiveEvent = false;
  192. }