59 return tabPrices[tabId];
66 resultPacket.
Result = errCode;
67 resultPacket.
Name = param;
70 TC_LOG_DEBUG(
"guild",
"SMSG_GUILD_COMMAND_RESULT [{}]: Type: {}, code: {}, param: {}"
84template <
typename Entry>
89template <
typename Entry>
template <
typename... Ts>
92 Entry const& newEntry = m_log.emplace_front(std::forward<Ts>(args)...);
94 m_nextGUID = newEntry.GetGUID();
97template <
typename Entry>
template <
typename... Ts>
105 Entry& entry = m_log.emplace_back(std::forward<Ts>(args)...);
107 entry.SaveToDB(trans);
111template <
typename Entry>
119 m_nextGUID = (m_nextGUID + 1) % m_maxRecords;
140 stmt->
setUInt8 (++index, m_newRank);
141 stmt->
setInt64 (++index, m_timestamp);
147 ObjectGuid playerGUID = ObjectGuid::Create<HighGuid::Player>(m_playerGuid1);
148 ObjectGuid otherGUID = ObjectGuid::Create<HighGuid::Player>(m_playerGuid2);
156 packet.
Entry.push_back(eventEntry);
167 stmt->
setUInt8 (++index, m_bankTabId);
174 stmt->
setUInt8 (++index, m_bankTabId);
178 stmt->
setUInt16(++index, m_itemStackCount);
179 stmt->
setUInt8 (++index, m_destTabId);
180 stmt->
setInt64 (++index, m_timestamp);
186 ObjectGuid logGuid = ObjectGuid::Create<HighGuid::Player>(m_playerGuid);
193 bool hasStack = (hasItem && m_itemStackCount > 1) || itemMoved;
212 packet.
Entry.push_back(bankLogEntry);
221 stmt->
setUInt8 (++index, GetType());
222 stmt->
setUInt64(++index, GetPlayerGuid().GetCounter());
225 stmt->
setInt64 (++index, GetTimestamp());
246 itemInstance.
ItemID = GetValue();
247 newsEvent.
Item = itemInstance;
260 m_bankMoneyPerDay = fields[5].
GetUInt32();
279 for (
uint8 i = 0; i < tabs; ++i)
290 TC_LOG_ERROR(
"guild",
"Guild {} has broken Tab {} for rank {}. Created default tab.", m_guildId, i,
uint32(m_rankId));
321 if (m_rights == rights)
335 if (m_bankMoneyPerDay == money)
338 m_bankMoneyPerDay = money;
353 guildBR = rightsAndSlots;
385 TC_LOG_ERROR(
"guild",
"Invalid slot for item (GUID: {}, id: {}) in guild bank, skipped.", itemGuid, itemEntry);
392 TC_LOG_ERROR(
"guild",
"Unknown item (GUID: {}, id: {}) in guild bank, skipped.", itemGuid, itemEntry);
399 TC_LOG_ERROR(
"guild",
"Item (GUID {}, id: {}) not found in item_instance, deleting from guild bank!", itemGuid, itemEntry);
412 m_items[slotId] = pItem;
421 if (
Item* item = m_items[slotId])
423 item->RemoveFromWorld();
424 if (removeItemsFromDB)
425 item->DeleteFromDB(trans);
434 if ((
m_name == name) && (m_icon == icon))
470 m_items[slotId] = item;
499 textQuery.
Tab = m_tabId;
500 textQuery.
Text = m_text;
504 TC_LOG_DEBUG(
"guild",
"SMSG_GUILD_BANK_QUERY_TEXT_RESULT [{}]: Tabid: {}, Text: {}"
510 TC_LOG_DEBUG(
"guild",
"SMSG_GUILD_BANK_QUERY_TEXT_RESULT [Broadcast]: Tabid: {}, Text: {}", m_tabId, m_text);
529 m_bankWithdrawMoney(0),
530 m_achievementPoints(0),
533 m_totalReputation(0),
557 m_accountId = accountId;
558 m_totalReputation = reputation;
563 if (m_publicNote == publicNote)
566 m_publicNote = publicNote;
576 if (m_officerNote == officerNote)
579 m_officerNote = officerNote;
626 m_bankWithdraw[i] = fields[5 + i].GetUInt32();
628 m_bankWithdrawMoney = fields[13].
GetUInt64();
630 SetStats(fields[14].GetString(),
631 fields[15].GetUInt8(),
632 fields[16].GetUInt8(),
633 fields[17].GetUInt8(),
634 fields[18].GetUInt8(),
635 fields[19].GetUInt16(),
636 fields[20].GetUInt32(),
641 m_weekReputation = 0;
648 TC_LOG_DEBUG(
"guild",
"{} has broken zone-data", m_guid.ToString());
661 TC_LOG_ERROR(
"guild",
"{} has a broken data in field `characters`.`level`, deleting him from guild!", m_guid.ToString());
667 TC_LOG_ERROR(
"guild",
"{} has a broken data in field `characters`.`race`, deleting him from guild!", m_guid.ToString());
673 TC_LOG_ERROR(
"guild",
"{} has a broken data in field `characters`.`class`, deleting him from guild!", m_guid.ToString());
689 m_bankWithdraw[tabId] += amount;
695 uint32 withdraw = m_bankWithdraw[i++];
705 m_bankWithdrawMoney += amount;
716 m_bankWithdraw[tabId] = 0;
718 m_bankWithdrawMoney = 0;
723 m_weekReputation = 0;
742 m_borderStyle = packet.
BStyle;
743 m_borderColor = packet.
BColor;
744 m_backgroundColor = packet.
Bg;
758 m_borderStyle = fields[5].
GetUInt8();
759 m_borderColor = fields[6].
GetUInt8();
760 m_backgroundColor = fields[7].
GetUInt8();
762 return ValidateEmblemColors();
779m_container(container), m_slotId(slotId), m_pItem(nullptr), m_pClonedItem(nullptr)
790 if (splitedAmount > m_pItem->GetCount())
792 if (splitedAmount == m_pItem->GetCount())
802 SendEquipError(msg, pItem);
809 m_pClonedItem = m_pItem->CloneItem(count);
824 IsBank(), GetContainer(), GetSlotId());
829 for (
auto itr = m_vec.begin(); itr != m_vec.end(); ++itr)
830 ids.insert(
uint8(itr->pos));
835 m_pPlayer->SendEquipError(result, item);
841 m_pItem = m_pPlayer->GetItemByPos(m_container, m_slotId);
845 if (m_pItem->IsNotEmptyBag())
851 else if (!m_pItem->CanBeTraded())
857 return (m_pItem !=
nullptr);
864 m_pItem->SetCount(m_pItem->GetCount() - splitedAmount);
866 m_pPlayer->SaveInventoryAndGoldToDB(trans);
870 m_pPlayer->MoveItemFromInventory(m_container, m_slotId,
true);
871 m_pItem->DeleteFromInventoryDB(trans);
879 m_pPlayer->MoveItemToInventory(m_vec, pItem,
true);
880 m_pPlayer->SaveInventoryAndGoldToDB(trans);
894 return m_pPlayer->CanStoreItem(m_container, m_slotId, m_vec, pItem, swap);
900 m_pItem = m_pGuild->_GetItem(m_container, m_slotId);
901 return (m_pItem !=
nullptr);
921 if (
Member const* member = m_pGuild->GetMember(m_pPlayer->GetGUID()))
922 slots = m_pGuild->_GetMemberRemainingSlots(*member, m_container);
932 m_pItem->SetCount(m_pItem->GetCount() - splitedAmount);
934 m_pItem->SaveToDB(trans);
938 m_pGuild->_RemoveItem(trans, m_container, m_slotId);
943 m_pGuild->_UpdateMemberWithdrawSlots(trans, m_pPlayer->GetGUID(), m_container);
951 BankTab* pTab = m_pGuild->GetBankTab(m_container);
955 Item* pLastItem = pItem;
956 for (
auto itr = m_vec.begin(); itr != m_vec.end(); )
963 TC_LOG_DEBUG(
"guild",
"GUILD STORAGE: StoreItem tab = {}, slot = {}, item = {}, count = {}",
965 pLastItem = _StoreItem(trans, pTab, pItem, pos, itr != m_vec.end());
988 sLog->OutCommand(m_pPlayer->GetSession()->GetAccountId(),
989 "GM {} ({}) (Account: {}) deposit item: {} (Entry: {} Count: {}) to guild bank named: {} (Guild ID: {})",
990 m_pPlayer->GetName(), m_pPlayer->GetGUID().ToString(), m_pPlayer->GetSession()->GetAccountId(),
992 m_pGuild->GetName(), m_pGuild->GetId());
1002 pItemDest->SetCount(pItemDest->GetCount() + count);
1004 pItemDest->SaveToDB(trans);
1019 if (pItem && pTab->
SetItem(trans, slotId, pItem))
1037 requiredSpace -= pItemDest->
GetCount();
1040 requiredSpace = std::min(requiredSpace, count);
1046 m_vec.push_back(pos);
1047 count -= requiredSpace;
1057 if (slotId == skipSlotId)
1060 Item* pItemDest = m_pGuild->_GetItem(m_container, slotId);
1061 if (pItemDest == pItem)
1062 pItemDest =
nullptr;
1065 if ((pItemDest !=
nullptr) != merge)
1068 _ReserveSpace(slotId, pItem, pItemDest, count);
1074 TC_LOG_DEBUG(
"guild",
"GUILD STORAGE: CanStore() tab = {}, slot = {}, item = {}, count = {}",
1083 if (m_container >= m_pGuild->_GetPurchasedTabsSize())
1089 Item* pItemDest = m_pGuild->_GetItem(m_container, m_slotId);
1091 if ((pItemDest == pItem) || swap)
1092 pItemDest =
nullptr;
1094 if (!_ReserveSpace(m_slotId, pItem, pItemDest, count))
1105 CanStoreItemInTab(pItem, m_slotId,
true, count);
1111 CanStoreItemInTab(pItem, m_slotId,
false, count);
1143 if (!pLeaderSession)
1150 m_motd =
"No message set.";
1154 TC_LOG_DEBUG(
"guild",
"GUILD: creating guild [{}] for leader {} {}",
1161 trans->Append(stmt);
1177 trans->Append(stmt);
1203 guildEventDisbanded.
Write();
1206 club::v1::UnsubscribeNotification unsubscribeNotification;
1207 unsubscribeNotification.set_club_id(
GetId());
1217 club::v1::membership::ClubRemovedNotification clubRemovedNotification;
1219 clubRemovedNotification.set_club_id(
GetId());
1234 trans->Append(stmt);
1238 trans->Append(stmt);
1242 trans->Append(stmt);
1249 trans->Append(stmt);
1253 trans->Append(stmt);
1257 trans->Append(stmt);
1261 trans->Append(stmt);
1284 member->SetZoneId(value);
1287 member->SetAchievementPoints(value);
1290 member->SetLevel(value);
1293 TC_LOG_ERROR(
"guild",
"Guild::UpdateMemberData: Called with incorrect DATAID {} (value {})", dataid, value);
1305 member->AddFlag(flag);
1306 else member->RemFlag(flag);
1341 for (
auto const& [guid, member] :
m_members)
1345 memberData.
Guid = member.GetGUID();
1350 memberData.
LastSave = member.GetInactiveDays();
1355 memberData.
Status = member.GetFlags();
1356 memberData.
Level = member.GetLevel();
1357 memberData.
ClassID = member.GetClass();
1358 memberData.
Gender = member.GetGender();
1359 memberData.
RaceID = member.GetRace();
1365 memberData.
Name = member.GetName();
1366 memberData.
Note = member.GetPublicNote();
1367 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)
1800 std::string name = member->GetName();
1839 std::string name = member->GetName();
1841 if (member->IsSamePlayer(player->
GetGUID()))
1868 newRankId = newRank->
GetId();
1884 member->ChangeRank(trans, newRankId);
1901 if (!oldRank || !newRank)
1953 return rank.GetOrder() == rankOrder;
1965 trans->Append(stmt);
1971 trans->Append(stmt);
1978 if (otherRank.GetOrder() < rankOrder)
1987 trans->Append(stmt);
2006 if (!rankInfo || !otherRankInfo)
2013 rankInfo->
SetOrder(otherRankOrder);
2014 otherRankInfo->
SetOrder(rankOrder);
2022 trans->Append(stmt);
2028 trans->Append(stmt);
2046 sScriptMgr->OnGuildMemberDepositMoney(
this, player, amount);
2071 "GM {} (Account: {}) deposit money (Amount: {}) to guild bank (Guild ID {})",
2097 sScriptMgr->OnGuildMemberWitdrawMoney(
this, player, amount, repair);
2127 member->SetStats(player);
2128 member->UpdateLogoutTime();
2129 member->ResetFlags();
2186 std::list<EventLogEntry>
const& eventLog =
m_eventLog.GetGuildLog();
2189 packet.
Entry.reserve(eventLog.size());
2192 entry.WritePacket(packet);
2201 std::list<NewsLogEntry>
const& newsLog =
m_newsLog.GetGuildLog();
2208 newsLogEntry.WritePacket(packet);
2222 std::list<BankEventLogEntry>
const& bankEventLog =
m_bankEventLog[tabId].GetGuildLog();
2230 packet.
Entry.reserve(bankEventLog.size());
2232 entry.WritePacket(packet);
2243 tab->SendText(
this, session);
2347 statusChange.
Guid = memberGuid;
2348 statusChange.
AFK = afk;
2349 statusChange.
DND = dnd;
2379 club::v1::MemberRoleChangedNotification memberRoleChangeNotification;
2380 memberRoleChangeNotification.set_club_id(
GetId());
2389 club::v1::RoleAssignment* newLeaderRoleAssignment = memberRoleChangeNotification.add_assignment();
2401 club::v1::RoleAssignment* oldLeaderRoleAssignment = memberRoleChangeNotification.add_assignment();
2406 eventPacket.
Write();
2419 eventPacket.
Removed = isRemoved;
2424 if (isRemoved && remover !=
nullptr)
2431 eventPacket.
Write();
2441 club::v1::UnsubscribeNotification unsubscribeNotification;
2442 unsubscribeNotification.set_club_id(
GetId());
2446 club::v1::membership::ClubRemovedNotification clubRemovedNotification;
2447 clubRemovedNotification.set_club_id(
GetId());
2448 clubRemovedNotification.set_reason(isRemoved
2455 club::v1::MemberRemovedNotification memberRemovedNotification;
2456 memberRemovedNotification.set_club_id(
GetId());
2458 club::v1::MemberRemovedAssignment* removedMemberAssignment = memberRemovedNotification.add_member();
2460 removedMemberAssignment->set_reason(isRemoved
2482 eventPacket.
Mobile =
false;
2495 m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64());
2499 TC_LOG_ERROR(
"guild",
"Guild {} has invalid emblem colors (Background: {}, Border: {}, Emblem: {}), skipped.",
2509 uint8 purchasedTabs =
uint8(fields[12].GetUInt64());
2515 for (
uint8 i = 0; i < purchasedTabs; ++i)
2532 ObjectGuid playerGuid(ObjectGuid::Create<HighGuid::Player>(lowguid));
2541 Member& member = memberIt->second;
2568 fields[1].GetUInt32(),
2569 fields[6].GetInt64(),
2571 fields[3].GetUInt64(),
2572 fields[4].GetUInt64(),
2573 fields[5].GetUInt8());
2595 TC_LOG_ERROR(
"guild",
"GuildBankEventLog ERROR: MoneyEvent(LogGuid: {}, Guild: {}) does not belong to money tab ({}), ignoring...", guid,
m_id, dbTabId);
2599 else if (isMoneyTab)
2601 TC_LOG_ERROR(
"guild",
"GuildBankEventLog ERROR: non-money event (LogGuid: {}, Guild: {}) belongs to money tab, ignoring...", guid,
m_id);
2607 fields[8].GetInt64(),
2610 fields[4].GetUInt64(),
2611 fields[5].GetUInt64(),
2612 fields[6].GetUInt16(),
2613 fields[7].GetUInt8());
2626 fields[1].GetUInt32(),
2627 fields[6].GetInt64(),
2629 ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()),
2630 fields[4].GetUInt32(),
2631 fields[5].GetUInt32());
2638 TC_LOG_ERROR(
"guild",
"Invalid tab (tabId: {}) in guild bank, skipped.", tabId);
2648 TC_LOG_ERROR(
"guild",
"Invalid tab for item (GUID: {}, id: #{}) in guild bank, skipped.",
2649 fields[0].GetUInt32(), fields[1].GetUInt32());
2652 return m_bankTabs[tabId].LoadItemFromDB(fields);
2663 bool broken_ranks =
false;
2669 TC_LOG_ERROR(
"guild",
"Guild {} has invalid number of ranks, creating new...",
m_id);
2670 broken_ranks =
true;
2674 for (
uint8 rankId = 0; rankId < ranks; ++rankId)
2679 TC_LOG_ERROR(
"guild",
"Guild {} has broken rank id {}, creating default set of ranks...",
m_id, rankId);
2680 broken_ranks =
true;
2712 if (!
sConfigMgr->GetBoolDefault(
"Guild.AllowMultipleGuildMaster",
false))
2717 if (trans->GetSize() > 0)
2731 for (
auto const& [guid, member] :
m_members)
2732 if (
Player* player = member.FindConnectedPlayer())
2746 for (
auto const& [guid, member] :
m_members)
2747 if (
Player* player = member.FindPlayer())
2757 for (
auto const& [guid, member] :
m_members)
2758 if (member.IsRank(rankId))
2759 if (
Player* player = member.FindConnectedPlayer())
2765 for (
auto const& [guid, member] :
m_members)
2766 if (
Player* player = member.FindConnectedPlayer())
2772 std::vector<Player*> members;
2773 for (
auto const& [guid, member] :
m_members)
2774 if (member.IsTrackingCriteriaId(criteriaId))
2775 if (
Player* player = member.FindPlayer())
2776 members.push_back(player);
2785 for (
auto const& [guid, member] :
m_members)
2799 if (level < minLevel || level > maxLevel)
2806 packet.
Invites.emplace_back(guid, level);
2835 auto [memberIt, isNew] =
m_members.try_emplace(guid,
m_id, guid, *rankId);
2842 Member& member = memberIt->second;
2864 Field* fields = result->Fetch();
2868 fields[1].GetUInt8(),
2869 fields[2].GetUInt8(),
2870 fields[3].GetUInt8(),
2871 fields[4].GetUInt8(),
2872 fields[5].GetUInt16(),
2873 fields[6].GetUInt32(),
2893 joinNotificationPacket.
Guid = guid;
2894 joinNotificationPacket.
Name = name;
2896 joinNotificationPacket.
Write();
2903 club::v1::membership::ClubAddedNotification clubAddedNotification;
2906 club::v1::ClubDescription* guildClub = clubAddedNotification.mutable_membership()->mutable_club();
2907 guildClub->set_id(
GetId());
2909 guildClub->set_name(
GetName());
2915 club::v1::MemberDescription* guildLeaderDescription = guildClub->add_leader();
2919 guildClub->set_creation_time(
2920 std::chrono::duration_cast<std::chrono::microseconds>(SystemTimePoint::clock::from_time_t(
GetCreatedDate()).time_since_epoch()).count());
2921 guildClub->set_timezone(
"");
2922 guildClub->set_locale(
"");
2927 club::v1::MemberAddedNotification memberAddedNotification;
2928 memberAddedNotification.set_club_id(
GetId());
2930 club::v1::Member* addedMember = memberAddedNotification.add_member();
2938 addedMember->set_note(
"");
2939 addedMember->set_active(member.
IsOnline());
2961 Member* oldLeader =
nullptr;
2962 Member* newLeader =
nullptr;
2963 for (
auto& [memberGuid, member] :
m_members)
2965 if (memberGuid == guid)
2966 oldLeader = &member;
2967 else if (!newLeader || newLeader->
GetRankId() > member.GetRankId())
2968 newLeader = &member;
2987 sScriptMgr->OnGuildRemoveMember(
this, guid, isDisbanding, isKicked);
3000 player->
RemoveSpell(entry->SpellID,
false,
false);
3024 member->ChangeRank(trans, newRank);
3053 if (tabId == destTabId && slotId == destSlotId)
3069 _MoveItems(&bankData, &charData, splitedAmount);
3071 _MoveItems(&charData, &bankData, splitedAmount);
3079 pTab->SetText(text);
3080 pTab->SendText(
this,
nullptr);
3083 eventPacket.
Tab = tabId;
3092 return rank.GetId() == rankId;
3095 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3102 return rank.GetId() == rankId;
3105 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3112 return rank.GetOrder() == rankOrder;
3115 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3122 return rank.GetOrder() == rankOrder;
3125 return rankItr !=
m_ranks.end() ? &*rankItr :
nullptr;
3159 trans->Append(stmt);
3164 trans->Append(stmt);
3168 (*itr).CreateMissingTabsIfNeeded(tabId, trans,
false);
3179 trans->Append(stmt);
3183 trans->Append(stmt);
3197 uint8 newRankId = [&]()
3199 uint8 freeRankId = 0;
3210 bool const isInTransaction = bool(trans);
3211 if (!isInTransaction)
3217 if (!isInTransaction)
3228 std::unordered_set<uint32> accountsIdSet;
3229 for (
auto const& [guid, member] :
m_members)
3230 accountsIdSet.insert(member.GetAccountId());
3250 m_bankTabs[tabId].Delete(trans, removeItemsFromDB);
3270 trans->Append(stmt);
3276 bool isInTransaction = bool(trans);
3277 if (!isInTransaction)
3286 trans->Append(stmt);
3288 if (!isInTransaction)
3295 rankInfo->SetBankMoneyPerDay(moneyPerDay);
3304 rankInfo->SetBankTabSlotsAndRights(rightsAndSlots, saveToDB);
3310 return rankInfo->GetName();
3317 return rankInfo->GetRights();
3324 return rankInfo->GetBankMoneyPerDay();
3332 return rankInfo->GetBankTabSlotsPerDay(tabId);
3339 return rankInfo->GetBankTabRights(tabId);
3363 return std::numeric_limits<int64>::max();
3377 member->UpdateBankTabWithdrawValue(trans, tabId, 1);
3399 sScriptMgr->OnGuildEvent(
this,
uint8(eventType), playerGuid1, playerGuid2, newRank);
3412 uint8 dbTabId = tabId;
3419 pLog.
AddEvent(trans,
m_id, pLog.
GetNextGUID(), eventType, dbTabId, lowguid, itemOrMoney, itemStackCount, destTabId);
3421 sScriptMgr->OnGuildBankEvent(
this,
uint8(eventType), tabId, lowguid, itemOrMoney, itemStackCount, destTabId);
3427 return tab->GetItem(slotId);
3434 pTab->SetItem(trans, slotId,
nullptr);
3497 bool swap = (pDestItem !=
nullptr);
3499 Item* pSrcItem = pSrc->
GetItem(splitedAmount != 0);
3525 pSrc->
RemoveItem(trans, pDest, splitedAmount);
3565 else if (pDest->
IsBank())
3583 for (SlotIds::const_iterator itr = slots.begin(); itr != slots.end(); ++itr)
3585 Item const* tabItem = tab->GetItem(*itr);
3614 packet.
ItemInfo.push_back(itemInfo);
3617 for (
auto const& [guid, member] :
m_members)
3622 Player* player = member.FindPlayer();
3663 if (tab->GetItem(slotId))
3666 packet.
ItemInfo.reserve(itemCount);
3674 if (
Item* tabItem = tab->GetItem(slotId))
3681 itemInfo.
Charges =
int32(abs(tabItem->GetSpellCharges()));
3684 itemInfo.
Flags = tabItem->m_itemData->DynamicFlags;
3714 rankChange.
Officer = setterGuid;
3715 rankChange.
Other = targetGuid;
3720 club::v1::MemberRoleChangedNotification memberRoleChangeNotification;
3721 memberRoleChangeNotification.set_club_id(
GetId());
3723 club::v1::RoleAssignment* changedRoleAssignment = memberRoleChangeNotification.add_assignment();
3741 TC_LOG_DEBUG(
"network",
"SMSG_GUILD_RANKS_UPDATE [Broadcast] Target: {}, Issuer: {}, RankId: {}",
3749 member.ResetValues(weekly);
3750 if (
Player* player = member.FindPlayer())
3764 auto packetBuilder = [&](
Player const* receiver)
3769 newsPacket.
NewsEvents.back().CompletedDate += receiver->GetSession()->GetTimezoneOffset();
3771 receiver->SendDirectMessage(newsPacket.
Write());
3788 std::list<NewsLogEntry>& newsLog =
m_newsLog.GetGuildLog();
3789 auto itr = newsLog.begin();
3790 while (itr != newsLog.end() && itr->GetGUID() != newsId)
3793 if (itr == newsLog.end())
3795 TC_LOG_DEBUG(
"guild",
"HandleNewsSetSticky: [{}] requested unknown newsId {} - Sticky: {}",
3800 itr->SetSticky(sticky);
3802 TC_LOG_DEBUG(
"guild",
"HandleNewsSetSticky: [{}] changed newsId {} sticky to {}",
3807 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< 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_COMMAND_SUCCESS
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
@ 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__,...)
#define TC_LOG_ERROR(filterType__,...)
std::optional< T > Optional
Optional helper class to wrap optional values within.
uint64 const MAX_MONEY_AMOUNT
@ ERR_GUILD_PLAYER_NOT_FOUND_S
@ ERR_GUILD_TOO_MUCH_MONEY
@ ERR_GUILDEMBLEM_NOTENOUGHMONEY
@ ERR_GUILD_RANK_TOO_LOW_S
@ ERR_GUILD_RANK_TOO_HIGH_S
@ ERR_ALREADY_INVITED_TO_GUILD_S
@ ERR_GUILDEMBLEM_NOTGUILDMASTER
@ ERR_GUILDEMBLEM_SUCCESS
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
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.
std::string GetString() const
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)
std::string const & GetName() const
GuildRankId GetRankId() 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)
bool HasAchieved(uint32 achievementId) const
void SendQueryResponse(WorldSession *session)
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 _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
int32 GetSpellCharges(uint8 index=0) const
Item * CloneItem(uint32 count, Player const *player=nullptr) const
void SetCount(uint32 value)
ItemTemplate const * GetTemplate() const
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)
UF::UpdateField< UF::ItemData, 0, TYPEID_ITEM > m_itemData
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)
virtual void AddToWorld()
virtual void RemoveFromWorld()
static ObjectGuid GetGUID(Object const *o)
bool HasIgnore(ObjectGuid const &ignoreGuid, ObjectGuid const &ignoreAccountGuid)
void LearnSpell(uint32 spell_id, bool dependent, int32 fromSkill=0, bool suppressMessaging=false, Optional< int32 > traitDefinitionId={})
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 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 setInt32(const uint8 index, const int32 value)
void setUInt8(const uint8 index, const uint8 value)
void setInt64(const uint8 index, const int64 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt16(const uint8 index, const uint16 value)
void setString(const uint8 index, const std::string &value)
void setInt8(const uint8 index, const int8 value)
void setUInt64(const uint8 index, const uint64 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 &)
std::string ToString(Type &&val, Params &&... params)
constexpr std::size_t size()
@ VISIBILITY_LEVEL_PRIVATE
@ CLUB_REMOVED_REASON_DESTROYED_BY_MEMBER
@ CLUB_REMOVED_REASON_MEMBER_LEFT
@ CLUB_REMOVED_REASON_MEMBER_KICKED
::Criteria const * Criteria
bool isContainedIn(std::vector< ItemPosCount > const &vec) const
char const * GetDefaultLocaleName() const
UpdateField< int32, 0, 1 > ItemID
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]
int32 PersonalAchievementPoints
uint32 VirtualRealmAddress
void Initialize(::Item const *item)