aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/BankHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
committerShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
commite59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch)
treefe9bce9c82496589facec3719b3f2943d8295e76 /src/server/game/Handlers/BankHandler.cpp
parent7fb9168d57f378075b0f6692ea7ad822c1d8e43d (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.cpp41
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());
}