diff options
author | click <none@none> | 2010-05-26 11:34:37 +0200 |
---|---|---|
committer | click <none@none> | 2010-05-26 11:34:37 +0200 |
commit | 7a13839178847c682666e507651c49939681365a (patch) | |
tree | 73692e329ac38a71e29d2d6ef580f9bc796e6ce9 /src/game/Player.cpp | |
parent | e4c03aa55ab1934c89786c271e31317f7bc75687 (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.cpp | 62 |
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; +} |