Core/Guilds: Implemented some guild packets, some basic guild functions is working, though most are still WIP/TODO

This commit is contained in:
kaelima
2012-08-04 18:40:56 +02:00
parent d9da2e8e50
commit f5d19939bf
11 changed files with 715 additions and 327 deletions

View File

@@ -36,7 +36,7 @@ inline Guild* _GetPlayerGuild(WorldSession* session, bool sendError = false)
if (Guild* guild = sGuildMgr->GetGuildById(guildId)) // Find guild by id
return guild;
if (sendError)
Guild::SendCommandResult(session, GUILD_CREATE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD);
Guild::SendCommandResult(session, GUILD_CREATE, ERR_GUILD_PLAYER_NOT_IN_GUILD);
return NULL;
}
@@ -55,7 +55,7 @@ void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket)
return;
}
Guild::SendCommandResult(this, GUILD_CREATE_S, ERR_GUILD_PLAYER_NOT_IN_GUILD);
Guild::SendCommandResult(this, GUILD_CREATE, ERR_GUILD_PLAYER_NOT_IN_GUILD);
}
void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
@@ -79,8 +79,8 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INVITE");
std::string invitedName;
recvPacket >> invitedName;
uint32 nameLength = recvPacket.ReadBits(7);
std::string invitedName = recvPacket.ReadString(nameLength);
if (normalizePlayerName(invitedName))
if (Guild* guild = _GetPlayerGuild(this, true))
@@ -91,12 +91,28 @@ void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_REMOVE");
std::string playerName;
recvPacket >> playerName;
ObjectGuid playerGuid;
if (normalizePlayerName(playerName))
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleRemoveMember(this, playerName);
playerGuid[6] = recvPacket.ReadBit();
playerGuid[5] = recvPacket.ReadBit();
playerGuid[4] = recvPacket.ReadBit();
playerGuid[0] = recvPacket.ReadBit();
playerGuid[1] = recvPacket.ReadBit();
playerGuid[3] = recvPacket.ReadBit();
playerGuid[7] = recvPacket.ReadBit();
playerGuid[2] = recvPacket.ReadBit();
recvPacket.ReadByteSeq(playerGuid[2]);
recvPacket.ReadByteSeq(playerGuid[6]);
recvPacket.ReadByteSeq(playerGuid[5]);
recvPacket.ReadByteSeq(playerGuid[7]);
recvPacket.ReadByteSeq(playerGuid[1]);
recvPacket.ReadByteSeq(playerGuid[4]);
recvPacket.ReadByteSeq(playerGuid[3]);
recvPacket.ReadByteSeq(playerGuid[0]);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleRemoveMember(this, playerGuid);
}
void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
@@ -129,36 +145,114 @@ void WorldSession::HandleGuildRosterOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ROSTER");
recvPacket.rfinish();
uint64 guildGuid = 0;
if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
if (guild->IsMember(GetPlayer()->GetGUID()))
guild->HandleRoster(this);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleRoster(this);
}
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_PROMOTE");
std::string playerName;
recvPacket >> playerName;
ObjectGuid targetGuid;
if (normalizePlayerName(playerName))
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleUpdateMemberRank(this, playerName, false);
targetGuid[7] = recvPacket.ReadBit();
targetGuid[2] = recvPacket.ReadBit();
targetGuid[5] = recvPacket.ReadBit();
targetGuid[6] = recvPacket.ReadBit();
targetGuid[1] = recvPacket.ReadBit();
targetGuid[0] = recvPacket.ReadBit();
targetGuid[3] = recvPacket.ReadBit();
targetGuid[4] = recvPacket.ReadBit();
recvPacket.ReadByteSeq(targetGuid[0]);
recvPacket.ReadByteSeq(targetGuid[5]);
recvPacket.ReadByteSeq(targetGuid[2]);
recvPacket.ReadByteSeq(targetGuid[3]);
recvPacket.ReadByteSeq(targetGuid[6]);
recvPacket.ReadByteSeq(targetGuid[4]);
recvPacket.ReadByteSeq(targetGuid[1]);
recvPacket.ReadByteSeq(targetGuid[7]);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleUpdateMemberRank(this, targetGuid, false);
}
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_DEMOTE");
std::string playerName;
recvPacket >> playerName;
ObjectGuid targetGuid;
if (normalizePlayerName(playerName))
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleUpdateMemberRank(this, playerName, true);
targetGuid[7] = recvPacket.ReadBit();
targetGuid[1] = recvPacket.ReadBit();
targetGuid[5] = recvPacket.ReadBit();
targetGuid[6] = recvPacket.ReadBit();
targetGuid[2] = recvPacket.ReadBit();
targetGuid[3] = recvPacket.ReadBit();
targetGuid[0] = recvPacket.ReadBit();
targetGuid[4] = recvPacket.ReadBit();
recvPacket.ReadByteSeq(targetGuid[1]);
recvPacket.ReadByteSeq(targetGuid[2]);
recvPacket.ReadByteSeq(targetGuid[7]);
recvPacket.ReadByteSeq(targetGuid[5]);
recvPacket.ReadByteSeq(targetGuid[6]);
recvPacket.ReadByteSeq(targetGuid[0]);
recvPacket.ReadByteSeq(targetGuid[4]);
recvPacket.ReadByteSeq(targetGuid[3]);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleUpdateMemberRank(this, targetGuid, true);
}
void WorldSession::HandleGuildAssignRankOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ASSIGN_MEMBER_RANK");
ObjectGuid targetGuid;
ObjectGuid setterGuid;
uint32 rankId;
recvPacket >> rankId;
targetGuid[1] = recvPacket.ReadBit();
targetGuid[7] = recvPacket.ReadBit();
setterGuid[4] = recvPacket.ReadBit();
setterGuid[2] = recvPacket.ReadBit();
targetGuid[4] = recvPacket.ReadBit();
targetGuid[5] = recvPacket.ReadBit();
targetGuid[6] = recvPacket.ReadBit();
setterGuid[1] = recvPacket.ReadBit();
setterGuid[7] = recvPacket.ReadBit();
targetGuid[2] = recvPacket.ReadBit();
targetGuid[3] = recvPacket.ReadBit();
targetGuid[0] = recvPacket.ReadBit();
setterGuid[6] = recvPacket.ReadBit();
setterGuid[3] = recvPacket.ReadBit();
setterGuid[0] = recvPacket.ReadBit();
setterGuid[5] = recvPacket.ReadBit();
recvPacket.ReadByteSeq(targetGuid[0]);
recvPacket.ReadByteSeq(setterGuid[1]);
recvPacket.ReadByteSeq(setterGuid[3]);
recvPacket.ReadByteSeq(setterGuid[5]);
recvPacket.ReadByteSeq(targetGuid[7]);
recvPacket.ReadByteSeq(targetGuid[3]);
recvPacket.ReadByteSeq(setterGuid[0]);
recvPacket.ReadByteSeq(targetGuid[1]);
recvPacket.ReadByteSeq(setterGuid[6]);
recvPacket.ReadByteSeq(targetGuid[2]);
recvPacket.ReadByteSeq(targetGuid[5]);
recvPacket.ReadByteSeq(targetGuid[4]);
recvPacket.ReadByteSeq(setterGuid[2]);
recvPacket.ReadByteSeq(setterGuid[4]);
recvPacket.ReadByteSeq(targetGuid[6]);
recvPacket.ReadByteSeq(setterGuid[7]);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetMemberRank(this, targetGuid, setterGuid, rankId);
}
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
@@ -193,107 +287,104 @@ void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_MOTD");
std::string motd; // Empty by default
if (!recvPacket.empty())
recvPacket >> motd;
uint32 motdLength = recvPacket.ReadBits(11);
std::string motd = recvPacket.ReadString(motdLength);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetMOTD(this, motd);
}
void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildSetNoteOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE");
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_NOTE");
std::string playerName;
recvPacket >> playerName;
ObjectGuid playerGuid;
std::string publicNote;
recvPacket >> publicNote;
playerGuid[1] = recvPacket.ReadBit();
playerGuid[4] = recvPacket.ReadBit();
playerGuid[5] = recvPacket.ReadBit();
playerGuid[3] = recvPacket.ReadBit();
playerGuid[0] = recvPacket.ReadBit();
playerGuid[7] = recvPacket.ReadBit();
bool type = recvPacket.ReadBit(); // 0 == Officer, 1 == Public
playerGuid[6] = recvPacket.ReadBit();
uint32 noteLength = recvPacket.ReadBits(8);
playerGuid[2] = recvPacket.ReadBit();
if (normalizePlayerName(playerName))
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetMemberNote(this, playerName, publicNote, false);
recvPacket.ReadByteSeq(playerGuid[4]);
recvPacket.ReadByteSeq(playerGuid[5]);
recvPacket.ReadByteSeq(playerGuid[0]);
recvPacket.ReadByteSeq(playerGuid[3]);
recvPacket.ReadByteSeq(playerGuid[1]);
recvPacket.ReadByteSeq(playerGuid[6]);
recvPacket.ReadByteSeq(playerGuid[7]);
std::string note = recvPacket.ReadString(noteLength);
recvPacket.ReadByteSeq(playerGuid[2]);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetMemberNote(this, note, playerGuid, type);
}
void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildQueryRanksOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE");
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_QUERY_RANKS");
std::string playerName;
recvPacket >> playerName;
ObjectGuid guildGuid;
std::string officerNote;
recvPacket >> officerNote;
guildGuid[2] = recvData.ReadBit();
guildGuid[3] = recvData.ReadBit();
guildGuid[0] = recvData.ReadBit();
guildGuid[6] = recvData.ReadBit();
guildGuid[4] = recvData.ReadBit();
guildGuid[7] = recvData.ReadBit();
guildGuid[5] = recvData.ReadBit();
guildGuid[1] = recvData.ReadBit();
if (normalizePlayerName(playerName))
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetMemberNote(this, playerName, officerNote, true);
}
recvData.ReadByteSeq(guildGuid[3]);
recvData.ReadByteSeq(guildGuid[4]);
recvData.ReadByteSeq(guildGuid[5]);
recvData.ReadByteSeq(guildGuid[7]);
recvData.ReadByteSeq(guildGuid[1]);
recvData.ReadByteSeq(guildGuid[0]);
recvData.ReadByteSeq(guildGuid[6]);
recvData.ReadByteSeq(guildGuid[2]);
void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_RANK");
Guild* guild = _GetPlayerGuild(this, true);
if (!guild)
{
recvPacket.rpos(recvPacket.wpos());
return;
}
uint32 rankId;
recvPacket >> rankId;
uint32 rights;
recvPacket >> rights;
std::string rankName;
recvPacket >> rankName;
uint32 money;
recvPacket >> money;
GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS);
for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
{
uint32 bankRights;
uint32 slots;
recvPacket >> bankRights;
recvPacket >> slots;
rightsAndSlots[tabId] = GuildBankRightsAndSlots(uint8(bankRights), slots);
}
guild->HandleSetRankInfo(this, rankId, rankName, rights, money, rightsAndSlots);
if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
if (guild->IsMember(_player->GetGUID()))
guild->HandleGuildRanks(this);
}
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_ADD_RANK");
std::string rankName;
recvPacket >> rankName;
uint32 rankId;
recvPacket >> rankId;
uint32 length = recvPacket.ReadBits(7);
std::string rankName = recvPacket.ReadString(length);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleAddNewRank(this, rankName);
guild->HandleAddNewRank(this, rankName); //, rankId);
}
void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleGuildDelRankOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_DEL_RANK");
uint32 rankId;
recvPacket >> rankId;
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleRemoveLowestRank(this);
guild->HandleRemoveRank(this, rankId);
}
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_INFO_TEXT");
std::string info;
recvPacket >> info;
uint32 length = recvPacket.ReadBits(12);
std::string info = recvPacket.ReadString(length);
if (Guild* guild = _GetPlayerGuild(this, true))
guild->HandleSetInfo(this, info);
@@ -347,7 +438,7 @@ void WorldSession::HandleGuildBankMoneyWithdrawn(WorldPacket & /* recv_data */)
void WorldSession::HandleGuildPermissions(WorldPacket& /* recv_data */)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received (MSG_GUILD_PERMISSIONS)");
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received (CMSG_GUILD_PERMISSIONS)");
if (Guild* guild = _GetPlayerGuild(this))
guild->SendPermissions(this);
@@ -369,7 +460,7 @@ void WorldSession::HandleGuildBankerActivate(WorldPacket & recv_data)
if (Guild* guild = _GetPlayerGuild(this))
guild->SendBankTabsInfo(this);
else
Guild::SendCommandResult(this, GUILD_UNK1, ERR_GUILD_PLAYER_NOT_IN_GUILD);
Guild::SendCommandResult(this, GUILD_VIEW_TAB, ERR_GUILD_PLAYER_NOT_IN_GUILD);
}
}
@@ -459,13 +550,14 @@ void WorldSession::HandleGuildBankSwapItems(WorldPacket & recv_data)
uint8 destSlotId;
recv_data >> destSlotId;
recv_data.read_skip<uint32>(); // Always 0
uint32 destItemEntry;
recv_data >> destItemEntry;
recv_data >> tabId;
recv_data >> slotId;
recv_data >> itemEntry;
recv_data.read_skip<uint8>(); // Always 0
recv_data >> splitedAmount;
guild->SwapItems(GetPlayer(), tabId, slotId, destTabId, destSlotId, splitedAmount);
@@ -515,7 +607,7 @@ void WorldSession::HandleGuildBankBuyTab(WorldPacket & recv_data)
uint8 tabId;
recv_data >> tabId;
if (GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
if (!GoGuid || GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
if (Guild* guild = _GetPlayerGuild(this))
guild->HandleBuyBankTab(this, tabId);
}
@@ -578,26 +670,71 @@ void WorldSession::HandleSetGuildBankTabText(WorldPacket& recv_data)
guild->SetBankTabText(tabId, text);
}
void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recv_data)
void WorldSession::HandleGuildQueryXPOpcode(WorldPacket& recvData)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_QUERY_GUILD_XP");
/*
Bitstream is correct, it just needs a proper guild implementation
uint64 playerGuid = 0;
BitStream mask = recv_data.ReadBitStream(8);
ObjectGuid guildGuid;
ByteBuffer bytes(8, true);
guildGuid[2] = recvData.ReadBit();
guildGuid[1] = recvData.ReadBit();
guildGuid[0] = recvData.ReadBit();
guildGuid[5] = recvData.ReadBit();
guildGuid[4] = recvData.ReadBit();
guildGuid[7] = recvData.ReadBit();
guildGuid[6] = recvData.ReadBit();
guildGuid[3] = recvData.ReadBit();
recv_data.ReadXorByte(mask[5], bytes[6]);
recv_data.ReadXorByte(mask[1], bytes[2]);
recv_data.ReadXorByte(mask[7], bytes[1]);
recv_data.ReadXorByte(mask[4], bytes[4]);
recv_data.ReadXorByte(mask[0], bytes[0]);
recv_data.ReadXorByte(mask[6], bytes[3]);
recv_data.ReadXorByte(mask[3], bytes[5]);
recv_data.ReadXorByte(mask[2], bytes[7]);
recvData.ReadByteSeq(guildGuid[7]);
recvData.ReadByteSeq(guildGuid[2]);
recvData.ReadByteSeq(guildGuid[3]);
recvData.ReadByteSeq(guildGuid[6]);
recvData.ReadByteSeq(guildGuid[1]);
recvData.ReadByteSeq(guildGuid[5]);
recvData.ReadByteSeq(guildGuid[0]);
recvData.ReadByteSeq(guildGuid[4]);
playerGuid = BitConverter::ToUInt64(bytes);
*/
//if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
// guild->Send SMSG_GUILD_XP
}
void WorldSession::HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GUILD_SET_RANK_PERMISSIONS");
Guild* guild = _GetPlayerGuild(this, true);
if (!guild)
{
recvPacket.rfinish();
return;
}
uint32 unk;
uint32 rankId;
uint32 oldRights;
uint32 newRights;
uint32 moneyPerDay;
recvPacket >> unk;
recvPacket >> oldRights;
recvPacket >> newRights;
GuildBankRightsAndSlotsVec rightsAndSlots(GUILD_BANK_MAX_TABS);
for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
{
uint32 bankRights;
uint32 slots;
recvPacket >> bankRights;
recvPacket >> slots;
rightsAndSlots[tabId] = GuildBankRightsAndSlots(uint8(bankRights), slots);
}
recvPacket >> moneyPerDay;
recvPacket >> rankId;
uint32 nameLength = recvPacket.ReadBits(7);
std::string rankName = recvPacket.ReadString(nameLength);
guild->HandleSetRankInfo(this, rankId, rankName, newRights, moneyPerDay, rightsAndSlots);
}