TrinityCore
GuildHandler.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "WorldSession.h"
19#include "AchievementPackets.h"
20#include "Common.h"
21#include "GameTime.h"
22#include "Guild.h"
23#include "GuildMgr.h"
24#include "GuildPackets.h"
25#include "Log.h"
26#include "ObjectMgr.h"
27#include "Player.h"
28
30{
31 TC_LOG_DEBUG("guild", "CMSG_GUILD_QUERY [{}]: Guild: {} Target: {}",
33
34 if (Guild* guild = sGuildMgr->GetGuildByGuid(query.GuildGuid))
35 {
36 guild->SendQueryResponse(this);
37 return;
38 }
39
41 response.GuildGuid = query.GuildGuid;
42 SendPacket(response.Write());
43
44 TC_LOG_DEBUG("guild", "SMSG_GUILD_QUERY_RESPONSE [{}]", GetPlayerInfo());
45}
46
48{
49 TC_LOG_DEBUG("guild", "CMSG_GUILD_INVITE [{}]: Invited: {}", GetPlayerInfo(), packet.Name);
50 if (normalizePlayerName(packet.Name))
51 if (Guild* guild = GetPlayer()->GetGuild())
52 guild->HandleInviteMember(this, packet.Name);
53}
54
56{
57 TC_LOG_DEBUG("guild", "CMSG_GUILD_REMOVE [{}]: Target: {}", GetPlayerInfo(), packet.Removee.ToString());
58
59 if (Guild* guild = GetPlayer()->GetGuild())
60 guild->HandleRemoveMember(this, packet.Removee);
61}
62
64{
65 if (!GetPlayer()->GetGuildId())
66 if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildIdInvited()))
67 guild->HandleAcceptMember(this);
68}
69
71{
72 if (GetPlayer()->GetGuildId())
73 return;
74
76}
77
79{
80 if (Guild* guild = GetPlayer()->GetGuild())
81 guild->HandleRoster(this);
82 else
84}
85
87{
88 TC_LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [{}]: Target: {}", GetPlayerInfo(), promote.Promotee.ToString());
89
90 if (Guild* guild = GetPlayer()->GetGuild())
91 guild->HandleUpdateMemberRank(this, promote.Promotee, false);
92}
93
95{
96 TC_LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [{}]: Target: {}", GetPlayerInfo(), demote.Demotee.ToString());
97
98 if (Guild* guild = GetPlayer()->GetGuild())
99 guild->HandleUpdateMemberRank(this, demote.Demotee, true);
100}
101
103{
104 ObjectGuid setterGuid = GetPlayer()->GetGUID();
105
106 TC_LOG_DEBUG("guild", "CMSG_GUILD_ASSIGN_MEMBER_RANK [{}]: Target: {} Rank: {}, Issuer: {}",
107 GetPlayerInfo(), packet.Member.ToString(), packet.RankOrder, setterGuid.ToString());
108
109 if (Guild* guild = GetPlayer()->GetGuild())
110 guild->HandleSetMemberRank(this, packet.Member, setterGuid, GuildRankOrder(packet.RankOrder));
111}
112
114{
115 if (Guild* guild = GetPlayer()->GetGuild())
116 guild->HandleLeaveMember(this);
117}
118
120{
121 if (Guild* guild = GetPlayer()->GetGuild())
122 guild->HandleDelete(this);
123}
124
126{
127 TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_MOTD_TEXT [{}]: MOTD: {}", GetPlayerInfo(), packet.MotdText);
128
129 if (Guild* guild = GetPlayer()->GetGuild())
130 guild->HandleSetMOTD(this, packet.MotdText);
131}
132
134{
135 TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_NOTE [{}]: Target: {}, Note: {}, Public: {}",
136 GetPlayerInfo(), packet.NoteeGUID.ToString(), packet.Note, packet.IsPublic);
137
138 if (Guild* guild = GetPlayer()->GetGuild())
139 guild->HandleSetMemberNote(this, packet.Note, packet.NoteeGUID, packet.IsPublic);
140}
141
143{
144 TC_LOG_DEBUG("guild", "CMSG_GUILD_GET_RANKS [{}]: Guild: {}",
145 GetPlayerInfo(), packet.GuildGUID.ToString());
146
147 if (Guild* guild = sGuildMgr->GetGuildByGuid(packet.GuildGUID))
148 if (guild->IsMember(_player->GetGUID()))
149 guild->SendGuildRankInfo(this);
150}
151
153{
154 TC_LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [{}]: Rank: {}", GetPlayerInfo(), packet.Name);
155
156 if (Guild* guild = GetPlayer()->GetGuild())
157 guild->HandleAddNewRank(this, packet.Name);
158}
159
161{
162 TC_LOG_DEBUG("guild", "CMSG_GUILD_DELETE_RANK [{}]: Rank: {}", GetPlayerInfo(), packet.RankOrder);
163
164 if (Guild* guild = GetPlayer()->GetGuild())
165 guild->HandleRemoveRank(this, GuildRankOrder(packet.RankOrder));
166}
167
169{
170 TC_LOG_DEBUG("guild", "CMSG_GUILD_SHIFT_RANK [{}]: RankOrder: {}, ShiftUp: {}", GetPlayerInfo(), shiftRank.RankOrder, shiftRank.ShiftUp ? "true" : "false");
171
172 if (Guild* guild = GetPlayer()->GetGuild())
173 guild->HandleShiftRank(this, GuildRankOrder(shiftRank.RankOrder), shiftRank.ShiftUp);
174}
175
177{
178 TC_LOG_DEBUG("guild", "CMSG_GUILD_UPDATE_INFO_TEXT [{}]: {}", GetPlayerInfo(), packet.InfoText);
179
180 if (Guild* guild = GetPlayer()->GetGuild())
181 guild->HandleSetInfo(this, packet.InfoText);
182}
183
185{
186 EmblemInfo emblemInfo;
187 emblemInfo.ReadPacket(packet);
188
189 TC_LOG_DEBUG("guild", "CMSG_SAVE_GUILD_EMBLEM [{}]: Guid: [{}] Style: {}, Color: {}, BorderStyle: {}, BorderColor: {}, BackgroundColor: {}"
190 , GetPlayerInfo(), packet.Vendor.ToString(), emblemInfo.GetStyle()
191 , emblemInfo.GetColor(), emblemInfo.GetBorderStyle()
192 , emblemInfo.GetBorderColor(), emblemInfo.GetBackgroundColor());
193
194 if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE))
195 {
196 // Remove fake death
197 if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
199
200 if (!emblemInfo.ValidateEmblemColors())
201 {
203 return;
204 }
205
206 if (Guild* guild = GetPlayer()->GetGuild())
207 guild->HandleSetEmblem(this, emblemInfo);
208 else
209 Guild::SendSaveEmblemResult(this, ERR_GUILDEMBLEM_NOGUILD); // "You are not part of a guild!";
210 }
211 else
212 Guild::SendSaveEmblemResult(this, ERR_GUILDEMBLEM_INVALIDVENDOR); // "That's not an emblem vendor!"
213}
214
216{
217 TC_LOG_DEBUG("guild", "MSG_GUILD_EVENT_LOG_QUERY [{}]", GetPlayerInfo());
218
219 if (Guild* guild = GetPlayer()->GetGuild())
220 guild->SendEventLog(this);
221}
222
224{
225 if (Guild* guild = GetPlayer()->GetGuild())
226 guild->SendMoneyInfo(this);
227}
228
230{
231 if (Guild* guild = GetPlayer()->GetGuild())
232 guild->SendPermissions(this);
233}
234
235// Called when clicking on Guild bank gameobject
237{
238 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_ACTIVATE [{}]: [{}] AllSlots: {}"
239 , GetPlayerInfo(), packet.Banker.ToString(), packet.FullUpdate);
240
242 if (!go)
243 return;
244
245 Guild* const guild = GetPlayer()->GetGuild();
246 if (!guild)
247 {
249 return;
250 }
251
252 guild->SendBankList(this, 0, packet.FullUpdate);
253}
254
255// Called when opening guild bank tab only (first one)
257{
258 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TAB [{}]: {}, TabId: {}, ShowTabs: {}"
259 , GetPlayerInfo(), packet.Banker.ToString(), packet.Tab, packet.FullUpdate);
260
261 if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
262 if (Guild* guild = GetPlayer()->GetGuild())
263 guild->SendBankList(this, packet.Tab, true /*packet.FullUpdate*/);
264 // HACK: client doesn't query entire tab content if it had received SMSG_GUILD_BANK_LIST in this session
265 // but we broadcast bank updates to entire guild when *ANYONE* changes anything, incorrectly initializing clients
266 // tab content with only data for that change
267}
268
270{
271 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_DEPOSIT_MONEY [{}]: [{}], money: " UI64FMTD,
272 GetPlayerInfo(), packet.Banker.ToString(), packet.Money);
273
274 if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
275 if (packet.Money && GetPlayer()->HasEnoughMoney(packet.Money))
276 if (Guild* guild = GetPlayer()->GetGuild())
277 guild->HandleMemberDepositMoney(this, packet.Money);
278}
279
281{
282 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_WITHDRAW_MONEY [{}]: [{}], money: " UI64FMTD,
283 GetPlayerInfo(), packet.Banker.ToString(), packet.Money);
284
285 if (packet.Money && GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
286 if (Guild* guild = GetPlayer()->GetGuild())
287 guild->HandleMemberWithdrawMoney(this, packet.Money);
288}
289
291{
292 if (!GetPlayer()->GetGameObjectIfCanInteractWith(depositGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
293 return;
294
295 Guild* guild = GetPlayer()->GetGuild();
296 if (!guild)
297 return;
298
299 if (!Player::IsInventoryPos(depositGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), depositGuildBankItem.ContainerItemSlot))
301 else
302 guild->SwapItemsWithInventory(GetPlayer(), false, depositGuildBankItem.BankTab, depositGuildBankItem.BankSlot,
303 depositGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), depositGuildBankItem.ContainerItemSlot, 0);
304}
305
307{
308 if (!GetPlayer()->GetGameObjectIfCanInteractWith(storeGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
309 return;
310
311 Guild* guild = GetPlayer()->GetGuild();
312 if (!guild)
313 return;
314
315 if (!Player::IsInventoryPos(storeGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), storeGuildBankItem.ContainerItemSlot))
317 else
318 guild->SwapItemsWithInventory(GetPlayer(), true, storeGuildBankItem.BankTab, storeGuildBankItem.BankSlot,
319 storeGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), storeGuildBankItem.ContainerItemSlot, 0);
320}
321
323{
324 if (!GetPlayer()->GetGameObjectIfCanInteractWith(swapItemWithGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
325 return;
326
327 Guild* guild = GetPlayer()->GetGuild();
328 if (!guild)
329 return;
330
331 if (!Player::IsInventoryPos(swapItemWithGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), swapItemWithGuildBankItem.ContainerItemSlot))
333 else
334 guild->SwapItemsWithInventory(GetPlayer(), false, swapItemWithGuildBankItem.BankTab, swapItemWithGuildBankItem.BankSlot,
335 swapItemWithGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), swapItemWithGuildBankItem.ContainerItemSlot, 0);
336}
337
339{
340 if (!GetPlayer()->GetGameObjectIfCanInteractWith(swapGuildBankItemWithGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
341 return;
342
343 Guild* guild = GetPlayer()->GetGuild();
344 if (!guild)
345 return;
346
347 guild->SwapItems(GetPlayer(), swapGuildBankItemWithGuildBankItem.BankTab[0], swapGuildBankItemWithGuildBankItem.BankSlot[0],
348 swapGuildBankItemWithGuildBankItem.BankTab[1], swapGuildBankItemWithGuildBankItem.BankSlot[1], 0);
349}
350
352{
353 if (!GetPlayer()->GetGameObjectIfCanInteractWith(moveGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
354 return;
355
356 Guild* guild = GetPlayer()->GetGuild();
357 if (!guild)
358 return;
359
360 guild->SwapItems(GetPlayer(), moveGuildBankItem.BankTab, moveGuildBankItem.BankSlot, moveGuildBankItem.BankTab1, moveGuildBankItem.BankSlot1, 0);
361}
362
364{
365 if (!GetPlayer()->GetGameObjectIfCanInteractWith(mergeItemWithGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
366 return;
367
368 Guild* guild = GetPlayer()->GetGuild();
369 if (!guild)
370 return;
371
372 if (!Player::IsInventoryPos(mergeItemWithGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), mergeItemWithGuildBankItem.ContainerItemSlot))
374 else
375 guild->SwapItemsWithInventory(GetPlayer(), false, mergeItemWithGuildBankItem.BankTab, mergeItemWithGuildBankItem.BankSlot,
376 mergeItemWithGuildBankItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), mergeItemWithGuildBankItem.ContainerItemSlot, mergeItemWithGuildBankItem.StackCount);
377}
378
380{
381 if (!GetPlayer()->GetGameObjectIfCanInteractWith(splitItemToGuildBank.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
382 return;
383
384 Guild* guild = GetPlayer()->GetGuild();
385 if (!guild)
386 return;
387
388 if (!Player::IsInventoryPos(splitItemToGuildBank.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), splitItemToGuildBank.ContainerItemSlot))
390 else
391 guild->SwapItemsWithInventory(GetPlayer(), false, splitItemToGuildBank.BankTab, splitItemToGuildBank.BankSlot,
392 splitItemToGuildBank.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), splitItemToGuildBank.ContainerItemSlot, splitItemToGuildBank.StackCount);
393}
394
396{
397 if (!GetPlayer()->GetGameObjectIfCanInteractWith(mergeGuildBankItemWithItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
398 return;
399
400 Guild* guild = GetPlayer()->GetGuild();
401 if (!guild)
402 return;
403
404 if (!Player::IsInventoryPos(mergeGuildBankItemWithItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), mergeGuildBankItemWithItem.ContainerItemSlot))
406 else
407 guild->SwapItemsWithInventory(GetPlayer(), true, mergeGuildBankItemWithItem.BankTab, mergeGuildBankItemWithItem.BankSlot,
408 mergeGuildBankItemWithItem.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), mergeGuildBankItemWithItem.ContainerItemSlot, mergeGuildBankItemWithItem.StackCount);
409}
410
412{
413 if (!GetPlayer()->GetGameObjectIfCanInteractWith(splitGuildBankItemToInventory.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
414 return;
415
416 Guild* guild = GetPlayer()->GetGuild();
417 if (!guild)
418 return;
419
420 if (!Player::IsInventoryPos(splitGuildBankItemToInventory.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), splitGuildBankItemToInventory.ContainerItemSlot))
422 else
423 guild->SwapItemsWithInventory(GetPlayer(), true, splitGuildBankItemToInventory.BankTab, splitGuildBankItemToInventory.BankSlot,
424 splitGuildBankItemToInventory.ContainerSlot.value_or(INVENTORY_SLOT_BAG_0), splitGuildBankItemToInventory.ContainerItemSlot, splitGuildBankItemToInventory.StackCount);
425}
426
428{
429 if (!GetPlayer()->GetGameObjectIfCanInteractWith(autoStoreGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
430 return;
431
432 Guild* guild = GetPlayer()->GetGuild();
433 if (!guild)
434 return;
435
436 guild->SwapItemsWithInventory(GetPlayer(), true, autoStoreGuildBankItem.BankTab, autoStoreGuildBankItem.BankSlot,
438}
439
441{
442 if (!GetPlayer()->GetGameObjectIfCanInteractWith(mergeGuildBankItemWithGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
443 return;
444
445 Guild* guild = GetPlayer()->GetGuild();
446 if (!guild)
447 return;
448
449 guild->SwapItems(GetPlayer(), mergeGuildBankItemWithGuildBankItem.BankTab, mergeGuildBankItemWithGuildBankItem.BankSlot,
450 mergeGuildBankItemWithGuildBankItem.BankTab1, mergeGuildBankItemWithGuildBankItem.BankSlot1, mergeGuildBankItemWithGuildBankItem.StackCount);
451}
452
454{
455 if (!GetPlayer()->GetGameObjectIfCanInteractWith(splitGuildBankItem.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
456 return;
457
458 Guild* guild = GetPlayer()->GetGuild();
459 if (!guild)
460 return;
461
462 guild->SwapItems(GetPlayer(), splitGuildBankItem.BankTab, splitGuildBankItem.BankSlot,
463 splitGuildBankItem.BankTab1, splitGuildBankItem.BankSlot1, splitGuildBankItem.StackCount);
464}
465
467{
468 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [{}]: [{}[, TabId: {}", GetPlayerInfo(), packet.Banker.ToString(), packet.BankTab);
469
470 if (!packet.Banker || GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
471 if (Guild* guild = GetPlayer()->GetGuild())
472 guild->HandleBuyBankTab(this, packet.BankTab);
473}
474
476{
477 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_UPDATE_TAB [{}]: [{}], TabId: {}, Name: {}, Icon: {}"
478 , GetPlayerInfo(), packet.Banker.ToString(), packet.BankTab, packet.Name, packet.Icon);
479
480 if (!packet.Name.empty() && !packet.Icon.empty())
481 if (GetPlayer()->GetGameObjectIfCanInteractWith(packet.Banker, GAMEOBJECT_TYPE_GUILD_BANK))
482 if (Guild* guild = GetPlayer()->GetGuild())
483 guild->HandleSetBankTabInfo(this, packet.BankTab, packet.Name, packet.Icon);
484}
485
487{
488 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_LOG_QUERY [{}]: TabId: {}", GetPlayerInfo(), packet.Tab);
489
490 if (Guild* guild = GetPlayer()->GetGuild())
491 guild->SendBankLog(this, packet.Tab);
492}
493
495{
496 TC_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TEXT [{}]: TabId: {}", GetPlayerInfo(), packet.Tab);
497
498 if (Guild* guild = GetPlayer()->GetGuild())
499 guild->SendBankTabText(this, packet.Tab);
500}
501
503{
504 TC_LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [{}]: TabId: {}, Text: {}", GetPlayerInfo(), packet.Tab, packet.TabText);
505
506 if (Guild* guild = GetPlayer()->GetGuild())
507 guild->SetBankTabText(packet.Tab, packet.TabText);
508}
509
511{
512 Guild* guild = GetPlayer()->GetGuild();
513 if (!guild)
514 return;
515
516 std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> rightsAndSlots;
517 for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
518 rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(packet.TabFlags[tabId]), uint32(packet.TabWithdrawItemLimit[tabId]));
519
520 TC_LOG_DEBUG("guild", "CMSG_GUILD_SET_RANK_PERMISSIONS [{}]: Rank: {} ({})", GetPlayerInfo(), packet.RankName, packet.RankOrder);
521
522 guild->HandleSetRankInfo(this, GuildRankId(packet.RankID), packet.RankName, packet.Flags, packet.WithdrawGoldLimit, rightsAndSlots);
523}
524
526{
527 if (Guild* guild = sGuildMgr->GetGuildByGuid(packet.GuildGUID))
528 guild->HandleGuildPartyRequest(this);
529}
530
532{
533 if (Guild* guild = _player->GetGuild())
534 guild->HandleGuildRequestChallengeUpdate(this);
535}
536
538{
539 if (packet.Allow)
541 else
543}
544
546{
547 if (sGuildMgr->GetGuildById(_player->GetGuildId()))
548 {
549 std::vector<GuildReward> const& rewards = sGuildMgr->GetGuildRewards();
550
552 rewardList.Version = GameTime::GetSystemTime();
553 rewardList.RewardItems.reserve(rewards.size());
554
555 for (uint32 i = 0; i < rewards.size(); i++)
556 {
558 rewardItem.ItemID = rewards[i].ItemID;
559 rewardItem.RaceMask = rewards[i].RaceMask;
560 rewardItem.MinGuildLevel = 0;
561 rewardItem.MinGuildRep = rewards[i].MinGuildRep;
562 rewardItem.AchievementsRequired = rewards[i].AchievementsRequired;
563 rewardItem.Cost = rewards[i].Cost;
564 rewardList.RewardItems.push_back(rewardItem);
565 }
566
567 SendPacket(rewardList.Write());
568 }
569}
570
572{
573 if (Guild* guild = GetPlayer()->GetGuild())
574 if (guild->GetGUID() == newsQuery.GuildGUID)
575 guild->SendNewsUpdate(this);
576}
577
579{
580 if (Guild* guild = GetPlayer()->GetGuild())
581 guild->HandleNewsSetSticky(this, packet.NewsID, packet.Sticky);
582}
583
585{
586 if (Guild* guild = GetPlayer()->GetGuild())
587 guild->HandleSetNewGuildMaster(this, "", true);
588}
589
591{
592 if (Guild* guild = GetPlayer()->GetGuild())
593 guild->HandleSetNewGuildMaster(this, packet.NewMasterName, false);
594}
595
597{
598 if (Guild* guild = GetPlayer()->GetGuild())
599 guild->HandleSetAchievementTracking(this, packet.AchievementIDs.data(), packet.AchievementIDs.data() + packet.AchievementIDs.size());
600}
601
603{
604 if (Guild* guild = GetPlayer()->GetGuild())
605 guild->HandleGetAchievementMembers(this, uint32(getAchievementMembers.AchievementID));
606}
#define UI64FMTD
Definition: Define.h:126
uint8_t uint8
Definition: Define.h:144
#define UI64LIT(N)
Definition: Define.h:127
uint32_t uint32
Definition: Define.h:142
#define sGuildMgr
Definition: GuildMgr.h:70
@ GUILD_BANK_MAX_TABS
Definition: Guild.h:54
@ GUILD_COMMAND_VIEW_TAB
Definition: Guild.h:144
@ GUILD_COMMAND_GET_ROSTER
Definition: Guild.h:134
GuildRankOrder
Definition: Guild.h:100
GuildRankId
Definition: Guild.h:96
@ EQUIP_ERR_INTERNAL_BAG_ERROR
Definition: ItemDefines.h:67
#define TC_LOG_DEBUG(filterType__,...)
Definition: Log.h:156
bool normalizePlayerName(std::string &name)
Definition: ObjectMgr.cpp:154
@ PLAYER_FLAGS_AUTO_DECLINE_GUILD
Definition: Player.h:455
#define INVENTORY_SLOT_BAG_0
Definition: Player.h:625
@ GAMEOBJECT_TYPE_GUILD_BANK
@ ERR_GUILDEMBLEM_INVALIDVENDOR
@ ERR_GUILDEMBLEM_NOGUILD
@ ERR_GUILDEMBLEM_INVALID_TABARD_COLORS
@ ERR_GUILD_PLAYER_NOT_IN_GUILD
@ SPELL_AURA_FEIGN_DEATH
@ UNIT_NPC_FLAG_TABARDDESIGNER
Definition: UnitDefines.h:316
@ UNIT_NPC_FLAG_2_NONE
Definition: UnitDefines.h:336
@ UNIT_STATE_DIED
Definition: Unit.h:255
@ NULL_SLOT
Definition: Unit.h:63
uint32 GetStyle() const
Definition: Guild.h:284
uint32 GetColor() const
Definition: Guild.h:285
bool ValidateEmblemColors() const
Definition: Guild.h:278
uint32 GetBackgroundColor() const
Definition: Guild.h:288
uint32 GetBorderStyle() const
Definition: Guild.h:286
void ReadPacket(WorldPackets::Guild::SaveGuildEmblem &packet)
Definition: Guild.cpp:738
uint32 GetBorderColor() const
Definition: Guild.h:287
Definition: Guild.h:329
void SwapItemsWithInventory(Player *player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount)
Definition: Guild.cpp:3061
void SwapItems(Player *player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount)
Definition: Guild.cpp:3047
static void SendCommandResult(WorldSession *session, GuildCommandType type, GuildCommandError errCode, std::string_view param="")
Definition: Guild.cpp:62
void HandleSetRankInfo(WorldSession *session, GuildRankId rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array< GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS > const &rightsAndSlots)
Definition: Guild.cpp:1617
static void SendSaveEmblemResult(WorldSession *session, GuildEmblemError errCode)
Definition: Guild.cpp:74
void SendBankList(WorldSession *session, uint8 tabId, bool fullUpdate) const
Definition: Guild.cpp:3632
std::string ToString() const
Definition: ObjectGuid.cpp:554
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
void SendEquipError(InventoryResult msg, Item const *item1=nullptr, Item const *item2=nullptr, uint32 itemId=0) const
Definition: Player.cpp:13254
void SetPlayerFlag(PlayerFlags flags)
Definition: Player.h:2738
void RemovePlayerFlag(PlayerFlags flags)
Definition: Player.h:2739
GameObject * GetGameObjectIfCanInteractWith(ObjectGuid const &guid) const
Definition: Player.cpp:2004
Guild * GetGuild()
Definition: Player.cpp:29432
static bool IsInventoryPos(uint16 pos)
Definition: Player.h:1363
ObjectGuid::LowType GetGuildId() const
Definition: Player.h:1993
void SetGuildIdInvited(ObjectGuid::LowType GuildId)
Definition: Player.h:1992
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3812
size_type size() const
String< 15, Strings::NoHyperlinks > Name
Definition: GuildPackets.h:464
String< 500, Strings::NoHyperlinks > TabText
String< 15, Strings::NoHyperlinks > Name
Definition: GuildPackets.h:738
std::vector< GuildRewardItem > RewardItems
Definition: GuildPackets.h:703
WorldPacket const * Write() override
String< 31, Strings::NoHyperlinks > Note
Definition: GuildPackets.h:563
bool IsPublic
0 == Officer, 1 == Public
Definition: GuildPackets.h:562
String< 15, Strings::NoHyperlinks > RankName
Definition: GuildPackets.h:454
uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]
Definition: GuildPackets.h:453
uint32 TabFlags[GUILD_BANK_MAX_TABS]
Definition: GuildPackets.h:452
String< 500, Strings::NoHyperlinks > InfoText
Definition: GuildPackets.h:551
String< 255, Strings::NoHyperlinks > MotdText
Definition: GuildPackets.h:156
WorldPacket const * Write() override
void HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery &packet)
void HandleGuildAddRank(WorldPackets::Guild::GuildAddRank &packet)
void HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites &packet)
void HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText &packet)
void HandleGuildGetAchievementMembers(WorldPackets::Achievement::GuildGetAchievementMembers &getAchievementMembers)
void HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery &packet)
void HandleMergeGuildBankItemWithGuildBankItem(WorldPackets::Guild::MergeGuildBankItemWithGuildBankItem &mergeGuildBankItemWithGuildBankItem)
void HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText &packet)
void HandleGuildSetAchievementTracking(WorldPackets::Guild::GuildSetAchievementTracking &packet)
void HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney &packet)
void HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster &packet)
void HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText &packet)
void HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank &packet)
void HandleGuildBankActivate(WorldPackets::Guild::GuildBankActivate &packet)
void HandleGuildInviteByName(WorldPackets::Guild::GuildInviteByName &packet)
void HandleSwapGuildBankItemWithGuildBankItem(WorldPackets::Guild::SwapGuildBankItemWithGuildBankItem &swapGuildBankItemWithGuildBankItem)
void HandleGuildPromoteMember(WorldPackets::Guild::GuildPromoteMember &promote)
void HandleSwapItemWithGuildBankItem(WorldPackets::Guild::SwapItemWithGuildBankItem &swapItemWithGuildBankItem)
void HandleGuildRequestPartyState(WorldPackets::Guild::RequestGuildPartyState &packet)
void HandleGuildAssignRank(WorldPackets::Guild::GuildAssignMemberRank &packet)
std::string GetPlayerInfo() const
void HandleStoreGuildBankItem(WorldPackets::Guild::StoreGuildBankItem &storeGuildBankItem)
void HandleGuildSetMemberNote(WorldPackets::Guild::GuildSetMemberNote &packet)
void HandleGuildQueryNews(WorldPackets::Guild::GuildQueryNews &newsQuery)
Player * GetPlayer() const
void HandleGuildDelete(WorldPackets::Guild::GuildDelete &packet)
void HandleSplitGuildBankItemToInventory(WorldPackets::Guild::SplitGuildBankItemToInventory &splitGuildBankItemToInventory)
void HandleGuildAcceptInvite(WorldPackets::Guild::AcceptGuildInvite &invite)
void HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab &packet)
void HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab &packet)
void HandleGuildGetRanks(WorldPackets::Guild::GuildGetRanks &packet)
void HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney &packet)
void HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest &packet)
void HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab &packet)
void HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList &packet)
void HandleGuildGetRoster(WorldPackets::Guild::GuildGetRoster &packet)
void HandleGuildDemoteMember(WorldPackets::Guild::GuildDemoteMember &demote)
void HandleSplitGuildBankItem(WorldPackets::Guild::SplitGuildBankItem &splitGuildBankItem)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo &query)
void HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery &packet)
void HandleGuildEventLogQuery(WorldPackets::Guild::GuildEventLogQuery &packet)
Player * _player
void HandleGuildNewsUpdateSticky(WorldPackets::Guild::GuildNewsUpdateSticky &packet)
void HandleGuildShiftRank(WorldPackets::Guild::GuildShiftRank &shiftRank)
void HandleGuildLeave(WorldPackets::Guild::GuildLeave &leave)
void HandleGuildReplaceGuildMaster(WorldPackets::Guild::GuildReplaceGuildMaster &replaceGuildMaster)
void HandleSplitItemToGuildBank(WorldPackets::Guild::SplitItemToGuildBank &splitItemToGuildBank)
void HandleAutoStoreGuildBankItem(WorldPackets::Guild::AutoStoreGuildBankItem &autoStoreGuildBankItem)
void HandleMoveGuildBankItem(WorldPackets::Guild::MoveGuildBankItem &moveGuildBankItem)
void HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions &packet)
void HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem &packet)
void HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery &packet)
void HandleGuildOfficerRemoveMember(WorldPackets::Guild::GuildOfficerRemoveMember &packet)
void HandleGuildDeclineInvitation(WorldPackets::Guild::GuildDeclineInvitation &decline)
void HandleMergeItemWithGuildBankItem(WorldPackets::Guild::MergeItemWithGuildBankItem &mergeItemWithGuildBankItem)
void HandleMergeGuildBankItemWithItem(WorldPackets::Guild::MergeGuildBankItemWithItem &mergeGuildBankItemWithItem)
void HandleAutoGuildBankItem(WorldPackets::Guild::AutoGuildBankItem &autoGuildBankItem)
SystemTimePoint GetSystemTime()
Current chrono system_clock time point.
Definition: GameTime.cpp:54
Trinity::RaceMask< uint64 > RaceMask
Definition: GuildPackets.h:690
std::vector< uint32 > AchievementsRequired
Definition: GuildPackets.h:689