Core/Guild: Implement new guild bank swap item opcodes

Port From (https://github.com/TrinityCore/TrinityCore/pull/26351)
This commit is contained in:
hondacrx
2021-04-13 18:04:05 -04:00
parent 9782ad7eee
commit 143777cf5c
3 changed files with 294 additions and 43 deletions
@@ -341,6 +341,15 @@ namespace Framework.Constants
GuildBankRemainingWithdrawMoneyQuery = 0x3084, GuildBankRemainingWithdrawMoneyQuery = 0x3084,
GuildBankSetTabText = 0x3087, GuildBankSetTabText = 0x3087,
GuildBankTextQuery = 0x3088, GuildBankTextQuery = 0x3088,
GuildBankTransferItemToBank = 0x34bd,
GuildBankTransferItemToPlayer = 0x34be,
GuildBankMoveItemInBank = 0x34c1,
GuildBankCombineItemStackWithBank = 0x34c2,
GuildBankTransferItemStackToBank = 0x34c3,
GuildBankCombineItemStackWithPlayer = 0x34c4,
GuildBankTransferItemStackToPlayer = 0x34c5,
GuildBankTransferItemToPlayerAutostore = 0x34c6,
GuildBankCombineItemStackInBank = 0x34c7,
GuildBankUpdateTab = 0x34cb, GuildBankUpdateTab = 0x34cb,
GuildBankWithdrawMoney = 0x34cd, GuildBankWithdrawMoney = 0x34cd,
GuildChallengeUpdateRequest = 0x307c, GuildChallengeUpdateRequest = 0x307c,
+159 -16
View File
@@ -287,29 +287,172 @@ namespace Game
} }
} }
//[WorldPacketHandler(ClientOpcodes.GuildBankSwapItems)] [WorldPacketHandler(ClientOpcodes.GuildBankTransferItemToBank)]
void HandleGuildBankSwapItems(GuildBankSwapItems packet) void HandleGuildBankTransferItemToBank(GuildBankTransferItem guildBankTransferItem)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankTransferItem.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
byte playerBag = InventorySlots.Bag0;
if (guildBankTransferItem.HasBag)
playerBag = guildBankTransferItem.PlayerBag;
if (!Player.IsInventoryPos(playerBag, guildBankTransferItem.PlayerSlot))
GetPlayer().SendEquipError(InventoryResult.InternalBagError);
else
guild.SwapItemsWithInventory(GetPlayer(), false, guildBankTransferItem.BankTab, guildBankTransferItem.BankSlot, playerBag, guildBankTransferItem.PlayerSlot, 0);
}
[WorldPacketHandler(ClientOpcodes.GuildBankTransferItemToPlayer)]
void HandleGuildBankTransferItemToPlayer(GuildBankTransferItem guildBankTransferItem)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankTransferItem.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
byte playerBag = InventorySlots.Bag0;
if (guildBankTransferItem.HasBag)
playerBag = guildBankTransferItem.PlayerBag;
if (!Player.IsInventoryPos(playerBag, guildBankTransferItem.PlayerSlot))
GetPlayer().SendEquipError(InventoryResult.InternalBagError);
else
guild.SwapItemsWithInventory(GetPlayer(), true, guildBankTransferItem.BankTab, guildBankTransferItem.BankSlot, playerBag, guildBankTransferItem.PlayerSlot, 0);
}
[WorldPacketHandler(ClientOpcodes.GuildBankMoveItemInBank)]
void HandleGuildBankMoveItemInBank(GuildBankMoveItemInBank guildBankMoveItemInBank)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankMoveItemInBank.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
guild.SwapItems(GetPlayer(), guildBankMoveItemInBank.BankTab, guildBankMoveItemInBank.BankSlot, guildBankMoveItemInBank.NewBankTab, guildBankMoveItemInBank.NewBankSlot, 0);
}
[WorldPacketHandler(ClientOpcodes.GuildBankCombineItemStackWithBank)]
void HandleGuildBankCombineItemStackWithBank(GuildBankCombineItemStack guildBankCombineItemStack)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankCombineItemStack.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
byte playerBag = InventorySlots.Bag0;
if (guildBankCombineItemStack.HasBag)
playerBag = guildBankCombineItemStack.PlayerBag;
if (!Player.IsInventoryPos(playerBag, guildBankCombineItemStack.PlayerSlot))
GetPlayer().SendEquipError(InventoryResult.InternalBagError);
else
guild.SwapItemsWithInventory(GetPlayer(), false, guildBankCombineItemStack.BankTab, guildBankCombineItemStack.BankSlot, playerBag, guildBankCombineItemStack.PlayerSlot, guildBankCombineItemStack.StackCount);
}
[WorldPacketHandler(ClientOpcodes.GuildBankCombineItemStackWithPlayer)]
void HandleGuildBankCombineItemStackWithPlayer(GuildBankCombineItemStack guildBankCombineItemStack)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankCombineItemStack.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
byte playerBag = InventorySlots.Bag0;
if (guildBankCombineItemStack.HasBag)
playerBag = guildBankCombineItemStack.PlayerBag;
if (!Player.IsInventoryPos(playerBag, guildBankCombineItemStack.PlayerSlot))
GetPlayer().SendEquipError(InventoryResult.InternalBagError);
else
guild.SwapItemsWithInventory(GetPlayer(), true, guildBankCombineItemStack.BankTab, guildBankCombineItemStack.BankSlot, playerBag, guildBankCombineItemStack.PlayerSlot, guildBankCombineItemStack.StackCount);
}
[WorldPacketHandler(ClientOpcodes.GuildBankTransferItemStackToBank)]
void HandleGuildBankTransferItemStackToBank(GuildBankTransferItemStack guildBankTransferItemStack)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankTransferItemStack.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
byte playerBag = InventorySlots.Bag0;
if (guildBankTransferItemStack.HasBag)
playerBag = guildBankTransferItemStack.PlayerBag;
if (!Player.IsInventoryPos(playerBag, guildBankTransferItemStack.PlayerSlot))
GetPlayer().SendEquipError(InventoryResult.InternalBagError);
else
guild.SwapItemsWithInventory(GetPlayer(), false, guildBankTransferItemStack.BankTab, guildBankTransferItemStack.BankSlot, playerBag, guildBankTransferItemStack.PlayerSlot, guildBankTransferItemStack.StackCount);
}
[WorldPacketHandler(ClientOpcodes.GuildBankTransferItemStackToPlayer)]
void HandleGuildBankTransferItemStackToPlayer(GuildBankTransferItemStack guildBankTransferItemStack)
{
if (!GetPlayer().GetGameObjectIfCanInteractWith(guildBankTransferItemStack.Banker, GameObjectTypes.GuildBank))
return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
byte playerBag = InventorySlots.Bag0;
if (guildBankTransferItemStack.HasBag)
playerBag = guildBankTransferItemStack.PlayerBag;
if (!Player.IsInventoryPos(playerBag, guildBankTransferItemStack.PlayerSlot))
GetPlayer().SendEquipError(InventoryResult.InternalBagError);
else
guild.SwapItemsWithInventory(GetPlayer(), true, guildBankTransferItemStack.BankTab, guildBankTransferItemStack.BankSlot, playerBag, guildBankTransferItemStack.PlayerSlot, guildBankTransferItemStack.StackCount);
}
[WorldPacketHandler(ClientOpcodes.GuildBankTransferItemToPlayerAutostore)]
void HandleGuildBankTransferItemToPlayerAutoStore(GuildBankTransferItemAutoStore packet)
{ {
if (!GetPlayer().GetGameObjectIfCanInteractWith(packet.Banker, GameObjectTypes.GuildBank)) if (!GetPlayer().GetGameObjectIfCanInteractWith(packet.Banker, GameObjectTypes.GuildBank))
return; return;
Guild guild = GetPlayer().GetGuild(); Guild guild = GetPlayer().GetGuild();
if (!guild) if (guild == null)
return; return;
if (packet.BankOnly) if (GetPlayer().GetInventorySlotCount() == 0)
{ GetPlayer().SendEquipError(InventoryResult.BagFull);
guild.SwapItems(GetPlayer(), packet.BankTab1, packet.BankSlot1, packet.BankTab, packet.BankSlot, (uint)packet.StackCount);
}
else else
{ guild.SwapItemsWithInventory(GetPlayer(), true, packet.BankTab, packet.BankSlot, 0, 0, 0);
// Player <-> Bank }
// Allow to work with inventory only
if (!Player.IsInventoryPos(packet.ContainerSlot, packet.ContainerItemSlot) && !packet.AutoStore) [WorldPacketHandler(ClientOpcodes.GuildBankCombineItemStackInBank)]
GetPlayer().SendEquipError(InventoryResult.InternalBagError); void HandleGuildBankCombineItemStackInBank(GuildBankCombineItemStackInBank packet)
else {
guild.SwapItemsWithInventory(GetPlayer(), packet.ToSlot != 0, packet.BankTab, packet.BankSlot, packet.ContainerSlot, packet.ContainerItemSlot, (uint)packet.StackCount); if (!GetPlayer().GetGameObjectIfCanInteractWith(packet.Banker, GameObjectTypes.GuildBank))
} return;
Guild guild = GetPlayer().GetGuild();
if (guild == null)
return;
guild.SwapItems(GetPlayer(), packet.BankTab, packet.BankSlot, packet.NewBankTab, packet.NewBankSlot, packet.StackCount);
} }
[WorldPacketHandler(ClientOpcodes.GuildBankBuyTab)] [WorldPacketHandler(ClientOpcodes.GuildBankBuyTab)]
@@ -365,7 +508,7 @@ namespace Game
void HandleGuildSetRankPermissions(GuildSetRankPermissions packet) void HandleGuildSetRankPermissions(GuildSetRankPermissions packet)
{ {
Guild guild = GetPlayer().GetGuild(); Guild guild = GetPlayer().GetGuild();
if (!guild) if (guild == null)
return; return;
Guild.GuildBankRightsAndSlots[] rightsAndSlots = new Guild.GuildBankRightsAndSlots[GuildConst.MaxBankTabs]; Guild.GuildBankRightsAndSlots[] rightsAndSlots = new Guild.GuildBankRightsAndSlots[GuildConst.MaxBankTabs];
+126 -27
View File
@@ -1076,44 +1076,143 @@ namespace Game.Networking.Packets
public bool FullUpdate; public bool FullUpdate;
} }
public class GuildBankSwapItems : ClientPacket public class GuildBankTransferItem : ClientPacket
{ {
public GuildBankSwapItems(WorldPacket packet) : base(packet) { } public GuildBankTransferItem(WorldPacket packet) : base(packet) { }
public override void Read() public override void Read()
{ {
Banker = _worldPacket.ReadPackedGuid(); Banker = _worldPacket.ReadPackedGuid();
BankTab = _worldPacket.ReadUInt8(); BankTab = _worldPacket.ReadUInt8();
BankSlot = _worldPacket.ReadUInt8(); BankSlot = _worldPacket.ReadUInt8();
ItemID = _worldPacket.ReadUInt32(); PlayerSlot = _worldPacket.ReadUInt8();
BankTab1 = _worldPacket.ReadUInt8();
BankSlot1 = _worldPacket.ReadUInt8();
ItemID1 = _worldPacket.ReadUInt32();
BankItemCount = _worldPacket.ReadInt32();
ContainerSlot = _worldPacket.ReadUInt8();
ContainerItemSlot = _worldPacket.ReadUInt8();
ToSlot = _worldPacket.ReadUInt8();
StackCount = _worldPacket.ReadInt32();
HasBag = _worldPacket.HasBit();
_worldPacket.ResetBitPos(); _worldPacket.ResetBitPos();
BankOnly = _worldPacket.HasBit();
AutoStore = _worldPacket.HasBit(); if (HasBag)
PlayerBag = _worldPacket.ReadUInt8();
} }
public ObjectGuid Banker; public ObjectGuid Banker;
public int StackCount;
public int BankItemCount;
public uint ItemID;
public uint ItemID1;
public byte ToSlot;
public byte BankSlot;
public byte BankSlot1;
public byte BankTab; public byte BankTab;
public byte BankTab1; public byte BankSlot;
public byte ContainerSlot; public byte PlayerSlot;
public byte ContainerItemSlot; public bool HasBag;
public bool AutoStore; public byte PlayerBag;
public bool BankOnly; }
class GuildBankMoveItemInBank : ClientPacket
{
public GuildBankMoveItemInBank(WorldPacket packet) : base(packet) { }
public override void Read()
{
Banker = _worldPacket.ReadPackedGuid();
BankTab = _worldPacket.ReadUInt8();
BankSlot = _worldPacket.ReadUInt8();
NewBankTab = _worldPacket.ReadUInt8();
NewBankSlot = _worldPacket.ReadUInt8();
}
public ObjectGuid Banker;
public byte BankTab;
public byte BankSlot;
public byte NewBankTab;
public byte NewBankSlot;
}
class GuildBankCombineItemStack : ClientPacket
{
public GuildBankCombineItemStack(WorldPacket packet) : base(packet) { }
public override void Read()
{
Banker = _worldPacket.ReadPackedGuid();
BankTab = _worldPacket.ReadUInt8();
BankSlot = _worldPacket.ReadUInt8();
PlayerSlot = _worldPacket.ReadUInt8();
StackCount = _worldPacket.ReadUInt32();
HasBag = _worldPacket.HasBit();
_worldPacket.ResetBitPos();
if (HasBag)
PlayerBag = _worldPacket.ReadUInt8();
}
public ObjectGuid Banker;
public byte BankTab;
public byte BankSlot;
public byte PlayerSlot;
public uint StackCount;
public bool HasBag;
public byte PlayerBag;
}
class GuildBankTransferItemStack : ClientPacket
{
public GuildBankTransferItemStack(WorldPacket packet) : base(packet) { }
public override void Read()
{
Banker = _worldPacket.ReadPackedGuid();
BankTab = _worldPacket.ReadUInt8();
BankSlot = _worldPacket.ReadUInt8();
PlayerSlot = _worldPacket.ReadUInt8();
StackCount = _worldPacket.ReadUInt32();
HasBag = _worldPacket.HasBit();
_worldPacket.ResetBitPos();
if (HasBag)
PlayerBag = _worldPacket.ReadUInt8();
}
public ObjectGuid Banker;
public byte BankTab;
public byte BankSlot;
public byte PlayerSlot;
public uint StackCount;
public bool HasBag;
public byte PlayerBag;
}
class GuildBankTransferItemAutoStore : ClientPacket
{
public GuildBankTransferItemAutoStore(WorldPacket packet) : base(packet) { }
public override void Read()
{
Banker = _worldPacket.ReadPackedGuid();
BankTab = _worldPacket.ReadUInt8();
BankSlot = _worldPacket.ReadUInt8();
}
public ObjectGuid Banker;
public byte BankTab;
public byte BankSlot;
}
class GuildBankCombineItemStackInBank : ClientPacket
{
public GuildBankCombineItemStackInBank(WorldPacket packet) : base(packet) { }
public override void Read()
{
Banker = _worldPacket.ReadPackedGuid();
BankTab = _worldPacket.ReadUInt8();
BankSlot = _worldPacket.ReadUInt8();
NewBankTab = _worldPacket.ReadUInt8();
NewBankSlot = _worldPacket.ReadUInt8();
StackCount = _worldPacket.ReadUInt32();
}
public ObjectGuid Banker;
public byte BankTab;
public byte BankSlot;
public byte NewBankTab;
public byte NewBankSlot;
public uint StackCount;
} }
public class GuildBankLogQuery : ClientPacket public class GuildBankLogQuery : ClientPacket
@@ -1513,7 +1612,7 @@ namespace Game.Networking.Packets
public class GuildBankItemInfo public class GuildBankItemInfo
{ {
public ItemInstance Item; public ItemInstance Item = new();
public int Slot; public int Slot;
public int Count; public int Count;
public int EnchantmentID; public int EnchantmentID;
@@ -1576,4 +1675,4 @@ namespace Game.Networking.Packets
public List<ObjectGuid> MemberList = new(); public List<ObjectGuid> MemberList = new();
public Optional<ItemInstance> Item; public Optional<ItemInstance> Item;
} }
} }