aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Guild.cpp57
-rw-r--r--src/game/Guild.h4
-rw-r--r--src/game/GuildHandler.cpp384
3 files changed, 209 insertions, 236 deletions
diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp
index 5e1e1409039..76c93a07956 100644
--- a/src/game/Guild.cpp
+++ b/src/game/Guild.cpp
@@ -953,15 +953,13 @@ void Guild::LogGuildEvent(uint8 EventType, uint32 PlayerGuid1, uint32 PlayerGuid
// Bank content related
void Guild::DisplayGuildBankContent(WorldSession *session, uint8 TabId)
{
- WorldPacket data(SMSG_GUILD_BANK_LIST, 1300);
-
- GuildBankTab const* tab = GetBankTab(TabId);
- if (!tab)
- return;
+ GuildBankTab const* tab = m_TabListMap[TabId];
if (!IsMemberHaveRights(session->GetPlayer()->GetGUIDLow(),TabId,GUILD_BANK_RIGHT_VIEW_TAB))
return;
+ WorldPacket data(SMSG_GUILD_BANK_LIST,1200);
+
data << uint64(GetGuildBankMoney());
data << uint8(TabId);
data << uint32(GetMemberSlotWithdrawRem(session->GetPlayer()->GetGUIDLow(), TabId)); // remaining slots for today
@@ -979,9 +977,7 @@ void Guild::DisplayGuildBankContent(WorldSession *session, uint8 TabId)
void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2)
{
- GuildBankTab const* tab = GetBankTab(TabId);
- if (!tab)
- return;
+ GuildBankTab const* tab = m_TabListMap[TabId];
WorldPacket data(SMSG_GUILD_BANK_LIST,1200);
@@ -1029,9 +1025,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2)
void Guild::DisplayGuildBankContentUpdate(uint8 TabId, GuildItemPosCountVec const& slots)
{
- GuildBankTab const* tab = GetBankTab(TabId);
- if (!tab)
- return;
+ GuildBankTab const* tab = m_TabListMap[TabId];
WorldPacket data(SMSG_GUILD_BANK_LIST,1200);
@@ -1101,6 +1095,20 @@ void Guild::DisplayGuildBankTabsInfo(WorldSession *session)
sLog.outDebug("WORLD: Sent (SMSG_GUILD_BANK_LIST)");
}
+void Guild::DisplayGuildBankMoneyUpdate()
+{
+ WorldPacket data(SMSG_GUILD_BANK_LIST, 8+1+4+1+1);
+
+ data << uint64(GetGuildBankMoney());
+ data << uint8(0); // TabId, default 0
+ data << uint32(0); // slot withdrow, default 0
+ data << uint8(0); // Tell client this is a tab content packet
+ data << uint8(0); // not send items
+ BroadcastPacket(&data);
+
+ sLog.outDebug("WORLD: Sent (SMSG_GUILD_BANK_LIST)");
+}
+
void Guild::CreateNewBankTab()
{
if (m_PurchasedTabs >= GUILD_BANK_MAX_TABS)
@@ -1121,14 +1129,6 @@ void Guild::CreateNewBankTab()
void Guild::SetGuildBankTabInfo(uint8 TabId, std::string Name, std::string Icon)
{
- if (TabId >= GUILD_BANK_MAX_TABS)
- return;
- if (TabId >= m_TabListMap.size())
- return;
-
- if (!m_TabListMap[TabId])
- return;
-
if (m_TabListMap[TabId]->Name == Name && m_TabListMap[TabId]->Icon == Icon)
return;
@@ -1572,7 +1572,7 @@ void Guild::UnloadGuildBankEventLog()
void Guild::DisplayGuildBankLogs(WorldSession *session, uint8 TabId)
{
- if (TabId > GUILD_BANK_MAX_TABS)
+ if (TabId >= GUILD_BANK_MAX_TABS) // tabs starts in 0
return;
if (TabId == GUILD_BANK_MAX_TABS)
@@ -1739,7 +1739,7 @@ Item* Guild::StoreItem(uint8 tabId, GuildItemPosCountVec const& dest, Item* pIte
return lastItem;
}
-// Return stored item (if stored to stack, it can diff. from pItem). And pItem can be deleted in this case.
+// Return stored item (if stored to stack, it can diff. from pItem). And pItem ca be deleted in this case.
Item* Guild::_StoreItem( uint8 tab, uint8 slot, Item *pItem, uint32 count, bool clone )
{
if (!pItem)
@@ -1765,15 +1765,15 @@ Item* Guild::_StoreItem( uint8 tab, uint8 slot, Item *pItem, uint32 count, bool
pItem->SetUInt64Value(ITEM_FIELD_OWNER, 0);
AddGBankItemToDB(GetId(), tab, slot, pItem->GetGUIDLow(), pItem->GetEntry());
pItem->FSetState(ITEM_NEW);
- pItem->SaveToDB(); // not in inventory and can be save standalone
+ pItem->SaveToDB(); // not in onventory and can be save standalone
return pItem;
}
else
{
- pItem2->SetCount(pItem2->GetCount() + count);
+ pItem2->SetCount( pItem2->GetCount() + count );
pItem2->FSetState(ITEM_CHANGED);
- pItem2->SaveToDB(); // not in inventory and can be save standalone
+ pItem2->SaveToDB(); // not in onventory and can be save standalone
if (!clone)
{
@@ -1968,12 +1968,7 @@ void Guild::SetGuildBankTabText(uint8 TabId, std::string text)
void Guild::SendGuildBankTabText(WorldSession *session, uint8 TabId)
{
- if (TabId >= GUILD_BANK_MAX_TABS) // tabs starts in 0
- return;
-
- GuildBankTab const *tab = GetBankTab(TabId);
- if (!tab)
- return;
+ GuildBankTab const* tab = m_TabListMap[TabId];
WorldPacket data(MSG_QUERY_GUILD_BANK_TEXT, 1+tab->Text.size()+1);
data << uint8(TabId);
@@ -1999,7 +1994,7 @@ void Guild::SwapItems(Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 BankT
{
sLog.outCrash("Guild::SwapItems: Player %s(GUIDLow: %u) tried to move item %u from tab %u slot %u to tab %u slot %u, but item %u has a stack of zero!",
pl->GetName(), pl->GetGUIDLow(), pItemSrc->GetEntry(), BankTab, BankTabSlot, BankTabDst, BankTabSlotDst, pItemSrc->GetEntry());
- //return; // Commented out for now, uncomment when it's verified that this causes a crash!
+ //return; // Commented out for now, uncomment when it's verified that this causes a crash!!
}
if (SplitedAmount >= pItemSrc->GetCount())
diff --git a/src/game/Guild.h b/src/game/Guild.h
index f3626942bfc..9e7c2ed9941 100644
--- a/src/game/Guild.h
+++ b/src/game/Guild.h
@@ -389,6 +389,7 @@ class Guild
// ** Guild bank **
// Content & item deposit/withdraw
void DisplayGuildBankContent(WorldSession *session, uint8 TabId);
+ void DisplayGuildBankMoneyUpdate();
void SwapItems( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 BankTabDst, uint8 BankTabSlotDst, uint32 SplitedAmount);
void MoveFromBankToChar( Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 PlayerBag, uint8 PlayerSlot, uint32 SplitedAmount);
@@ -400,7 +401,6 @@ class Guild
void SetGuildBankTabText(uint8 TabId, std::string text);
void SendGuildBankTabText(WorldSession *session, uint8 TabId);
void SetGuildBankTabInfo(uint8 TabId, std::string name, std::string icon);
- const GuildBankTab *GetBankTab(uint8 index) { if(index >= m_TabListMap.size()) return NULL; return m_TabListMap[index]; }
const uint8 GetPurchasedTabs() const { return m_PurchasedTabs; }
uint32 GetBankRights(uint32 rankId, uint8 TabId) const;
bool IsMemberHaveRights(uint32 LowGuid, uint8 TabId,uint32 rights) const;
@@ -408,6 +408,7 @@ class Guild
// Load/unload
void LoadGuildBankFromDB();
void UnloadGuildBank();
+ bool IsGuildBankLoaded() const { return m_GuildBankLoaded; }
void IncOnlineMemberCount() { ++m_OnlineMembers; }
// Money deposit/withdraw
void SendMoneyInfo(WorldSession *session, uint32 LowGuid);
@@ -489,4 +490,3 @@ class Guild
Item* _StoreItem( uint8 tab, uint8 slot, Item *pItem, uint32 count, bool clone );
};
#endif
-
diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp
index 80f5d124e94..e69a55d4024 100644
--- a/src/game/GuildHandler.cpp
+++ b/src/game/GuildHandler.cpp
@@ -31,36 +31,32 @@
void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket)
{
- uint32 guildId;
- Guild *guild;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_QUERY");
+ uint32 guildId;
recvPacket >> guildId;
- guild = objmgr.GetGuildById(guildId);
- if(!guild)
+ if(Guild *guild = objmgr.GetGuildById(guildId))
{
- SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
+ guild->Query(this);
return;
}
- guild->Query(this);
+ SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
}
void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
{
- std::string gname;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_CREATE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_CREATE");
+ std::string gname;
recvPacket >> gname;
- if(GetPlayer()->GetGuildId())
+ if(GetPlayer()->GetGuildId()) // already in guild
return;
Guild *guild = new Guild;
- if(!guild->Create(GetPlayer(),gname))
+ if(!guild->Create(GetPlayer(), gname))
{
delete guild;
return;
@@ -71,12 +67,11 @@ void WorldSession::HandleGuildCreateOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
{
- std::string Invitedname, plname;
+ sLog.outDebug("WORLD: Received CMSG_GUILD_INVITE");
- //sLog.outDebug("WORLD: Received CMSG_GUILD_INVITE");
+ std::string Invitedname, plname;
Player * player = NULL;
-
recvPacket >> Invitedname;
if(normalizePlayerName(Invitedname))
@@ -137,15 +132,14 @@ void WorldSession::HandleGuildInviteOpcode(WorldPacket& recvPacket)
data << guild->GetName();
player->GetSession()->SendPacket(&data);
- //sLog.outDebug("WORLD: Sent (SMSG_GUILD_INVITE)");
+ sLog.outDebug("WORLD: Sent (SMSG_GUILD_INVITE)");
}
void WorldSession::HandleGuildRemoveOpcode(WorldPacket& recvPacket)
{
- std::string plName;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_REMOVE");
+ std::string plName;
recvPacket >> plName;
if(!normalizePlayerName(plName))
@@ -202,7 +196,7 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
Guild *guild;
Player *player = GetPlayer();
- //sLog.outDebug("WORLD: Received CMSG_GUILD_ACCEPT");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_ACCEPT");
guild = objmgr.GetGuildById(player->GetGuildIdInvited());
if(!guild || player->GetGuildId())
@@ -223,12 +217,12 @@ void WorldSession::HandleGuildAcceptOpcode(WorldPacket& /*recvPacket*/)
data << player->GetName();
guild->BroadcastPacket(&data);
- //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
+ sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
}
void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
{
- //sLog.outDebug("WORLD: Received CMSG_GUILD_DECLINE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_DECLINE");
GetPlayer()->SetGuildIdInvited(0);
GetPlayer()->SetInGuild(0);
@@ -237,7 +231,7 @@ void WorldSession::HandleGuildDeclineOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
{
Guild *guild;
- //sLog.outDebug("WORLD: Received CMSG_GUILD_INFO");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_INFO");
guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
@@ -259,21 +253,17 @@ void WorldSession::HandleGuildInfoOpcode(WorldPacket& /*recvPacket*/)
void WorldSession::HandleGuildRosterOpcode(WorldPacket& /*recvPacket*/)
{
- //sLog.outDebug("WORLD: Received CMSG_GUILD_ROSTER");
-
- Guild* guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
- if(!guild)
- return;
+ sLog.outDebug("WORLD: Received CMSG_GUILD_ROSTER");
- guild->Roster(this);
+ if(Guild* guild = objmgr.GetGuildById(_player->GetGuildId()))
+ guild->Roster(this);
}
void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
{
- std::string plName;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_PROMOTE");
+ std::string plName;
recvPacket >> plName;
if(!normalizePlayerName(plName))
@@ -285,6 +275,7 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
+
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_PROMOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
@@ -332,10 +323,9 @@ void WorldSession::HandleGuildPromoteOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
{
- std::string plName;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_DEMOTE");
+ std::string plName;
recvPacket >> plName;
if(!normalizePlayerName(plName))
@@ -401,17 +391,15 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
{
- std::string plName;
- Guild *guild;
+ sLog.outDebug("WORLD: Received CMSG_GUILD_LEAVE");
- //sLog.outDebug("WORLD: Received CMSG_GUILD_LEAVE");
-
- guild = objmgr.GetGuildById(_player->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(_player->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
+
if(_player->GetGUID() == guild->GetLeader() && guild->GetMemberSize() > 1)
{
SendGuildCommandResult(GUILD_QUIT_S, "", GUILD_LEADER_LEAVE);
@@ -424,8 +412,6 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
return;
}
- plName = _player->GetName();
-
guild->DelMember(_player->GetGUID());
// Put record into guildlog
guild->LogGuildEvent(GUILD_EVENT_LOG_LEAVE_GUILD, _player->GetGUIDLow(), 0, 0);
@@ -433,27 +419,25 @@ void WorldSession::HandleGuildLeaveOpcode(WorldPacket& /*recvPacket*/)
WorldPacket data(SMSG_GUILD_EVENT, (2+10)); // guess size
data << (uint8)GE_LEFT;
data << (uint8)1; // strings count
- data << plName;
+ data << _player->GetName();
guild->BroadcastPacket(&data);
- //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
+ sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
SendGuildCommandResult(GUILD_QUIT_S, guild->GetName(), GUILD_PLAYER_NO_MORE_IN_GUILD);
}
void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
{
- std::string name;
- Guild *guild;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_DISBAND");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_DISBAND");
- guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
+
if(GetPlayer()->GetGUID() != guild->GetLeader())
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
@@ -462,23 +446,22 @@ void WorldSession::HandleGuildDisbandOpcode(WorldPacket& /*recvPacket*/)
guild->Disband();
- //sLog.outDebug("WORLD: Guild Sucefully Disbanded");
+ sLog.outDebug("WORLD: Guild Successfully Disbanded");
}
void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
{
- std::string name;
- Player *oldLeader = GetPlayer();
- Guild *guild;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_LEADER");
+ std::string name;
recvPacket >> name;
+ Player *oldLeader = GetPlayer();
+
if(!normalizePlayerName(name))
return;
- guild = objmgr.GetGuildById(oldLeader->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(oldLeader->GetGuildId());
if (!guild)
{
@@ -516,28 +499,28 @@ void WorldSession::HandleGuildLeaderOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
{
- Guild *guild;
+ sLog.outDebug("WORLD: Received CMSG_GUILD_MOTD");
+
std::string MOTD;
- //sLog.outDebug("WORLD: Received CMSG_GUILD_MOTD");
+ if(!recvPacket.empty())
+ recvPacket >> MOTD;
+ else
+ MOTD = "";
- guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
+
if(!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_SETMOTD))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
return;
}
- if(!recvPacket.empty())
- recvPacket >> MOTD;
- else
- MOTD = "";
-
guild->SetMOTD(MOTD);
WorldPacket data(SMSG_GUILD_EVENT, (2+MOTD.size()+1));
@@ -546,15 +529,14 @@ void WorldSession::HandleGuildMOTDOpcode(WorldPacket& recvPacket)
data << MOTD;
guild->BroadcastPacket(&data);
- //sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
+ sLog.outDebug("WORLD: Sent (SMSG_GUILD_EVENT)");
}
void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
{
- std::string name,PNOTE;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_SET_PUBLIC_NOTE");
+ std::string name,PNOTE;
recvPacket >> name;
if(!normalizePlayerName(name))
@@ -590,10 +572,9 @@ void WorldSession::HandleGuildSetPublicNoteOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
{
- std::string plName, OFFNOTE;
-
- //sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_SET_OFFICER_NOTE");
+ std::string plName, OFFNOTE;
recvPacket >> plName;
if(!normalizePlayerName(plName))
@@ -605,6 +586,7 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
+
if (!guild->HasRankRight(GetPlayer()->GetRank(), GR_RIGHT_EOFFNOTE))
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
@@ -628,23 +610,19 @@ void WorldSession::HandleGuildSetOfficerNoteOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
{
- //recvPacket.hexlike();
-
- Guild *guild;
std::string rankname;
uint32 rankId;
uint32 rights, MoneyPerDay;
- //sLog.outDebug("WORLD: Received CMSG_GUILD_RANK");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_RANK");
- guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
-
else if(GetPlayer()->GetGUID() != guild->GetLeader())
{
recvPacket.rpos(recvPacket.wpos()); // set to end to avoid warnings spam
@@ -683,12 +661,12 @@ void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
{
- Guild *guild;
- std::string rankname;
+ sLog.outDebug("WORLD: Received CMSG_GUILD_ADD_RANK");
- //sLog.outDebug("WORLD: Received CMSG_GUILD_ADD_RANK");
+ std::string rankname;
+ recvPacket >> rankname;
- guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
@@ -704,8 +682,6 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
if(guild->GetRanksSize() >= GUILD_RANKS_MAX_COUNT) // client not let create more 10 than ranks
return;
- recvPacket >> rankname;
-
guild->CreateRank(rankname, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK);
guild->Query(this);
@@ -714,18 +690,14 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
{
- Guild *guild;
- std::string rankname;
+ sLog.outDebug("WORLD: Received CMSG_GUILD_DEL_RANK");
- //sLog.outDebug("WORLD: Received CMSG_GUILD_DEL_RANK");
-
- guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
+ Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
SendGuildCommandResult(GUILD_CREATE_S, "", GUILD_PLAYER_NOT_IN_GUILD);
return;
}
-
else if(GetPlayer()->GetGUID() != guild->GetLeader())
{
SendGuildCommandResult(GUILD_INVITE_S, "", GUILD_PERMISSIONS);
@@ -746,12 +718,12 @@ void WorldSession::SendGuildCommandResult(uint32 typecmd, const std::string& str
data << cmdresult;
SendPacket(&data);
- //sLog.outDebug("WORLD: Sent (SMSG_GUILD_COMMAND_RESULT)");
+ sLog.outDebug("WORLD: Sent (SMSG_GUILD_COMMAND_RESULT)");
}
void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
{
- //sLog.outDebug("WORLD: Received CMSG_GUILD_INFO_TEXT");
+ sLog.outDebug("WORLD: Received CMSG_GUILD_INFO_TEXT");
std::string GINFO;
@@ -775,17 +747,14 @@ void WorldSession::HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket)
void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket)
{
- //sLog.outDebug("WORLD: Received MSG_SAVE_GUILD_EMBLEM");
+ sLog.outDebug("WORLD: Received MSG_SAVE_GUILD_EMBLEM");
uint64 vendorGuid;
- uint32 EmblemStyle;
- uint32 EmblemColor;
- uint32 BorderStyle;
- uint32 BorderColor;
- uint32 BackgroundColor;
+ uint32 EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor;
recvPacket >> vendorGuid;
+ recvPacket >> EmblemStyle >> EmblemColor >> BorderStyle >> BorderColor >> BackgroundColor;
Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid,UNIT_NPC_FLAG_TABARDDESIGNER);
if (!pCreature)
@@ -800,12 +769,6 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket)
if(GetPlayer()->hasUnitState(UNIT_STAT_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- recvPacket >> EmblemStyle;
- recvPacket >> EmblemColor;
- recvPacket >> BorderStyle;
- recvPacket >> BorderColor;
- recvPacket >> BackgroundColor;
-
Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId());
if(!guild)
{
@@ -841,17 +804,9 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */)
{
// empty
sLog.outDebug("WORLD: Received (MSG_GUILD_EVENT_LOG_QUERY)");
- //recvPacket.hexlike();
-
- uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
- return;
-
- Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
- return;
-
- pGuild->DisplayGuildEventLog(this);
+ if(uint32 GuildId = GetPlayer()->GetGuildId())
+ if(Guild *pGuild = objmgr.GetGuildById(GuildId))
+ pGuild->DisplayGuildEventLog(this);
}
/****** GUILD BANK *******/
@@ -859,53 +814,44 @@ void WorldSession::HandleGuildEventLogQueryOpcode(WorldPacket& /* recvPacket */)
void WorldSession::HandleGuildBankMoneyWithdrawn( WorldPacket & /* recv_data */ )
{
sLog.outDebug("WORLD: Received (MSG_GUILD_BANK_MONEY_WITHDRAWN)");
- //recv_data.hexlike();
-
- uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
- return;
-
- Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
- return;
-
- pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow());
+ if(uint32 GuildId = GetPlayer()->GetGuildId())
+ if(Guild *pGuild = objmgr.GetGuildById(GuildId))
+ pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow());
}
void WorldSession::HandleGuildPermissions( WorldPacket& /* recv_data */ )
{
sLog.outDebug("WORLD: Received (MSG_GUILD_PERMISSIONS)");
- uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
- return;
-
- Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
- return;
-
- uint32 rankId = GetPlayer()->GetRank();
-
- WorldPacket data(MSG_GUILD_PERMISSIONS, 4*15+1);
- data << uint32(rankId); // guild rank id
- data << uint32(pGuild->GetRankRights(rankId)); // rank rights
- // money per day left
- data << uint32(pGuild->GetMemberMoneyWithdrawRem(GetPlayer()->GetGUIDLow()));
- data << uint8(pGuild->GetPurchasedTabs()); // tabs count
- // why sending all info when not all tabs are purchased???
- for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i)
+ if(uint32 GuildId = GetPlayer()->GetGuildId())
{
- data << uint32(pGuild->GetBankRights(rankId, uint8(i)));
- data << uint32(pGuild->GetMemberSlotWithdrawRem(GetPlayer()->GetGUIDLow(), uint8(i)));
+ if(Guild *pGuild = objmgr.GetGuildById(GuildId))
+ {
+ uint32 rankId = GetPlayer()->GetRank();
+
+ WorldPacket data(MSG_GUILD_PERMISSIONS, 4*15+1);
+ data << uint32(rankId); // guild rank id
+ data << uint32(pGuild->GetRankRights(rankId)); // rank rights
+ // money per day left
+ data << uint32(pGuild->GetMemberMoneyWithdrawRem(GetPlayer()->GetGUIDLow()));
+ data << uint8(pGuild->GetPurchasedTabs()); // tabs count
+ // why sending all info when not all tabs are purchased???
+ for (int i = 0; i < GUILD_BANK_MAX_TABS; ++i)
+ {
+ data << uint32(pGuild->GetBankRights(rankId, uint8(i)));
+ data << uint32(pGuild->GetMemberSlotWithdrawRem(GetPlayer()->GetGUIDLow(), uint8(i)));
+ }
+ SendPacket(&data);
+ sLog.outDebug("WORLD: Sent (MSG_GUILD_PERMISSIONS)");
+ }
}
- SendPacket(&data);
- sLog.outDebug("WORLD: Sent (MSG_GUILD_PERMISSIONS)");
}
/* Called when clicking on Guild bank gameobject */
void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANKER_ACTIVATE)");
+
uint64 GoGuid;
uint8 unk;
recv_data >> GoGuid >> unk;
@@ -917,7 +863,7 @@ void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data )
{
if(Guild *pGuild = objmgr.GetGuildById(GuildId))
{
- pGuild->DisplayGuildBankTabsInfo(this);
+ pGuild->DisplayGuildBankTabsInfo(this); // this also will load guild bank if not yet
return;
}
}
@@ -929,31 +875,35 @@ void WorldSession::HandleGuildBankerActivate( WorldPacket & recv_data )
void WorldSession::HandleGuildBankQueryTab( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_QUERY_TAB)");
+
uint64 GoGuid;
- uint8 TabId,unk1;
+ uint8 TabId, unk1;
recv_data >> GoGuid >> TabId >> unk1;
if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
return;
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
+ if (!pGuild)
+ return;
+
+ if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
return;
// Let's update the amount of gold the player can withdraw before displaying the content
- // This is usefull if money withdraw right has changed
+ // This is useful if money withdraw right has changed
pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow());
-
pGuild->DisplayGuildBankContent(this, TabId);
}
void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_DEPOSIT_MONEY)");
+
uint64 GoGuid;
uint32 money;
recv_data >> GoGuid >> money;
@@ -964,15 +914,18 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data )
if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
return;
+ if (GetPlayer()->GetMoney() < money)
+ return;
+
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
+ if (!pGuild)
return;
- if (GetPlayer()->GetMoney() < money)
+ if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs())
return;
CharacterDatabase.BeginTransaction();
@@ -995,11 +948,13 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data )
pGuild->DisplayGuildBankTabsInfo(this);
pGuild->DisplayGuildBankContent(this, 0);
+ pGuild->DisplayGuildBankMoneyUpdate();
}
void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_WITHDRAW_MONEY)");
+
uint64 GoGuid;
uint32 money;
recv_data >> GoGuid >> money;
@@ -1018,6 +973,9 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
if(!pGuild)
return;
+ if (!pGuild->IsGuildBankLoaded() || !pGuild->GetPurchasedTabs())
+ return;
+
if (pGuild->GetGuildBankMoney()<money) // not enough money in bank
return;
@@ -1043,12 +1001,12 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )
pGuild->SendMoneyInfo(this, GetPlayer()->GetGUIDLow());
pGuild->DisplayGuildBankTabsInfo(this);
pGuild->DisplayGuildBankContent(this,0);
+ pGuild->DisplayGuildBankMoneyUpdate();
}
void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_SWAP_ITEMS)");
- //recv_data.hexlike();
uint64 GoGuid;
uint8 BankToBank;
@@ -1063,6 +1021,21 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
uint32 SplitedAmount = 0;
recv_data >> GoGuid >> BankToBank;
+
+ uint32 GuildId = GetPlayer()->GetGuildId();
+ if (!GuildId)
+ {
+ recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
+ return;
+ }
+
+ Guild *pGuild = objmgr.GetGuildById(GuildId);
+ if (!pGuild || !pGuild->IsGuildBankLoaded())
+ {
+ recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
+ return;
+ }
+
if (BankToBank)
{
recv_data >> BankTabDst;
@@ -1074,7 +1047,10 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
recv_data >> unk2; // always 0
recv_data >> SplitedAmount;
- if (BankTabSlotDst >= GUILD_BANK_MAX_SLOTS || (BankTabDst == BankTab && BankTabSlotDst == BankTabSlot) || BankTab >= GUILD_BANK_MAX_TABS)
+ if (BankTabSlotDst >= GUILD_BANK_MAX_SLOTS ||
+ (BankTabDst == BankTab && BankTabSlotDst == BankTabSlot) ||
+ BankTab >= pGuild->GetPurchasedTabs() ||
+ BankTabDst >= pGuild->GetPurchasedTabs())
{
recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
return;
@@ -1100,7 +1076,8 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
recv_data >> SplitedAmount;
}
- if ((BankTabSlot >= GUILD_BANK_MAX_SLOTS && BankTabSlot != 0xFF) || BankTab >= GUILD_BANK_MAX_TABS)
+ if (BankTabSlot >= GUILD_BANK_MAX_SLOTS && BankTabSlot != 0xFF ||
+ BankTab >= pGuild->GetPurchasedTabs())
{
recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
return;
@@ -1110,30 +1087,20 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
if (!GetPlayer()->GetGameObjectIfCanInteractWith(GoGuid, GAMEOBJECT_TYPE_GUILD_BANK))
return;
- uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
- return;
-
- Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
- return;
-
if (BankTab >= pGuild->GetPurchasedTabs())
return;
- Player *pl = GetPlayer();
-
// Bank <-> Bank
if (BankToBank)
{
- pGuild->SwapItems(pl, BankTab, BankTabSlot, BankTabDst, BankTabSlotDst, SplitedAmount);
+ pGuild->SwapItems(_player, BankTab, BankTabSlot, BankTabDst, BankTabSlotDst, SplitedAmount);
return;
}
// Player <-> Bank
// allow work with inventory only
- if(!Player::IsInventoryPos(PlayerBag,PlayerSlot) && !(PlayerBag == NULL_BAG && PlayerSlot == NULL_SLOT))
+ if(!Player::IsInventoryPos(PlayerBag, PlayerSlot) && !(PlayerBag == NULL_BAG && PlayerSlot == NULL_SLOT) )
{
_player->SendEquipError( EQUIP_ERR_NONE, NULL, NULL );
return;
@@ -1141,15 +1108,15 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
// BankToChar swap or char to bank remaining
if (ToChar) // Bank -> Char cases
- pGuild->MoveFromBankToChar(pl, BankTab, BankTabSlot, PlayerBag, PlayerSlot, SplitedAmount);
+ pGuild->MoveFromBankToChar(_player, BankTab, BankTabSlot, PlayerBag, PlayerSlot, SplitedAmount);
else // Char -> Bank cases
- pGuild->MoveFromCharToBank(pl, PlayerBag, PlayerSlot, BankTab, BankTabSlot, SplitedAmount);
+ pGuild->MoveFromCharToBank(_player, PlayerBag, PlayerSlot, BankTab, BankTabSlot, SplitedAmount);
}
void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_BUY_TAB)");
- //recv_data.hexlike();
+
uint64 GoGuid;
uint8 TabId;
@@ -1160,25 +1127,20 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data )
return;
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId==0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
if(!pGuild)
return;
- uint32 TabCost = GetGuildBankTabPrice(TabId) * GOLD;
- if (!TabCost)
- return;
-
- if (pGuild->GetPurchasedTabs() >= GUILD_BANK_MAX_TABS)
+ // m_PurchasedTabs = 0 when buying Tab 0, that is why this check can be made
+ if (!pGuild->IsGuildBankLoaded() || TabId != pGuild->GetPurchasedTabs())
return;
- if (TabId != pGuild->GetPurchasedTabs()) // m_PurchasedTabs = 0 when buying Tab 0, that is why this check can be made
- {
- sLog.outError("Error: trying to buy a tab non contigous to owned ones");
+ uint32 TabCost = GetGuildBankTabPrice(TabId) * GOLD;
+ if (!TabCost)
return;
- }
if (GetPlayer()->GetMoney() < TabCost) // Should not happen, this is checked by client
return;
@@ -1195,7 +1157,7 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data )
void WorldSession::HandleGuildBankUpdateTab( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (CMSG_GUILD_BANK_UPDATE_TAB)");
- //recv_data.hexlike();
+
uint64 GoGuid;
uint8 TabId;
std::string Name;
@@ -1216,11 +1178,14 @@ void WorldSession::HandleGuildBankUpdateTab( WorldPacket & recv_data )
return;
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId==0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
+ if (!pGuild)
+ return;
+
+ if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
return;
pGuild->SetGuildBankTabInfo(TabId, Name, IconIndex);
@@ -1232,16 +1197,23 @@ void WorldSession::HandleGuildBankLogQuery( WorldPacket & recv_data )
{
sLog.outDebug("WORLD: Received (MSG_GUILD_BANK_LOG_QUERY)");
+ uint8 TabId;
+ recv_data >> TabId;
+
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
+ if (!pGuild)
return;
- uint8 TabId;
- recv_data >> TabId;
+ if (!pGuild->IsGuildBankLoaded())
+ return;
+
+ // GUILD_BANK_MAX_TABS send by client for money log
+ if (TabId >= pGuild->GetPurchasedTabs() && TabId != GUILD_BANK_MAX_TABS)
+ return;
pGuild->DisplayGuildBankLogs(this, TabId);
}
@@ -1250,16 +1222,19 @@ void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recv_data)
{
sLog.outDebug("WORLD: Received MSG_QUERY_GUILD_BANK_TEXT");
+ uint8 TabId;
+ recv_data >> TabId;
+
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
+ if (!pGuild)
return;
- uint8 TabId;
- recv_data >> TabId;
+ if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
+ return;
pGuild->SendGuildBankTabText(this, TabId);
}
@@ -1267,18 +1242,22 @@ void WorldSession::HandleQueryGuildBankTabText(WorldPacket &recv_data)
void WorldSession::HandleSetGuildBankTabText(WorldPacket &recv_data)
{
sLog.outDebug("WORLD: Received CMSG_SET_GUILD_BANK_TEXT");
+
+ uint8 TabId;
+ std::string Text;
+ recv_data >> TabId;
+ recv_data >> Text;
+
uint32 GuildId = GetPlayer()->GetGuildId();
- if (GuildId == 0)
+ if (!GuildId)
return;
Guild *pGuild = objmgr.GetGuildById(GuildId);
- if(!pGuild)
+ if (!pGuild)
return;
- uint8 TabId;
- std::string Text;
- recv_data >> TabId;
- recv_data >> Text;
+ if (!pGuild->IsGuildBankLoaded() || TabId >= pGuild->GetPurchasedTabs())
+ return;
pGuild->SetGuildBankTabText(TabId, Text);
}
@@ -1289,4 +1268,3 @@ void WorldSession::SendSaveGuildEmblem( uint32 msg )
data << uint32(msg); // not part of guild
SendPacket( &data );
}
-