• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Патч на Даларанскую Арену
Smexotvorin
Капрал
Code
diff --git a/src/game/BattleGroundDS.cpp b/src/game/BattleGroundDS.cpp
index e6a298d..4f2fcd3 100644
--- a/src/game/BattleGroundDS.cpp
+++ b/src/game/BattleGroundDS.cpp
@@ -16,14 +16,16 @@
    * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    */
     
+#include "Object.h"
   #include "Player.h"
   #include "BattleGround.h"
   #include "BattleGroundDS.h"
+#include "ObjectMgr.h"
+#include "WorldPacket.h"
   #include "Language.h"
     
   BattleGroundDS::BattleGroundDS()
   {
-
       m_StartDelayTimes[BG_STARTING_EVENT_FIRST]  = BG_START_DELAY_1M;
       m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
       m_StartDelayTimes[BG_STARTING_EVENT_THIRD]  = BG_START_DELAY_15S;
@@ -43,6 +45,24 @@ BattleGroundDS::~BattleGroundDS()
   void BattleGroundDS::Update(uint32 diff)
   {
       BattleGround::Update(diff);
+    if (GetStatus() == STATUS_IN_PROGRESS)
+    {
+        // knockback
+        if(m_uiKnockback < diff)
+        {
+            for(BattleGroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
+            {
+                Player * plr = sObjectMgr.GetPlayer(itr->first);
+                if (plr && plr->IsWithinLOS(1214,765,14) && plr->GetDistance2d(1214, 765) <= 50)
+                    plr->KnockBackPlayerWithAngle(6.40f,55,7);
+                if (plr && plr->IsWithinLOS(1369,817,14) && plr->GetDistance2d(1369, 817) <= 50)
+                    plr->KnockBackPlayerWithAngle(3.03f,55,7);
+            }
+            m_uiKnockback = 1000;
+        }
+        else
+            m_uiKnockback -= diff;
+    }
   }
     
   void BattleGroundDS::StartingEventCloseDoors()
@@ -51,6 +71,7 @@ void BattleGroundDS::StartingEventCloseDoors()
     
   void BattleGroundDS::StartingEventOpenDoors()
   {
+    OpenDoorEvent(BG_EVENT_DOOR);
   }
     
   void BattleGroundDS::AddPlayer(Player *plr)
@@ -60,19 +81,76 @@ void BattleGroundDS::AddPlayer(Player *plr)
       BattleGroundDSScore* sc = new BattleGroundDSScore;
     
       m_PlayerScores[plr->GetGUID()] = sc;
+
+    UpdateWorldState(0xe11, GetAlivePlayersCountByTeam(ALLIANCE));
+    UpdateWorldState(0xe10, GetAlivePlayersCountByTeam(HORDE));
+}
+
+void BattleGroundDS::RemovePlayer(Player* /*plr*/, uint64 /*guid*/)
+{
+    if (GetStatus() == STATUS_WAIT_LEAVE)
+        return;
+
+    UpdateWorldState(0xe11, GetAlivePlayersCountByTeam(ALLIANCE));
+    UpdateWorldState(0xe10, GetAlivePlayersCountByTeam(HORDE));
+
+    CheckArenaWinConditions();
   }
     
-void BattleGroundDS::RemovePlayer(Player * /*plr*/, uint64 /*guid*/)
+void BattleGroundDS::HandleKillPlayer(Player *player, Player *killer)
   {
+    if (GetStatus() != STATUS_IN_PROGRESS)
+        return;
+
+    if (!killer)
+    {
+        sLog.outError("BattleGroundDS: Killer player not found");
+        return;
+    }
+
+    BattleGround::HandleKillPlayer(player,killer);
+
+    UpdateWorldState(0xe11, GetAlivePlayersCountByTeam(ALLIANCE));
+    UpdateWorldState(0xe10, GetAlivePlayersCountByTeam(HORDE));
+
+    CheckArenaWinConditions();
+}
+
+bool BattleGroundDS::HandlePlayerUnderMap(Player *player)
+{
+    player->TeleportTo(GetMapId(),1299.046f,784.825f,9.338f,player->GetOrientation(),false);
+    return true;
+}
+
+void BattleGroundDS::HandleAreaTrigger(Player *Source, uint32 Trigger)
+{
+    if (GetStatus() != STATUS_IN_PROGRESS)
+        return;
+
+    switch(Trigger)
+    {
+        case 5347:
+        case 5348:
+            break;
+        default:
+            sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger);
+            Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger);
+            break;
+    }
   }
     
-void BattleGroundDS::HandleKillPlayer(Player* player, Player* killer)
+void BattleGroundDS::FillInitialWorldStates(WorldPacket &data, uint32& count)
   {
-    BattleGround::HandleKillPlayer(player, killer);
+    FillInitialWorldState(data, count, 0xe11, GetAlivePlayersCountByTeam(ALLIANCE));
+    FillInitialWorldState(data, count, 0xe10, GetAlivePlayersCountByTeam(HORDE));
+    FillInitialWorldState(data, count, 0xe1a, 1);
   }
     
-void BattleGroundDS::HandleAreaTrigger(Player * /*Source*/, uint32 /*Trigger*/)
+void BattleGroundDS::Reset()

А вот это залить в базу

Code
delete from `gameobject` where `map` = 617;
insert into `gameobject` values
-- buffs
('200060','184663','617','1','1','1291.7','813.424','7.11472','4.64562','0','0','0.730314','-0.683111','-120','100','1'),
('200061',  '184664','617','1','1','1291.7','768.911','7.11472','1.55194','0','0','0.700409','0.713742','-120','100','1'),
-- doors
('200062','192642','617','1','1','1350.95','817.2','21.4096','3.15','0','0','0.99627','0.0862864','86400','100','1'),
('200063','192  643','617','1','1','1232.65','764.913','21.4729','6.3','0','0','0.0310211','-0.999519','86400','100','1');
     
delete from `gameobject_battleground` where `guid` in (200060,200061,200062,200063);
insert into `gameobject_battleground` values
-- buffs
('200060','252','0'),
('200061','252','0'),
-- doors
('200062','254','0'),
('200063','254','0');
     
delete from `battleground_events` where `map` = 617;
insert into `battleground_events` values
('617','252','0','buffs'),
('617','254','0','doors');
     
-- doors
update `gameobject_template` set `faction` = 114, `flags` = 32, `size` = 1.5 where `entry` in (192642,192643);
   

Взято с ru-mangos.ru

Сообщение # 1 отредактировано Smexotvorin - Пятница, 04.06.2010, 23:24
MaZaHaKa7
Капрал
а что это такое )))
Сообщение # 2 написано 04.06.2010 в 23:25
Neofam
Скаут
Описал бы хоть чем этот патч помогает....
Сообщение # 3 написано 04.06.2010 в 23:26
wow-info
Центурион
Норм тема
Сообщение # 4 написано 04.06.2010 в 23:26
Smexotvorin
Капрал
Патч осуществляет арену в даларане.
P.S. на многих серверах она не робит!
Сообщение # 5 написано 04.06.2010 в 23:28
wowslavikwow
Рыцарь
На ru-mangos.ru этот патч еще переделывают...

Знаю html, css, JavaScript, PHP, несколько лет углубленно учу C, C++
ЛУЧШИЙ ЧАТ Speed-Chat.RU
Сообщение # 6 написано 18.06.2010 в 23:51
ph3n
Developer
Данная тема была перемещена из раздела Патчи в ядро MaNGOS.
Причина перемещения: устарело

Переместил: ph3n.
Сообщение # 7 написано 14.10.2012 в 13:32
  • Страница 1 из 1
  • 1
Поиск: