Index: /trunk/src/game/GameEvent.h
===================================================================
--- /trunk/src/game/GameEvent.h (revision 44)
+++ /trunk/src/game/GameEvent.h (revision 50)
@@ -119,4 +119,5 @@
         void UpdateEventNPCFlags(uint16 event_id);
         void UpdateEventNPCVendor(uint16 event_id, bool activate);
+        void UpdateBattleGroundSettings();
         bool CheckOneGameEventConditions(uint16 event_id);
         void SaveWorldEventStateToDB(uint16 event_id);
@@ -142,4 +143,5 @@
         typedef std::pair<uint16 /*event id*/, uint32 /*gossip id*/> EventNPCGossipIdPair;
         typedef std::map<uint32 /*guid*/, EventNPCGossipIdPair> GuidEventNpcGossipIdMap;
+        typedef std::vector<uint32> GameEventBitmask;
         GameEventQuestMap mGameEventCreatureQuests;
         GameEventQuestMap mGameEventGameObjectQuests;
@@ -149,4 +151,5 @@
         GameEventGuidMap  mGameEventGameobjectGuids;
         GameEventDataMap  mGameEvent;
+        GameEventBitmask  mGameEventBattleGroundHolidays;
         QuestIdToEventConditionMap mQuestToEventConditions;
         GameEventNPCFlagMap mGameEventNPCFlags;
Index: /trunk/src/game/BattleGroundAB.cpp
===================================================================
--- /trunk/src/game/BattleGroundAB.cpp (revision 44)
+++ /trunk/src/game/BattleGroundAB.cpp (revision 50)
@@ -30,4 +30,15 @@
 #include "World.h"
 #include "Util.h"
+
+// these variables aren't used outside of this file, so declare them only here
+uint32 BG_AB_HonorScoreTicks[BG_HONOR_MODE_NUM] = {
+    330, // normal honor
+    200  // holiday
+};
+
+uint32 BG_AB_ReputationScoreTicks[BG_HONOR_MODE_NUM] = {
+    200, // normal honor
+    150  // holiday
+};
 
 BattleGroundAB::BattleGroundAB()
@@ -187,13 +198,13 @@
                 m_HonorScoreTics[team] += BG_AB_TickPoints[points];
                 m_ReputationScoreTics[team] += BG_AB_TickPoints[points];
-                if( m_ReputationScoreTics[team] >= 200 )
+                if( m_ReputationScoreTics[team] >= BG_AB_ReputationScoreTicks[m_HonorMode] )
                 {
                     (team == BG_TEAM_ALLIANCE) ? RewardReputationToTeam(509, 10, ALLIANCE) : RewardReputationToTeam(510, 10, HORDE);
-                    m_ReputationScoreTics[team] -= 200;
+                    m_ReputationScoreTics[team] -= BG_AB_ReputationScoreTicks[m_HonorMode];
                 }
-                if( m_HonorScoreTics[team] >= BG_HONOR_SCORE_TICKS )
+                if( m_HonorScoreTics[team] >= BG_AB_HonorScoreTicks[m_HonorMode] )
                 {
                     (team == BG_TEAM_ALLIANCE) ? RewardHonorToTeam(20, ALLIANCE) : RewardHonorToTeam(20, HORDE);
-                    m_HonorScoreTics[team] -= BG_HONOR_SCORE_TICKS;
+                    m_HonorScoreTics[team] -= BG_AB_HonorScoreTicks[m_HonorMode];
                 }
                 if( !m_IsInformedNearVictory && m_TeamScores[team] > 1800 )
Index: /trunk/src/game/GameEvent.cpp
===================================================================
--- /trunk/src/game/GameEvent.cpp (revision 44)
+++ /trunk/src/game/GameEvent.cpp (revision 50)
@@ -29,4 +29,5 @@
 #include "GossipDef.h"
 #include "Player.h"
+#include "BattleGroundMgr.h"
 
 INSTANTIATE_SINGLETON_1(GameEvent);
@@ -866,4 +867,48 @@
         sLog.outString();
         sLog.outString( ">> Loaded %u npc gossip textids in game events", count );
+
+        delete result;
+    }
+
+    // set all flags to 0
+    mGameEventBattleGroundHolidays.resize(mGameEvent.size(),0);
+    // load game event battleground flags
+    //                                   0     1
+    result = WorldDatabase.Query("SELECT event, bgflag FROM game_event_battleground_holiday");
+
+    count = 0;
+    if( !result )
+    {
+        barGoLink bar3(1);
+        bar3.step();
+
+        sLog.outString();
+        sLog.outString(">> Loaded %u battleground holidays in game events", count );
+    }
+    else
+    {
+
+        barGoLink bar3( result->GetRowCount() );
+        do
+        {
+            Field *fields = result->Fetch();
+
+            bar3.step();
+
+            uint16 event_id = fields[0].GetUInt16();
+
+            if(event_id >= mGameEvent.size())
+            {
+                sLog.outErrorDb("`game_event_battleground_holiday` game event id (%u) is out of range compared to max event id in `game_event`",event_id);
+                continue;
+            }
+
+            ++count;
+
+            mGameEventBattleGroundHolidays[event_id] = fields[1].GetUInt32();
+
+        } while( result->NextRow() );
+        sLog.outString();
+        sLog.outString( ">> Loaded %u battleground holidays in game events", count );
 
         delete result;
@@ -992,4 +1037,6 @@
     // remove vendor items
     UpdateEventNPCVendor(event_id, false);
+    // update bg holiday
+    UpdateBattleGroundSettings();
 }
 
@@ -1020,4 +1067,6 @@
     // add vendor items
     UpdateEventNPCVendor(event_id, true);
+    // update bg holiday
+    UpdateBattleGroundSettings();
 }
 
@@ -1046,4 +1095,12 @@
         }
     }
+}
+
+void GameEvent::UpdateBattleGroundSettings()
+{
+    uint32 mask = 0;
+    for(ActiveEvents::const_iterator itr = m_ActiveEvents.begin(); itr != m_ActiveEvents.end(); ++itr )
+        mask |= mGameEventBattleGroundHolidays[*itr];
+    sBattleGroundMgr.SetHolidayWeekends(mask);
 }
 
Index: /trunk/src/game/BattleGroundEY.cpp
===================================================================
--- /trunk/src/game/BattleGroundEY.cpp (revision 44)
+++ /trunk/src/game/BattleGroundEY.cpp (revision 50)
@@ -31,4 +31,10 @@
 #include "Util.h"
 
+// these variables aren't used outside of this file, so declare them only here
+uint32 BG_EY_HonorScoreTicks[BG_HONOR_MODE_NUM] = {
+    330, // normal honor
+    200  // holiday
+};
+
 BattleGroundEY::BattleGroundEY()
 {
@@ -160,8 +166,8 @@
     m_TeamScores[team_index] += Points;
     m_HonorScoreTics[team_index] += Points;
-    if (m_HonorScoreTics[team_index] >= BG_HONOR_SCORE_TICKS)
+    if (m_HonorScoreTics[team_index] >= BG_EY_HonorScoreTicks[m_HonorMode])
     {
         RewardHonorToTeam(20, Team);
-        m_HonorScoreTics[team_index] -= BG_HONOR_SCORE_TICKS;
+        m_HonorScoreTics[team_index] -= BG_EY_HonorScoreTicks[m_HonorMode];
     }
     UpdateTeamScore(Team);
Index: /trunk/src/game/BattleGround.cpp
===================================================================
--- /trunk/src/game/BattleGround.cpp (revision 44)
+++ /trunk/src/game/BattleGround.cpp (revision 50)
@@ -87,4 +87,5 @@
     m_PrematureCountDown = false;
     m_PrematureCountDown = 0;
+    m_HonorMode = BG_NORMAL;
 }
 
@@ -538,5 +539,4 @@
                 Source = plr;
             RewardMark(plr,ITEM_WINNER_COUNT);
-            UpdatePlayerScore(plr, SCORE_BONUS_HONOR, 20);
             RewardQuest(plr);
         }
@@ -1467,2 +1467,10 @@
     return count;
 }
+
+void BattleGround::SetHoliday(bool is_holiday)
+{
+    if(is_holiday)
+        m_HonorMode = BG_HOLIDAY;
+    else
+        m_HonorMode = BG_NORMAL;
+}
Index: /trunk/src/game/BattleGroundMgr.h
===================================================================
--- /trunk/src/game/BattleGroundMgr.h (revision 44)
+++ /trunk/src/game/BattleGroundMgr.h (revision 50)
@@ -235,4 +235,6 @@
         const bool isArenaTesting() const { return m_ArenaTesting; }
 
+        void SetHolidayWeekends(uint32 mask);
+
     private:
 
Index: /trunk/src/game/BattleGround.h
===================================================================
--- /trunk/src/game/BattleGround.h (revision 44)
+++ /trunk/src/game/BattleGround.h (revision 50)
@@ -96,6 +96,5 @@
     RESPAWN_ONE_DAY                 = 86400,                // secs
     RESPAWN_IMMEDIATELY             = 0,                    // secs
-    BUFF_RESPAWN_TIME               = 180,                  // secs
-    BG_HONOR_SCORE_TICKS            = 330                   // points
+    BUFF_RESPAWN_TIME               = 180                  // secs
 };
 
@@ -240,4 +239,11 @@
 };
 
+enum BGHonorMode
+{
+    BG_NORMAL = 0,
+    BG_HOLIDAY,
+    BG_HONOR_MODE_NUM
+};
+
 /*
 This class is used to:
@@ -433,4 +439,5 @@
 
         void HandleTriggerBuff(uint64 const& go_guid);
+        void SetHoliday(bool is_holiday);
 
         // TODO: make this protected:
@@ -480,4 +487,5 @@
         bool   m_BuffChange;
 
+        BGHonorMode m_HonorMode;
     private:
         /* Battleground */
Index: /trunk/src/game/BattleGroundWS.cpp
===================================================================
--- /trunk/src/game/BattleGroundWS.cpp (revision 49)
+++ /trunk/src/game/BattleGroundWS.cpp (revision 50)
@@ -30,4 +30,23 @@
 #include "World.h"
 
+// these variables aren't used outside of this file, so declare them only here
+enum BG_WSG_Rewards
+{
+    BG_WSG_WIN = 0,
+    BG_WSG_FLAG_CAP,
+    BG_WSG_MAP_COMPLETE,
+    BG_WSG_REWARD_NUM
+};
+
+uint32 BG_WSG_Honor[BG_HONOR_MODE_NUM][BG_WSG_REWARD_NUM] = {
+    {20,40,40}, // normal honor
+    {60,40,80}  // holiday
+};
+
+uint32 BG_WSG_Reputation[BG_HONOR_MODE_NUM][BG_WSG_REWARD_NUM] = {
+    {0,35,0}, // normal honor
+    {0,45,0}  // holiday
+};
+
 BattleGroundWS::BattleGroundWS()
 {
@@ -242,6 +261,6 @@
             AddPoint(ALLIANCE, 1);
         PlaySoundToAll(BG_WS_SOUND_FLAG_CAPTURED_ALLIANCE);
-        RewardReputationToTeam(890, 35, ALLIANCE);          // +35 reputation
-        RewardHonorToTeam(40, ALLIANCE);                    // +40 bonushonor
+        RewardReputationToTeam(890, BG_WSG_Reputation[m_HonorMode][BG_WSG_FLAG_CAP], ALLIANCE);          // +35 reputation
+        RewardHonorToTeam(BG_WSG_Honor[m_HonorMode][BG_WSG_FLAG_CAP], ALLIANCE);                    // +40 bonushonor
     }
     else
@@ -259,6 +278,6 @@
             AddPoint(HORDE, 1);
         PlaySoundToAll(BG_WS_SOUND_FLAG_CAPTURED_HORDE);
-        RewardReputationToTeam(889, 35, HORDE);             // +35 reputation
-        RewardHonorToTeam(40, HORDE);                       // +40 bonushonor
+        RewardReputationToTeam(889, BG_WSG_Reputation[m_HonorMode][BG_WSG_FLAG_CAP], HORDE);             // +35 reputation
+        RewardHonorToTeam(BG_WSG_Honor[m_HonorMode][BG_WSG_FLAG_CAP], HORDE);                       // +40 bonushonor
     }
 
@@ -288,4 +307,5 @@
         UpdateWorldState(BG_WS_FLAG_STATE_HORDE, 1);
 
+        RewardHonorToTeam(BG_WSG_Honor[m_HonorMode][BG_WSG_WIN], winner);
         EndBattleGround(winner);
     }
Index: /trunk/src/game/BattleGroundMgr.cpp
===================================================================
--- /trunk/src/game/BattleGroundMgr.cpp (revision 44)
+++ /trunk/src/game/BattleGroundMgr.cpp (revision 50)
@@ -1785,2 +1785,13 @@
     sWorld.SendWorldText(LANG_ARENA_TESTING, m_ArenaTesting ? "on" : "off");
 }
+
+void BattleGroundMgr::SetHolidayWeekends(uint32 mask)
+{
+    for(uint32 bgtype = 1; bgtype <= 8; ++bgtype)
+    {
+        if(BattleGround * bg = GetBattleGroundTemplate(bgtype))
+        {
+            bg->SetHoliday(mask & (1 << bgtype));
+        }
+    }
+}
Index: /trunk/sql/updates/54_world.sql
===================================================================
--- /trunk/sql/updates/54_world.sql (revision 50)
+++ /trunk/sql/updates/54_world.sql (revision 50)
@@ -0,0 +1,5 @@
+﻿CREATE TABLE `game_event_battleground_holiday` (
+ `event` int(10) unsigned NOT NULL,
+ `bgflag` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY  (`event`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
