diff options
Diffstat (limited to 'src/server/game/Handlers/PetitionsHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/PetitionsHandler.cpp | 791 |
1 files changed, 212 insertions, 579 deletions
diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 45f8b6dea1d..bb658612f25 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -22,64 +22,28 @@ #include "WorldSession.h" #include "World.h" #include "ObjectMgr.h" -#include "ArenaTeamMgr.h" #include "GuildMgr.h" #include "Log.h" #include "Opcodes.h" #include "Guild.h" -#include "ArenaTeam.h" #include "GossipDef.h" #include "SocialMgr.h" +#include "PetitionPackets.h" #define CHARTER_DISPLAY_ID 16161 +#define GUILD_CHARTER_ITEM_ID 5863 -// Charters ID in item_template -enum CharterItemIDs +void WorldSession::HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet) { - GUILD_CHARTER = 5863, - ARENA_TEAM_CHARTER_2v2 = 23560, - ARENA_TEAM_CHARTER_3v3 = 23561, - ARENA_TEAM_CHARTER_5v5 = 23562 -}; + TC_LOG_DEBUG("network", "Received CMSG_PETITION_BUY"); -void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) -{ - TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_BUY"); - - ObjectGuid guidNPC; - uint32 clientIndex; // 1 for guild and arenaslot+1 for arenas in client - std::string name; - - recvData >> guidNPC; // NPC GUID - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint64>(); // 0 - recvData >> name; // name - recvData.read_skip<std::string>(); // some string - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint16>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - recvData.read_skip<uint32>(); // 0 - - for (int i = 0; i < 10; ++i) - recvData.read_skip<std::string>(); - - recvData >> clientIndex; // index - recvData.read_skip<uint32>(); // 0 - - TC_LOG_DEBUG("network", "Petitioner %s tried sell petition: name %s", guidNPC.ToString().c_str(), name.c_str()); + TC_LOG_DEBUG("network", "Petitioner %s tried sell petition: title %s", packet.Unit.ToString().c_str(), packet.Title.c_str()); // prevent cheating - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guidNPC, UNIT_NPC_FLAG_PETITIONER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_PETITIONER); if (!creature) { - TC_LOG_DEBUG("network", "WORLD: HandlePetitionBuyOpcode - %s not found or you can't interact with him.", guidNPC.ToString().c_str()); + TC_LOG_DEBUG("network", "WORLD: HandlePetitionBuyOpcode - %s not found or you can't interact with him.", packet.Unit.ToString().c_str()); return; } @@ -87,109 +51,48 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); - uint32 charterid = 0; - uint32 cost = 0; - uint32 type = 0; - if (creature->IsTabardDesigner()) - { - // if tabard designer, then trying to buy a guild charter. - // do not let if already in guild. - if (_player->GetGuildId()) - return; - - charterid = GUILD_CHARTER; - cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD); - type = GUILD_CHARTER_TYPE; - } - else - { - /// @todo find correct opcode - if (_player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) - { - SendNotification(LANG_ARENA_ONE_TOOLOW, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)); - return; - } + uint32 charterItemID = GUILD_CHARTER_ITEM_ID; + uint32 cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD); - switch (clientIndex) // arenaSlot+1 as received from client (1 from 3 case) - { - case 1: - charterid = ARENA_TEAM_CHARTER_2v2; - cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_2v2); - type = ARENA_TEAM_CHARTER_2v2_TYPE; - break; - case 2: - charterid = ARENA_TEAM_CHARTER_3v3; - cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_3v3); - type = ARENA_TEAM_CHARTER_3v3_TYPE; - break; - case 3: - charterid = ARENA_TEAM_CHARTER_5v5; - cost = sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_5v5); - type = ARENA_TEAM_CHARTER_5v5_TYPE; - break; - default: - TC_LOG_DEBUG("network", "unknown selection at buy arena petition: %u", clientIndex); - return; - } - - if (_player->GetArenaTeamId(clientIndex - 1)) // arenaSlot+1 as received from client - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM); - return; - } - } + // do not let if already in guild. + if (_player->GetGuildId()) + return; - if (type == GUILD_CHARTER_TYPE) + if (sGuildMgr->GetGuildByName(packet.Title)) { - if (sGuildMgr->GetGuildByName(name)) - { - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, name); - return; - } - - if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) - { - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, name); - return; - } + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_EXISTS_S, packet.Title); + return; } - else + + if (sObjectMgr->IsReservedName(packet.Title) || !ObjectMgr::IsValidCharterName(packet.Title)) { - if (sArenaTeamMgr->GetArenaTeamByName(name)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S); - return; - } - if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_INVALID); - return; - } + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_INVALID, packet.Title); + return; } - ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(charterid); + ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(charterItemID); if (!pProto) { - _player->SendBuyError(BUY_ERR_CANT_FIND_ITEM, NULL, charterid, 0); + _player->SendBuyError(BUY_ERR_CANT_FIND_ITEM, NULL, charterItemID, 0); return; } if (!_player->HasEnoughMoney(uint64(cost))) - { //player hasn't got enough money - _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, charterid, 0); + { + _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, charterItemID, 0); return; } ItemPosCountVec dest; - InventoryResult msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, charterid, pProto->GetBuyCount()); + InventoryResult msg = _player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, charterItemID, pProto->GetBuyCount()); if (msg != EQUIP_ERR_OK) { - _player->SendEquipError(msg, NULL, NULL, charterid); + _player->SendEquipError(msg, NULL, NULL, charterItemID); return; } - _player->ModifyMoney(-(int32)cost); - Item* charter = _player->StoreNewItem(dest, charterid, true); + _player->ModifyMoney(-int32(cost)); + Item* charter = _player->StoreNewItem(dest, charterItemID, true); if (!charter) return; @@ -204,7 +107,6 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) // datacorruption PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_BY_OWNER); stmt->setUInt64(0, _player->GetGUID().GetCounter()); - stmt->setUInt8(1, type); PreparedQueryResult result = CharacterDatabase.Query(stmt); std::ostringstream ssInvalidPetitionGUIDs; @@ -222,7 +124,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) ssInvalidPetitionGUIDs << '\'' << charter->GetGUID().GetCounter() << '\''; TC_LOG_DEBUG("network", "Invalid petition GUIDs: %s", ssInvalidPetitionGUIDs.str().c_str()); - CharacterDatabase.EscapeString(name); + CharacterDatabase.EscapeString(packet.Title); SQLTransaction trans = CharacterDatabase.BeginTransaction(); trans->PAppend("DELETE FROM petition WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str()); trans->PAppend("DELETE FROM petition_sign WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str()); @@ -230,244 +132,165 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION); stmt->setUInt64(0, _player->GetGUID().GetCounter()); stmt->setUInt64(1, charter->GetGUID().GetCounter()); - stmt->setString(2, name); - stmt->setUInt8(3, uint8(type)); + stmt->setString(2, packet.Title); trans->Append(stmt); CharacterDatabase.CommitTransaction(trans); } -void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData) +void WorldSession::HandlePetitionShowSignatures(WorldPackets::Petition::PetitionShowSignatures& packet) { TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_SHOW_SIGNATURES"); uint8 signs = 0; - ObjectGuid petitionguid; - recvData >> petitionguid; // petition guid - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); - - stmt->setUInt64(0, petitionguid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (!result) - { - TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for %s %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUID().ToString().c_str(), GetPlayer()->GetName().c_str()); - return; - } - Field* fields = result->Fetch(); - uint32 type = fields[0].GetUInt8(); - // if guild petition and has guild => error, return; - if (type == GUILD_CHARTER_TYPE && _player->GetGuildId()) + // if has guild => error, return; + if (_player->GetGuildId()) return; - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); - stmt->setUInt64(0, petitionguid.GetCounter()); + stmt->setUInt64(0, packet.Item.GetCounter()); - result = CharacterDatabase.Query(stmt); + PreparedQueryResult result = CharacterDatabase.Query(stmt); // result == NULL also correct in case no sign yet if (result) signs = uint8(result->GetRowCount()); - TC_LOG_DEBUG("network", "CMSG_PETITION_SHOW_SIGNATURES %s", petitionguid.ToString().c_str()); + TC_LOG_DEBUG("network", "CMSG_PETITION_SHOW_SIGNATURES %s", packet.Item.ToString().c_str()); - WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+1+signs*12)); - data << petitionguid; // petition guid - data << _player->GetGUID(); // owner guid - data << uint32(petitionguid.GetCounter()); // guild guid - data << uint8(signs); // sign's count + WorldPackets::Petition::ServerPetitionShowSignatures signaturesPacket; + signaturesPacket.Item = packet.Item; + signaturesPacket.Owner = _player->GetGUID(); + signaturesPacket.OwnerAccountID = ObjectGuid::Create<HighGuid::WowAccount>(ObjectMgr::GetPlayerAccountIdByGUID(_player->GetGUID())); + signaturesPacket.PetitionID = int32(packet.Item.GetCounter()); // @todo verify that... + signaturesPacket.Signatures.reserve(signs); for (uint8 i = 1; i <= signs; ++i) { Field* fields2 = result->Fetch(); - data << ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64()); // Player GUID - data << uint32(0); // there 0 ... + ObjectGuid signerGUID = ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64()); + + WorldPackets::Petition::ServerPetitionShowSignatures::PetitionSignature signature; + signature.Signer = signerGUID; + signature.Choice = 0; + signaturesPacket.Signatures.push_back(signature); result->NextRow(); } - SendPacket(&data); + + SendPacket(signaturesPacket.Write()); } -void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData) +void WorldSession::HandleQueryPetition(WorldPackets::Petition::QueryPetition& packet) { - TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_QUERY"); // ok + TC_LOG_DEBUG("network", "Received CMSG_QUERY_PETITION Petition %s PetitionID %u", packet.ItemGUID.ToString().c_str(), packet.PetitionID); - uint32 guildguid; - ObjectGuid petitionguid; - recvData >> guildguid; // in Trinity always same as GUID_LOPART(petitionguid) - recvData >> petitionguid; // petition guid - TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY Petition %s Guild GUID %u", petitionguid.ToString().c_str(), guildguid); - - SendPetitionQueryOpcode(petitionguid); + SendPetitionQueryOpcode(packet.ItemGUID); } -void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionguid) +void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionGUID) { - ObjectGuid ownerguid; - uint32 type; - std::string name = "NO_NAME_FOR_GUID"; + ObjectGuid ownerGUID; + std::string title = "NO_NAME_FOR_GUID"; + + WorldPackets::Petition::QueryPetitionResponse responsePacket; + responsePacket.PetitionID = uint32(petitionGUID.GetCounter()); // PetitionID (in Trinity always same as GUID_LOPART(petition guid)) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION); - stmt->setUInt64(0, petitionguid.GetCounter()); + stmt->setUInt64(0, petitionGUID.GetCounter()); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (result) { Field* fields = result->Fetch(); - ownerguid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); - name = fields[1].GetString(); - type = fields[2].GetUInt8(); + ownerGUID = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); + title = fields[1].GetString(); } else { - TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition (%s)", petitionguid.ToString().c_str()); - return; - } + responsePacket.Allow = false; + SendPacket(responsePacket.Write()); - WorldPacket data(SMSG_QUERY_PETITION_RESPONSE, (4+8+name.size()+1+1+4*12+2+10)); - data << uint32(petitionguid.GetCounter()); // guild/team guid (in Trinity always same as GUID_LOPART(petition guid) - data << ownerguid; // charter owner guid - data << name; // name (guild/arena team) - data << uint8(0); // some string - if (type == GUILD_CHARTER_TYPE) - { - uint32 needed = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); - data << uint32(needed); - data << uint32(needed); - data << uint32(0); // bypass client - side limitation, a different value is needed here for each petition - } - else - { - data << uint32(type-1); - data << uint32(type-1); - data << uint32(type); // bypass client - side limitation, a different value is needed here for each petition + TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition (%s)", petitionGUID.ToString().c_str()); + return; } - data << uint32(0); // 5 - data << uint32(0); // 6 - data << uint32(0); // 7 - data << uint32(0); // 8 - data << uint16(0); // 9 2 bytes field - data << uint32(0); // 10 - data << uint32(0); // 11 - data << uint32(0); // 13 count of next strings? - for (int i = 0; i < 10; ++i) - data << uint8(0); // some string + int32 reqSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); - data << uint32(0); // 14 + WorldPackets::Petition::PetitionInfo petitionInfo; + petitionInfo.PetitionID = int32(petitionGUID.GetCounter()); + petitionInfo.Petitioner = ownerGUID; + petitionInfo.MinSignatures = reqSignatures; + petitionInfo.MaxSignatures = reqSignatures; + petitionInfo.Title = title; - data << uint32(type != GUILD_CHARTER_TYPE); // 15 0 - guild, 1 - arena team + responsePacket.Allow = true; + responsePacket.Info = petitionInfo; - SendPacket(&data); + SendPacket(responsePacket.Write()); } -void WorldSession::HandlePetitionRenameGuildOpcode(WorldPacket& recvData) +void WorldSession::HandlePetitionRenameGuild(WorldPackets::Petition::PetitionRenameGuild& packet) { - /// @todo: drop arena team code + TC_LOG_DEBUG("network", "Received CMSG_PETITION_RENAME_GUILD"); TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_RENAME_GUILD"); - ObjectGuid petitionGuid; - uint32 type; - std::string newName; - - recvData >> petitionGuid; // guid - recvData >> newName; // new name - - Item* item = _player->GetItemByGuid(petitionGuid); + uint8 type = 0; + Item* item = _player->GetItemByGuid(packet.PetitionGuid); if (!item) return; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); - - stmt->setUInt64(0, petitionGuid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - Field* fields = result->Fetch(); - type = fields[0].GetUInt8(); - } - else + if (sGuildMgr->GetGuildByName(packet.NewGuildName)) { - TC_LOG_DEBUG("network", "CMSG_PETITION_QUERY failed for petition %s", petitionGuid.ToString().c_str()); + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_EXISTS_S, packet.NewGuildName); return; } - if (type == GUILD_CHARTER_TYPE) + if (sObjectMgr->IsReservedName(packet.NewGuildName) || !ObjectMgr::IsValidCharterName(packet.NewGuildName)) { - if (sGuildMgr->GetGuildByName(newName)) - { - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, newName); - return; - } - if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName)) - { - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, newName); - return; - } - } - else - { - if (sArenaTeamMgr->GetArenaTeamByName(newName)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_EXISTS_S); - return; - } - if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_INVALID); - return; - } + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_INVALID, packet.NewGuildName); + return; } - stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME); - stmt->setString(0, newName); - stmt->setUInt64(1, petitionGuid.GetCounter()); + stmt->setString(0, packet.NewGuildName); + stmt->setUInt64(1, packet.PetitionGuid.GetCounter()); CharacterDatabase.Execute(stmt); - TC_LOG_DEBUG("network", "Petition %s renamed to '%s'", petitionGuid.ToString().c_str(), newName.c_str()); - WorldPacket data(SMSG_PETITION_RENAME_GUILD_RESPONSE, (8 + newName.size() + 1)); - data << petitionGuid; - data << newName; - SendPacket(&data); + WorldPackets::Petition::PetitionRenameGuildResponse renameResponse; + renameResponse.PetitionGuid = packet.PetitionGuid; + renameResponse.NewGuildName = packet.NewGuildName; + SendPacket(renameResponse.Write()); + + TC_LOG_DEBUG("network", "Petition %s renamed to '%s'", packet.PetitionGuid.ToString().c_str(), packet.NewGuildName.c_str()); } -void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) +void WorldSession::HandleSignPetition(WorldPackets::Petition::SignPetition& packet) { - TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_SIGN"); // ok - - Field* fields; - ObjectGuid petitionGuid; - uint8 unk; - recvData >> petitionGuid; // petition guid - recvData >> unk; + TC_LOG_DEBUG("network", "Received CMSG_SIGN_PETITION"); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURES); - stmt->setUInt64(0, petitionGuid.GetCounter()); - stmt->setUInt64(1, petitionGuid.GetCounter()); + stmt->setUInt64(0, packet.PetitionGUID.GetCounter()); + stmt->setUInt64(1, packet.PetitionGUID.GetCounter()); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) { - TC_LOG_ERROR("network", "Petition %s is not found for %s %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUID().ToString().c_str(), GetPlayer()->GetName().c_str()); + TC_LOG_ERROR("network", "Petition %s is not found for %s %s", packet.PetitionGUID.ToString().c_str(), GetPlayer()->GetGUID().ToString().c_str(), GetPlayer()->GetName().c_str()); return; } - fields = result->Fetch(); + Field* fields = result->Fetch(); ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); uint64 signs = fields[1].GetUInt64(); - uint8 type = fields[2].GetUInt8(); if (ownerGuid == _player->GetGUID()) return; @@ -475,93 +298,62 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) // not let enemies sign guild charter if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != ObjectMgr::GetPlayerTeamByGUID(ownerGuid)) { - if (type != GUILD_CHARTER_TYPE) - SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED); - else - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NOT_ALLIED); + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NOT_ALLIED); return; } - if (type != GUILD_CHARTER_TYPE) + if (_player->GetGuildId()) { - if (_player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", _player->GetName().c_str(), ERR_ARENA_TEAM_TARGET_TOO_LOW_S); - return; - } - - uint8 slot = ArenaTeam::GetSlotByType(type); - if (slot >= MAX_ARENA_SLOT) - return; - - if (_player->GetArenaTeamId(slot)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName().c_str(), ERR_ALREADY_IN_ARENA_TEAM_S); - return; - } - - if (_player->GetArenaTeamIdInvited()) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName().c_str(), ERR_ALREADY_INVITED_TO_ARENA_TEAM_S); - return; - } + Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_IN_GUILD_S, _player->GetName()); + return; } - else + + if (_player->GetGuildIdInvited()) { - if (_player->GetGuildId()) - { - Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_IN_GUILD_S, _player->GetName()); - return; - } - if (_player->GetGuildIdInvited()) - { - Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName()); - return; - } + Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName()); + return; } - if (++signs > type) // client signs maximum - return; + //if (++signs > type) // client signs maximum + // return; // Client doesn't allow to sign petition two times by one character, but not check sign by another character from same account // not allow sign another player from already sign player account stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIG_BY_ACCOUNT); stmt->setUInt32(0, GetAccountId()); - stmt->setUInt64(1, petitionGuid.GetCounter()); + stmt->setUInt64(1, packet.PetitionGUID.GetCounter()); result = CharacterDatabase.Query(stmt); + WorldPackets::Petition::PetitionSignResults signResult; + signResult.Player = _player->GetGUID(); + signResult.Item = packet.PetitionGUID; + if (result) { - WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4)); - data << petitionGuid; - data << _player->GetGUID(); - data << uint32(PETITION_SIGN_ALREADY_SIGNED); + signResult.Error = int32(PETITION_SIGN_ALREADY_SIGNED); // close at signer side - SendPacket(&data); + SendPacket(signResult.Write()); return; } stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION_SIGNATURE); stmt->setUInt64(0, ownerGuid.GetCounter()); - stmt->setUInt64(1, petitionGuid.GetCounter()); + stmt->setUInt64(1, packet.PetitionGUID.GetCounter()); stmt->setUInt64(2, _player->GetGUID().GetCounter()); stmt->setUInt32(3, GetAccountId()); CharacterDatabase.Execute(stmt); - TC_LOG_DEBUG("network", "PETITION SIGN: %s by player: %s (%s Account: %u)", petitionGuid.ToString().c_str(), _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), GetAccountId()); + TC_LOG_DEBUG("network", "PETITION SIGN: %s by player: %s (%s Account: %u)", packet.PetitionGUID.ToString().c_str(), _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), GetAccountId()); - WorldPacket data(SMSG_PETITION_SIGN_RESULTS, (8+8+4)); - data << petitionGuid; - data << _player->GetGUID(); - data << uint32(PETITION_SIGN_OK); + signResult.Error = int32(PETITION_SIGN_OK); // close at signer side - SendPacket(&data); + SendPacket(signResult.Write()); // update signs count on charter, required testing... //Item* item = _player->GetItemByGuid(petitionguid)); @@ -570,21 +362,17 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) // update for owner if online if (Player* owner = ObjectAccessor::FindConnectedPlayer(ownerGuid)) - owner->GetSession()->SendPacket(&data); + owner->GetSession()->SendPacket(signResult.Write()); } -void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) +void WorldSession::HandleDeclinePetition(WorldPackets::Petition::DeclinePetition& packet) { - TC_LOG_DEBUG("network", "Received opcode MSG_PETITION_DECLINE"); // ok + TC_LOG_DEBUG("network", "Received CMSG_DECLINE_PETITION"); - ObjectGuid petitionguid; - recvData >> petitionguid; // petition guid - TC_LOG_DEBUG("network", "Petition %s declined by %s", petitionguid.ToString().c_str(), _player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("network", "Petition %s declined by %s", packet.PetitionGUID.ToString().c_str(), _player->GetGUID().ToString().c_str()); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_OWNER_BY_GUID); - - stmt->setUInt64(0, petitionguid.GetCounter()); - + stmt->setUInt64(0, packet.PetitionGUID.GetCounter()); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) @@ -596,147 +384,92 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid); if (owner) // petition owner online { + // Disabled because packet isn't handled by the client in any way /* - WorldPacket data(SMSG_DECLINE_PETITION, 18); - data << _player->GetGUID(); - owner->GetSession()->SendPacket(&data); + WorldPackets::Petition::PetitionDeclined packet; + packet.Decliner = _player->GetGUID(); + owner->GetSession()->SendPacket(packet.Write()); */ } } -void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) +void WorldSession::HandleOfferPetition(WorldPackets::Petition::OfferPetition& packet) { - TC_LOG_DEBUG("network", "Received opcode CMSG_OFFER_PETITION"); // ok + TC_LOG_DEBUG("network", "Received opcode CMSG_OFFER_PETITION"); - uint8 signs = 0; - ObjectGuid petitionguid, plguid; - uint32 type, junk; - Player* player; - recvData >> junk; // this is not petition type! - recvData >> petitionguid; // petition guid - recvData >> plguid; // player guid - - player = ObjectAccessor::FindConnectedPlayer(plguid); + Player* player = ObjectAccessor::FindConnectedPlayer(packet.TargetPlayer); if (!player) return; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); - - stmt->setUInt64(0, petitionguid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (!result) - return; - - Field* fields = result->Fetch(); - type = fields[0].GetUInt8(); - - TC_LOG_DEBUG("network", "OFFER PETITION: type %u, %s, to %s", type, petitionguid.ToString().c_str(), plguid.ToString().c_str()); + TC_LOG_DEBUG("network", "OFFER PETITION: %s, to %s", packet.ItemGUID.ToString().c_str(), packet.TargetPlayer.ToString().c_str()); if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != player->GetTeam()) { - if (type != GUILD_CHARTER_TYPE) - SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED); - else - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NOT_ALLIED); + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NOT_ALLIED); return; } - if (type != GUILD_CHARTER_TYPE) + if (player->GetGuildId()) { - if (player->getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) - { - // player is too low level to join an arena team - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName().c_str(), "", ERR_ARENA_TEAM_TARGET_TOO_LOW_S); - return; - } - - uint8 slot = ArenaTeam::GetSlotByType(type); - if (slot >= MAX_ARENA_SLOT) - return; - - if (player->GetArenaTeamId(slot)) - { - // player is already in an arena team - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, player->GetName().c_str(), "", ERR_ALREADY_IN_ARENA_TEAM_S); - return; - } - - if (player->GetArenaTeamIdInvited()) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", _player->GetName().c_str(), ERR_ALREADY_INVITED_TO_ARENA_TEAM_S); - return; - } + Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_IN_GUILD_S, _player->GetName()); + return; } - else - { - if (player->GetGuildId()) - { - Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_IN_GUILD_S, _player->GetName()); - return; - } - if (player->GetGuildIdInvited()) - { - Guild::SendCommandResult(this, GUILD_COMMAND_INVITE, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName()); - return; - } + if (player->GetGuildIdInvited()) + { + Guild::SendCommandResult(this, GUILD_COMMAND_INVITE_PLAYER, ERR_ALREADY_INVITED_TO_GUILD_S, _player->GetName()); + return; } + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); + stmt->setUInt64(0, packet.ItemGUID.GetCounter()); + PreparedQueryResult result = CharacterDatabase.Query(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); - - stmt->setUInt64(0, petitionguid.GetCounter()); - - result = CharacterDatabase.Query(stmt); - + uint8 signs = 0; // result == NULL also correct charter without signs if (result) signs = uint8(result->GetRowCount()); - WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES, (8+8+4+signs+signs*12)); - data << petitionguid; // petition guid - data << _player->GetGUID(); // owner guid - data << uint32(petitionguid.GetCounter()); // guild guid - data << uint8(signs); // sign's count + WorldPackets::Petition::ServerPetitionShowSignatures signaturesPacket; + signaturesPacket.Item = packet.ItemGUID; + signaturesPacket.Owner = _player->GetGUID(); + signaturesPacket.OwnerAccountID = ObjectGuid::Create<HighGuid::WowAccount>(player->GetSession()->GetAccountId()); + signaturesPacket.PetitionID = int32(packet.ItemGUID.GetCounter()); // @todo verify that... - for (uint8 i = 1; i <= signs; ++i) + signaturesPacket.Signatures.reserve(signs); + for (uint8 i = 0; i < signs; ++i) { Field* fields2 = result->Fetch(); - data << ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64()); // Player GUID - data << uint32(0); // there 0 ... + ObjectGuid signerGUID = ObjectGuid::Create<HighGuid::Player>(fields2[0].GetUInt64()); + + WorldPackets::Petition::ServerPetitionShowSignatures::PetitionSignature signature; + signature.Signer = signerGUID; + signature.Choice = 0; + signaturesPacket.Signatures.push_back(signature); result->NextRow(); } - player->GetSession()->SendPacket(&data); + player->GetSession()->SendPacket(signaturesPacket.Write()); } -void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) +void WorldSession::HandleTurnInPetition(WorldPackets::Petition::TurnInPetition& packet) { - TC_LOG_DEBUG("network", "Received opcode CMSG_TURN_IN_PETITION"); - - // Get petition guid from packet - WorldPacket data; - ObjectGuid petitionGuid; - - recvData >> petitionGuid; + TC_LOG_DEBUG("network", "Received CMSG_TURN_IN_PETITION"); // Check if player really has the required petition charter - Item* item = _player->GetItemByGuid(petitionGuid); + Item* item = _player->GetItemByGuid(packet.Item); if (!item) return; - TC_LOG_DEBUG("network", "Petition %s turned in by %s", petitionGuid.ToString().c_str(), _player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("network", "Petition %s turned in by %s", packet.Item.ToString().c_str(), _player->GetGUID().ToString().c_str()); // Get petition data from db ObjectGuid ownerguid; - uint32 type; std::string name; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION); - stmt->setUInt64(0, petitionGuid.GetCounter()); + stmt->setUInt64(0, packet.Item.GetCounter()); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (result) @@ -744,11 +477,10 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) Field* fields = result->Fetch(); ownerguid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); name = fields[1].GetString(); - type = fields[2].GetUInt8(); } else { - TC_LOG_ERROR("network", "Player %s (%s) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), petitionGuid.ToString().c_str()); + TC_LOG_ERROR("network", "Player %s (%s) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.Item.ToString().c_str()); return; } @@ -756,52 +488,27 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) if (_player->GetGUID() != ownerguid) return; - // Petition type (guild/arena) specific checks - if (type == GUILD_CHARTER_TYPE) + // Check if player is already in a guild + if (_player->GetGuildId()) { - // Check if player is already in a guild - if (_player->GetGuildId()) - { - data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4); - data << uint32(PETITION_TURN_ALREADY_IN_GUILD); - _player->GetSession()->SendPacket(&data); - return; - } - - // Check if guild name is already taken - if (sGuildMgr->GetGuildByName(name)) - { - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, name); - return; - } + WorldPackets::Petition::TurnInPetitionResult resultPacket; + resultPacket.Result = int32(PETITION_TURN_ALREADY_IN_GUILD); + _player->GetSession()->SendPacket(resultPacket.Write()); + return; } - else - { - // Check for valid arena bracket (2v2, 3v3, 5v5) - uint8 slot = ArenaTeam::GetSlotByType(type); - if (slot >= MAX_ARENA_SLOT) - return; - - // Check if player is already in an arena team - if (_player->GetArenaTeamId(slot)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ALREADY_IN_ARENA_TEAM); - return; - } - // Check if arena team name is already taken - if (sArenaTeamMgr->GetArenaTeamByName(name)) - { - SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S); - return; - } + // Check if guild name is already taken + if (sGuildMgr->GetGuildByName(name)) + { + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_NAME_EXISTS_S, name); + return; } // Get petition signatures from db uint8 signatures; stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); - stmt->setUInt64(0, petitionGuid.GetCounter()); + stmt->setUInt64(0, packet.Item.GetCounter()); result = CharacterDatabase.Query(stmt); if (result) @@ -809,108 +516,69 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) else signatures = 0; - uint32 requiredSignatures; - if (type == GUILD_CHARTER_TYPE) - requiredSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); - else - requiredSignatures = type-1; + uint32 requiredSignatures = sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS); // Notify player if signatures are missing if (signatures < requiredSignatures) { - data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4); - data << (uint32)PETITION_TURN_NEED_MORE_SIGNATURES; - SendPacket(&data); + WorldPackets::Petition::TurnInPetitionResult resultPacket; + resultPacket.Result = int32(PETITION_TURN_NEED_MORE_SIGNATURES); + SendPacket(resultPacket.Write()); return; } - // Proceed with guild/arena team creation + // Proceed with guild creation // Delete charter item _player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true); - if (type == GUILD_CHARTER_TYPE) - { - // Create guild - Guild* guild = new Guild; - - if (!guild->Create(_player, name)) - { - delete guild; - return; - } - - // Register guild and add guild master - sGuildMgr->AddGuild(guild); + // Create guild + Guild* guild = new Guild; - Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_COMMAND_SUCCESS, name); - - // Add members from signatures - for (uint8 i = 0; i < signatures; ++i) - { - Field* fields = result->Fetch(); - guild->AddMember(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64())); - result->NextRow(); - } - } - else + if (!guild->Create(_player, name)) { - // Receive the rest of the packet in arena team creation case - uint32 background, icon, iconcolor, border, bordercolor; - recvData >> background >> icon >> iconcolor >> border >> bordercolor; - - // Create arena team - ArenaTeam* arenaTeam = new ArenaTeam(); + delete guild; + return; + } - if (!arenaTeam->Create(_player->GetGUID(), type, name, background, icon, iconcolor, border, bordercolor)) - { - delete arenaTeam; - return; - } + // Register guild and add guild master + sGuildMgr->AddGuild(guild); - // Register arena team - sArenaTeamMgr->AddArenaTeam(arenaTeam); - TC_LOG_DEBUG("network", "PetitonsHandler: Arena team (guid: %u) added to ObjectMgr", arenaTeam->GetId()); + Guild::SendCommandResult(this, GUILD_COMMAND_CREATE_GUILD, ERR_GUILD_COMMAND_SUCCESS, name); - // Add members - for (uint8 i = 0; i < signatures; ++i) - { - Field* fields = result->Fetch(); - ObjectGuid memberGUID = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); - TC_LOG_DEBUG("network", "PetitionsHandler: Adding arena team (guid: %u) member %s", arenaTeam->GetId(), memberGUID.ToString().c_str()); - arenaTeam->AddMember(memberGUID); - result->NextRow(); - } + // Add members from signatures + for (uint8 i = 0; i < signatures; ++i) + { + Field* fields = result->Fetch(); + guild->AddMember(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64())); + result->NextRow(); } SQLTransaction trans = CharacterDatabase.BeginTransaction(); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_BY_GUID); - stmt->setUInt64(0, petitionGuid.GetCounter()); + stmt->setUInt64(0, packet.Item.GetCounter()); trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PETITION_SIGNATURE_BY_GUID); - stmt->setUInt64(0, petitionGuid.GetCounter()); + stmt->setUInt64(0, packet.Item.GetCounter()); trans->Append(stmt); CharacterDatabase.CommitTransaction(trans); // created - TC_LOG_DEBUG("network", "Player %s (%s) turning in petition %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), petitionGuid.ToString().c_str()); + TC_LOG_DEBUG("network", "Player %s (%s) turning in petition %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), packet.Item.ToString().c_str()); - data.Initialize(SMSG_TURN_IN_PETITION_RESULTS, 4); - data << (uint32)PETITION_TURN_OK; - SendPacket(&data); + WorldPackets::Petition::TurnInPetitionResult resultPacket; + resultPacket.Result = int32(PETITION_TURN_OK); + SendPacket(resultPacket.Write()); } -void WorldSession::HandlePetitionShowListOpcode(WorldPacket& recvData) +void WorldSession::HandlePetitionShowList(WorldPackets::Petition::PetitionShowList& packet) { - TC_LOG_DEBUG("network", "Received CMSG_PETITION_SHOWLIST"); - - ObjectGuid guid; - recvData >> guid; + TC_LOG_DEBUG("network", "Received CMSG_PETITION_SHOW_LIST"); - SendPetitionShowList(guid); + SendPetitionShowList(packet.PetitionUnit); } void WorldSession::SendPetitionShowList(ObjectGuid guid) @@ -922,45 +590,10 @@ void WorldSession::SendPetitionShowList(ObjectGuid guid) return; } - WorldPacket data(SMSG_PETITION_SHOW_LIST, 8+1+4*6); - data << guid; // npc guid - - if (creature->IsTabardDesigner()) - { - data << uint8(1); // count - data << uint32(1); // index - data << uint32(GUILD_CHARTER); // charter entry - data << uint32(CHARTER_DISPLAY_ID); // charter display id - data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD)); // charter cost - data << uint32(0); // unknown - data << uint32(sWorld->getIntConfig(CONFIG_MIN_PETITION_SIGNS)); // required signs - } - else - { - data << uint8(3); // count - // 2v2 - data << uint32(1); // index - data << uint32(ARENA_TEAM_CHARTER_2v2); // charter entry - data << uint32(CHARTER_DISPLAY_ID); // charter display id - data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_2v2)); // charter cost - data << uint32(2); // unknown - data << uint32(2); // required signs? - // 3v3 - data << uint32(2); // index - data << uint32(ARENA_TEAM_CHARTER_3v3); // charter entry - data << uint32(CHARTER_DISPLAY_ID); // charter display id - data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_3v3)); // charter cost - data << uint32(3); // unknown - data << uint32(3); // required signs? - // 5v5 - data << uint32(3); // index - data << uint32(ARENA_TEAM_CHARTER_5v5); // charter entry - data << uint32(CHARTER_DISPLAY_ID); // charter display id - data << uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_ARENA_5v5)); // charter cost - data << uint32(5); // unknown - data << uint32(5); // required signs? - } + WorldPackets::Petition::ServerPetitionShowList packet; + packet.Unit = guid; + packet.Price = uint32(sWorld->getIntConfig(CONFIG_CHARTER_COST_GUILD)); + SendPacket(packet.Write()); - SendPacket(&data); - TC_LOG_DEBUG("network", "Sent SMSG_PETITION_SHOWLIST"); + TC_LOG_DEBUG("network", "Sent SMSG_PETITION_SHOW_LIST"); } |