Core/PacketIO: Updated and enabled CMSG_CONFIRM_RESPEC_WIPE, SMSG_RESPEC_WIPE_CONFIRM

This commit is contained in:
Shauren
2016-01-30 23:56:02 +01:00
parent 3ec79c96c3
commit a174fa4d7b
7 changed files with 65 additions and 16 deletions

View File

@@ -9045,10 +9045,11 @@ void Player::SetBindPoint(ObjectGuid guid) const
void Player::SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost) const
{
WorldPacket data(SMSG_RESPEC_WIPE_CONFIRM, 8 + 4);
data << guid;
data << cost;
GetSession()->SendPacket(&data);
WorldPackets::Talent::RespecWipeConfirm respecWipeConfirm;
respecWipeConfirm.RespecMaster = guid;
respecWipeConfirm.Cost = cost;
respecWipeConfirm.RespecType = SPEC_RESET_TALENTS;
GetSession()->SendPacket(respecWipeConfirm.Write());
}
void Player::ResetPetTalents()

View File

@@ -155,6 +155,14 @@ enum TalentSpecialization // talent tabs
TALENT_SPEC_MONK_MISTWEAVER = 270
};
enum SpecResetType
{
SPEC_RESET_TALENTS = 0,
SPEC_RESET_SPECIALIZATION = 1,
SPEC_RESET_GLYPHS = 2,
SPEC_RESET_PET_TALENTS = 3
};
// Spell modifier (used for modify other spells)
struct SpellModifier
{

View File

@@ -37,16 +37,18 @@ void WorldSession::HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents&
_player->SendTalentsInfoData();
}
void WorldSession::HandleConfirmRespecWipeOpcode(WorldPacket& recvData)
void WorldSession::HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe)
{
TC_LOG_DEBUG("network", "MSG_TALENT_WIPE_CONFIRM");
ObjectGuid guid;
recvData >> guid;
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_TRAINER);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleConfirmRespecWipeOpcode - %s not found or you can't interact with him.", guid.ToString().c_str());
TC_LOG_DEBUG("network", "WORLD: HandleConfirmRespecWipeOpcode - %s not found or you can't interact with him.", confirmRespecWipe.RespecMaster.ToString().c_str());
return;
}
if (confirmRespecWipe.RespecType != SPEC_RESET_TALENTS)
{
TC_LOG_DEBUG("network", "WORLD: HandleConfirmRespecWipeOpcode - reset type %d is not implemented.", confirmRespecWipe.RespecType);
return;
}

View File

@@ -54,4 +54,18 @@ void WorldPackets::Talent::LearnTalents::Read()
_worldPacket >> talent;
Talents.push_back(talent);
}
}
}
WorldPacket const* WorldPackets::Talent::RespecWipeConfirm::Write()
{
_worldPacket << int8(RespecType);
_worldPacket << uint32(Cost);
_worldPacket << RespecMaster;
return &_worldPacket;
}
void WorldPackets::Talent::ConfirmRespecWipe::Read()
{
_worldPacket >> RespecMaster;
_worldPacket >> RespecType;
}

View File

@@ -68,8 +68,31 @@ namespace WorldPackets
void Read() override;
std::vector<uint16> Talents;
};
class RespecWipeConfirm final : public ServerPacket
{
public:
RespecWipeConfirm() : ServerPacket(SMSG_RESPEC_WIPE_CONFIRM, 16 + 4 +1) { }
WorldPacket const* Write() override;
ObjectGuid RespecMaster;
uint32 Cost = 0;
int8 RespecType = 0;
};
class ConfirmRespecWipe final : public ClientPacket
{
public:
ConfirmRespecWipe(WorldPacket&& packet) : ClientPacket(CMSG_CONFIRM_RESPEC_WIPE, std::move(packet)) { }
void Read() override;
ObjectGuid RespecMaster;
uint8 RespecType = 0;
};
}
}

View File

@@ -294,7 +294,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_COMPLAINT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleComplainOpcode );
DEFINE_HANDLER(CMSG_COMPLETE_CINEMATIC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::CompleteCinematic, &WorldSession::HandleCompleteCinematic);
DEFINE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_OPCODE_HANDLER_OLD(CMSG_CONFIRM_RESPEC_WIPE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmRespecWipeOpcode );
DEFINE_HANDLER(CMSG_CONFIRM_RESPEC_WIPE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Talent::ConfirmRespecWipe, &WorldSession::HandleConfirmRespecWipeOpcode);
DEFINE_HANDLER(CMSG_CONNECT_TO_FAILED, STATUS_NEVER, PROCESS_INPLACE, WorldPacket, &WorldSession::Handle_EarlyProccess);
DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::ConvertRaid, &WorldSession::HandleConvertRaidOpcode);
DEFINE_HANDLER(CMSG_CREATE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CreateCharacter, &WorldSession::HandleCharCreateOpcode);
@@ -1527,7 +1527,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_FAILED_NOTIFY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_RANGED_COMBAT_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_WEEKLY_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESPEC_WIPE_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESPEC_WIPE_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_CAST_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_COMMS, STATUS_NEVER, CONNECTION_TYPE_REALM);

View File

@@ -582,6 +582,7 @@ namespace WorldPackets
{
class SetSpecialization;
class LearnTalents;
class ConfirmRespecWipe;
}
namespace Taxi
@@ -1369,7 +1370,7 @@ class WorldSession
void HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::CancelAutoRepeatSpell& cancelAutoRepeatSpell);
void HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet);
void HandleConfirmRespecWipeOpcode(WorldPacket& recvPacket);
void HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe);
void HandleUnlearnSkillOpcode(WorldPackets::Spells::UnlearnSkill& packet);
void HandleSetSpecializationOpcode(WorldPackets::Talent::SetSpecialization& packet);