Core/Guild: Implement new guild bank swap item opcodes
Port From (https://github.com/TrinityCore/TrinityCore/pull/26351)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user