aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
authorclick <none@none>2010-05-26 11:34:37 +0200
committerclick <none@none>2010-05-26 11:34:37 +0200
commit7a13839178847c682666e507651c49939681365a (patch)
tree73692e329ac38a71e29d2d6ef580f9bc796e6ce9 /src/game/Player.cpp
parente4c03aa55ab1934c89786c271e31317f7bc75687 (diff)
Add support for random battlegrounds - port by n0n4me, original code by Vladimir and Griffonheart (Big thanks to all of you!)
--HG-- branch : trunk
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r--src/game/Player.cpp62
1 files changed, 48 insertions, 14 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index aae3890940f..9b83e023920 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -465,6 +465,8 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa
// Honor System
m_lastHonorUpdateTime = time(NULL);
+ m_IsBGRandomWinner = false;
+
// Player summoning
m_summon_expire = 0;
m_summon_mapid = 0;
@@ -8060,7 +8062,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
//TODO: fix this big hack
if ((go->GetEntry() == BG_AV_OBJECTID_MINE_N || go->GetEntry() == BG_AV_OBJECTID_MINE_S))
if (BattleGround *bg = GetBattleGround())
- if (bg->GetTypeID() == BATTLEGROUND_AV)
+ if (bg->GetTypeID(true) == BATTLEGROUND_AV)
if (!(((BattleGroundAV*)bg)->PlayerCanDoMineQuest(go->GetEntry(),GetTeam())))
{
SendLootRelease(guid);
@@ -8188,7 +8190,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
uint32 pLevel = bones->loot.gold;
bones->loot.clear();
if (BattleGround *bg = GetBattleGround())
- if (bg->GetTypeID() == BATTLEGROUND_AV)
+ if (bg->GetTypeID(true) == BATTLEGROUND_AV)
loot->FillLoot(1, LootTemplates_Creature, this, true);
// It may need a better formula
// Now it works like this: lvl10: ~6copper, lvl70: ~9silver
@@ -8531,7 +8533,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
data << uint32(2325) << uint32(0x0); // 13 sandworm E
break;
case 2597: // Alterac Valley
- if (bg && bg->GetTypeID() == BATTLEGROUND_AV)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_AV)
bg->FillInitialWorldStates(data);
else
{
@@ -8613,7 +8615,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 3277: // Warsong Gulch
- if (bg && bg->GetTypeID() == BATTLEGROUND_WS)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_WS)
bg->FillInitialWorldStates(data);
else
{
@@ -8628,7 +8630,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 3358: // Arathi Basin
- if (bg && bg->GetTypeID() == BATTLEGROUND_AB)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_AB)
bg->FillInitialWorldStates(data);
else
{
@@ -8667,7 +8669,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 3820: // Eye of the Storm
- if (bg && bg->GetTypeID() == BATTLEGROUND_EY)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_EY)
bg->FillInitialWorldStates(data);
else
{
@@ -8840,7 +8842,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 3698: // Nagrand Arena
- if (bg && bg->GetTypeID() == BATTLEGROUND_NA)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_NA)
bg->FillInitialWorldStates(data);
else
{
@@ -8850,7 +8852,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 3702: // Blade's Edge Arena
- if (bg && bg->GetTypeID() == BATTLEGROUND_BE)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_BE)
bg->FillInitialWorldStates(data);
else
{
@@ -8860,7 +8862,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 3968: // Ruins of Lordaeron
- if (bg && bg->GetTypeID() == BATTLEGROUND_RL)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_RL)
bg->FillInitialWorldStates(data);
else
{
@@ -8870,7 +8872,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 4378: // Dalaran Sewers
- if (bg && bg->GetTypeID() == BATTLEGROUND_DS)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_DS)
bg->FillInitialWorldStates(data);
else
{
@@ -8881,7 +8883,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
break;
case 3703: // Shattrath City
case 4384: // Strand of the Ancients
- if (bg && bg->GetTypeID() == BATTLEGROUND_SA)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_SA)
bg->FillInitialWorldStates(data);
else
{
@@ -8916,7 +8918,7 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
}
break;
case 4406: // Ring of Valor
- if (bg && bg->GetTypeID() == BATTLEGROUND_RV)
+ if (bg && bg->GetTypeID(true) == BATTLEGROUND_RV)
bg->FillInitialWorldStates(data);
else
{
@@ -8933,6 +8935,22 @@ void Player::SendInitWorldStates(uint32 zoneid, uint32 areaid)
break;
}
GetSession()->SendPacket(&data);
+ SendBGWeekendWorldStates();
+}
+
+void Player::SendBGWeekendWorldStates()
+{
+ for (uint32 i = 1; i < sBattlemasterListStore.GetNumRows(); ++i)
+ {
+ BattlemasterListEntry const * bl = sBattlemasterListStore.LookupEntry(i);
+ if (bl && bl->HolidayWorldStateId)
+ {
+ if (BattleGroundMgr::IsBGWeekend((BattleGroundTypeId)bl->id))
+ SendUpdateWorldState(bl->HolidayWorldStateId, 1);
+ else
+ SendUpdateWorldState(bl->HolidayWorldStateId, 0);
+ }
+ }
}
uint32 Player::GetXPRestBonus(uint32 xp)
@@ -15886,10 +15904,10 @@ bool Player::LoadFromDB(uint32 guid, SqlQueryHolder *holder)
if (player_at_bg && currentBg->GetStatus() != STATUS_WAIT_LEAVE)
{
- BattleGroundQueueTypeId bgQueueTypeId = sBattleGroundMgr.BGQueueTypeId(currentBg->GetTypeID(), currentBg->GetArenaType());
+ BattleGroundQueueTypeId bgQueueTypeId = sBattleGroundMgr.BGQueueTypeId(currentBg->GetTypeID(true), currentBg->GetArenaType());
AddBattleGroundQueueId(bgQueueTypeId);
- m_bgData.bgTypeID = currentBg->GetTypeID();
+ m_bgData.bgTypeID = currentBg->GetTypeID(true);
//join player to battleground group
currentBg->EventPlayerLoggedIn(this, GetGUID());
@@ -16214,6 +16232,7 @@ bool Player::LoadFromDB(uint32 guid, SqlQueryHolder *holder)
_LoadQuestStatus(holder->GetResult(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS));
_LoadDailyQuestStatus(holder->GetResult(PLAYER_LOGIN_QUERY_LOADDAILYQUESTSTATUS));
_LoadWeeklyQuestStatus(holder->GetResult(PLAYER_LOGIN_QUERY_LOADWEKLYQUESTSTATUS));
+ _LoadRandomBGStatus(holder->GetResult(PLAYER_LOGIN_QUERY_LOADRANDOMBG));
// after spell and quest load
InitTalentForLevel();
@@ -23908,3 +23927,18 @@ void Player::RefundItem(Item *item)
ModifyArenaPoints(arenaRefund);
}
+
+void Player::SetRandomWinner(bool isWinner)
+{
+ m_IsBGRandomWinner = isWinner;
+ if (m_IsBGRandomWinner)
+ CharacterDatabase.PExecute("INSERT INTO character_battleground_random (guid) VALUES ('%u')", GetGUIDLow());
+}
+
+void Player::_LoadRandomBGStatus(QueryResult_AutoPtr result)
+{
+ //QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT guid FROM character_battleground_random WHERE guid = '%u'", GetGUIDLow());
+
+ if (result)
+ m_IsBGRandomWinner = true;
+}