Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
GuildHandler.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Common.h"
7#include "GossipDef.h"
8#include "Guild.h"
9#include "GuildMgr.h"
10#include "Log.h"
11#include "ObjectMgr.h"
12#include "Opcodes.h"
13#include "SocialMgr.h"
14#include "World.h"
15#include "WorldPacket.h"
16#include "WorldSession.h"
17
18#include <vector>
19
21{
22 ObjectGuid guildGuid;
23 ObjectGuid playerGuid;
24
25 playerGuid[7] = recvPacket.ReadBit();
26 playerGuid[3] = recvPacket.ReadBit();
27 playerGuid[4] = recvPacket.ReadBit();
28 guildGuid[3] = recvPacket.ReadBit();
29 guildGuid[4] = recvPacket.ReadBit();
30 playerGuid[2] = recvPacket.ReadBit();
31 playerGuid[6] = recvPacket.ReadBit();
32 guildGuid[2] = recvPacket.ReadBit();
33 guildGuid[5] = recvPacket.ReadBit();
34 playerGuid[1] = recvPacket.ReadBit();
35 playerGuid[5] = recvPacket.ReadBit();
36 guildGuid[7] = recvPacket.ReadBit();
37 playerGuid[0] = recvPacket.ReadBit();
38 guildGuid[1] = recvPacket.ReadBit();
39 guildGuid[6] = recvPacket.ReadBit();
40 guildGuid[0] = recvPacket.ReadBit();
41
42 recvPacket.ReadByteSeq(playerGuid[7]);
43 recvPacket.ReadByteSeq(guildGuid[2]);
44 recvPacket.ReadByteSeq(guildGuid[4]);
45 recvPacket.ReadByteSeq(guildGuid[7]);
46 recvPacket.ReadByteSeq(playerGuid[6]);
47 recvPacket.ReadByteSeq(playerGuid[0]);
48 recvPacket.ReadByteSeq(guildGuid[6]);
49 recvPacket.ReadByteSeq(guildGuid[0]);
50 recvPacket.ReadByteSeq(guildGuid[3]);
51 recvPacket.ReadByteSeq(playerGuid[2]);
52 recvPacket.ReadByteSeq(guildGuid[5]);
53 recvPacket.ReadByteSeq(playerGuid[3]);
54 recvPacket.ReadByteSeq(guildGuid[1]);
55 recvPacket.ReadByteSeq(playerGuid[4]);
56 recvPacket.ReadByteSeq(playerGuid[1]);
57 recvPacket.ReadByteSeq(playerGuid[5]);
58
59 SF_LOG_ERROR("guild", "CMSG_GUILD_QUERY [%s]: Guild: %u Target: %u",
60 GetPlayerInfo().c_str(), GUID_LOPART(guildGuid), GUID_LOPART(playerGuid));
61
62 if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
63 if (guild->IsMember(playerGuid))
64 guild->HandleQuery(this);
65}
66
68{
69 uint32 nameLength = recvPacket.ReadBits(9);
70 std::string invitedName = recvPacket.ReadString(nameLength);
71
72 SF_LOG_DEBUG("guild", "CMSG_GUILD_INVITE [%s]: Invited: %s", GetPlayerInfo().c_str(), invitedName.c_str());
73 if (normalizePlayerName(invitedName))
74 if (Guild* guild = GetPlayer()->GetGuild())
75 guild->HandleInviteMember(this, invitedName);
76}
77
79{
80 ObjectGuid playerGuid;
81
82 recvPacket.ReadGuidMask(playerGuid, 7, 3, 4, 2, 5, 6, 1, 0);
83 recvPacket.ReadGuidBytes(playerGuid, 0, 2, 5, 6, 7, 1, 4, 3);
84
85 SF_LOG_DEBUG("guild", "CMSG_GUILD_REMOVE [%s]: Target: %u", GetPlayerInfo().c_str(), GUID_LOPART(playerGuid));
86
87 if (Guild* guild = GetPlayer()->GetGuild())
88 guild->HandleRemoveMember(this, playerGuid);
89}
90
92{
93 SF_LOG_DEBUG("guild", "CMSG_GUILD_ACCEPT [%s]", GetPlayerInfo().c_str());
94
95 if (!GetPlayer()->GetGuildId())
96 if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildIdInvited()))
97 guild->HandleAcceptMember(this);
98}
99
101{
102 SF_LOG_DEBUG("guild", "CMSG_GUILD_DECLINE [%s]", GetPlayerInfo().c_str());
103
105 GetPlayer()->SetInGuild(0);
106
107 if (GetPlayer()->GetLastGuildInviterGUID())
108 {
109 if (Player* inviter = ObjectAccessor::FindPlayer(GetPlayer()->GetLastGuildInviterGUID()))
110 inviter->SendDeclineGuildInvitation(GetPlayer()->GetName());
111
113 }
114}
115
117{
118 SF_LOG_DEBUG("guild", "CMSG_GUILD_ROSTER [%s]", GetPlayerInfo().c_str());
119 recvPacket.rfinish();
120
121 if (Guild* guild = GetPlayer()->GetGuild())
122 guild->HandleRoster(this);
123 else
125}
126
128{
129 ObjectGuid targetGuid;
130
131 recvPacket.ReadGuidMask(targetGuid, 6, 0, 4, 3, 1, 7, 2, 5);
132 recvPacket.ReadGuidBytes(targetGuid, 1, 7, 2, 5, 3, 4, 0, 6);
133
134 SF_LOG_DEBUG("guild", "CMSG_GUILD_PROMOTE [%s]: Target: %u", GetPlayerInfo().c_str(), GUID_LOPART(targetGuid));
135
136 if (Guild* guild = GetPlayer()->GetGuild())
137 guild->HandleUpdateMemberRank(this, targetGuid, false);
138}
139
141{
142 ObjectGuid targetGuid;
143
144 recvPacket.ReadGuidMask(targetGuid, 3, 6, 0, 2, 7, 5, 4, 1);
145 recvPacket.ReadGuidBytes(targetGuid, 7, 4, 2, 5, 1, 3, 0, 6);
146
147 SF_LOG_DEBUG("guild", "CMSG_GUILD_DEMOTE [%s]: Target: %u", GetPlayerInfo().c_str(), GUID_LOPART(targetGuid));
148
149 if (Guild* guild = GetPlayer()->GetGuild())
150 guild->HandleUpdateMemberRank(this, targetGuid, true);
151}
152
154{
155 ObjectGuid targetGuid;
156
157 uint32 rankId;
158 recvPacket >> rankId;
159
160 recvPacket.ReadGuidMask(targetGuid, 2, 3, 1, 6, 0, 4, 7, 5);
161 recvPacket.ReadGuidBytes(targetGuid, 7, 3, 2, 5, 6, 0, 4, 1);
162
163 SF_LOG_DEBUG("guild", "CMSG_GUILD_ASSIGN_MEMBER_RANK [%s]: Target: %u Rank: %u, Issuer: %u",
164 GetPlayerInfo().c_str(), GUID_LOPART(targetGuid), rankId, GUID_LOPART(_player->GetGUID()));
165
166 if (Guild* guild = GetPlayer()->GetGuild())
167 guild->HandleSetMemberRank(this, targetGuid, _player->GetGUID(), rankId);
168}
169
171{
172 SF_LOG_DEBUG("guild", "CMSG_GUILD_LEAVE [%s]", GetPlayerInfo().c_str());
173
174 if (Guild* guild = GetPlayer()->GetGuild())
175 guild->HandleLeaveMember(this);
176}
177
179{
180 SF_LOG_DEBUG("guild", "CMSG_GUILD_DISBAND [%s]", GetPlayerInfo().c_str());
181
182 if (Guild* guild = GetPlayer()->GetGuild())
183 guild->HandleDisband(this);
184}
185
187{
188 uint32 motdLength = recvPacket.ReadBits(10);
189 std::string motd = recvPacket.ReadString(motdLength);
190 SF_LOG_DEBUG("guild", "CMSG_GUILD_MOTD [%s]: MOTD: %s", GetPlayerInfo().c_str(), motd.c_str());
191
192 if (Guild* guild = GetPlayer()->GetGuild())
193 guild->HandleSetMOTD(this, motd);
194}
195
197{
198 ObjectGuid playerGuid;
199
200 recvPacket.ReadGuidMask(playerGuid, 1);
201 uint32 notelength = recvPacket.ReadBits(8); // note size
202 recvPacket.ReadGuidMask(playerGuid, 4, 2);
203 bool isPublic = recvPacket.ReadBit(); // 0 == Officer, 1 == Public
204 recvPacket.ReadGuidMask(playerGuid, 3, 5, 0, 6, 7);
205
206 recvPacket.ReadGuidBytes(playerGuid, 5, 1, 6);
207 std::string note = recvPacket.ReadString(notelength); // note
208 recvPacket.ReadGuidBytes(playerGuid, 0, 7, 4, 3, 2);
209
210 SF_LOG_DEBUG("guild", "CMSG_GUILD_SET_NOTE [%s]: Target: %u, Note: %s, Public: %u",
211 GetPlayerInfo().c_str(), GUID_LOPART(playerGuid), note.c_str(), isPublic);
212
213 if (Guild* guild = GetPlayer()->GetGuild())
214 guild->HandleSetMemberNote(this, note, playerGuid, isPublic);
215}
216
218{
219 uint32 count = recvPacket.ReadBits(21);
220
221 if (count > 25)
222 {
223 SF_LOG_DEBUG("guild", "CMSG_GUILD_SET_ACHIEVEMENT_TRACKING: ignoring %u tracked achievements from %s",
224 count, GetPlayerInfo().c_str());
225 recvPacket.rfinish();
226 return;
227 }
228
229 std::vector<uint32> achievementIds;
230 achievementIds.reserve(count);
231
232 for (uint32 i = 0; i < count; ++i)
233 {
234 uint32 achievementId = 0;
235 recvPacket >> achievementId;
236 achievementIds.push_back(achievementId);
237 }
238
239 SF_LOG_DEBUG("guild", "CMSG_GUILD_SET_ACHIEVEMENT_TRACKING: %s is tracking %u guild achievements",
240 GetPlayerInfo().c_str(), count);
241}
242
244{
245 ObjectGuid guildGuid;
246
247 recvPacket.ReadGuidMask(guildGuid, 0, 2, 5, 4, 3, 7, 6, 1);
248 recvPacket.ReadGuidBytes(guildGuid, 6, 0, 1, 7, 3, 2, 5, 4);
249
250 SF_LOG_DEBUG("guild", "CMSG_GUILD_QUERY_RANKS [%s]: Guild: %u",
251 GetPlayerInfo().c_str(), GUID_LOPART(guildGuid));
252
253 if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
254 if (guild->IsMember(_player->GetGUID()))
255 guild->SendGuildRankInfo(this);
256}
257
259{
260 uint32 rankId;
261 recvPacket >> rankId;
262
263 uint32 length = recvPacket.ReadBits(7);
264 std::string rankName = recvPacket.ReadString(length);
265
266 SF_LOG_DEBUG("guild", "CMSG_GUILD_ADD_RANK [%s]: Rank: %s", GetPlayerInfo().c_str(), rankName.c_str());
267
268 if (Guild* guild = GetPlayer()->GetGuild())
269 guild->HandleAddNewRank(this, rankName);
270}
271
273{
274 uint32 rankId;
275 recvPacket >> rankId;
276
277 SF_LOG_DEBUG("guild", "CMSG_GUILD_DEL_RANK [%s]: Rank: %u", GetPlayerInfo().c_str(), rankId);
278
279 if (Guild* guild = GetPlayer()->GetGuild())
280 guild->HandleRemoveRank(this, rankId);
281}
282
284{
285 uint32 length = recvPacket.ReadBits(11);
286 std::string info = recvPacket.ReadString(length);
287
288 SF_LOG_DEBUG("guild", "CMSG_GUILD_INFO_TEXT [%s]: %s", GetPlayerInfo().c_str(), info.c_str());
289
290 if (Guild* guild = GetPlayer()->GetGuild())
291 guild->HandleSetInfo(this, info);
292}
293
295{
296 uint64 vendorGuid;
297 recvPacket >> vendorGuid;
298
299 EmblemInfo emblemInfo;
300 emblemInfo.ReadPacket(recvPacket);
301
302 SF_LOG_DEBUG("guild", "MSG_SAVE_GUILD_EMBLEM [%s]: Guid: [" UI64FMTD"] Style: %d, Color: %d, BorderStyle: %d, BorderColor: %d, BackgroundColor: %d",
303 GetPlayerInfo().c_str(), vendorGuid, emblemInfo.GetStyle(), emblemInfo.GetColor(), emblemInfo.GetBorderStyle(),
304 emblemInfo.GetBorderColor(), emblemInfo.GetBackgroundColor());
305
306 if (GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_TABARDDESIGNER))
307 {
308 // Remove fake death
309 if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
311
312 if (Guild* guild = GetPlayer()->GetGuild())
313 guild->HandleSetEmblem(this, emblemInfo);
314 else
315 Guild::SendSaveEmblemResult(this, ERR_GUILDEMBLEM_NOGUILD); // "You are not part of a guild!";
316 }
317 else
318 Guild::SendSaveEmblemResult(this, ERR_GUILDEMBLEM_INVALIDVENDOR); // "That's not an emblem vendor!"
319}
320
322{
323 SF_LOG_DEBUG("guild", "MSG_GUILD_EVENT_LOG_QUERY [%s]", GetPlayerInfo().c_str());
324
325 if (Guild* guild = GetPlayer()->GetGuild())
326 guild->SendEventLog(this);
327}
328
330{
331 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_MONEY_WITHDRAWN [%s]", GetPlayerInfo().c_str());
332
333 if (Guild* guild = GetPlayer()->GetGuild())
334 guild->SendMoneyInfo(this);
335}
336
338{
339 // Null Packet
340 SF_LOG_DEBUG("guild", "CMSG_GUILD_PERMISSIONS [%s]", GetPlayerInfo().c_str());
341
342 if (Guild* guild = GetPlayer()->GetGuild())
343 guild->SendPermissions(this);
344}
345
346// Called when clicking on Guild bank gameobject
348{
349 ObjectGuid guid;
350 bool sendAllSlots;
351
352 recvPacket.ReadGuidMask(guid, 3);
353 sendAllSlots = recvPacket.ReadBit();
354 recvPacket.ReadGuidMask(guid, 0, 7, 1, 5, 2, 6, 4);
355
356 recvPacket.ReadGuidBytes(guid, 7, 1, 0, 6, 4, 2, 5, 3);
357
358 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANKER_ACTIVATE [%s]: Go: [" UI64FMTD "] AllSlots: %u", GetPlayerInfo().c_str(), (uint64)guid, sendAllSlots);
359
361 if (!go)
362 return;
363
364 Guild* const guild = GetPlayer()->GetGuild();
365 if (!guild)
366 {
368 return;
369 }
370
371 guild->SendBankList(this, 0, true, true);
372}
373
374// Called when opening guild bank tab only (first one)
376{
377 ObjectGuid guid;
378 uint8 tabId;
379 bool sendAllSlots;
380
381 recvPacket >> tabId;
382
383 recvPacket.ReadGuidMask(guid, 7, 3);
384 sendAllSlots = recvPacket.ReadBit();
385 recvPacket.ReadGuidMask(guid, 0, 2, 4, 1, 6, 5);
386
387 recvPacket.ReadGuidBytes(guid, 3, 7, 6, 4, 2, 5, 0, 1);
388
389 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_QUERY_TAB [%s]: Go: [" UI64FMTD "], TabId: %u, AllSlots: %u", GetPlayerInfo().c_str(), (uint64)guid, tabId, sendAllSlots);
390
391 if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
392 if (Guild* guild = GetPlayer()->GetGuild())
393 guild->SendBankList(this, tabId, true, false);
394}
395
397{
398 ObjectGuid guid;
399 uint64 money;
400
401 recvPacket >> money;
402 recvPacket.ReadGuidMask(guid, 2, 7, 6, 4, 0, 1, 5, 3);
403 recvPacket.ReadGuidBytes(guid, 1, 4, 5, 0, 2, 7, 6, 3);
404
405 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_DEPOSIT_MONEY [%s]: Go: [" UI64FMTD "], money: " UI64FMTD,
406 GetPlayerInfo().c_str(), (uint64)guid, money);
407
408 if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
409 if (money && GetPlayer()->HasEnoughMoney(money))
410 if (Guild* guild = GetPlayer()->GetGuild())
411 guild->HandleMemberDepositMoney(this, money);
412}
413
415{
416 ObjectGuid guid;
417 uint64 money;
418 recvPacket >> money;
419
420 recvPacket.ReadGuidMask(guid, 1, 3, 7, 6, 5, 0, 4, 2);
421 recvPacket.ReadGuidBytes(guid, 0, 7, 4, 2, 1, 6, 3, 5);
422
423 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_WITHDRAW_MONEY [%s]: Go: [" UI64FMTD "], money: " UI64FMTD,
424 GetPlayerInfo().c_str(), (uint64)guid, money);
425
426 if (money && GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
427 if (Guild* guild = GetPlayer()->GetGuild())
428 guild->HandleMemberWithdrawMoney(this, money);
429}
430
432{
433 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_SWAP_ITEMS [%s]", GetPlayerInfo().c_str());
434
435 Guild* guild = GetPlayer()->GetGuild();
436 if (!guild)
437 {
438 recvPacket.rfinish(); // Prevent additional spam at rejected packet
439 return;
440 }
441
442 ObjectGuid banker;
443 uint32 stackCount, itemId, itemId2 = 0, bankItemCount = 0;
444 uint8 bankSlot, bankTab, toSlot, containerSlot = NULL_BAG, containerItemSlot = NULL_SLOT, bankSlot2 = 0, bankTab2 = 0;
445 bool hasContainerSlot, hasContainerItemSlot, hasItemId2, hasBankSlot2, hasBankTab2, hasBankItemCount, bankOnly, autoStore;
446
447 recvPacket >> stackCount;
448 recvPacket >> bankSlot;
449 recvPacket >> toSlot;
450 recvPacket >> itemId;
451 recvPacket >> bankTab;
452
453 banker[5] = recvPacket.ReadBit();
454 hasBankTab2 = !recvPacket.ReadBit();
455 banker[1] = recvPacket.ReadBit();
456 hasContainerSlot = !recvPacket.ReadBit();
457 autoStore = recvPacket.ReadBit();
458 banker[0] = recvPacket.ReadBit();
459 hasItemId2 = !recvPacket.ReadBit();
460 hasBankSlot2 = !recvPacket.ReadBit();
461 banker[2] = recvPacket.ReadBit();
462 bankOnly = recvPacket.ReadBit();
463 banker[4] = recvPacket.ReadBit();
464 banker[7] = recvPacket.ReadBit();
465 banker[3] = recvPacket.ReadBit();
466 hasContainerItemSlot = !recvPacket.ReadBit();
467 banker[6] = recvPacket.ReadBit();
468 hasBankItemCount = !recvPacket.ReadBit();
469
470 recvPacket.ReadByteSeq(banker[2]);
471 recvPacket.ReadByteSeq(banker[6]);
472 recvPacket.ReadByteSeq(banker[5]);
473 recvPacket.ReadByteSeq(banker[4]);
474 recvPacket.ReadByteSeq(banker[0]);
475 recvPacket.ReadByteSeq(banker[3]);
476 recvPacket.ReadByteSeq(banker[1]);
477 recvPacket.ReadByteSeq(banker[7]);
478
479 if (!GetPlayer()->GetGameObjectIfCanInteractWith(banker, GAMEOBJECT_TYPE_GUILD_BANK))
480 {
481 recvPacket.rfinish(); // Prevent additional spam at rejected packet
482 return;
483 }
484
485 if (hasItemId2)
486 recvPacket >> itemId2; // source item id
487
488 if (hasContainerSlot)
489 recvPacket >> containerSlot;
490
491 if (hasContainerItemSlot)
492 recvPacket >> containerItemSlot;
493
494 if (hasBankSlot2)
495 recvPacket >> bankSlot2; // source bank slot
496
497 if (hasBankItemCount)
498 recvPacket >> bankItemCount;
499
500 if (hasBankTab2)
501 recvPacket >> bankTab2; // source bank tab
502
503 if (!GetPlayer()->GetGameObjectIfCanInteractWith(banker, GAMEOBJECT_TYPE_GUILD_BANK))
504 {
505 recvPacket.rfinish(); // Prevent additional spam at rejected packet
506 return;
507 }
508
509 if (bankOnly)
510 guild->SwapItems(GetPlayer(), bankTab2, bankSlot2, bankTab, bankSlot, stackCount);
511 else
512 {
513 if (!Player::IsInventoryPos(containerSlot, containerItemSlot) && !(containerSlot == NULL_BAG && containerItemSlot == NULL_SLOT))
515 else
516 guild->SwapItemsWithInventory(GetPlayer(), toSlot != 0, bankTab, bankSlot, containerSlot, containerItemSlot, stackCount);
517 }
518}
519
521{
522 uint8 tabId;
523 ObjectGuid guid;
524
525 recvPacket >> tabId;
526 recvPacket.ReadGuidMask(guid, 0, 1, 3, 7, 2, 6, 5, 4);
527 recvPacket.ReadGuidBytes(guid, 1, 4, 6, 7, 3, 5, 2, 0);
528
529 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_BUY_TAB [%s]: Go: [" UI64FMTD "], TabId: %u", GetPlayerInfo().c_str(), (uint64)guid, tabId);
530
531 // Since Cata you can buy tabs from the guild constrol tab - no need to check for guid
532 if (Guild* guild = GetPlayer()->GetGuild())
533 guild->HandleBuyBankTab(this, tabId);
534}
535
537{
538 uint32 iconLen, nameLen;
539 std::string name, icon;
540 ObjectGuid guid;
541 uint8 tabId;
542
543 recvPacket >> tabId;
544 guid[5] = recvPacket.ReadBit();
545 iconLen = recvPacket.ReadBits(9);
546 guid[1] = recvPacket.ReadBit();
547 guid[4] = recvPacket.ReadBit();
548 guid[2] = recvPacket.ReadBit();
549 guid[7] = recvPacket.ReadBit();
550 guid[0] = recvPacket.ReadBit();
551 guid[6] = recvPacket.ReadBit();
552 guid[3] = recvPacket.ReadBit();
553 nameLen = recvPacket.ReadBits(7);
554
555 recvPacket.ReadByteSeq(guid[7]);
556 recvPacket.ReadByteSeq(guid[4]);
557 icon = recvPacket.ReadString(iconLen);
558 recvPacket.ReadByteSeq(guid[5]);
559 recvPacket.ReadByteSeq(guid[1]);
560 recvPacket.ReadByteSeq(guid[0]);
561 name = recvPacket.ReadString(nameLen);
562 recvPacket.ReadByteSeq(guid[2]);
563 recvPacket.ReadByteSeq(guid[3]);
564 recvPacket.ReadByteSeq(guid[6]);
565
566 SF_LOG_DEBUG("guild", "CMSG_GUILD_BANK_UPDATE_TAB [%s]: Go: [" UI64FMTD "], TabId: %u, Name: %s, Icon: %s",
567 GetPlayerInfo().c_str(), (uint64)guid, tabId, name.c_str(), icon.c_str());
568
569 if (!name.empty() && !icon.empty())
570 if (GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_GUILD_BANK))
571 if (Guild* guild = GetPlayer()->GetGuild())
572 guild->HandleSetBankTabInfo(this, tabId, name, icon);
573}
574
576{
577 uint32 tabId;
578 recvPacket >> tabId;
579
580 SF_LOG_DEBUG("guild", "MSG_GUILD_BANK_LOG_QUERY [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId);
581
582 if (Guild* guild = GetPlayer()->GetGuild())
583 guild->SendBankLog(this, tabId);
584}
585
587{
588 uint32 tabId;
589 recvPacket >> tabId;
590
591 SF_LOG_DEBUG("guild", "MSG_QUERY_GUILD_BANK_TEXT [%s]: TabId: %u", GetPlayerInfo().c_str(), tabId);
592
593 if (Guild* guild = GetPlayer()->GetGuild())
594 guild->SendBankTabText(this, tabId);
595}
596
598{
599 uint32 tabId;
600 recvPacket >> tabId;
601
602 uint32 textLen = recvPacket.ReadBits(14);
603 std::string text = recvPacket.ReadString(textLen);
604
605 SF_LOG_DEBUG("guild", "CMSG_SET_GUILD_BANK_TEXT [%s]: TabId: %u, Text: %s", GetPlayerInfo().c_str(), tabId, text.c_str());
606
607 if (Guild* guild = GetPlayer()->GetGuild())
608 guild->SetBankTabText(tabId, text);
609}
610
612{
613 SF_LOG_DEBUG("network", "WORLD: Received CMSG_QUERY_GUILD_XP");
614
615 ObjectGuid guildGuid;
616
617 recvPacket.ReadGuidMask(guildGuid, 5, 6, 0, 1, 3, 7, 4, 2);
618 recvPacket.ReadGuidBytes(guildGuid, 4, 6, 3, 0, 7, 5, 2, 1);
619
620 SF_LOG_DEBUG("guild", "CMSG_QUERY_GUILD_XP [%s]: Guild: %u", GetPlayerInfo().c_str(), GUID_LOPART(guildGuid));
621
622 if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
623 if (guild->IsMember(_player->GetGUID()))
624 guild->SendGuildXP(this);
625}
626
628{
629 Guild* guild = GetPlayer()->GetGuild();
630 if (!guild)
631 {
632 recvPacket.rfinish();
633 return;
634 }
635
636 uint32 oldRankId;
637 uint32 newRankId;
638 uint32 oldRights;
639 uint32 newRights;
640 uint32 moneyPerDay;
641
642 recvPacket >> oldRankId;
643
645 for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId)
646 {
647 uint32 bankRights;
648 uint32 slots;
649
650 recvPacket >> bankRights;
651 recvPacket >> slots;
652
653 rightsAndSlots[tabId] = GuildBankRightsAndSlots(tabId, uint8(bankRights), slots);
654 }
655
656 recvPacket >> moneyPerDay;
657 recvPacket >> oldRights;
658 recvPacket >> newRights;
659 recvPacket >> newRankId;
660
661 uint32 nameLength = recvPacket.ReadBits(7);
662 std::string rankName = recvPacket.ReadString(nameLength);
663
664 SF_LOG_DEBUG("guild", "CMSG_GUILD_SET_RANK_PERMISSIONS [%s]: Rank: %s (%u)", GetPlayerInfo().c_str(), rankName.c_str(), newRankId);
665
666 guild->HandleSetRankInfo(this, newRankId, rankName, newRights, moneyPerDay, rightsAndSlots);
667}
668
670{
671 SF_LOG_DEBUG("network", "WORLD: Received CMSG_GUILD_REQUEST_PARTY_STATE");
672
673 ObjectGuid guildGuid;
674
675 recvPacket.ReadGuidMask(guildGuid, 1, 5, 7, 2, 6, 3, 0, 4);
676 recvPacket.ReadGuidBytes(guildGuid, 2, 5, 4, 6, 1, 0, 7, 3);
677
678 if (Guild* guild = sGuildMgr->GetGuildByGuid(guildGuid))
679 guild->HandleGuildPartyRequest(this);
680}
681
683{
684 ObjectGuid guid;
685 recvPacket.ReadGuidMask(guid, 0, 3, 5, 1, 4, 6, 7, 2);
686 recvPacket.ReadGuidBytes(guid, 7, 4, 3, 5, 1, 2, 6, 0);
687
688 if (Guild* guild = sGuildMgr->GetGuildByGuid(guid))
689 {
690 if (guild->IsMember(_player->GetGUID()))
691 {
694 SendPacket(&data);
695 }
696 }
697}
698
704
706{
707 recvPacket.read_skip<uint32>(); // Unk
708
709 if (sGuildMgr->GetGuildById(_player->GetGuildId()))
710 {
711 std::vector<GuildReward> const& rewards = sGuildMgr->GetGuildRewards();
712
713 WorldPacket data(SMSG_GUILD_REWARDS_LIST, 3 + rewards.size() * (4 + 4 + 4 + 8 + 4 + 4));
714 data.WriteBits(rewards.size(), 19);
715
716 for (uint32 i = 0; i < rewards.size(); i++)
717 data.WriteBits(rewards[i].Achievements.size(), 22);
718
719 data.FlushBits();
720
721 for (uint32 i = 0; i < rewards.size(); i++)
722 {
723 for (uint32 j = 0; j < rewards[i].Achievements.size(); j++)
724 data << uint32(rewards[i].Achievements[j]);
725
726 data << int32(rewards[i].Racemask);
727 data << uint32(rewards[i].Entry);
728 data << uint32(0); // minGuildLevel
729 data << uint32(rewards[i].Standing);
730 data << uint64(rewards[i].Price);
731 }
732
733 data << uint32(time(NULL));
734 SendPacket(&data);
735 }
736}
737
739{
740 recvPacket.rfinish();
741
742 SF_LOG_DEBUG("guild", "CMSG_GUILD_QUERY_NEWS [%s]", GetPlayerInfo().c_str());
743 if (Guild* guild = GetPlayer()->GetGuild())
744 guild->SendNewsUpdate(this);
745}
746
748{
749 uint32 newsId;
750 bool sticky;
751 ObjectGuid guid;
752
753 recvPacket >> newsId;
754
755 recvPacket.ReadGuidMask(guid, 6, 0);
756 sticky = recvPacket.ReadBit();
757 recvPacket.ReadGuidMask(guid, 2, 7, 5, 4, 3, 1);
758
759 recvPacket.ReadGuidBytes(guid, 5, 4, 0, 1, 6, 2, 3, 7);
760
761 if (Guild* guild = GetPlayer()->GetGuild())
762 guild->HandleNewsSetSticky(this, newsId, sticky);
763}
764
766{
767 uint8 nameLength = recvPacket.ReadBits(9);
768 std::string playerName = recvPacket.ReadString(nameLength);
769
770 normalizePlayerName(playerName);
771
772 if (Guild* guild = GetPlayer()->GetGuild())
773 guild->HandleSetNewGuildMaster(this, playerName);
774}
775
777{
778 if (Guild* guild = GetPlayer()->GetGuild())
779 guild->HandleReplaceGuildMaster(this);
780}
781
783{
785 for (int i = 0; i < 6; i++)
787
788 for (int i = 0; i < 6; i++)
790
791 for (int i = 0; i < 6; i++)
793
794 for (int i = 0; i < 6; i++)
795 data << uint32(GuildChallengeXPReward[i]);
796
797 for (int i = 0; i < 6; i++)
798 data << uint32(0); // Progress - NYI
799 SendPacket(&data);
800}
801
803{
804 uint32 tabId, noteLength;
805 std::string note;
806
807 recvData >> tabId;
808
809 noteLength = recvData.ReadBits(14);
810 recvData.FlushBits();
811
812 note = recvData.ReadString(noteLength);
813
814 if (Guild* guild = GetPlayer()->GetGuild())
815 guild->HandleSetBankTabNote(this, tabId, note);
816}
std::int32_t int32
Definition Define.h:73
#define UI64FMTD
Definition Define.h:64
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
@ GUILD_BANK_MAX_TABS
Definition Guild.h:21
const uint32 GuildChallengeMaxLevelGoldReward[]
Definition Guild.h:263
@ GUILD_COMMAND_VIEW_TAB
Definition Guild.h:93
@ GUILD_COMMAND_ROSTER
Definition Guild.h:83
const uint32 GuildChallengeGoldReward[]
Definition Guild.h:262
@ ERR_GUILD_PLAYER_NOT_IN_GUILD
Definition Guild.h:110
const uint32 GuildChallengeWeeklyMaximum[]
Definition Guild.h:261
const uint32 GuildChallengeXPReward[]
Definition Guild.h:264
std::vector< GuildBankRightsAndSlots > GuildBankRightsAndSlotsVec
Definition Guild.h:319
@ ERR_GUILDEMBLEM_INVALIDVENDOR
Definition Guild.h:226
@ ERR_GUILDEMBLEM_NOGUILD
Definition Guild.h:223
#define sGuildMgr
Definition GuildMgr.h:53
@ EQUIP_ERR_INTERNAL_BAG_ERROR
Definition Item.h:68
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
uint32 GUID_LOPART(uint64 x)
bool normalizePlayerName(std::string &name)
@ PLAYER_FLAGS_AUTO_DECLINE_GUILD
Definition Player.h:564
@ GAMEOBJECT_TYPE_GUILD_BANK
@ SPELL_AURA_FEIGN_DEATH
@ UNIT_NPC_FLAG_TABARDDESIGNER
Definition Unit.h:706
@ NULL_BAG
Definition Unit.h:336
@ NULL_SLOT
Definition Unit.h:337
@ UNIT_STATE_DIED
Definition Unit.h:512
@ PLAYER_FIELD_PLAYER_FLAGS
void read_skip()
Definition ByteBuffer.h:502
uint32 ReadBits(size_t bits)
Definition ByteBuffer.h:198
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:256
void ReadByteSeq(uint8 &b)
Definition ByteBuffer.h:215
void rfinish()
Definition ByteBuffer.h:478
std::string ReadString(size_t length)
Definition ByteBuffer.h:565
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:240
void WriteBits(T value, size_t bits)
Definition ByteBuffer.h:192
void FlushBits()
Definition ByteBuffer.h:154
bool ReadBit()
Definition ByteBuffer.h:180
uint32 GetStyle() const
Definition Guild.h:277
uint32 GetColor() const
Definition Guild.h:278
uint32 GetBackgroundColor() const
Definition Guild.h:281
void ReadPacket(WorldPacket &recv)
Definition Guild.cpp:776
uint32 GetBorderStyle() const
Definition Guild.h:279
uint32 GetBorderColor() const
Definition Guild.h:280
Definition Guild.h:324
void SwapItemsWithInventory(Player *player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount)
Definition Guild.cpp:3005
static void SendCommandResult(WorldSession *session, GuildCommandType type, GuildCommandError errCode, std::string const &param="")
Definition Guild.cpp:87
void SwapItems(Player *player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount)
Definition Guild.cpp:2991
void HandleSetRankInfo(WorldSession *session, uint8 rankId, std::string const &name, uint32 rights, uint32 moneyPerDay, GuildBankRightsAndSlotsVec const &rightsAndSlots)
Definition Guild.cpp:1833
void SendBankList(WorldSession *session, uint8 tabId, bool withContent, bool withTabInfo) const
Definition Guild.cpp:3544
static void SendSaveEmblemResult(WorldSession *session, GuildEmblemError errCode)
Definition Guild.cpp:102
static Player * FindPlayer(uint64)
void ApplyModFlag(uint16 index, uint32 flag, bool apply)
Definition Object.cpp:1317
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=NULL, uint32 itemid=0)
void SetInGuild(uint32 guildId)
Definition Player.cpp:8009
void SetGuildIdInvited(uint32 GuildId)
Definition Player.h:2287
Guild * GetGuild()
Definition Player.cpp:22662
static bool IsInventoryPos(uint16 pos)
Definition Player.h:1531
GameObject * GetGameObjectIfCanInteractWith(uint64 guid, GameobjectTypes type) const
Definition Player.cpp:2887
void SetLastGuildInviterGUID(uint64 guid)
Definition Player.h:2299
void RemoveAurasByType(AuraType auraType, uint64 casterGUID=0, Aura *except=NULL, bool negative=true, bool positive=true)
void HandleGuildRequestMaxDailyXP(WorldPacket &recvPacket)
void HandleGuildBankTabNote(WorldPacket &recvData)
void HandleGuildSetNoteOpcode(WorldPacket &recvPacket)
void HandleSaveGuildEmblemOpcode(WorldPacket &recvPacket)
void HandleGuildRequestChallengeUpdate(WorldPacket &recvPacket)
void HandleGuildQueryRanksOpcode(WorldPacket &recvPacket)
void HandleGuildRewardsQueryOpcode(WorldPacket &recvPacket)
void HandleAutoDeclineGuildInvites(WorldPacket &recvPacket)
void HandleGuildRosterOpcode(WorldPacket &recvPacket)
void HandleGuildSetRankPermissionsOpcode(WorldPacket &recvPacket)
void HandleGuildPromoteOpcode(WorldPacket &recvPacket)
void HandleGuildMOTDOpcode(WorldPacket &recvPacket)
void HandleGuildReplaceGuildMaster(WorldPacket &recvPacket)
std::string GetPlayerInfo() const
void HandleGuildBankDepositMoney(WorldPacket &recvData)
void HandleGuildBankBuyTab(WorldPacket &recvData)
Player * GetPlayer() const
void HandleGuildEventLogQueryOpcode(WorldPacket &recvPacket)
void HandleGuildSetAchievementTracking(WorldPacket &recvPacket)
void HandleQueryGuildBankTabText(WorldPacket &recvData)
void HandleGuildSetGuildMaster(WorldPacket &recvPacket)
void HandleGuildBankLogQuery(WorldPacket &recvData)
void HandleGuildAcceptOpcode(WorldPacket &recvPacket)
void HandleGuildAssignRankOpcode(WorldPacket &recvPacket)
void HandleGuildInviteOpcode(WorldPacket &recvPacket)
void HandleGuildDisbandOpcode(WorldPacket &recvPacket)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleGuildBankWithdrawMoney(WorldPacket &recvData)
void HandleGuildAddRankOpcode(WorldPacket &recvPacket)
void HandleGuildQueryXPOpcode(WorldPacket &recvData)
Player * _player
void HandleGuildBankSwapItems(WorldPacket &recvData)
void HandleGuildBankMoneyWithdrawn(WorldPacket &recvData)
void HandleGuildQueryOpcode(WorldPacket &recvPacket)
void HandleGuildDeclineOpcode(WorldPacket &recvPacket)
void HandleGuildBankerActivate(WorldPacket &recvData)
void HandleGuildRequestPartyState(WorldPacket &recvPacket)
void HandleGuildLeaveOpcode(WorldPacket &recvPacket)
void HandleGuildChangeInfoTextOpcode(WorldPacket &recvPacket)
void HandleSetGuildBankTabText(WorldPacket &recvData)
void HandleGuildQueryNewsOpcode(WorldPacket &recvPacket)
void HandleGuildNewsUpdateStickyOpcode(WorldPacket &recvPacket)
void HandleGuildRemoveOpcode(WorldPacket &recvPacket)
void HandleGuildBankUpdateTab(WorldPacket &recvData)
void HandleGuildPermissions(WorldPacket &recvData)
void HandleGuildDemoteOpcode(WorldPacket &recvPacket)
void HandleGuildDelRankOpcode(WorldPacket &recvPacket)
void HandleGuildBankQueryTab(WorldPacket &recvData)
@ SMSG_GUILD_CHALLENGE_UPDATED
Definition Opcodes.h:686
@ SMSG_GUILD_REWARDS_LIST
Definition Opcodes.h:711
@ SMSG_GUILD_MAX_DAILY_XP
Definition Opcodes.h:700
#define sWorld
Definition World.h:910
@ CONFIG_GUILD_DAILY_XP_CAP
Definition World.h:348