68 resultPacket.
Result = errCode;
69 resultPacket.
Name = param;
72 TC_LOG_DEBUG(
"guild",
"SMSG_GUILD_COMMAND_RESULT [{}]: Type: {}, code: {}, param: {}"
86template <
typename Entry>
91template <
typename Entry>
template <
typename... Ts>
94 Entry const& newEntry = m_log.emplace_front(std::forward<Ts>(args)...);
96 m_nextGUID = newEntry.GetGUID();
99template <
typename Entry>
template <
typename... Ts>
107 Entry& entry = m_log.emplace_back(std::forward<Ts>(args)...);
109 entry.SaveToDB(trans);
113template <
typename Entry>
121 m_nextGUID = (m_nextGUID + 1) % m_maxRecords;
142 stmt->
setUInt8 (++index, m_newRank);
143 stmt->
setInt64 (++index, m_timestamp);
149 ObjectGuid playerGUID = ObjectGuid::Create<HighGuid::Player>(m_playerGuid1);
150 ObjectGuid otherGUID = ObjectGuid::Create<HighGuid::Player>(m_playerGuid2);
158 packet.
Entry.push_back(eventEntry);
169 stmt->
setUInt8 (++index, m_bankTabId);
176 stmt->
setUInt8 (++index, m_bankTabId);
180 stmt->
setUInt16(++index, m_itemStackCount);
181 stmt->
setUInt8 (++index, m_destTabId);
182 stmt->
setInt64 (++index, m_timestamp);
188 ObjectGuid logGuid = ObjectGuid::Create<HighGuid::Player>(m_playerGuid);
195 bool hasStack = (hasItem && m_itemStackCount > 1) || itemMoved;
214 packet.Entry.push_back(bankLogEntry);
223 stmt->
setUInt8 (++index, GetType());
224 stmt->
setUInt64(++index, GetPlayerGuid().GetCounter());
227 stmt->
setInt64 (++index, GetTimestamp());
248 itemInstance.
ItemID = GetValue();
249 newsEvent.
Item = itemInstance;
262 m_bankMoneyPerDay = fields[5].
GetUInt32();
281 for (
uint8 i = 0; i < tabs; ++i)
292 TC_LOG_ERROR(
"guild",
"Guild {} has broken Tab {} for rank {}. Created default tab.", m_guildId, i,
uint32(m_rankId));
323 if (m_rights == rights)
337 if (m_bankMoneyPerDay == money)
340 m_bankMoneyPerDay = money;
355 guildBR = rightsAndSlots;
387 TC_LOG_ERROR(
"guild",
"Invalid slot for item (GUID: {}, id: {}) in guild bank, skipped.", itemGuid, itemEntry);
394 TC_LOG_ERROR(
"guild",
"Unknown item (GUID: {}, id: {}) in guild bank, skipped.", itemGuid, itemEntry);
401 TC_LOG_ERROR(
"guild",
"Item (GUID {}, id: {}) not found in item_instance, deleting from guild bank!", itemGuid, itemEntry);
414 m_items[slotId] = pItem;
423 if (
Item* item = m_items[slotId])
426 if (removeItemsFromDB)
427 item->DeleteFromDB(trans);
436 if ((
m_name == name) && (m_icon == icon))
472 m_items[slotId] = item;
501 textQuery.
Tab = m_tabId;
502 textQuery.
Text = m_text;
506 TC_LOG_DEBUG(
"guild",
"SMSG_GUILD_BANK_QUERY_TEXT_RESULT [{}]: Tabid: {}, Text: {}"
512 TC_LOG_DEBUG(
"guild",
"SMSG_GUILD_BANK_QUERY_TEXT_RESULT [Broadcast]: Tabid: {}, Text: {}", m_tabId, m_text);
527 m_logoutTime(
GameTime::GetGameTime()),
531 m_bankWithdrawMoney(0),
532 m_achievementPoints(0),
535 m_totalReputation(0),
559 m_accountId = accountId;
560 m_totalReputation = reputation;
565 if (m_publicNote == publicNote)
568 m_publicNote = publicNote;
578 if (m_officerNote == officerNote)
581 m_officerNote = officerNote;
594 if (
Player* player = FindConnectedPlayer())
628 m_bankWithdraw[i] = fields[5 + i].GetUInt32();
630 m_bankWithdrawMoney = fields[13].
GetUInt64();
632 SetStats(fields[14].GetString(),
633 fields[15].GetUInt8(),
634 fields[16].GetUInt8(),
635 fields[17].GetUInt8(),
636 fields[18].GetUInt8(),
637 fields[19].GetUInt16(),
638 fields[20].GetUInt32(),
643 m_weekReputation = 0;
650 TC_LOG_DEBUG(
"guild",
"{} has broken zone-data", m_guid.ToString());
663 TC_LOG_ERROR(
"guild",
"{} has a broken data in field `characters`.`level`, deleting him from guild!", m_guid.ToString());
669 TC_LOG_ERROR(
"guild",
"{} has a broken data in field `characters`.`race`, deleting him from guild!", m_guid.ToString());
675 TC_LOG_ERROR(
"guild",
"{} has a broken data in field `characters`.`class`, deleting him from guild!", m_guid.ToString());
691 m_bankWithdraw[tabId] += amount;
697 uint32 withdraw = m_bankWithdraw[i++];
707 m_bankWithdrawMoney += amount;
718 m_bankWithdraw[tabId] = 0;
720 m_bankWithdrawMoney = 0;
725 m_weekReputation = 0;
744 m_borderStyle = packet.
BStyle;
745 m_borderColor = packet.
BColor;
746 m_backgroundColor = packet.
Bg;
760 m_borderStyle = fields[5].
GetUInt8();
761 m_borderColor = fields[6].
GetUInt8();
762 m_backgroundColor = fields[7].
GetUInt8();
764 return ValidateEmblemColors();
781m_container(container), m_slotId(slotId), m_pItem(nullptr), m_pClonedItem(nullptr)
792 if (splitedAmount > m_pItem->GetCount())
794 if (splitedAmount == m_pItem->GetCount())
804 SendEquipError(msg, pItem);
811 m_pClonedItem = m_pItem->CloneItem(count);
826 IsBank(), GetContainer(), GetSlotId());
831 for (
auto itr = m_vec.begin(); itr != m_vec.end(); ++itr)
832 ids.insert(
uint8(itr->pos));
837 m_pPlayer->SendEquipError(result, item);
843 m_pItem = m_pPlayer->GetItemByPos(m_container, m_slotId);
847 if (m_pItem->IsNotEmptyBag())
853 else if (!m_pItem->CanBeTraded())
859 return (m_pItem !=
nullptr);
866 m_pItem->SetCount(m_pItem->GetCount() - splitedAmount);
868 m_pPlayer->SaveInventoryAndGoldToDB(trans);
872 m_pPlayer->MoveItemFromInventory(m_container, m_slotId,
true);
873 m_pItem->DeleteFromInventoryDB(trans);
881 m_pPlayer->MoveItemToInventory(m_vec, pItem,
true);
882 m_pPlayer->SaveInventoryAndGoldToDB(trans);
896 return m_pPlayer->CanStoreItem(m_container, m_slotId, m_vec, pItem, swap);
902 m_pItem = m_pGuild->_GetItem(m_container, m_slotId);
903 return (m_pItem !=
nullptr);
923 if (
Member const* member = m_pGuild->GetMember(m_pPlayer->GetGUID()))
924 slots = m_pGuild->_GetMemberRemainingSlots(*member, m_container);
934 m_pItem->SetCount(m_pItem->GetCount() - splitedAmount);
936 m_pItem->SaveToDB(trans);
940 m_pGuild->_RemoveItem(trans, m_container, m_slotId);
945 m_pGuild->_UpdateMemberWithdrawSlots(trans, m_pPlayer->GetGUID(), m_container);
953 BankTab* pTab = m_pGuild->GetBankTab(m_container);
957 Item* pLastItem = pItem;
958 for (
auto itr = m_vec.begin(); itr != m_vec.end(); )
965 TC_LOG_DEBUG(
"guild",
"GUILD STORAGE: StoreItem tab = {}, slot = {}, item = {}, count = {}",
967 pLastItem = _StoreItem(trans, pTab, pItem, pos, itr != m_vec.end());
990 sLog->OutCommand(m_pPlayer->GetSession()->GetAccountId(),
991 "GM {} ({}) (Account: {}) deposit item: {} (Entry: {} Count: {}) to guild bank named: {} (Guild ID: {})",
992 m_pPlayer->GetName(), m_pPlayer->GetGUID().ToString(), m_pPlayer->GetSession()->GetAccountId(),
994 m_pGuild->GetName(), m_pGuild->GetId());
1004 pItemDest->SetCount(pItemDest->GetCount() + count);
1006 pItemDest->SaveToDB(trans);
1021 if (pItem && pTab->
SetItem(trans, slotId, pItem))
1039 requiredSpace -= pItemDest->
GetCount();
1042 requiredSpace = std::min(requiredSpace, count);
1048 m_vec.push_back(pos);
1049 count -= requiredSpace;
1059 if (slotId == skipSlotId)
1062 Item* pItemDest = m_pGuild->_GetItem(m_container, slotId);
1063 if (pItemDest == pItem)
1064 pItemDest =
nullptr;
1067 if ((pItemDest !=
nullptr) != merge)
1070 _ReserveSpace(slotId, pItem, pItemDest, count);
1076 TC_LOG_DEBUG(
"guild",
"GUILD STORAGE: CanStore() tab = {}, slot = {}, item = {}, count = {}",
1085 if (m_container >= m_pGuild->_GetPurchasedTabsSize())
1091 Item* pItemDest = m_pGuild->_GetItem(m_container, m_slotId);
1093 if ((pItemDest == pItem) || swap)
1094 pItemDest =
nullptr;
1096 if (!_ReserveSpace(m_slotId, pItem, pItemDest, count))
1107 CanStoreItemInTab(pItem, m_slotId,
true, count);
1113 CanStoreItemInTab(pItem, m_slotId,
false, count);
1145 if (!pLeaderSession)
1152 m_motd =
"No message set.";
1156 TC_LOG_DEBUG(
"guild",
"GUILD: creating guild [{}] for leader {} {}",
1163 trans->Append(stmt);
1179 trans->Append(stmt);
1205 guildEventDisbanded.
Write();
1208 club::v1::client::UnsubscribeNotification unsubscribeNotification;
1209 unsubscribeNotification.set_club_id(
GetId());
1219 club_membership::v1::client::ClubRemovedNotification clubRemovedNotification;
1221 clubRemovedNotification.set_club_id(
GetId());
1222 clubRemovedNotification.set_reason(club::v1::client::ClubRemovedReason::CLUB_REMOVED_REASON_DESTROYED_BY_MEMBER);
1236 trans->Append(stmt);
1240 trans->Append(stmt);
1244 trans->Append(stmt);
1251 trans->Append(stmt);
1255 trans->Append(stmt);
1259 trans->Append(stmt);
1263 trans->Append(stmt);
1286 member->SetZoneId(value);
1289 member->SetAchievementPoints(value);
1292 member->SetLevel(value);
1295 TC_LOG_ERROR(
"guild",
"Guild::UpdateMemberData: Called with incorrect DATAID {} (value {})", dataid, value);
1307 member->AddFlag(flag);
1308 else member->RemFlag(flag);
1343 for (
auto const& [guid, member] :
m_members)
1347 memberData.
Guid = member.GetGUID();
1352 memberData.
LastSave = member.GetInactiveDays();
1357 memberData.
Status = member.GetFlags();
1358 memberData.
Level = member.GetLevel();
1359 memberData.
ClassID = member.GetClass();
1360 memberData.
Gender = member.GetGender();
1361 memberData.
RaceID = member.GetRace();
1366 memberData.
Name = member.GetName();
1367 memberData.
Note = member.GetPublicNote();
1368 if (sendOfficerNote)
1383 response.
Info.emplace();
1415 rankData.
Flags = rankInfo.GetRights();
1417 rankData.
RankName = rankInfo.GetName();
1425 ranks.
Ranks.push_back(rankData);
1438 std::set<uint32> criteriaIds;
1440 for (
uint32 const* achievementIdItr = achievementIdsBegin; achievementIdItr != achievementIdsEnd; ++achievementIdItr)
1442 uint32 achievementId = *achievementIdItr;
1460 member->SetTrackedCriteriaIds(std::move(criteriaIds));
1543 if (!newGuildMaster)
1564 if (!newGuildMaster)
1583 TC_LOG_ERROR(
"guild",
"Guild::HandleSetBankTabInfo: Player {} trying to change bank tab info from unexisting tab {}.",
1605 member->SetPublicNote(note);
1607 member->SetOfficerNote(note);
1610 updateNote.
Member = guid;
1612 updateNote.
Note = note;
1624 rankInfo->SetName(name);
1625 rankInfo->SetRights(rights);
1628 for (
auto itr = rightsAndSlots.begin(); itr != rightsAndSlots.end(); ++itr)
1804 std::string_view name = member->GetName();
1843 std::string_view name = member->GetName();
1845 if (member->IsSamePlayer(player->
GetGUID()))
1872 newRankId = newRank->
GetId();
1888 member->ChangeRank(trans, newRankId);
1905 if (!oldRank || !newRank)
1957 return rank.GetOrder() == rankOrder;
1969 trans->Append(stmt);
1975 trans->Append(stmt);
1982 if (otherRank.GetOrder() < rankOrder)
1991 trans->Append(stmt);
2010 if (!rankInfo || !otherRankInfo)
2017 rankInfo->
SetOrder(otherRankOrder);
2018 otherRankInfo->
SetOrder(rankOrder);
2026 trans->Append(stmt);
2032 trans->Append(stmt);
2050 sScriptMgr->OnGuildMemberDepositMoney(
this, player, amount);
2075 "GM {} (Account: {}) deposit money (Amount: {}) to guild bank (Guild ID {})",
2101 sScriptMgr->OnGuildMemberWitdrawMoney(
this, player, amount, repair);
2131 member->SetStats(player);
2132 member->UpdateLogoutTime();
2133 member->ResetFlags();
2190 std::list<EventLogEntry>
const& eventLog =
m_eventLog.GetGuildLog();
2193 packet.
Entry.reserve(eventLog.size());
2196 entry.WritePacket(packet);
2205 std::list<NewsLogEntry>
const& newsLog =
m_newsLog.GetGuildLog();
2212 newsLogEntry.WritePacket(packet);
2226 std::list<BankEventLogEntry>
const& bankEventLog =
m_bankEventLog[tabId].GetGuildLog();
2234 packet.
Entry.reserve(bankEventLog.size());
2236 entry.WritePacket(packet);
2247 tab->SendText(
this, session);
2351 statusChange.
Guid = memberGuid;
2352 statusChange.
AFK = afk;
2353 statusChange.
DND = dnd;
2383 club::v1::client::MemberRoleChangedNotification memberRoleChangeNotification;
2384 memberRoleChangeNotification.set_club_id(
GetId());
2393 club::v1::client::RoleAssignment* newLeaderRoleAssignment = memberRoleChangeNotification.add_assignment();
2405 club::v1::client::RoleAssignment* oldLeaderRoleAssignment = memberRoleChangeNotification.add_assignment();
2410 eventPacket.
Write();
2423 eventPacket.
Removed = isRemoved;
2428 if (isRemoved && remover !=
nullptr)
2435 eventPacket.
Write();
2445 club::v1::client::UnsubscribeNotification unsubscribeNotification;
2446 unsubscribeNotification.set_club_id(
GetId());
2450 club_membership::v1::client::ClubRemovedNotification clubRemovedNotification;
2451 clubRemovedNotification.set_club_id(
GetId());
2452 clubRemovedNotification.set_reason(isRemoved
2453 ? club::v1::client::ClubRemovedReason::CLUB_REMOVED_REASON_MEMBER_KICKED
2454 : club::v1::client::ClubRemovedReason::CLUB_REMOVED_REASON_MEMBER_LEFT);
2459 club::v1::client::MemberRemovedNotification memberRemovedNotification;
2460 memberRemovedNotification.set_club_id(
GetId());
2462 club::v1::client::MemberRemovedAssignment* removedMemberAssignment = memberRemovedNotification.add_member();
2464 removedMemberAssignment->set_reason(isRemoved
2465 ? club::v1::client::ClubRemovedReason::CLUB_REMOVED_REASON_MEMBER_KICKED
2466 : club::v1::client::ClubRemovedReason::CLUB_REMOVED_REASON_MEMBER_LEFT);
2498 m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64());
2502 TC_LOG_ERROR(
"guild",
"Guild {} has invalid emblem colors (Background: {}, Border: {}, Emblem: {}), skipped.",
2512 uint8 purchasedTabs =
uint8(fields[12].GetUInt64());
2518 for (
uint8 i = 0; i < purchasedTabs; ++i)
2535 ObjectGuid playerGuid(ObjectGuid::Create<HighGuid::Player>(lowguid));
2544 Member& member = memberIt->second;
2571 fields[1].GetUInt32(),
2572 fields[6].GetInt64(),
2574 fields[3].GetUInt64(),
2575 fields[4].GetUInt64(),
2576 fields[5].GetUInt8());
2598 TC_LOG_ERROR(
"guild",
"GuildBankEventLog ERROR: MoneyEvent(LogGuid: {}, Guild: {}) does not belong to money tab ({}), ignoring...", guid,
m_id, dbTabId);
2602 else if (isMoneyTab)
2604 TC_LOG_ERROR(
"guild",
"GuildBankEventLog ERROR: non-money event (LogGuid: {}, Guild: {}) belongs to money tab, ignoring...", guid,
m_id);
2610 fields[8].GetInt64(),
2613 fields[4].GetUInt64(),
2614 fields[5].GetUInt64(),
2615 fields[6].GetUInt16(),
2616 fields[7].GetUInt8());
2629 fields[1].GetUInt32(),
2630 fields[6].GetInt64(),
2632 ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()),
2633 fields[4].GetUInt32(),
2634 fields[5].GetUInt32());
2641 TC_LOG_ERROR(
"guild",
"Invalid tab (tabId: {}) in guild bank, skipped.", tabId);
2651 TC_LOG_ERROR(
"guild",
"Invalid tab for item (GUID: {}, id: #{}) in guild bank, skipped.",
2652 fields[0].GetUInt32(), fields[1].GetUInt32());
2655 return m_bankTabs[tabId].LoadItemFromDB(fields);
2666 bool broken_ranks =
false;
2672 TC_LOG_ERROR(
"guild",
"Guild {} has invalid number of ranks, creating new...",
m_id);
2673 broken_ranks =
true;
2677 for (
uint8 rankId = 0; rankId < ranks; ++rankId)
2682 TC_LOG_ERROR(
"guild",
"Guild {} has broken rank id {}, creating default set of ranks...",
m_id, rankId);
2683 broken_ranks =
true;
2715 if (!
sConfigMgr->GetBoolDefault(
"Guild.AllowMultipleGuildMaster",
false))
2720 if (trans->GetSize() > 0)
2734 for (
auto const& [guid, member] :
m_members)
2735 if (
Player* player = member.FindConnectedPlayer())
2749 for (
auto const& [guid, member] :
m_members)
2750 if (
Player* player = member.FindPlayer())
2760 for (
auto const& [guid, member] :
m_members)
2761 if (member.IsRank(rankId))
2762 if (
Player* player = member.FindConnectedPlayer())
2768 for (
auto const& [guid, member] :
m_members)
2769 if (
Player* player = member.FindConnectedPlayer())
2775 std::vector<Player*> members;
2776 for (
auto const& [guid, member] :
m_members)
2777 if (member.IsTrackingCriteriaId(criteriaId))
2778 if (
Player* player = member.FindPlayer())
2779 members.push_back(player);
2788 for (
auto const& [guid, member] :
m_members)
2802 if (level < minLevel || level > maxLevel)
2809 packet.
Invites.emplace_back(guid, level);
2838 auto [memberIt, isNew] =
m_members.try_emplace(guid,
m_id, guid, *rankId);
2845 Member& member = memberIt->second;
2867 Field* fields = result->Fetch();
2871 fields[1].GetUInt8(),
2872 fields[2].GetUInt8(),
2873 fields[3].GetUInt8(),
2874 fields[4].GetUInt8(),
2875 fields[5].GetUInt16(),
2876 fields[6].GetUInt32(),
2896 joinNotificationPacket.
Guid = guid;
2897 joinNotificationPacket.
Name = name;
2899 joinNotificationPacket.
Write();
2906 club_membership::v1::client::ClubAddedNotification clubAddedNotification;
2909 club::v1::ClubDescription* guildClub = clubAddedNotification.mutable_membership()->mutable_club();
2910 guildClub->set_id(
GetId());
2912 guildClub->set_name(
GetName());
2913 guildClub->set_privacy_level(club::v1::PrivacyLevel::PRIVACY_LEVEL_OPEN);
2914 guildClub->set_visibility_level(club::v1::VISIBILITY_LEVEL_PRIVATE);
2918 club::v1::client::MemberDescription* guildLeaderDescription = guildClub->add_leader();
2922 guildClub->set_creation_time(
2923 std::chrono::duration_cast<std::chrono::microseconds>(SystemTimePoint::clock::from_time_t(
GetCreatedDate()).time_since_epoch()).count());
2924 guildClub->set_timezone(
"");
2925 guildClub->set_locale(
"");
2930 club::v1::client::MemberAddedNotification memberAddedNotification;
2931 memberAddedNotification.set_club_id(
GetId());
2933 club::v1::client::Member* addedMember = memberAddedNotification.add_member();
2939 addedMember->set_presence_level(club::v1::client::PresenceLevel::PRESENCE_LEVEL_RICH);
2940 addedMember->set_whisper_level(club::v1::client::WhisperLevel::WHISPER_LEVEL_OPEN);
2941 addedMember->set_note(
"");
2942 addedMember->set_active(member.
IsOnline());
2964 Member* oldLeader =
nullptr;
2965 Member* newLeader =
nullptr;
2966 for (
auto& [memberGuid, member] :
m_members)
2968 if (memberGuid == guid)
2969 oldLeader = &member;
2970 else if (!newLeader || newLeader->
GetRankId() > member.GetRankId())
2971 newLeader = &member;
2990 sScriptMgr->OnGuildRemoveMember(
this, guid, isDisbanding, isKicked);
3003 player->
RemoveSpell(entry->SpellID,
false,
false);
3027 member->ChangeRank(trans, newRank);
3056 if (tabId == destTabId && slotId == destSlotId)
3072 _MoveItems(&bankData, &charData, splitedAmount);
3074 _MoveItems(&charData, &bankData, splitedAmount);
3082 pTab->SetText(text);
3083 pTab->SendText(
this,
nullptr);
3086 eventPacket.
Tab = tabId;
3095 return rank.GetId() == rankId;
3098 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3105 return rank.GetId() == rankId;
3108 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3115 return rank.GetOrder() == rankOrder;
3118 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3125 return rank.GetOrder() == rankOrder;
3128 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3160 trans->Append(stmt);
3165 trans->Append(stmt);
3169 rank.CreateMissingTabsIfNeeded(tabId, trans,
false);
3178 trans->Append(stmt);
3182 trans->Append(stmt);
3196 uint8 newRankId = [&]()
3198 uint8 freeRankId = 0;
3209 bool const isInTransaction = bool(trans);
3210 if (!isInTransaction)
3216 if (!isInTransaction)
3227 std::unordered_set<uint32> accountsIdSet;
3228 for (
auto const& [guid, member] :
m_members)
3229 accountsIdSet.insert(member.GetAccountId());
3249 m_bankTabs[tabId].Delete(trans, removeItemsFromDB);
3269 trans->Append(stmt);
3275 bool isInTransaction = bool(trans);
3276 if (!isInTransaction)
3285 trans->Append(stmt);
3287 if (!isInTransaction)
3294 rankInfo->SetBankMoneyPerDay(moneyPerDay);
3303 rankInfo->SetBankTabSlotsAndRights(rightsAndSlots, saveToDB);
3309 return rankInfo->GetName();
3316 return rankInfo->GetRights();
3323 return rankInfo->GetBankMoneyPerDay();
3331 return rankInfo->GetBankTabSlotsPerDay(tabId);
3338 return rankInfo->GetBankTabRights(tabId);
3362 return std::numeric_limits<int64>::max();
3376 member->UpdateBankTabWithdrawValue(trans, tabId, 1);
3398 sScriptMgr->OnGuildEvent(
this,
uint8(eventType), playerGuid1, playerGuid2, newRank);
3411 uint8 dbTabId = tabId;
3418 pLog.
AddEvent(trans,
m_id, pLog.
GetNextGUID(), eventType, dbTabId, lowguid, itemOrMoney, itemStackCount, destTabId);
3420 sScriptMgr->OnGuildBankEvent(
this,
uint8(eventType), tabId, lowguid, itemOrMoney, itemStackCount, destTabId);
3426 return tab->GetItem(slotId);
3433 pTab->SetItem(trans, slotId,
nullptr);
3496 bool swap = (pDestItem !=
nullptr);
3498 Item* pSrcItem = pSrc->
GetItem(splitedAmount != 0);
3524 pSrc->
RemoveItem(trans, pDest, splitedAmount);
3564 else if (pDest->
IsBank())
3582 for (SlotIds::const_iterator itr = slots.begin(); itr != slots.end(); ++itr)
3584 Item const* tabItem = tab->GetItem(*itr);
3613 packet.
ItemInfo.push_back(itemInfo);
3616 for (
auto const& [guid, member] :
m_members)
3621 Player* player = member.FindPlayer();
3668 if (tab->GetItem(slotId))
3671 packet.
ItemInfo.reserve(itemCount);
3679 if (
Item* tabItem = tab->GetItem(slotId))
3686 itemInfo.
Charges =
int32(abs(tabItem->GetSpellCharges()));
3689 itemInfo.
Flags = tabItem->m_itemData->DynamicFlags;
3719 rankChange.
Officer = setterGuid;
3720 rankChange.
Other = targetGuid;
3725 club::v1::client::MemberRoleChangedNotification memberRoleChangeNotification;
3726 memberRoleChangeNotification.set_club_id(
GetId());
3728 club::v1::client::RoleAssignment* changedRoleAssignment = memberRoleChangeNotification.add_assignment();
3746 TC_LOG_DEBUG(
"network",
"SMSG_GUILD_RANKS_UPDATE [Broadcast] Target: {}, Issuer: {}, RankId: {}",
3754 member.ResetValues(weekly);
3755 if (
Player* player = member.FindPlayer())
3792 std::list<NewsLogEntry>& newsLog =
m_newsLog.GetGuildLog();
3793 auto itr = newsLog.begin();
3794 while (itr != newsLog.end() && itr->GetGUID() != newsId)
3797 if (itr == newsLog.end())
3799 TC_LOG_DEBUG(
"guild",
"HandleNewsSetSticky: [{}] requested unknown newsId {} - Sticky: {}",
3804 itr->SetSticky(sticky);
3806 TC_LOG_DEBUG(
"guild",
"HandleNewsSetSticky: [{}] changed newsId {} sticky to {}",
3811 itr->WritePacket(newsPacket);
@ CALENDAR_ERROR_INVITES_EXCEEDED
@ CHAR_DEL_GUILD_BANK_TABS
@ CHAR_UPD_GUILD_BANK_TAB_TEXT
@ CHAR_DEL_GUILD_BANK_RIGHTS
@ CHAR_UPD_GUILD_RANK_NAME
@ CHAR_INS_GUILD_EVENTLOG
@ CHAR_UPD_GUILD_EMBLEM_INFO
@ CHAR_DEL_GUILD_BANK_EVENTLOGS
@ CHAR_DEL_GUILD_BANK_RIGHTS_FOR_RANK
@ CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM
@ CHAR_UPD_GUILD_MEMBER_RANK
@ CHAR_UPD_GUILD_RANK_BANK_MONEY
@ CHAR_UPD_GUILD_RANK_RIGHTS
@ CHAR_UPD_GUILD_MEMBER_PNOTE
@ CHAR_INS_GUILD_BANK_TAB
@ CHAR_SEL_CHAR_DATA_FOR_GUILD
@ CHAR_UPD_GUILD_BANK_MONEY
@ CHAR_DEL_GUILD_BANK_TAB
@ CHAR_INS_GUILD_MEMBER_WITHDRAW_TABS
@ CHAR_UPD_GUILD_MEMBER_OFFNOTE
@ CHAR_DEL_GUILD_BANK_EVENTLOG
@ CHAR_DEL_GUILD_BANK_ITEMS
@ CHAR_DEL_GUILD_BANK_ITEM
@ CHAR_DEL_GUILD_EVENTLOG
@ CHAR_DEL_GUILD_EVENTLOGS
@ CHAR_INS_GUILD_BANK_EVENTLOG
@ CHAR_UPD_GUILD_RANK_ORDER
@ CHAR_INS_GUILD_BANK_ITEM
@ CHAR_INS_GUILD_MEMBER_WITHDRAW_MONEY
@ CHAR_UPD_GUILD_BANK_TAB_INFO
@ CHAR_INS_GUILD_BANK_RIGHT
DB2Storage< AchievementEntry > sAchievementStore("Achievement.db2", &AchievementLoadInfo::Instance)
DB2Storage< GuildColorEmblemEntry > sGuildColorEmblemStore("GuildColorEmblem.db2", &GuildColorEmblemLoadInfo::Instance)
DB2Storage< ChrClassesEntry > sChrClassesStore("ChrClasses.db2", &ChrClassesLoadInfo::Instance)
DB2Storage< BankTabEntry > sBankTabStore("BankTab.db2", &BankTabLoadInfo::Instance)
DB2Storage< GuildPerkSpellsEntry > sGuildPerkSpellsStore("GuildPerkSpells.db2", &GuildPerkSpellsLoadInfo::Instance)
DB2Storage< GuildColorBackgroundEntry > sGuildColorBackgroundStore("GuildColorBackground.db2", &GuildColorBackgroundLoadInfo::Instance)
DB2Storage< ChrRacesEntry > sChrRacesStore("ChrRaces.db2", &ChrRacesLoadInfo::Instance)
DB2Storage< GuildColorBorderEntry > sGuildColorBorderStore("GuildColorBorder.db2", &GuildColorBorderLoadInfo::Instance)
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define ASSERT_NOTNULL(pointer)
uint64 GetGuildBankTabPrice(uint8 tabId)
uint32 const EMBLEM_PRICE
size_t const MAX_GUILD_BANK_TAB_TEXT_LEN
@ GUILD_EVENT_LOG_GUID_UNDEFINED
@ GUILD_WITHDRAW_SLOT_UNLIMITED
@ GUILD_BANK_MONEY_LOGS_TAB
@ GUILD_MASTER_DETHRONE_INACTIVE_DAYS
@ GUILDMEMBER_STATUS_NONE
@ GUILDMEMBER_STATUS_ONLINE
@ GUILD_BANK_RIGHT_VIEW_TAB
@ GUILD_BANK_RIGHT_DEPOSIT_ITEM
constexpr uint64 GUILD_BANK_MONEY_LIMIT
#define GUILD_CHALLENGES_TYPES
@ GUILD_COMMAND_PROMOTE_PLAYER
@ GUILD_COMMAND_CHANGE_LEADER
@ GUILD_COMMAND_DEMOTE_PLAYER
@ GUILD_COMMAND_LEAVE_GUILD
@ GUILD_COMMAND_REMOVE_PLAYER
@ GUILD_COMMAND_EDIT_PUBLIC_NOTE
@ GUILD_COMMAND_MOVE_ITEM
@ GUILD_COMMAND_CHANGE_RANK
@ GUILD_COMMAND_INVITE_PLAYER
@ GUILD_COMMAND_EDIT_MOTD
const uint32 GuildChallengeMaxLevelGoldReward[GUILD_CHALLENGES_TYPES]
@ ERR_GUILD_TOO_MUCH_MONEY
@ ERR_GUILD_COMMAND_SUCCESS
@ ERR_GUILD_PLAYER_NOT_FOUND_S
@ ERR_GUILD_RANK_TOO_LOW_S
@ ERR_GUILD_RANK_TOO_HIGH_S
@ ERR_ALREADY_INVITED_TO_GUILD_S
const uint32 GuildChallengeGoldReward[GUILD_CHALLENGES_TYPES]
const uint32 GuildChallengesMaxCount[GUILD_CHALLENGES_TYPES]
std::set< uint8 > SlotIds
@ GUILD_NEWS_ITEM_CRAFTED
@ GUILD_NEWS_ITEM_PURCHASED
@ GUILD_BANK_LOG_MOVE_ITEM
@ GUILD_BANK_LOG_WITHDRAW_ITEM
@ GUILD_BANK_LOG_DEPOSIT_MONEY
@ GUILD_BANK_LOG_DEPOSIT_ITEM
@ GUILD_BANK_LOG_WITHDRAW_MONEY
@ GUILD_BANK_LOG_CASH_FLOW_DEPOSIT
@ GUILD_BANK_LOG_REPAIR_MONEY
@ GUILD_BANK_LOG_MOVE_ITEM2
@ GR_RIGHT_MODIFY_GUILD_INFO
@ GR_RIGHT_WITHDRAW_REPAIR
@ GR_RIGHT_EDIT_PUBLIC_NOTE
@ GUILD_MEMBER_DATA_LEVEL
@ GUILD_MEMBER_DATA_ACHIEVEMENT_POINTS
@ GUILD_MEMBER_DATA_ZONEID
@ ERR_GUILDEMBLEM_NOTGUILDMASTER
@ ERR_GUILDEMBLEM_NOTENOUGHMONEY
@ ERR_GUILDEMBLEM_SUCCESS
@ GUILD_EVENT_LOG_LEAVE_GUILD
@ GUILD_EVENT_LOG_PROMOTE_PLAYER
@ GUILD_EVENT_LOG_UNINVITE_PLAYER
@ GUILD_EVENT_LOG_INVITE_PLAYER
@ GUILD_EVENT_LOG_DEMOTE_PLAYER
@ GUILD_EVENT_LOG_JOIN_GUILD
@ EQUIP_ERR_DESTROY_NONEMPTY_BAG
@ EQUIP_ERR_WRONG_BAG_TYPE
@ EQUIP_ERR_DROP_BOUND_ITEM
@ EQUIP_ERR_ITEM_NOT_FOUND
Item * NewItemOrBag(ItemTemplate const *proto)
#define TC_LOG_DEBUG(filterType__, message__,...)
#define TC_LOG_ERROR(filterType__, message__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
constexpr uint64 MAX_MONEY_AMOUNT
void utf8truncate(std::string &utf8str, size_t len)
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
bool HasAchieved(uint32 achievementId) const
uint32 GetAchievementPoints() const
ObjectGuid const & GetGUID() const
static std::unique_ptr< club::v1::MemberId > CreateClubMemberId(ObjectGuid guid)
static std::unique_ptr< club::v1::UniqueClubType > CreateGuildClubType()
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject const *ref=nullptr, Player *referencePlayer=nullptr)
static void WalkCriteriaTree(CriteriaTree const *tree, Func const &func)
void SaveToDB(ObjectGuid::LowType guildId) const
bool ValidateEmblemColors() const
uint32 GetBackgroundColor() const
uint32 GetBorderStyle() const
bool LoadFromDB(Field *fields)
void ReadPacket(WorldPackets::Guild::SaveGuildEmblem &packet)
uint32 GetBorderColor() const
Class used to access individual fields of database query result.
uint64 GetUInt64() const noexcept
uint32 GetUInt32() const noexcept
uint8 GetUInt8() const noexcept
std::string GetString() const noexcept
void SendAchievementMembers(Player *receiver, uint32 achievementId) const
void SendAllData(Player const *receiver) const override
void SendAllTrackedCriterias(Player *receiver, std::set< uint32 > const &trackedCriterias) const
void SaveToDB(CharacterDatabaseTransaction trans)
void SetGuildMasterValues()
void SetTabId(uint8 _tabId)
void SaveToDB(CharacterDatabaseTransaction trans) const override
void WritePacket(WorldPackets::Guild::GuildBankLogQueryResults &packet) const
bool IsMoneyEvent() const
void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const override
bool _ReserveSpace(uint8 slotId, Item *pItem, Item *pItemDest, uint32 &count)
void LogAction(MoveItemData *pFrom) const override
void CanStoreItemInTab(Item *pItem, uint8 skipSlotId, bool merge, uint32 &count)
Item * StoreItem(CharacterDatabaseTransaction trans, Item *pItem) override
Item * _StoreItem(CharacterDatabaseTransaction trans, BankTab *pTab, Item *pItem, ItemPosCount &pos, bool clone) const
void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount) override
bool HasStoreRights(MoveItemData *pOther) const override
InventoryResult CanStore(Item *pItem, bool swap) override
bool HasWithdrawRights(MoveItemData *pOther) const override
void LoadFromDB(Field *fields)
void SetText(std::string_view text)
void Delete(CharacterDatabaseTransaction trans, bool removeItemsFromDB=false)
Item * GetItem(uint8 slotId) const
bool LoadItemFromDB(Field *fields)
BankTab(ObjectGuid::LowType guildId, uint8 tabId)
void SendText(Guild const *guild, WorldSession *session) const
void SetInfo(std::string_view name, std::string_view icon)
bool SetItem(CharacterDatabaseTransaction trans, uint8 slotId, Item *item)
void SaveToDB(CharacterDatabaseTransaction trans) const override
void WritePacket(WorldPackets::Guild::GuildEventLogQueryResults &packet) const
LogEntry(ObjectGuid::LowType guildId, uint32 guid)
void LoadEvent(Ts &&... args)
Entry & AddEvent(CharacterDatabaseTransaction trans, Ts &&... args)
GuildRankId GetRankId() const
std::string_view GetName() const
Player * FindConnectedPlayer() const
bool IsSamePlayer(ObjectGuid guid) const
void SetPublicNote(std::string_view publicNote)
float GetInactiveDays() const
void SetOfficerNote(std::string_view officerNote)
uint32 GetBankTabWithdrawValue(uint8 tabId) const
bool LoadFromDB(Field *fields)
bool IsRank(GuildRankId rankId) const
uint64 GetBankMoneyWithdrawValue() const
void ChangeRank(CharacterDatabaseTransaction trans, GuildRankId newRank)
Member(ObjectGuid::LowType guildId, ObjectGuid guid, GuildRankId rankId)
void UpdateBankMoneyWithdrawValue(CharacterDatabaseTransaction trans, uint64 amount)
void UpdateBankTabWithdrawValue(CharacterDatabaseTransaction trans, uint8 tabId, uint32 amount)
void SaveToDB(CharacterDatabaseTransaction trans) const
void ResetValues(bool weekly=false)
Player * FindPlayer() const
ObjectGuid const & GetGUID() const
void SetStats(Player *player)
MoveItemData(Guild *guild, Player *player, uint8 container, uint8 slotId)
virtual void LogAction(MoveItemData *pFrom) const
virtual Item * StoreItem(CharacterDatabaseTransaction trans, Item *pItem)=0
Item * GetItem(bool isCloned=false) const
virtual void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const =0
uint8 GetContainer() const
virtual bool CheckItem(uint32 &splitedAmount)
virtual bool HasWithdrawRights(MoveItemData *) const
virtual bool HasStoreRights(MoveItemData *) const
InventoryResult CanStore(Item *pItem, bool swap, bool sendError)
void CopySlots(SlotIds &ids) const
virtual bool IsBank() const =0
bool CloneItem(uint32 count)
virtual bool InitItem()=0
void SendEquipError(InventoryResult result, Item const *item)
virtual void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount=0)=0
void WritePacket(WorldPackets::Guild::GuildNews &newsPacket) const
void SaveToDB(CharacterDatabaseTransaction trans) const override
InventoryResult CanStore(Item *pItem, bool swap) override
Item * StoreItem(CharacterDatabaseTransaction trans, Item *pItem) override
void LogBankEvent(CharacterDatabaseTransaction trans, MoveItemData *pFrom, uint32 count) const override
void RemoveItem(CharacterDatabaseTransaction trans, MoveItemData *pOther, uint32 splitedAmount=0) override
void SetOrder(GuildRankOrder rankOrder)
void CreateMissingTabsIfNeeded(uint8 ranks, CharacterDatabaseTransaction trans, bool logOnCreate=false)
void SetBankMoneyPerDay(uint32 money)
void SetName(std::string_view name)
void SetRights(uint32 rights)
void SetBankTabSlotsAndRights(GuildBankRightsAndSlots rightsAndSlots, bool saveToDB)
void SaveToDB(CharacterDatabaseTransaction trans) const
GuildRankOrder GetOrder() const
GuildRankId GetId() const
void LoadFromDB(Field *fields)
void HandleRemoveRank(WorldSession *session, GuildRankOrder rankOrder)
RankInfo const * GetRankInfo(GuildRankId rankId) const
void HandleSetInfo(WorldSession *session, std::string_view info)
void SwapItemsWithInventory(Player *player, bool toChar, uint8 tabId, uint8 slotId, uint8 playerBag, uint8 playerSlotId, uint32 splitedAmount)
void SendEventNewLeader(Member *newLeader, Member *oldLeader, bool isSelfPromoted=false) const
std::string _GetRankName(GuildRankId rankId) const
GuildRankId _GetLowestRankId() const
void HandleSetMemberRank(WorldSession *session, ObjectGuid guid, ObjectGuid setterGuid, GuildRankOrder rank)
uint64 GetBankMoney() const
void BroadcastPacket(WorldPacket const *packet) const
void UpdateCriteria(CriteriaType type, uint64 miscValue1, uint64 miscValue2, uint64 miscValue3, WorldObject const *ref, Player *player)
int8 _GetRankBankTabRights(GuildRankId rankId, uint8 tabId) const
std::vector< Player * > GetMembersTrackingCriteria(uint32 criteriaId) const
void HandleSetMOTD(WorldSession *session, std::string_view motd)
void _SetRankBankTabRightsAndSlots(GuildRankId rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB=true)
void LoadBankRightFromDB(Field *fields)
static void _DeleteMemberFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType lowguid)
void _SetRankBankMoneyPerDay(GuildRankId rankId, uint32 moneyPerDay)
ObjectGuid GetLeaderGUID() const
int64 _GetMemberRemainingMoney(Member const &member) const
void HandleSetAchievementTracking(WorldSession *session, uint32 const *achievementIdsBegin, uint32 const *achievementIdsEnd)
void HandleDelete(WorldSession *session)
void SwapItems(Player *player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount)
void _DeleteBankItems(CharacterDatabaseTransaction trans, bool removeItemsFromDB=false)
void SendEventPlayerLeft(Member *leaver, Member *remover=nullptr, bool isRemoved=false) const
bool LoadMemberFromDB(Field *fields)
std::vector< BankTab > m_bankTabs
void OnPlayerStatusChange(Player *player, uint32 flag, bool state)
void HandleLeaveMember(WorldSession *session)
std::unique_ptr< GuildAchievementMgr > m_achievementMgr
void MassInviteToEvent(WorldSession *session, uint32 minLevel, uint32 maxLevel, GuildRankOrder minRank)
ObjectGuid::LowType GetId() const
void SendPermissions(WorldSession *session) const
void UpdateMemberData(Player *player, uint8 dataid, uint32 value)
void HandleQuery(WorldSession *session)
bool HasAchieved(uint32 achievementId) const
int32 _GetMemberRemainingSlots(Member const &member, uint8 tabId) const
void SendEventLog(WorldSession *session) const
bool AddMember(CharacterDatabaseTransaction trans, ObjectGuid guid, Optional< GuildRankId > rankId={})
uint8 _GetPurchasedTabsSize() const
bool LoadBankItemFromDB(Field *fields)
void HandleGuildPartyRequest(WorldSession *session) const
uint32 _GetRankBankMoneyPerDay(GuildRankId rankId) const
void BroadcastToGuild(WorldSession *session, bool officerOnly, std::string_view msg, uint32 language=LANG_UNIVERSAL) const
void HandleUpdateMemberRank(WorldSession *session, ObjectGuid guid, bool demote)
void LoadGuildNewsLogFromDB(Field *fields)
void HandleGuildRequestChallengeUpdate(WorldSession *session) const
std::array< LogHolder< BankEventLogEntry >, GUILD_BANK_MAX_TABS+1 > m_bankEventLog
bool LoadFromDB(Field *fields)
std::vector< RankInfo > m_ranks
static void SendCommandResult(WorldSession *session, GuildCommandType type, GuildCommandError errCode, std::string_view param="")
void HandleInviteMember(WorldSession *session, std::string_view name)
void SendLoginInfo(WorldSession *session)
void HandleSetMemberNote(WorldSession *session, std::string_view note, ObjectGuid guid, bool isPublic)
std::unordered_map< ObjectGuid, Member > m_members
std::string const & GetName() const
void SetBankTabText(uint8 tabId, std::string_view text)
bool HandleMemberWithdrawMoney(WorldSession *session, uint64 amount, bool repair=false)
void ResetTimes(bool weekly)
void HandleSetRankInfo(WorldSession *session, GuildRankId rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array< GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS > const &rightsAndSlots)
bool SetName(std::string_view name)
bool ChangeMemberRank(CharacterDatabaseTransaction trans, ObjectGuid guid, GuildRankId newRank)
void BroadcastWorker(Do &&_do, Player const *except=nullptr) const
int32 _GetRankBankTabSlotsPerDay(GuildRankId rankId, uint8 tabId) const
void _UpdateAccountsNumber()
LogHolder< EventLogEntry > m_eventLog
bool Create(Player *pLeader, std::string_view name)
time_t GetCreatedDate() const
bool DeleteMember(CharacterDatabaseTransaction trans, ObjectGuid guid, bool isDisbanding=false, bool isKicked=false)
void _MoveItems(MoveItemData *pSrc, MoveItemData *pDest, uint32 splitedAmount) const
LogHolder< NewsLogEntry > m_newsLog
bool LoadEventLogFromDB(Field *fields)
void BroadcastAddonToGuild(WorldSession *session, bool officerOnly, std::string_view msg, std::string_view prefix, bool isLogged) const
void HandleSetNewGuildMaster(WorldSession *session, std::string_view name, bool isSelfPromote)
void HandleAddNewRank(WorldSession *session, std::string_view name)
void HandleSetBankTabInfo(WorldSession *session, uint8 tabId, std::string_view name, std::string_view icon)
void HandleRemoveMember(WorldSession *session, ObjectGuid guid)
void HandleMemberLogout(WorldSession *session)
bool IsMember(ObjectGuid guid) const
void HandleMemberDepositMoney(WorldSession *session, uint64 amount, bool cashFlow=false)
static InventoryResult _DoItemsMove(MoveItemData *pSrc, MoveItemData *pDest, bool sendError, uint32 splitedAmount=0)
void SendEventMOTD(WorldSession *session, bool broadcast=false) const
void _LogBankEvent(CharacterDatabaseTransaction trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint64 itemOrMoney, uint16 itemStackCount=0, uint8 destTabId=0)
void SendEventAwayChanged(ObjectGuid const &memberGuid, bool afk, bool dnd)
void SendGuildRankInfo(WorldSession *session) const
void _CreateNewBankTab(CharacterDatabaseTransaction trans)
void _RemoveItem(CharacterDatabaseTransaction trans, uint8 tabId, uint8 slotId)
bool _IsLeader(Player *player) const
GuildAchievementMgr & GetAchievementMgr()
bool LoadBankEventLogFromDB(Field *fields)
void HandleGetAchievementMembers(WorldSession *session, uint32 achievementId) const
void BroadcastPacketToRank(WorldPacket const *packet, GuildRankId rankId) const
void SendGuildRanksUpdate(ObjectGuid setterGuid, ObjectGuid targetGuid, GuildRankId rank)
static void SendSaveEmblemResult(WorldSession *session, GuildEmblemError errCode)
void SendBankTabText(WorldSession *session, uint8 tabId) const
uint8 _GetRanksSize() const
void HandleSetEmblem(WorldSession *session, EmblemInfo const &emblemInfo)
BankTab * GetBankTab(uint8 tabId)
bool _ModifyBankMoney(CharacterDatabaseTransaction trans, uint64 amount, bool add)
bool HasAnyRankRight(GuildRankId rankId, GuildRankRights rights) const
std::string const & GetMOTD() const
void SendEventBankMoneyChanged() const
bool _CreateRank(CharacterDatabaseTransaction trans, std::string_view name, uint32 rights)
void HandleShiftRank(WorldSession *session, GuildRankOrder rankOrder, bool shiftUp)
void _SendBankContentUpdate(MoveItemData *pSrc, MoveItemData *pDest) const
void SendBankList(WorldSession *session, uint8 tabId, bool fullUpdate) const
void _SetLeader(CharacterDatabaseTransaction trans, Member &leader)
Member const * GetMember(ObjectGuid const &guid) const
uint64 GetMemberAvailableMoneyForRepairItems(ObjectGuid guid) const
void AddGuildNews(uint8 type, ObjectGuid guid, uint32 flags, uint32 value)
void _CreateDefaultGuildRanks(CharacterDatabaseTransaction trans, LocaleConstant loc)
void HandleNewsSetSticky(WorldSession *session, uint32 newsId, bool sticky)
void HandleAcceptMember(WorldSession *session)
bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, int32 rights) const
void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2=UI64LIT(0), uint8 newRank=0)
Item * _GetItem(uint8 tabId, uint8 slotId) const
void SendMoneyInfo(WorldSession *session) const
uint32 GetMembersCount() const
void SendBankLog(WorldSession *session, uint8 tabId) const
ObjectGuid GetGUID() const
void LoadBankTabFromDB(Field *fields)
void HandleRoster(WorldSession *session)
void HandleBuyBankTab(WorldSession *session, uint8 tabId)
uint32 _GetRankRights(GuildRankId rankId) const
void SendEventPresenceChanged(WorldSession *session, bool loggedOn, bool broadcast=false) const
bool _HasRankRight(Player const *player, uint32 right) const
void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId)
void LoadRankFromDB(Field *fields)
void SendNewsUpdate(WorldSession *session) const
virtual void SaveToDB(CharacterDatabaseTransaction trans)
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Item * CloneItem(uint32 count, Player const *player=nullptr) const
void SetCount(uint32 value)
ItemTemplate const * GetTemplate() const
UF::UpdateField< UF::ItemData, uint32(WowCS::EntityFragment::CGObject), TYPEID_ITEM > m_itemData
void SetContainedIn(ObjectGuid guid)
void FSetState(ItemUpdateState state)
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field *fields, uint32 entry)
void SetOwnerGUID(ObjectGuid guid)
uint32 GetMaxStackCount() const
static void DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid)
int32 GetSpellCharges(ItemEffectEntry const *effect=nullptr) const
virtual ObjectGuid::LowType GetOwnerGuildId(uint32=TEAM_OTHER) const
LowType GetCounter() const
static ObjectGuid const Empty
std::string ToString() const
static bool IsValidCharterName(std::string_view name)
void AddToWorld() override
void RemoveFromWorld() override
bool HasIgnore(ObjectGuid const &ignoreGuid, ObjectGuid const &ignoreAccountGuid)
UF::UpdateField< UF::PlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_PLAYER > m_playerData
bool ModifyMoney(int64 amount, bool sendError=true)
PlayerSocial * GetSocial() const
static uint32 GetZoneIdFromDB(ObjectGuid guid)
Gender GetNativeGender() const override
void SendDirectMessage(WorldPacket const *data) const
void SaveInventoryAndGoldToDB(CharacterDatabaseTransaction trans)
WorldSession * GetSession() const
void LearnSpell(uint32 spell_id, bool dependent, int32 fromSkill=0, bool suppressMessaging=false, Optional< PlayerSpellTrait > trait={})
void SetInGuild(ObjectGuid::LowType guildId)
ObjectGuid::LowType GetGuildId() const
void SetGuildRank(uint8 rankId)
ObjectGuid::LowType GetGuildIdInvited() const
uint32 GetAchievementPoints() const
void RemoveSpell(uint32 spell_id, bool disabled=false, bool learn_low_rank=true, bool suppressMessaging=false)
Group * GetGroup(Optional< uint8 > partyIndex)
void SetGuildLevel(uint32 level)
void SetGuildIdInvited(ObjectGuid::LowType GuildId)
static void RemovePetitionsAndSigns(ObjectGuid guid)
bool HasEnoughMoney(uint64 amount) const
void setInt8(uint8 index, int8 value)
void setUInt16(uint8 index, uint16 value)
void setString(uint8 index, std::string &&value)
void setUInt32(uint8 index, uint32 value)
void setInt64(uint8 index, int64 value)
void setUInt64(uint8 index, uint64 value)
void setInt32(uint8 index, int32 value)
void setUInt8(uint8 index, uint8 value)
std::string const & GetName() const
void Initialize(ChatMsg chatType, Language language, WorldObject const *sender, WorldObject const *receiver, std::string_view message, uint32 achievementId=0, std::string_view channelName="", LocaleConstant locale=DEFAULT_LOCALE, std::string_view addonPrefix="")
WorldPacket const * Write() override
std::vector< GuildBankLogEntry > Entry
WorldPacket const * Write() override
int32 WithdrawalsRemaining
WorldPacket const * Write() override
std::vector< GuildBankTabInfo > TabInfo
std::vector< GuildBankItemInfo > ItemInfo
int64 RemainingWithdrawMoney
WorldPacket const * Write() override
WorldPacket const * Write() override
int32 CurrentCount[GUILD_CHALLENGES_TYPES]
int32 MaxLevelGold[GUILD_CHALLENGES_TYPES]
int32 Gold[GUILD_CHALLENGES_TYPES]
WorldPacket const * Write() override
int32 MaxCount[GUILD_CHALLENGES_TYPES]
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< GuildEventEntry > Entry
WorldPacket const * Write() override
WorldPacket const * Write() override
uint32 OldLeaderVirtualRealmAddress
std::string OldLeaderName
uint32 NewLeaderVirtualRealmAddress
WorldPacket const * Write() override
std::string NewLeaderName
WorldPacket const * Write() override
uint32 VirtualRealmAddress
uint32 RemoverVirtualRealmAddress
uint32 LeaverVirtualRealmAddress
WorldPacket const * Write() override
WorldPacket const * Write() override
uint32 VirtualRealmAddress
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
uint32 InviterVirtualRealmAddress
uint32 GuildVirtualRealmAddress
uint32 OldGuildVirtualRealmAddress
WorldPacket const * Write() override
WorldPacket const * Write() override
bool IsPublic
0 == Officer, 1 == Public
WorldPacket const * Write() override
std::vector< GuildNewsEvent > NewsEvents
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
std::vector< GuildRankTabPermissions > Tab
WorldPacket const * Write() override
std::vector< GuildRankData > Ranks
WorldPacket const * Write() override
std::vector< GuildRosterMemberData > MemberData
WorldPacket const * Write() override
WorldPacket const * Write() override
Optional< GuildInfo > Info
WorldPacket const * Write() override
WorldPacket const * GetRawPacket() const
Player session in the World.
LocaleConstant GetSessionDbLocaleIndex() const
ObjectGuid GetAccountGUID() const
Minutes GetTimezoneOffset() const
std::string GetPlayerInfo() const
Player * GetPlayer() const
bool HasPermission(uint32 permissionId)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetAccountId() const
bool IsAddonRegistered(std::string_view prefix) const
void SetUtcTimeFromUnixTime(std::time_t unixTime)
uint32 GetVirtualRealmAddress()
@ CONFIG_GUILD_EVENT_LOG_COUNT
@ CONFIG_GUILD_BANK_EVENT_LOG_COUNT
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD
uint64 CreateClubMemberId(ObjectGuid guid)
TC_GAME_API Player * FindPlayerByName(std::string_view name)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
::Criteria const * Criteria
bool isContainedIn(std::vector< ItemPosCount > const &vec) const
char const * GetDefaultLocaleName() const
WorldPackets::Item::ItemInstance Item
std::vector< Item::ItemGemData > SocketEnchant
Optional< int8 > OtherTab
Optional< Item::ItemInstance > Item
uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]
uint32 TabFlags[GUILD_BANK_MAX_TABS]
std::string_view OfficerNote
int32 PersonalAchievementPoints
uint32 VirtualRealmAddress
void Initialize(::Item const *item)