diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-08-02 13:25:41 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-08-02 13:25:41 +0200 |
commit | e59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch) | |
tree | fe9bce9c82496589facec3719b3f2943d8295e76 /src/server/game/Handlers/BankHandler.cpp | |
parent | 7fb9168d57f378075b0f6692ea7ad822c1d8e43d (diff) |
Core/PacketIO: Updated to 11.0.0
Diffstat (limited to 'src/server/game/Handlers/BankHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/BankHandler.cpp | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp index 5e515cf623a..4e3c065c17c 100644 --- a/src/server/game/Handlers/BankHandler.cpp +++ b/src/server/game/Handlers/BankHandler.cpp @@ -15,14 +15,15 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "WorldSession.h" #include "BankPackets.h" -#include "Item.h" +#include "Creature.h" #include "DB2Stores.h" #include "GossipDef.h" +#include "Item.h" #include "Log.h" #include "NPCPackets.h" #include "Player.h" -#include "WorldSession.h" void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet) { @@ -34,6 +35,9 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa return; } + if (packet.BankType != BankType::Character) + return; + Item* item = _player->GetItemByPos(packet.Bag, packet.Slot); if (!item) return; @@ -57,22 +61,43 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa _player->BankItem(dest, item, true); } -void WorldSession::HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet) +void WorldSession::HandleBankerActivateOpcode(WorldPackets::Bank::BankerActivate const& bankerActivate) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE); + if (bankerActivate.InteractionType != PlayerInteractionType::Banker) + return; + + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(bankerActivate.Banker, UNIT_NPC_FLAG_ACCOUNT_BANKER | UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE); if (!unit) { - TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - {} not found or you can not interact with him.", packet.Unit.ToString()); + TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - {} not found or you can not interact with him.", bankerActivate.Banker); return; } + switch (bankerActivate.InteractionType) + { + case PlayerInteractionType::Banker: + if (!unit->HasNpcFlag(UNIT_NPC_FLAG_ACCOUNT_BANKER) || !unit->HasNpcFlag(UNIT_NPC_FLAG_BANKER)) + return; + break; + case PlayerInteractionType::CharacterBanker: + if (!unit->HasNpcFlag(UNIT_NPC_FLAG_BANKER)) + return; + break; + case PlayerInteractionType::AccountBanker: + if (!unit->HasNpcFlag(UNIT_NPC_FLAG_ACCOUNT_BANKER)) + return; + break; + default: + break; + } + // remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); // set currentBankerGUID for other bank action - SendShowBank(packet.Unit); + SendShowBank(bankerActivate.Banker, bankerActivate.InteractionType); } void WorldSession::HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet) @@ -297,13 +322,13 @@ void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStor } } -void WorldSession::SendShowBank(ObjectGuid guid) +void WorldSession::SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType) { _player->PlayerTalkClass->GetInteractionData().Reset(); _player->PlayerTalkClass->GetInteractionData().SourceGuid = guid; WorldPackets::NPC::NPCInteractionOpenResult npcInteraction; npcInteraction.Npc = guid; - npcInteraction.InteractionType = PlayerInteractionType::Banker; + npcInteraction.InteractionType = interactionType; npcInteraction.Success = true; SendPacket(npcInteraction.Write()); } |