CMSG_CHANGE_BANK_BAG_SLOT_FLAG and housing fix
This commit is contained in:
@@ -1593,6 +1593,23 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
|
||||
SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Description), description);
|
||||
SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::DepositFlags), int32(depositFlags));
|
||||
}
|
||||
// CMSG_CHANGE_BANK_BAG_SLOT_FLAG flips one deposit flag without resending the tab's name, icon and
|
||||
// description, which SetBankTabSettings would rewrite as well.
|
||||
void SetCharacterBankTabDepositFlag(uint32 tabId, BagSlotFlags flag, bool on)
|
||||
{
|
||||
SetBankTabDepositFlag(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterBankTabSettings, tabId), flag, on);
|
||||
}
|
||||
void SetAccountBankTabDepositFlag(uint32 tabId, BagSlotFlags flag, bool on)
|
||||
{
|
||||
SetBankTabDepositFlag(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AccountBankTabSettings, tabId), flag, on);
|
||||
}
|
||||
void SetBankTabDepositFlag(UF::MutableFieldReferenceWithChangesMask<UF::BankTabSettings, false> setter, BagSlotFlags flag, bool on)
|
||||
{
|
||||
if (on)
|
||||
SetUpdateFieldFlagValue(setter.ModifyValue(&UF::BankTabSettings::DepositFlags), int32(flag));
|
||||
else
|
||||
RemoveUpdateFieldFlagValue(setter.ModifyValue(&UF::BankTabSettings::DepositFlags), int32(flag));
|
||||
}
|
||||
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; }
|
||||
|
||||
@@ -2655,7 +2655,7 @@ void WorldSession::HandleHousingRoomRemove(WorldPackets::Housing::HousingRoomRem
|
||||
// claiming a player standing over the removed floors: drop them one storey below
|
||||
// the cut instead of letting them fall through the shaft.
|
||||
bool relocated = false;
|
||||
if (!removedCells.empty())
|
||||
if (housing->GetEditorMode() != HOUSING_EDITOR_MODE_LAYOUT && !removedCells.empty())
|
||||
if (NeighborhoodMapData const* interiorData = sHousingMgr.GetNeighborhoodMapDataForWorldMap(HOUSE_INTERIOR_MAP_ID))
|
||||
{
|
||||
constexpr float FLOOR_HEIGHT = 12.0f;
|
||||
|
||||
@@ -1344,6 +1344,32 @@ void WorldSession::HandleChangeBagSlotFlag(WorldPackets::Item::ChangeBagSlotFlag
|
||||
_player->RemoveBagSlotFlag(changeBagSlotFlag.BagIndex, changeBagSlotFlag.FlagToChange);
|
||||
}
|
||||
|
||||
void WorldSession::HandleChangeBankBagSlotFlag(WorldPackets::Item::ChangeBankBagSlotFlag const& changeBankBagSlotFlag)
|
||||
{
|
||||
// The bank twin of HandleChangeBagSlotFlag. A bank bag slot is a bank tab server-side: tab i occupies
|
||||
// BANK_SLOT_BAG_START + i for the character bank and ACCOUNT_BANK_SLOT_BAG_START + i for the account
|
||||
// bank (Player::CanBankItem, TryAutoDepositItem), and DepositFlags - a BagSlotFlags bitset, the same
|
||||
// type FlagToChange is declared as - is the only flag state such a slot carries. Those flags decide
|
||||
// where AutoBankItem puts an item (PickAutoDepositTab), so leaving this opcode unwired meant the
|
||||
// per-tab deposit priorities the client lets you set could never change after the tab was bought.
|
||||
//
|
||||
// Unlike CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS this packet carries no BankType, so both spellings of
|
||||
// the index are accepted: a 0-based tab index, which is what the client uses in its other bank packets,
|
||||
// and an absolute bag slot. The ranges cannot collide - a bank never holds BANK_SLOT_BAG_START tabs -
|
||||
// so a value resolves one way only. A 0-based index meant for the account bank is indistinguishable
|
||||
// from a character one and is left unhandled (CAPTURE-BLOCKED).
|
||||
uint32 const characterTabCount = _player->m_activePlayerData->CharacterBankTabSettings.size();
|
||||
uint32 const accountTabCount = _player->m_activePlayerData->AccountBankTabSettings.size();
|
||||
uint8 const bagIndex = changeBankBagSlotFlag.BagIndex;
|
||||
|
||||
if (bagIndex < characterTabCount)
|
||||
_player->SetCharacterBankTabDepositFlag(bagIndex, changeBankBagSlotFlag.FlagToChange, changeBankBagSlotFlag.On);
|
||||
else if (bagIndex >= BANK_SLOT_BAG_START && uint32(bagIndex - BANK_SLOT_BAG_START) < characterTabCount)
|
||||
_player->SetCharacterBankTabDepositFlag(bagIndex - BANK_SLOT_BAG_START, changeBankBagSlotFlag.FlagToChange, changeBankBagSlotFlag.On);
|
||||
else if (bagIndex >= ACCOUNT_BANK_SLOT_BAG_START && uint32(bagIndex - ACCOUNT_BANK_SLOT_BAG_START) < accountTabCount)
|
||||
_player->SetAccountBankTabDepositFlag(bagIndex - ACCOUNT_BANK_SLOT_BAG_START, changeBankBagSlotFlag.FlagToChange, changeBankBagSlotFlag.On);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetBackpackAutosortDisabled(WorldPackets::Item::SetBackpackAutosortDisabled const& setBackpackAutosortDisabled)
|
||||
{
|
||||
_player->SetBackpackAutoSortDisabled(setBackpackAutosortDisabled.Disable);
|
||||
|
||||
@@ -288,7 +288,7 @@ void OpcodeTable::InitializeClientOpcodes()
|
||||
DEFINE_HANDLER(CMSG_CATALOG_SHOP_LICENSE_GAME_DATA_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCatalogShopLicenseGameDataRequest);
|
||||
DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_LEADERS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChallengeModeRequestLeaders);
|
||||
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::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeBankBagSlotFlag);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_MONUMENT_APPEARANCE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeMonumentAppearance);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_REALM_TICKET, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetChangeRealmTicket);
|
||||
DEFINE_HANDLER(CMSG_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSubGroupOpcode);
|
||||
|
||||
@@ -698,6 +698,7 @@ namespace WorldPackets
|
||||
struct ItemInstance;
|
||||
class RemoveNewItem;
|
||||
class ChangeBagSlotFlag;
|
||||
class ChangeBankBagSlotFlag;
|
||||
class SetBackpackAutosortDisabled;
|
||||
class SetBackpackSellJunkDisabled;
|
||||
class SetBankAutosortDisabled;
|
||||
@@ -2216,6 +2217,7 @@ public:
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user