diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-04-04 13:33:58 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-04-04 13:33:58 +0200 |
commit | 250d85b559c175ee7ad35d12879aec01b01a4179 (patch) | |
tree | c85db38f58aa4384a0897fefdca8a0551f5c860d | |
parent | 76cbf05a2e4db61872faeb0f34bee9ee8d37db73 (diff) |
Core/PacketIO: Updated and enabled RaF packets
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 30 | ||||
-rw-r--r-- | src/server/game/Handlers/ReferAFriendHandler.cpp | 38 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ReferAFriendPackets.cpp | 44 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ReferAFriendPackets.h | 71 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TradePackets.h | 8 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 10 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 6 |
8 files changed, 166 insertions, 50 deletions
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 83627ede64f..e263dd70bee 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1033,20 +1033,22 @@ enum CharDeleteMethod enum ReferAFriendError { - ERR_REFER_A_FRIEND_NONE = 0x00, - ERR_REFER_A_FRIEND_NOT_REFERRED_BY = 0x01, - ERR_REFER_A_FRIEND_TARGET_TOO_HIGH = 0x02, - ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS = 0x03, - ERR_REFER_A_FRIEND_TOO_FAR = 0x04, - ERR_REFER_A_FRIEND_DIFFERENT_FACTION = 0x05, - ERR_REFER_A_FRIEND_NOT_NOW = 0x06, - ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I = 0x07, - ERR_REFER_A_FRIEND_SUMMON_LEVEL_MAX_I = 0x08, - ERR_REFER_A_FRIEND_SUMMON_COOLDOWN = 0x09, - ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S = 0x0A, - ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL = 0x0B, - ERR_REFER_A_FRIEND_NOT_IN_LFG = 0x0C, - ERR_REFER_A_FRIEND_NO_XREALM = 0x0D + ERR_REFER_A_FRIEND_NONE = 0, + ERR_REFER_A_FRIEND_NOT_REFERRED_BY = 1, + ERR_REFER_A_FRIEND_TARGET_TOO_HIGH = 2, + ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS = 3, + ERR_REFER_A_FRIEND_TOO_FAR = 4, + ERR_REFER_A_FRIEND_DIFFERENT_FACTION = 5, + ERR_REFER_A_FRIEND_NOT_NOW = 6, + ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I = 7, + ERR_REFER_A_FRIEND_NO_TARGET = 8, + ERR_REFER_A_FRIEND_NOT_IN_GROUP = 9, + ERR_REFER_A_FRIEND_SUMMON_LEVEL_MAX_I = 10, + ERR_REFER_A_FRIEND_SUMMON_COOLDOWN = 11, + ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL = 12, + ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S = 13, + ERR_REFER_A_FRIEND_NO_XREALM = 14, + ERR_REFER_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 15 }; enum PlayerRestState diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp index 4610f737fce..a7cee1e25b9 100644 --- a/src/server/game/Handlers/ReferAFriendHandler.cpp +++ b/src/server/game/Handlers/ReferAFriendHandler.cpp @@ -20,18 +20,13 @@ #include "ObjectMgr.h" #include "Opcodes.h" #include "Log.h" +#include "ReferAFriendPackets.h" -void WorldSession::HandleGrantLevel(WorldPacket& recvData) +void WorldSession::HandleGrantLevel(WorldPackets::RaF::GrantLevel& grantLevel) { - TC_LOG_DEBUG("network", "WORLD: CMSG_GRANT_LEVEL"); - - ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - - Player* target = ObjectAccessor::GetObjectInWorld(guid, _player); + Player* target = ObjectAccessor::GetObjectInWorld(grantLevel.Target, _player); // check cheating - /* TODO: 6.x update lfg system uint8 levels = _player->GetGrantableLevels(); uint8 error = 0; if (!target) @@ -48,31 +43,28 @@ void WorldSession::HandleGrantLevel(WorldPacket& recvData) error = ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I; else if (target->GetGroup() != _player->GetGroup()) error = ERR_REFER_A_FRIEND_NOT_IN_GROUP; + else if (target->getLevel() >= GetMaxLevelForExpansion(target->GetSession()->GetExpansion())) + error = ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL; if (error) { - WorldPacket data(SMSG_REFER_A_FRIEND_FAILURE, 24); - data << uint32(error); + WorldPackets::RaF::ReferAFriendFailure failure; + failure.Reason = error; if (error == ERR_REFER_A_FRIEND_NOT_IN_GROUP) - data << target->GetName(); + failure.Str = target->GetName(); - SendPacket(&data); + SendPacket(failure.Write()); return; - }*/ + } - WorldPacket data2(SMSG_PROPOSE_LEVEL_GRANT, 8); - data2 << _player->GetPackGUID(); - target->GetSession()->SendPacket(&data2); + WorldPackets::RaF::ProposeLevelGrant proposeLevelGrant; + proposeLevelGrant.Sender = _player->GetGUID(); + target->SendDirectMessage(proposeLevelGrant.Write()); } -void WorldSession::HandleAcceptGrantLevel(WorldPacket& recvData) +void WorldSession::HandleAcceptGrantLevel(WorldPackets::RaF::AcceptLevelGrant& acceptLevelGrant) { - TC_LOG_DEBUG("network", "WORLD: CMSG_ACCEPT_LEVEL_GRANT"); - - ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - - Player* other = ObjectAccessor::GetObjectInWorld(guid, _player); + Player* other = ObjectAccessor::GetObjectInWorld(acceptLevelGrant.Granter, _player); if (!(other && other->GetSession())) return; diff --git a/src/server/game/Server/Packets/ReferAFriendPackets.cpp b/src/server/game/Server/Packets/ReferAFriendPackets.cpp new file mode 100644 index 00000000000..d5b33fd3f46 --- /dev/null +++ b/src/server/game/Server/Packets/ReferAFriendPackets.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "ReferAFriendPackets.h" + +void WorldPackets::RaF::AcceptLevelGrant::Read() +{ + _worldPacket >> Granter; +} + +void WorldPackets::RaF::GrantLevel::Read() +{ + _worldPacket >> Target; +} + +WorldPacket const* WorldPackets::RaF::ProposeLevelGrant::Write() +{ + _worldPacket << Sender; + return &_worldPacket; +} + +WorldPacket const* WorldPackets::RaF::ReferAFriendFailure::Write() +{ + _worldPacket << int32(Reason); + // Client uses this sring only if Reason == ERR_REFER_A_FRIEND_NOT_IN_GROUP || Reason == ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S + // but always reads it from packet + _worldPacket.WriteBits(Str.length(), 6); + _worldPacket.WriteString(Str); + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/ReferAFriendPackets.h b/src/server/game/Server/Packets/ReferAFriendPackets.h new file mode 100644 index 00000000000..c312b8b6935 --- /dev/null +++ b/src/server/game/Server/Packets/ReferAFriendPackets.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ReferAFriendPackets_h__ +#define ReferAFriendPackets_h__ + +#include "Packets.h" +#include "ObjectGuid.h" + +namespace WorldPackets +{ + namespace RaF + { + class AcceptLevelGrant final : public ClientPacket + { + public: + AcceptLevelGrant(WorldPacket&& packet) : ClientPacket(CMSG_ACCEPT_LEVEL_GRANT, std::move(packet)) { } + + void Read() override; + + ObjectGuid Granter; + }; + + class GrantLevel final : public ClientPacket + { + public: + GrantLevel(WorldPacket&& packet) : ClientPacket(CMSG_GRANT_LEVEL, std::move(packet)) { } + + void Read() override; + + ObjectGuid Target; + }; + + class ProposeLevelGrant final : public ServerPacket + { + public: + ProposeLevelGrant() : ServerPacket(SMSG_PROPOSE_LEVEL_GRANT, 16) { } + + WorldPacket const* Write() override; + + ObjectGuid Sender; + }; + + class ReferAFriendFailure final : public ServerPacket + { + public: + ReferAFriendFailure() : ServerPacket(SMSG_REFER_A_FRIEND_FAILURE, 1 + 4) { } + + WorldPacket const* Write() override; + + std::string Str; + int32 Reason = 0; + }; + } +} + +#endif // ReferAFriendPackets_h__ diff --git a/src/server/game/Server/Packets/TradePackets.h b/src/server/game/Server/Packets/TradePackets.h index 8831135f4e5..5ac2c44bc41 100644 --- a/src/server/game/Server/Packets/TradePackets.h +++ b/src/server/game/Server/Packets/TradePackets.h @@ -150,10 +150,6 @@ namespace WorldPackets class TradeUpdated final : public ServerPacket { public: - TradeUpdated() : ServerPacket(SMSG_TRADE_UPDATED) { } - - WorldPacket const* Write() override; - struct UnwrappedTradeItem { WorldPackets::Item::ItemInstance Item; @@ -176,6 +172,10 @@ namespace WorldPackets Optional<UnwrappedTradeItem> Unwrapped; }; + TradeUpdated() : ServerPacket(SMSG_TRADE_UPDATED, 8 + 4 + 1 + 4 + 7 * sizeof(UnwrappedTradeItem) + 4 + 4 + 4 + 4) { } + + WorldPacket const* Write() override; + uint64 Gold = 0; uint32 CurrentStateIndex = 0; uint8 WhichPlayer = 0; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a637e8f8966..b950525a672 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -41,6 +41,7 @@ #include "Packets/PetitionPackets.h" #include "Packets/QueryPackets.h" #include "Packets/QuestPackets.h" +#include "Packets/ReferAFriendPackets.h" #include "Packets/SocialPackets.h" #include "Packets/TalentPackets.h" #include "Packets/TradePackets.h" @@ -144,7 +145,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(opcode, status, processing, WorldPacket, handler); DEFINE_HANDLER(CMSG_ACCEPT_GUILD_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Guild::AcceptGuildInvite, &WorldSession::HandleGuildAcceptInvite); - DEFINE_OPCODE_HANDLER_OLD(CMSG_ACCEPT_LEVEL_GRANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptGrantLevel ); + DEFINE_HANDLER(CMSG_ACCEPT_LEVEL_GRANT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::RaF::AcceptLevelGrant, &WorldSession::HandleAcceptGrantLevel ); DEFINE_HANDLER(CMSG_ACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Trade::AcceptTrade, &WorldSession::HandleAcceptTradeOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_ACCEPT_WARGAME_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_ACTIVATE_TAXI, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleActivateTaxiOpcode ); @@ -400,7 +401,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_GM_TICKET_RESPONSE_RESOLVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketResponseResolve, &WorldSession::HandleGMResponseResolve); DEFINE_HANDLER(CMSG_GM_TICKET_UPDATE_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketUpdateText, &WorldSession::HandleGMTicketUpdateTextOpcode); DEFINE_HANDLER(CMSG_GOSSIP_SELECT_OPTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::GossipSelectOption, &WorldSession::HandleGossipSelectOptionOpcode); - DEFINE_OPCODE_HANDLER_OLD(CMSG_GRANT_LEVEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGrantLevel ); + DEFINE_HANDLER(CMSG_GRANT_LEVEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::RaF::GrantLevel, &WorldSession::HandleGrantLevel ); DEFINE_OPCODE_HANDLER_OLD(CMSG_GUILD_ADD_BATTLENET_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_HANDLER(CMSG_GUILD_ADD_RANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildAddRank, &WorldSession::HandleGuildAddRank); DEFINE_HANDLER(CMSG_GUILD_ASSIGN_MEMBER_RANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Guild::GuildAssignMemberRank, &WorldSession::HandleGuildAssignRank); @@ -1482,7 +1483,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRE_RESSURECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRINT_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROC_RESIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROPOSE_LEVEL_GRANT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROPOSE_LEVEL_GRANT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1536,7 +1537,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_SPLIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_EXPIRED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_SPELL_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVE_ITEM_PASSIVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 9c2457e7b5e..ddd545ba68f 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -347,6 +347,12 @@ namespace WorldPackets class QuestLogRemoveQuest; } + namespace RaF + { + class AcceptLevelGrant; + class GrantLevel; + } + namespace Social { class AddFriend; @@ -1296,8 +1302,8 @@ class WorldSession void HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet); // Refer-a-Friend - void HandleGrantLevel(WorldPacket& recvData); - void HandleAcceptGrantLevel(WorldPacket& recvData); + void HandleGrantLevel(WorldPackets::RaF::GrantLevel& grantLevel); + void HandleAcceptGrantLevel(WorldPackets::RaF::AcceptLevelGrant& acceptLevelGrant); // Calendar void HandleCalendarGetCalendar(WorldPacket& recvData); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 00e0abfa922..bd0e023af0e 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -915,12 +915,12 @@ void World::LoadConfigSettings(bool reload) } m_int_configs[CONFIG_CURRENCY_CONQUEST_POINTS_ARENA_REWARD] *= 100; //precision mod - m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] = sConfigMgr->GetIntDefault("RecruitAFriend.MaxLevel", 60); + m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] = sConfigMgr->GetIntDefault("RecruitAFriend.MaxLevel", 85); if (m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] > m_int_configs[CONFIG_MAX_PLAYER_LEVEL]) { TC_LOG_ERROR("server.loading", "RecruitAFriend.MaxLevel (%i) must be in the range 0..MaxLevel(%u). Set to %u.", - m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL], m_int_configs[CONFIG_MAX_PLAYER_LEVEL], 60); - m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] = 60; + m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL], m_int_configs[CONFIG_MAX_PLAYER_LEVEL], 85); + m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] = 85; } m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL_DIFFERENCE] = sConfigMgr->GetIntDefault("RecruitAFriend.MaxDifference", 4); |