Core/PacketIO: Updated and enabled RaF packets

This commit is contained in:
Shauren
2015-04-04 13:33:58 +02:00
parent 76cbf05a2e
commit 250d85b559
8 changed files with 166 additions and 50 deletions
+16 -14
View File
@@ -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
@@ -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;
@@ -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;
}
@@ -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__
@@ -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;
+5 -4
View File
@@ -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);
+8 -2
View File
@@ -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);
+3 -3
View File
@@ -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);