mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Core/Items: Implemented packets setting up inventory cleanup parameters
This commit is contained in:
@@ -1891,7 +1891,21 @@ CREATE TABLE `characters` (
|
||||
`xp` int unsigned NOT NULL DEFAULT '0',
|
||||
`money` bigint unsigned NOT NULL DEFAULT '0',
|
||||
`inventorySlots` tinyint unsigned NOT NULL DEFAULT '16',
|
||||
`inventoryBagFlags` int unsigned NOT NULL DEFAULT '0',
|
||||
`bagSlotFlags1` int unsigned NOT NULL DEFAULT '0',
|
||||
`bagSlotFlags2` int unsigned NOT NULL DEFAULT '0',
|
||||
`bagSlotFlags3` int unsigned NOT NULL DEFAULT '0',
|
||||
`bagSlotFlags4` int unsigned NOT NULL DEFAULT '0',
|
||||
`bagSlotFlags5` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankSlots` tinyint unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagFlags` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags1` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags2` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags3` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags4` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags5` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags6` int unsigned NOT NULL DEFAULT '0',
|
||||
`bankBagSlotFlags7` int unsigned NOT NULL DEFAULT '0',
|
||||
`restState` tinyint unsigned NOT NULL DEFAULT '0',
|
||||
`playerFlags` int unsigned NOT NULL DEFAULT '0',
|
||||
`playerFlagsEx` int unsigned NOT NULL DEFAULT '0',
|
||||
@@ -3725,7 +3739,8 @@ INSERT INTO `updates` VALUES
|
||||
('2023_11_15_00_characters.sql','441E0F17DE3E3945307AC400DF86FCDF06C61653','ARCHIVED','2023-11-15 00:53:47',0),
|
||||
('2024_02_08_00_characters.sql','743A11042AA17CDBD5F3D510D24509A10838DB5A','ARCHIVED','2024-02-08 00:56:26',0),
|
||||
('2024_04_09_00_characters.sql','07AC79B4E489B1CD073852EC57D12939C2A1D4B1','RELEASED','2024-04-09 12:54:11',0),
|
||||
('2024_04_12_00_characters.sql','043E023F998DA77170C9D2D0162CAA340290B215','RELEASED','2024-04-12 00:23:51',0);
|
||||
('2024_04_12_00_characters.sql','043E023F998DA77170C9D2D0162CAA340290B215','RELEASED','2024-04-12 00:23:51',0),
|
||||
('2024_04_28_00_characters.sql','F80F476704BE535B5DCB0BCEBDD56024FCFBBAA2','RELEASED','2024-04-28 19:26:58',0);
|
||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
15
sql/updates/characters/master/2024_04_28_00_characters.sql
Normal file
15
sql/updates/characters/master/2024_04_28_00_characters.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
ALTER TABLE `characters`
|
||||
ADD `inventoryBagFlags` int unsigned NOT NULL DEFAULT '0' AFTER `inventorySlots`,
|
||||
ADD `bagSlotFlags1` int unsigned NOT NULL DEFAULT '0' AFTER `inventoryBagFlags`,
|
||||
ADD `bagSlotFlags2` int unsigned NOT NULL DEFAULT '0' AFTER `bagSlotFlags1`,
|
||||
ADD `bagSlotFlags3` int unsigned NOT NULL DEFAULT '0' AFTER `bagSlotFlags2`,
|
||||
ADD `bagSlotFlags4` int unsigned NOT NULL DEFAULT '0' AFTER `bagSlotFlags3`,
|
||||
ADD `bagSlotFlags5` int unsigned NOT NULL DEFAULT '0' AFTER `bagSlotFlags4`,
|
||||
ADD `bankBagFlags` int unsigned NOT NULL DEFAULT '0' AFTER `bankSlots`,
|
||||
ADD `bankBagSlotFlags1` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagFlags`,
|
||||
ADD `bankBagSlotFlags2` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagSlotFlags1`,
|
||||
ADD `bankBagSlotFlags3` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagSlotFlags2`,
|
||||
ADD `bankBagSlotFlags4` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagSlotFlags3`,
|
||||
ADD `bankBagSlotFlags5` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagSlotFlags4`,
|
||||
ADD `bankBagSlotFlags6` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagSlotFlags5`,
|
||||
ADD `bankBagSlotFlags7` int unsigned NOT NULL DEFAULT '0' AFTER `bankBagSlotFlags6`;
|
||||
@@ -92,7 +92,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC);
|
||||
|
||||
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
PrepareStatement(CHAR_SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, inventoryBagFlags, bagSlotFlags1, bagSlotFlags2, bagSlotFlags3, bagSlotFlags4, bagSlotFlags5, "
|
||||
"bankSlots, bankBagFlags, bankBagSlotFlags1, bankBagSlotFlags2, bankBagSlotFlags3, bankBagSlotFlags4, bankBagSlotFlags5, bankBagSlotFlags6, bankBagSlotFlags7, restState, playerFlags, playerFlagsEx, "
|
||||
"position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
|
||||
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
|
||||
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
|
||||
@@ -473,7 +474,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_LFG_DATA, "DELETE FROM lfg_data WHERE guid = ?", CONNECTION_ASYNC);
|
||||
|
||||
// Player saving
|
||||
PrepareStatement(CHAR_INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
PrepareStatement(CHAR_INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, inventorySlots, inventoryBagFlags, bagSlotFlags1, bagSlotFlags2, bagSlotFlags3, bagSlotFlags4, bagSlotFlags5, "
|
||||
"bankSlots, bankBagFlags, bankBagSlotFlags1, bankBagSlotFlags2, bankBagSlotFlags3, bankBagSlotFlags4, bankBagSlotFlags5, bankBagSlotFlags6, bankBagSlotFlags7, restState, playerFlags, playerFlagsEx, "
|
||||
"map, instance_id, dungeonDifficulty, raidDifficulty, legacyRaidDifficulty, position_x, position_y, position_z, orientation, trans_x, trans_y, trans_z, trans_o, transguid, "
|
||||
"taximask, createTime, createMode, cinematic, "
|
||||
"totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, primarySpecialization, "
|
||||
@@ -481,8 +483,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
"death_expire_time, taxi_path, totalKills, "
|
||||
"todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, "
|
||||
"power4, power5, power6, power7, power8, power9, power10, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, lastLoginBuild) VALUES "
|
||||
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?,"
|
||||
"(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,inventorySlots=?,inventoryBagFlags=?,bagSlotFlags1=?,bagSlotFlags2=?,bagSlotFlags3=?,bagSlotFlags4=?,bagSlotFlags5=?,"
|
||||
"bankSlots=?,bankBagFlags=?,bankBagSlotFlags1=?,bankBagSlotFlags2=?,bankBagSlotFlags3=?,bankBagSlotFlags4=?,bankBagSlotFlags5=?,bankBagSlotFlags6=?,bankBagSlotFlags7=?,restState=?,playerFlags=?,playerFlagsEx=?,"
|
||||
"map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?,"
|
||||
"logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,numRespecs=?,primarySpecialization=?,extra_flags=?,summonedPetNumber=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?,"
|
||||
"totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?,"
|
||||
|
||||
@@ -17628,7 +17628,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
|
||||
|
||||
struct PlayerLoadData
|
||||
{
|
||||
// "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, "
|
||||
// "SELECT c.guid, account, name, race, class, gender, level, xp, money, inventorySlots, inventoryBagFlags, bagSlotFlags1, bagSlotFlags2, bagSlotFlags3, bagSlotFlags4, bagSlotFlags5, "
|
||||
// "bankSlots, bankBagFlags, bankBagSlotFlags1, bankBagSlotFlags2, bankBagSlotFlags3, bankBagSlotFlags4, bankBagSlotFlags5, bankBagSlotFlags6, bankBagSlotFlags7, restState, playerFlags, playerFlagsEx, "
|
||||
// "position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, "
|
||||
// "resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
|
||||
// "totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
|
||||
@@ -17647,7 +17648,11 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
|
||||
uint32 xp;
|
||||
uint64 money;
|
||||
uint8 inventorySlots;
|
||||
EnumFlag<BagSlotFlags> inventoryBagFlags = BagSlotFlags::None;
|
||||
std::array<BagSlotFlags, 5> bagSlotFlags;
|
||||
uint8 bankSlots;
|
||||
EnumFlag<BagSlotFlags> bankBagFlags = BagSlotFlags::None;
|
||||
std::array<BagSlotFlags, 7> bankBagSlotFlags;
|
||||
PlayerRestState restState;
|
||||
PlayerFlags playerFlags;
|
||||
PlayerFlagsEx playerFlagsEx;
|
||||
@@ -17722,7 +17727,13 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
|
||||
xp = fields[i++].GetUInt32();
|
||||
money = fields[i++].GetUInt64();
|
||||
inventorySlots = fields[i++].GetUInt8();
|
||||
inventoryBagFlags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
|
||||
for (BagSlotFlags& flags : bagSlotFlags)
|
||||
flags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
|
||||
bankSlots = fields[i++].GetUInt8();
|
||||
bankBagFlags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
|
||||
for (BagSlotFlags& flags : bankBagSlotFlags)
|
||||
flags = static_cast<BagSlotFlags>(fields[i++].GetUInt32());
|
||||
restState = PlayerRestState(fields[i++].GetUInt8());
|
||||
playerFlags = PlayerFlags(fields[i++].GetUInt32());
|
||||
playerFlagsEx = PlayerFlagsEx(fields[i++].GetUInt32());
|
||||
@@ -17877,7 +17888,14 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
|
||||
|
||||
SetCustomizations(Trinity::Containers::MakeIteratorPair(customizations.begin(), customizations.end()), false);
|
||||
SetInventorySlotCount(fields.inventorySlots);
|
||||
SetBackpackAutoSortDisabled(fields.inventoryBagFlags.HasFlag(BagSlotFlags::DisableAutoSort));
|
||||
SetBackpackSellJunkDisabled(fields.inventoryBagFlags.HasFlag(BagSlotFlags::ExcludeJunkSell));
|
||||
for (uint32 bagIndex = 0; bagIndex < fields.bagSlotFlags.size(); ++bagIndex)
|
||||
ReplaceAllBagSlotFlags(bagIndex, fields.bagSlotFlags[bagIndex]);
|
||||
SetBankBagSlotCount(fields.bankSlots);
|
||||
SetBankAutoSortDisabled(fields.bankBagFlags.HasFlag(BagSlotFlags::DisableAutoSort));
|
||||
for (uint32 bagIndex = 0; bagIndex < fields.bankBagSlotFlags.size(); ++bagIndex)
|
||||
ReplaceAllBankBagSlotFlags(bagIndex, fields.bankBagSlotFlags[bagIndex]);
|
||||
SetNativeGender(fields.gender);
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Inebriation), fields.drunk);
|
||||
ReplaceAllPlayerFlags(fields.playerFlags);
|
||||
@@ -20034,7 +20052,27 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
|
||||
stmt->setUInt32(index++, GetXP());
|
||||
stmt->setUInt64(index++, GetMoney());
|
||||
stmt->setUInt8(index++, GetInventorySlotCount());
|
||||
stmt->setUInt32(index++, [&]
|
||||
{
|
||||
BagSlotFlags inventoryFlags = BagSlotFlags::None;
|
||||
if (m_activePlayerData->BackpackAutoSortDisabled)
|
||||
inventoryFlags |= BagSlotFlags::DisableAutoSort;
|
||||
if (m_activePlayerData->BackpackSellJunkDisabled)
|
||||
inventoryFlags |= BagSlotFlags::ExcludeJunkSell;
|
||||
return AsUnderlyingType(inventoryFlags);
|
||||
}());
|
||||
for (uint32 bagSlotFlag : m_activePlayerData->BagSlotFlags)
|
||||
stmt->setUInt32(index++, bagSlotFlag);
|
||||
stmt->setUInt8(index++, GetBankBagSlotCount());
|
||||
stmt->setUInt32(index++, [&]
|
||||
{
|
||||
BagSlotFlags inventoryFlags = BagSlotFlags::None;
|
||||
if (m_activePlayerData->BankAutoSortDisabled)
|
||||
inventoryFlags |= BagSlotFlags::DisableAutoSort;
|
||||
return AsUnderlyingType(inventoryFlags);
|
||||
}());
|
||||
for (uint32 bankBagSlotFlag : m_activePlayerData->BankBagSlotFlags)
|
||||
stmt->setUInt32(index++, bankBagSlotFlag);
|
||||
stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID);
|
||||
stmt->setUInt32(index++, m_playerData->PlayerFlags);
|
||||
stmt->setUInt32(index++, m_playerData->PlayerFlagsEx);
|
||||
@@ -20151,7 +20189,27 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
|
||||
stmt->setUInt32(index++, GetXP());
|
||||
stmt->setUInt64(index++, GetMoney());
|
||||
stmt->setUInt8(index++, GetInventorySlotCount());
|
||||
stmt->setUInt32(index++, [&]
|
||||
{
|
||||
BagSlotFlags inventoryFlags = BagSlotFlags::None;
|
||||
if (m_activePlayerData->BackpackAutoSortDisabled)
|
||||
inventoryFlags |= BagSlotFlags::DisableAutoSort;
|
||||
if (m_activePlayerData->BackpackSellJunkDisabled)
|
||||
inventoryFlags |= BagSlotFlags::ExcludeJunkSell;
|
||||
return AsUnderlyingType(inventoryFlags);
|
||||
}());
|
||||
for (uint32 bagSlotFlag : m_activePlayerData->BagSlotFlags)
|
||||
stmt->setUInt32(index++, bagSlotFlag);
|
||||
stmt->setUInt8(index++, GetBankBagSlotCount());
|
||||
stmt->setUInt32(index++, [&]
|
||||
{
|
||||
BagSlotFlags inventoryFlags = BagSlotFlags::None;
|
||||
if (m_activePlayerData->BankAutoSortDisabled)
|
||||
inventoryFlags |= BagSlotFlags::DisableAutoSort;
|
||||
return AsUnderlyingType(inventoryFlags);
|
||||
}());
|
||||
for (uint32 bankBagSlotFlag : m_activePlayerData->BankBagSlotFlags)
|
||||
stmt->setUInt32(index++, bankBagSlotFlag);
|
||||
stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID);
|
||||
stmt->setUInt32(index++, m_playerData->PlayerFlags);
|
||||
stmt->setUInt32(index++, m_playerData->PlayerFlagsEx);
|
||||
|
||||
@@ -768,6 +768,20 @@ enum class ItemSearchCallbackResult
|
||||
Continue
|
||||
};
|
||||
|
||||
enum class BagSlotFlags : uint32
|
||||
{
|
||||
None = 0x00,
|
||||
DisableAutoSort = 0x01,
|
||||
PriorityEquipment = 0x02,
|
||||
PriorityConsumables = 0x04,
|
||||
PriorityTradeGoods = 0x08,
|
||||
PriorityJunk = 0x10,
|
||||
PriorityQuestItems = 0x20,
|
||||
ExcludeJunkSell = 0x40,
|
||||
};
|
||||
|
||||
DEFINE_ENUM_FLAG(BagSlotFlags);
|
||||
|
||||
enum NewWorldReason
|
||||
{
|
||||
NEW_WORLD_NORMAL = 16, // Normal map change
|
||||
@@ -1383,6 +1397,20 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
|
||||
void SetInventorySlotCount(uint8 slots);
|
||||
uint8 GetBankBagSlotCount() const { return m_activePlayerData->NumBankSlots; }
|
||||
void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBankSlots), count); }
|
||||
bool IsBackpackAutoSortDisabled() const { return m_activePlayerData->BackpackAutoSortDisabled; }
|
||||
void SetBackpackAutoSortDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BackpackAutoSortDisabled), disabled); }
|
||||
bool IsBackpackSellJunkDisabled() const { return m_activePlayerData->BackpackSellJunkDisabled; }
|
||||
void SetBackpackSellJunkDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BackpackSellJunkDisabled), disabled); }
|
||||
bool IsBankAutoSortDisabled() const { return m_activePlayerData->BankAutoSortDisabled; }
|
||||
void SetBankAutoSortDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankAutoSortDisabled), disabled); }
|
||||
EnumFlag<BagSlotFlags> GetBagSlotFlags(uint32 bagIndex) const { return static_cast<BagSlotFlags>(m_activePlayerData->BagSlotFlags[bagIndex]); }
|
||||
void SetBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
|
||||
void RemoveBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
|
||||
void ReplaceAllBagSlotFlags(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
|
||||
EnumFlag<BagSlotFlags> GetBankBagSlotFlags(uint32 bagIndex) const { return static_cast<BagSlotFlags>(m_activePlayerData->BankBagSlotFlags[bagIndex]); }
|
||||
void SetBankBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankBagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
|
||||
void RemoveBankBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankBagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
|
||||
void ReplaceAllBankBagSlotFlags(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankBagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
|
||||
bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const;
|
||||
bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = nullptr) const;
|
||||
bool CanNoReagentCast(SpellInfo const* spellInfo) const;
|
||||
|
||||
@@ -1251,3 +1251,40 @@ void WorldSession::HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& remove
|
||||
item->SetState(ITEM_CHANGED, _player);
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleChangeBagSlotFlag(WorldPackets::Item::ChangeBagSlotFlag const& changeBagSlotFlag)
|
||||
{
|
||||
if (changeBagSlotFlag.BagIndex >= _player->m_activePlayerData->BagSlotFlags.size())
|
||||
return;
|
||||
|
||||
if (changeBagSlotFlag.On)
|
||||
_player->SetBagSlotFlag(changeBagSlotFlag.BagIndex, changeBagSlotFlag.FlagToChange);
|
||||
else
|
||||
_player->RemoveBagSlotFlag(changeBagSlotFlag.BagIndex, changeBagSlotFlag.FlagToChange);
|
||||
}
|
||||
|
||||
void WorldSession::HandleChangeBankBagSlotFlag(WorldPackets::Item::ChangeBankBagSlotFlag const& changeBankBagSlotFlag)
|
||||
{
|
||||
if (changeBankBagSlotFlag.BagIndex >= _player->m_activePlayerData->BankBagSlotFlags.size())
|
||||
return;
|
||||
|
||||
if (changeBankBagSlotFlag.On)
|
||||
_player->SetBankBagSlotFlag(changeBankBagSlotFlag.BagIndex, changeBankBagSlotFlag.FlagToChange);
|
||||
else
|
||||
_player->RemoveBankBagSlotFlag(changeBankBagSlotFlag.BagIndex, changeBankBagSlotFlag.FlagToChange);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetBackpackAutosortDisabled(WorldPackets::Item::SetBackpackAutosortDisabled const& setBackpackAutosortDisabled)
|
||||
{
|
||||
_player->SetBackpackAutoSortDisabled(setBackpackAutosortDisabled.Disable);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetBackpackSellJunkDisabled(WorldPackets::Item::SetBackpackSellJunkDisabled const& setBackpackSellJunkDisabled)
|
||||
{
|
||||
_player->SetBackpackSellJunkDisabled(setBackpackSellJunkDisabled.Disable);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetBankAutosortDisabled(WorldPackets::Item::SetBankAutosortDisabled const& setBankAutosortDisabled)
|
||||
{
|
||||
_player->SetBankAutoSortDisabled(setBankAutosortDisabled.Disable);
|
||||
}
|
||||
|
||||
@@ -373,3 +373,32 @@ void WorldPackets::Item::RemoveNewItem::Read()
|
||||
{
|
||||
_worldPacket >> ItemGuid;
|
||||
}
|
||||
|
||||
void WorldPackets::Item::ChangeBagSlotFlag::Read()
|
||||
{
|
||||
_worldPacket >> BagIndex;
|
||||
FlagToChange = _worldPacket.read<BagSlotFlags, uint32>();
|
||||
On = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Item::ChangeBankBagSlotFlag::Read()
|
||||
{
|
||||
_worldPacket >> BagIndex;
|
||||
FlagToChange = _worldPacket.read<BagSlotFlags, uint32>();
|
||||
On = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Item::SetBackpackAutosortDisabled::Read()
|
||||
{
|
||||
Disable = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Item::SetBackpackSellJunkDisabled::Read()
|
||||
{
|
||||
Disable = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
void WorldPackets::Item::SetBankAutosortDisabled::Read()
|
||||
{
|
||||
Disable = _worldPacket.ReadBit();
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <array>
|
||||
|
||||
struct VoidStorageItem;
|
||||
enum class BagSlotFlags : uint32;
|
||||
|
||||
namespace WorldPackets
|
||||
{
|
||||
@@ -536,6 +537,60 @@ namespace WorldPackets
|
||||
|
||||
WorldPacket const* Write() override { return &_worldPacket; }
|
||||
};
|
||||
|
||||
class ChangeBagSlotFlag final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit ChangeBagSlotFlag(WorldPacket&& packet) : ClientPacket(CMSG_CHANGE_BAG_SLOT_FLAG, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint32 BagIndex = 0;
|
||||
BagSlotFlags FlagToChange = { };
|
||||
bool On = false;
|
||||
};
|
||||
|
||||
class ChangeBankBagSlotFlag final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit ChangeBankBagSlotFlag(WorldPacket&& packet) : ClientPacket(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
uint32 BagIndex = 0;
|
||||
BagSlotFlags FlagToChange = { };
|
||||
bool On = false;
|
||||
};
|
||||
|
||||
class SetBackpackAutosortDisabled final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit SetBackpackAutosortDisabled(WorldPacket&& packet) : ClientPacket(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
bool Disable = false;
|
||||
};
|
||||
|
||||
class SetBackpackSellJunkDisabled final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit SetBackpackSellJunkDisabled(WorldPacket&& packet) : ClientPacket(CMSG_SET_BACKPACK_SELL_JUNK_DISABLED, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
bool Disable = false;
|
||||
};
|
||||
|
||||
class SetBankAutosortDisabled final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
explicit SetBankAutosortDisabled(WorldPacket&& packet) : ClientPacket(CMSG_SET_BANK_AUTOSORT_DISABLED, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
bool Disable = false;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -274,8 +274,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CAST_SPELL, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleCastSpellOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_LEADERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeBagSlotFlag);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeBankBagSlotFlag);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_REALM_TICKET, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetChangeRealmTicket);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSubGroupOpcode);
|
||||
@@ -869,9 +869,9 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_SET_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveMoverOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_ADVANCED_COMBAT_LOGGING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetAdvancedCombatLogging);
|
||||
DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetAssistantLeaderOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_BACKPACK_SELL_JUNK_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetBackpackAutosortDisabled);
|
||||
DEFINE_HANDLER(CMSG_SET_BACKPACK_SELL_JUNK_DISABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetBackpackSellJunkDisabled);
|
||||
DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetBankAutosortDisabled);
|
||||
DEFINE_HANDLER(CMSG_SET_CONTACT_NOTES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetContactNotesOpcode);
|
||||
DEFINE_HANDLER(CMSG_SET_CURRENCY_FLAGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_SET_DIFFICULTY_ID, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
|
||||
|
||||
@@ -451,6 +451,11 @@ namespace WorldPackets
|
||||
class SortReagentBankBags;
|
||||
struct ItemInstance;
|
||||
class RemoveNewItem;
|
||||
class ChangeBagSlotFlag;
|
||||
class ChangeBankBagSlotFlag;
|
||||
class SetBackpackAutosortDisabled;
|
||||
class SetBackpackSellJunkDisabled;
|
||||
class SetBankAutosortDisabled;
|
||||
}
|
||||
|
||||
namespace LFG
|
||||
@@ -1499,6 +1504,11 @@ class TC_GAME_API WorldSession
|
||||
void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
|
||||
void HandleWrapItem(WorldPackets::Item::WrapItem& packet);
|
||||
void HandleUseCritterItem(WorldPackets::Item::UseCritterItem& packet);
|
||||
void HandleChangeBagSlotFlag(WorldPackets::Item::ChangeBagSlotFlag const& changeBagSlotFlag);
|
||||
void HandleChangeBankBagSlotFlag(WorldPackets::Item::ChangeBankBagSlotFlag const& changeBankBagSlotFlag);
|
||||
void HandleSetBackpackAutosortDisabled(WorldPackets::Item::SetBackpackAutosortDisabled const& setBackpackAutosortDisabled);
|
||||
void HandleSetBackpackSellJunkDisabled(WorldPackets::Item::SetBackpackSellJunkDisabled const& setBackpackSellJunkDisabled);
|
||||
void HandleSetBankAutosortDisabled(WorldPackets::Item::SetBankAutosortDisabled const& setBankAutosortDisabled);
|
||||
|
||||
void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
|
||||
void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);
|
||||
|
||||
Reference in New Issue
Block a user