diff --git a/src/game/BattleGround/BattleGround.h b/src/game/BattleGround/BattleGround.h index 38a78d53b..f2e704fcf 100644 --- a/src/game/BattleGround/BattleGround.h +++ b/src/game/BattleGround/BattleGround.h @@ -166,11 +166,14 @@ enum BattleGroundQueueTypeId BATTLEGROUND_QUEUE_EY = 4, BATTLEGROUND_QUEUE_SA = 5, BATTLEGROUND_QUEUE_IC = 6, - BATTLEGROUND_QUEUE_2v2 = 7, - BATTLEGROUND_QUEUE_3v3 = 8, - BATTLEGROUND_QUEUE_5v5 = 9 + BATTLEGROUND_QUEUE_TP = 7, + BATTLEGROUND_QUEUE_BG = 8, + BATTLEGROUND_QUEUE_2v2 = 9, + BATTLEGROUND_QUEUE_3v3 = 10, + BATTLEGROUND_QUEUE_5v5 = 11, }; -#define MAX_BATTLEGROUND_QUEUE_TYPES 10 + +#define MAX_BATTLEGROUND_QUEUE_TYPES 12 enum ScoreType { @@ -295,6 +298,7 @@ class BattleGround /* Battleground */ // Get methods: + ObjectGuid GetObjectGuid() { return ObjectGuid(HIGHGUID_BATTLEGROUND, uint32(0), uint32(m_TypeID)); } char const* GetName() const { return m_Name; } BattleGroundTypeId GetTypeID() const { return m_TypeID; } BattleGroundBracketId GetBracketId() const { return m_BracketId; } diff --git a/src/game/BattleGround/BattleGroundHandler.cpp b/src/game/BattleGround/BattleGroundHandler.cpp index eb6684377..a59c1847d 100644 --- a/src/game/BattleGround/BattleGroundHandler.cpp +++ b/src/game/BattleGround/BattleGroundHandler.cpp @@ -72,7 +72,7 @@ void WorldSession::HandleBattlemasterHelloOpcode(WorldPacket& recv_data) void WorldSession::SendBattlegGroundList(ObjectGuid guid, BattleGroundTypeId bgTypeId) { WorldPacket data; - sBattleGroundMgr.BuildBattleGroundListPacket(&data, guid, _player, bgTypeId, 0); + sBattleGroundMgr.BuildBattleGroundListPacket(&data, guid, _player, bgTypeId); SendPacket(&data); } @@ -85,10 +85,15 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data) bool isPremade = false; Group* grp; - recv_data >> guid; // battlemaster guid - recv_data >> bgTypeId_; // battleground type id (DBC id) recv_data >> instanceId; // instance id, 0 if First Available selected - recv_data >> joinAsGroup; // join as group + recv_data.ReadGuidMask<2, 0, 3, 1, 5>(guid); + joinAsGroup = recv_data.ReadBit(); + recv_data.ReadGuidMask<4, 6, 7>(guid); + recv_data.ReadGuidBytes<2, 6, 4, 3, 7, 0, 5, 1>(guid); + + bgTypeId_ = guid.GetCounter(); + DEBUG_LOG("WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from %s, typeid: %u, asGroup: %u, bg guid: %u", + _player->GetGuidStr().c_str(), bgTypeId_, joinAsGroup, guid.GetString().c_str()); if (!sBattlemasterListStore.LookupEntry(bgTypeId_)) { @@ -98,8 +103,6 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recv_data) BattleGroundTypeId bgTypeId = BattleGroundTypeId(bgTypeId_); - DEBUG_LOG("WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from %s", guid.GetString().c_str()); - // can do this, since it's battleground, not arena BattleGroundQueueTypeId bgQueueTypeId = BattleGroundMgr::BGQueueTypeId(bgTypeId, ARENA_TYPE_NONE); @@ -322,12 +325,6 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket& recv_data) uint32 bgTypeId; recv_data >> bgTypeId; // id from DBC - uint8 fromWhere; - recv_data >> fromWhere; // 0 - battlemaster (lua: ShowBattlefieldList), 1 - UI (lua: RequestBattlegroundInstanceInfo) - - uint8 unk1; - recv_data >> unk1; // unknown 3.2.2 - BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId); if (!bl) { @@ -336,7 +333,7 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket& recv_data) } WorldPacket data; - sBattleGroundMgr.BuildBattleGroundListPacket(&data, ObjectGuid(), _player, BattleGroundTypeId(bgTypeId), fromWhere); + sBattleGroundMgr.BuildBattleGroundListPacket(&data, ObjectGuid(), _player, BattleGroundTypeId(bgTypeId)); SendPacket(&data); } @@ -819,7 +816,14 @@ void WorldSession::HandleReportPvPAFK(WorldPacket& recv_data) reportedPlayer->ReportedAfkBy(_player); } -void WorldSession::HandleRequestPvPOptionsEnabled(WorldPacket& recv_data) +void WorldSession::HandleRequestRatedBGStatsOpcode(WorldPacket& recv_data) +{ + // null packet + + GetPlayer()->SendRatedBGStats(); +} + +void WorldSession::HandleRequestPvPOptionsEnabledOpcode(WorldPacket& recv_data) { // null packet @@ -829,3 +833,11 @@ void WorldSession::HandleRequestPvPOptionsEnabled(WorldPacket& recv_data) SendPacket(&data); } + +void WorldSession::HandleRequestPvPRewardsOpcode(WorldPacket& recv_data) +{ + // null packet + + GetPlayer()->SendPvPRewards(); +} + diff --git a/src/game/BattleGround/BattleGroundMgr.cpp b/src/game/BattleGround/BattleGroundMgr.cpp index 8e315b91e..353dcb204 100644 --- a/src/game/BattleGround/BattleGroundMgr.cpp +++ b/src/game/BattleGround/BattleGroundMgr.cpp @@ -1704,61 +1704,54 @@ void BattleGroundMgr::CreateInitialBattleGrounds() sLog.outString(">> Loaded %u battlegrounds", count); } -void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket* data, ObjectGuid guid, Player* plr, BattleGroundTypeId bgTypeId, uint8 fromWhere) +void BattleGroundMgr::BuildBattleGroundListPacket(WorldPacket* data, ObjectGuid guid, Player* plr, BattleGroundTypeId bgTypeId) { if (!plr) return; + BattleGround* bgTemplate = sBattleGroundMgr.GetBattleGroundTemplate(bgTypeId); + data->Initialize(SMSG_BATTLEFIELD_LIST); - *data << guid; // battlemaster guid - *data << uint8(fromWhere); // from where you joined - *data << uint32(bgTypeId); // battleground id - *data << uint8(0); // unk - *data << uint8(0); // unk + *data << uint32(0); // 4.3.4 winConquest weekend + *data << uint32(0); // 4.3.4 winConquest random + *data << uint32(0); // 4.3.4 lossHonor weekend + *data << uint32(bgTypeId); // battleground id + *data << uint32(0); // 4.3.4 lossHonor random + *data << uint32(0); // 4.3.4 winHonor random + *data << uint32(0); // 4.3.4 winHonor weekend + *data << uint8(0); // max level + *data << uint8(0); // min level + data->WriteGuidMask<0, 1, 7>(guid); + data->WriteBit(false); // has holiday bg currency bonus ?? + data->WriteBit(false); // has random bg currency bonus ?? - // Rewards - *data << uint8(0); // 3.3.3 hasWin - *data << uint32(0); // 3.3.3 winHonor - *data << uint32(0); // 3.3.3 winArena - *data << uint32(0); // 3.3.3 lossHonor - - uint8 isRandom = 0; - *data << uint8(isRandom); // 3.3.3 isRandom - if (isRandom) + uint32 count = 0; + ByteBuffer buf; + if (bgTemplate) { - // Rewards (random) - *data << uint8(0); // 3.3.3 hasWin_Random - *data << uint32(0); // 3.3.3 winHonor_Random - *data << uint32(0); // 3.3.3 winArena_Random - *data << uint32(0); // 3.3.3 lossHonor_Random - } - - if (bgTypeId == BATTLEGROUND_AA) // arena - { - *data << uint32(0); // arena - no instances showed - } - else // battleground - { - size_t count_pos = data->wpos(); - uint32 count = 0; - *data << uint32(0); // number of bg instances - - if (BattleGround* bgTemplate = sBattleGroundMgr.GetBattleGroundTemplate(bgTypeId)) + // expected bracket entry + if (PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgTemplate->GetMapId(), plr->getLevel())) { - // expected bracket entry - if (PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgTemplate->GetMapId(), plr->getLevel())) + BattleGroundBracketId bracketId = bracketEntry->GetBracketId(); + ClientBattleGroundIdSet const& ids = m_ClientBattleGroundIds[bgTypeId][bracketId]; + for (ClientBattleGroundIdSet::const_iterator itr = ids.begin(); itr != ids.end(); ++itr) { - BattleGroundBracketId bracketId = bracketEntry->GetBracketId(); - ClientBattleGroundIdSet const& ids = m_ClientBattleGroundIds[bgTypeId][bracketId]; - for (ClientBattleGroundIdSet::const_iterator itr = ids.begin(); itr != ids.end(); ++itr) - { - *data << uint32(*itr); - ++count; - } - data->put(count_pos , count); + buf << uint32(*itr); + ++count; } } } + + data->WriteBits(count, 24); + data->WriteGuidMask<6, 4, 2, 3>(guid); + data->WriteBit(true); // unk + data->WriteGuidMask<5>(guid); + data->WriteBit(true); // signals EVENT_PVPQUEUE_ANYWHERE_SHOW if set + + data->WriteGuidBytes<6, 1, 7, 5>(guid); + if (count) + data->append(buf); + data->WriteGuidBytes<0, 2, 4, 3>(guid); } void BattleGroundMgr::SendToBattleGround(Player* pl, uint32 instanceId, BattleGroundTypeId bgTypeId) @@ -1816,6 +1809,10 @@ BattleGroundQueueTypeId BattleGroundMgr::BGQueueTypeId(BattleGroundTypeId bgType return BATTLEGROUND_QUEUE_IC; case BATTLEGROUND_RB: return BATTLEGROUND_QUEUE_NONE; + case BATTLEGROUND_TP: + return BATTLEGROUND_QUEUE_TP; + case BATTLEGROUND_BG: + return BATTLEGROUND_QUEUE_BG; case BATTLEGROUND_AA: case BATTLEGROUND_NA: case BATTLEGROUND_RL: @@ -1854,6 +1851,10 @@ BattleGroundTypeId BattleGroundMgr::BGTemplateId(BattleGroundQueueTypeId bgQueue return BATTLEGROUND_SA; case BATTLEGROUND_QUEUE_IC: return BATTLEGROUND_IC; + case BATTLEGROUND_QUEUE_TP: + return BATTLEGROUND_TP; + case BATTLEGROUND_QUEUE_BG: + return BATTLEGROUND_BG; case BATTLEGROUND_QUEUE_2v2: case BATTLEGROUND_QUEUE_3v3: case BATTLEGROUND_QUEUE_5v5: @@ -1984,10 +1985,13 @@ HolidayIds BattleGroundMgr::BGTypeToWeekendHolidayId(BattleGroundTypeId bgTypeId switch (bgTypeId) { case BATTLEGROUND_AV: return HOLIDAY_CALL_TO_ARMS_AV; - case BATTLEGROUND_EY: return HOLIDAY_CALL_TO_ARMS_EY; case BATTLEGROUND_WS: return HOLIDAY_CALL_TO_ARMS_WS; - case BATTLEGROUND_SA: return HOLIDAY_CALL_TO_ARMS_SA; case BATTLEGROUND_AB: return HOLIDAY_CALL_TO_ARMS_AB; + case BATTLEGROUND_EY: return HOLIDAY_CALL_TO_ARMS_EY; + case BATTLEGROUND_SA: return HOLIDAY_CALL_TO_ARMS_SA; + case BATTLEGROUND_IC: return HOLIDAY_CALL_TO_ARMS_IC; + case BATTLEGROUND_TP: return HOLIDAY_CALL_TO_ARMS_TP; + case BATTLEGROUND_BG: return HOLIDAY_CALL_TO_ARMS_BG; default: return HOLIDAY_NONE; } } @@ -1997,10 +2001,13 @@ BattleGroundTypeId BattleGroundMgr::WeekendHolidayIdToBGType(HolidayIds holiday) switch (holiday) { case HOLIDAY_CALL_TO_ARMS_AV: return BATTLEGROUND_AV; - case HOLIDAY_CALL_TO_ARMS_EY: return BATTLEGROUND_EY; case HOLIDAY_CALL_TO_ARMS_WS: return BATTLEGROUND_WS; - case HOLIDAY_CALL_TO_ARMS_SA: return BATTLEGROUND_SA; case HOLIDAY_CALL_TO_ARMS_AB: return BATTLEGROUND_AB; + case HOLIDAY_CALL_TO_ARMS_EY: return BATTLEGROUND_EY; + case HOLIDAY_CALL_TO_ARMS_SA: return BATTLEGROUND_SA; + case HOLIDAY_CALL_TO_ARMS_IC: return BATTLEGROUND_IC; + case HOLIDAY_CALL_TO_ARMS_TP: return BATTLEGROUND_TP; + case HOLIDAY_CALL_TO_ARMS_BG: return BATTLEGROUND_BG; default: return BATTLEGROUND_TYPE_NONE; } } diff --git a/src/game/BattleGround/BattleGroundMgr.h b/src/game/BattleGround/BattleGroundMgr.h index 10e618e95..1b107b93c 100644 --- a/src/game/BattleGround/BattleGroundMgr.h +++ b/src/game/BattleGround/BattleGroundMgr.h @@ -194,7 +194,7 @@ class BattleGroundMgr /* Packet Building */ void BuildPlayerJoinedBattleGroundPacket(WorldPacket* data, Player* plr); void BuildPlayerLeftBattleGroundPacket(WorldPacket* data, ObjectGuid guid); - void BuildBattleGroundListPacket(WorldPacket* data, ObjectGuid guid, Player* plr, BattleGroundTypeId bgTypeId, uint8 fromWhere); + void BuildBattleGroundListPacket(WorldPacket* data, ObjectGuid guid, Player* plr, BattleGroundTypeId bgTypeId); void BuildGroupJoinedBattlegroundPacket(WorldPacket* data, GroupJoinBattlegroundResult result); void BuildUpdateWorldStatePacket(WorldPacket* data, uint32 field, uint32 value); void BuildPvpLogDataPacket(WorldPacket* data, BattleGround* bg); diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index e317f1a6b..a96ec9452 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -614,10 +614,10 @@ struct BattlemasterListEntry uint32 HolidayWorldStateId; // 13 m_holidayWorldState uint32 minLevel; // 14, m_minlevel (sync with PvPDifficulty.dbc content) uint32 maxLevel; // 15, m_maxlevel (sync with PvPDifficulty.dbc content) - uint32 maxGroupSizeRated; // 16 4.0.1 - uint32 minPlayers; // 17 - 4.0.6.13596 - uint32 maxPlayers; // 18 4.0.1 - uint32 rated; // 19 4.0.3, value 2 for Rated Battlegrounds + uint32 maxGroupSizeRated; // 16 4.0.1 + uint32 minPlayers; // 17 4.0.6.13596 + uint32 maxPlayers; // 18 4.0.1 + uint32 rated; // 19 4.0.3, value 2 for Rated Battlegrounds }; /*struct Cfg_CategoriesEntry diff --git a/src/game/ObjectGuid.h b/src/game/ObjectGuid.h index c36a8ff28..3562756bd 100644 --- a/src/game/ObjectGuid.h +++ b/src/game/ObjectGuid.h @@ -71,6 +71,7 @@ enum HighGuid HIGHGUID_VEHICLE = 0xF15, // blizz F15/F55 HIGHGUID_DYNAMICOBJECT = 0xF10, // blizz F10/F50 HIGHGUID_CORPSE = 0xF50, // blizz F10/F50 used second variant to resolve conflict with HIGHGUID_DYNAMICOBJECT + HIGHGUID_BATTLEGROUND = 0x1F1, // blizz 1F1, used for battlegrounds and battlefields HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC (for GAMEOBJECT_TYPE_MO_TRANSPORT) HIGHGUID_INSTANCE = 0x1F4, // blizz 1F4 HIGHGUID_GROUP = 0x1F5, // blizz 1F5 diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index de79116d1..9b38fcc19 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -783,7 +783,7 @@ void InitializeOpcodes() OPCODE(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck ); //OPCODE(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMoverOpcode ); OPCODE(SMSG_PLAY_SOUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode ); + OPCODE(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode ); //OPCODE(SMSG_BATTLEFIELD_STATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_BATTLEFIELD_PORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattleFieldPortOpcode ); OPCODE(CMSG_INSPECT_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectHonorStatsOpcode ); @@ -811,7 +811,7 @@ void InitializeOpcodes() OPCODE(SMSG_BINDER_CONFIRM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_BATTLEGROUND_PLAYER_JOINED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_BATTLEGROUND_PLAYER_LEFT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode ); + OPCODE(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode ); OPCODE(SMSG_ADDON_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_PET_UNLEARN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetUnlearnOpcode ); //OPCODE(SMSG_PET_UNLEARN_CONFIRM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -1381,8 +1381,10 @@ void InitializeOpcodes() OPCODE(SMSG_WEEKLY_RESET_CURRENCIES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_INSPECT_RATED_BG_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_REQUEST_RATED_BG_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL ); - //OPCODE(CMSG_REQUEST_RATED_BG_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL ); - //OPCODE(CMSG_REQUEST_PVP_REWARDS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL ); - OPCODE(CMSG_REQUEST_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPvPOptionsEnabled ); + OPCODE(CMSG_REQUEST_RATED_BG_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRatedBGStatsOpcode ); + OPCODE(SMSG_RATED_BG_STATS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(CMSG_REQUEST_PVP_REWARDS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPvPRewardsOpcode ); + OPCODE(SMSG_PVP_REWARDS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(CMSG_REQUEST_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPvPOptionsEnabledOpcode ); OPCODE(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); }; diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 330e35e76..d77b939d1 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -768,9 +768,9 @@ enum Opcodes CMSG_MOVE_WATER_WALK_ACK = 0x3B00, // 4.3.4 15595 CMSG_MOVE_NOT_ACTIVE_MOVER = 0x12D2, SMSG_PLAY_SOUND = 0x2134, // 4.3.4 15595 - CMSG_BATTLEFIELD_STATUS = 0x12D4, - SMSG_BATTLEFIELD_STATUS = 0x12D5, - CMSG_BATTLEFIELD_PORT = 0x12D6, + CMSG_BATTLEFIELD_STATUS = 0x2500, // 4.3.4 15595 + SMSG_BATTLEFIELD_STATUS = 0x7DA1, // 4.3.4 15595 + CMSG_BATTLEFIELD_PORT = 0x711A, // 4.3.4 15595 CMSG_INSPECT_HONOR_STATS = 0x791E, // 4.3.4 15595 SMSG_INSPECT_HONOR_STATS = 0x79A5, // 4.3.4 15595 CMSG_BATTLEMASTER_HELLO = 0x12D8, @@ -790,13 +790,13 @@ enum Opcodes CMSG_GM_UNTEACH = 0x12E6, SMSG_WARDEN_DATA = 0x12E7, CMSG_WARDEN_DATA = 0x12E8, - SMSG_GROUP_JOINED_BATTLEGROUND = 0x12E9, + SMSG_GROUP_JOINED_BATTLEGROUND = 0x71A7, // 4.3.4 15595 MSG_BATTLEGROUND_PLAYER_POSITIONS = 0x12EA, CMSG_PET_STOP_ATTACK = 0x12EB, SMSG_BINDER_CONFIRM = 0x2835, // 4.3.4 15595 SMSG_BATTLEGROUND_PLAYER_JOINED = 0x12ED, SMSG_BATTLEGROUND_PLAYER_LEFT = 0x12EE, - CMSG_BATTLEMASTER_JOIN = 0x12EF, + CMSG_BATTLEMASTER_JOIN = 0x7902, // 4.3.4 15595 SMSG_ADDON_INFO = 0x2C14, // 4.3.4 15595 CMSG_PET_UNLEARN = 0x12F1, SMSG_PET_UNLEARN_CONFIRM = 0x12F2, @@ -902,7 +902,7 @@ enum Opcodes CMSG_ARENA_TEAM_DISBAND = 0x1356, CMSG_ARENA_TEAM_LEADER = 0x1357, SMSG_ARENA_TEAM_EVENT = 0x1358, - CMSG_BATTLEMASTER_JOIN_ARENA = 0x1359, + CMSG_BATTLEMASTER_JOIN_ARENA = 0x701C, // 4.3.4 15595 CMSG_MOVE_START_ASCEND = 0x390A, CMSG_MOVE_STOP_ASCEND = 0x7B00, // 4.3.4 15595 SMSG_ARENA_TEAM_STATS = 0x135C, @@ -1400,7 +1400,9 @@ enum Opcodes CMSG_INSPECT_RATED_BG_STATS = 0x3010, // 4.3.4 15595 CMSG_REQUEST_RATED_BG_INFO = 0x2423, // 4.3.4 15595 CMSG_REQUEST_RATED_BG_STATS = 0x05B3, // 4.3.4 15595 + SMSG_RATED_BG_STATS = 0x34A1, // 4.3.4 15595 CMSG_REQUEST_PVP_REWARDS = 0x780C, // 4.3.4 15595 + SMSG_PVP_REWARDS = 0x5DA4, // 4.3.4 15595 CMSG_REQUEST_PVP_OPTIONS_ENABLED = 0x24A1, // 4.3.4 15595 SMSG_PVP_OPTIONS_ENABLED = 0x50A1, // 4.3.4 15595 }; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index ffd22457a..a93a72b15 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -23551,3 +23551,29 @@ void Player::ResetCurrencyWeekCounts() WorldPacket data(SMSG_WEEKLY_RESET_CURRENCIES, 0); SendDirectMessage(&data); } + +void Player::SendPvPRewards() +{ + // Placeholder + + WorldPacket data(SMSG_PVP_REWARDS, 6 * 4); + data << uint32(1650); // rbg conquest cap + data << uint32(0); // total conquest earned + data << uint32(1350); // arena conquest cap + data << uint32(0); // rbg conquest earned + data << uint32(0); // arena conquest earned + data << uint32(1650); // total conquest cap + + SendDirectMessage(&data); +} + +void Player::SendRatedBGStats() +{ + // Placeholder + + WorldPacket data(SMSG_RATED_BG_STATS, 6 * 4); + for (int i = 0; i < 18; ++i) + data << uint32(i + 1); + + SendDirectMessage(&data); +} diff --git a/src/game/Player.h b/src/game/Player.h index 820667e55..61fe69f90 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1993,6 +1993,8 @@ class MANGOS_DLL_SPEC Player : public Unit /*********************************************************/ void UpdateHonorKills(); bool RewardHonor(Unit *pVictim, uint32 groupsize, float honor = -1); + void SendPvPRewards(); + void SendRatedBGStats(); uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot); @@ -2091,6 +2093,13 @@ class MANGOS_DLL_SPEC Player : public Unit } BattleGroundQueueTypeId GetBattleGroundQueueTypeId(uint32 index) const { return m_bgBattleGroundQueueID[index].bgQueueTypeId; } + BattleGroundQueueTypeId GetBattleGroundQueueTypeIdByClientInstance(uint32 instanceId) const + { + for (int i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (m_bgBattleGroundQueueID[i].invitedToInstance == instanceId) + return m_bgBattleGroundQueueID[i].bgQueueTypeId; + return BATTLEGROUND_QUEUE_NONE; + } uint32 GetBattleGroundQueueIndex(BattleGroundQueueTypeId bgQueueTypeId) const { for (int i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index e4cd9742c..fe9945e41 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -2372,7 +2372,13 @@ enum HolidayIds HOLIDAY_PILGRIMS_BOUNTY = 404, HOLIDAY_WOTLK_LAUNCH = 406, HOLIDAY_DAY_OF_DEAD = 409, - HOLIDAY_CALL_TO_ARMS_ISLE_OF_C = 420 + HOLIDAY_CALL_TO_ARMS_IC = 420, + HOLIDAY_CALL_TO_ARMS_BG = 435, + HOLIDAY_CALL_TO_ARMS_TP = 436, + HOLIDAY_CALL_TO_ARMS_RBG_15v15 = 442, + HOLIDAY_CALL_TO_ARMS_RBG_25v25 = 443, + HOLIDAY_WOW_7TH_ANNIVERSARY = 467, + HOLIDAY_WOW_8TH_ANNIVERSARY = 484, }; // values based at QuestSort.dbc @@ -3049,11 +3055,17 @@ enum BattleGroundTypeId BATTLEGROUND_RV = 11, BATTLEGROUND_IC = 30, BATTLEGROUND_RB = 32, // random battleground + BATTLEGROUND_RBG_10v10 = 100, // rated battleground 10v10 + BATTLEGROUND_RBG_15v15 = 101, // rated battleground 15v15 + BATTLEGROUND_RBG_5v5 = 102, // rated battleground 5v5 BATTLEGROUND_TP = 108, // 4.0.0 - BATTLEGROUND_BG = 118 // 4.0.0 + BATTLEGROUND_BG = 120, // 4.3.4 + //BATTLEGROUND_UNK1 = 441, // icecrown citadel + //BATTLEGROUND_UNK2 = 443, // ruby sanctum + //BATTLEGROUND_UNK3 = 656, // rated eye of the storm }; -#define MAX_BATTLEGROUND_TYPE_ID 119 +#define MAX_BATTLEGROUND_TYPE_ID 121 enum ArenaType { diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 5650df58e..3da7e2d3f 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -764,7 +764,9 @@ class MANGOS_DLL_SPEC WorldSession void HandleLeaveBattlefieldOpcode(WorldPacket& recv_data); void HandleBattlemasterJoinArena(WorldPacket& recv_data); void HandleReportPvPAFK(WorldPacket& recv_data); - void HandleRequestPvPOptionsEnabled(WorldPacket& recv_data); + void HandleRequestPvPOptionsEnabledOpcode(WorldPacket& recv_data); + void HandleRequestPvPRewardsOpcode(WorldPacket& recv_data); + void HandleRequestRatedBGStatsOpcode(WorldPacket& recv_data); void HandleWardenDataOpcode(WorldPacket& recv_data); void HandleWorldTeleportOpcode(WorldPacket& recv_data); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 56c451923..a76aa1f9a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "12172" + #define REVISION_NR "12173" #endif // __REVISION_NR_H__