Core/PacketIO: Added empty implementation for treasure picker opcodes

Port From (https://github.com/TrinityCore/TrinityCore/commit/4936094379a3558022d63f7520cd0d988d718daf)
This commit is contained in:
Hondacrx
2024-11-10 22:37:36 -05:00
parent c87b3851eb
commit f7f4542ac7
2 changed files with 135 additions and 0 deletions
+16
View File
@@ -344,5 +344,21 @@ namespace Game
SendPacket(realmQueryResponse); SendPacket(realmQueryResponse);
} }
[WorldPacketHandler(ClientOpcodes.QueryTreasurePicker)]
void HandleQueryTreasurePicker(QueryTreasurePicker queryTreasurePicker)
{
Quest questInfo = Global.ObjectMgr.GetQuestTemplate(queryTreasurePicker.QuestID);
if (questInfo == null)
return;
TreasurePickerResponse treasurePickerResponse = new();
treasurePickerResponse.QuestID = queryTreasurePicker.QuestID;
treasurePickerResponse.TreasurePickerID = queryTreasurePicker.TreasurePickerID;
// TODO: Missing treasure picker implementation
_player.SendPacket(treasurePickerResponse);
}
} }
} }
@@ -564,6 +564,36 @@ namespace Game.Networking.Packets
public VirtualRealmNameInfo NameInfo; public VirtualRealmNameInfo NameInfo;
} }
class QueryTreasurePicker : ClientPacket
{
public uint QuestID;
public uint TreasurePickerID;
public QueryTreasurePicker(WorldPacket packet) : base(packet) { }
public override void Read()
{
QuestID = _worldPacket.ReadUInt32();
TreasurePickerID = _worldPacket.ReadUInt32();
}
}
class TreasurePickerResponse : ServerPacket
{
public uint QuestID;
public uint TreasurePickerID;
public TreasurePickerPick Pick;
public TreasurePickerResponse() : base(ServerOpcodes.TreasurePickerResponse, ConnectionType.Instance) { }
public override void Write()
{
_worldPacket.WriteUInt32(QuestID);
_worldPacket.WriteUInt32(TreasurePickerID);
Pick.Write(_worldPacket);
}
}
//Structs //Structs
public class PlayerGuidLookupData public class PlayerGuidLookupData
{ {
@@ -765,4 +795,93 @@ namespace Game.Networking.Packets
public uint QuestID; public uint QuestID;
public List<uint> NPCs = new(); public List<uint> NPCs = new();
} }
struct TreasurePickItem
{
public ItemInstance Item;
public uint Quantity;
public QuestRewardContextFlags? ContextFlags;
public void Write(WorldPacket data)
{
Item.Write(data);
data.WriteUInt32(Quantity);
data.WriteBit(ContextFlags.HasValue);
data.FlushBits();
if (ContextFlags.HasValue)
data.WriteInt32((int)ContextFlags.Value);
}
}
struct TreasurePickCurrency
{
public uint CurrencyID;
public uint Quantity;
public QuestRewardContextFlags? ContextFlags;
public void Write(WorldPacket data)
{
data.WriteUInt32(CurrencyID);
data.WriteUInt32(Quantity);
data.WriteBit(ContextFlags.HasValue);
data.FlushBits();
if (ContextFlags.HasValue)
data.WriteInt32((int)ContextFlags.Value);
}
}
class TreasurePickerBonus
{
public List<TreasurePickItem> Items = new();
public List<TreasurePickCurrency> Currencies = new();
public ulong Money;
public bool Unknown;
public void Write(WorldPacket data)
{
data.WriteInt32(Items.Count);
data.WriteInt32(Currencies.Count);
data.WriteUInt64(Money);
data.WriteBit(Unknown);
data.FlushBits();
foreach (TreasurePickItem treasurePickerItem in Items)
treasurePickerItem.Write(data);
foreach (TreasurePickCurrency treasurePickCurrency in Currencies)
treasurePickCurrency.Write(data);
}
}
class TreasurePickerPick
{
public List<TreasurePickItem> Items = new();
public List<TreasurePickCurrency> Currencies = new();
public List<TreasurePickerBonus> Bonuses = new();
public ulong Money;
public int Flags;
public bool IsChoice;
public void Write(WorldPacket data)
{
data.WriteInt32(Items.Count);
data.WriteInt32(Currencies.Count);
data.WriteUInt64(Money);
data.WriteInt32(Bonuses.Count);
data.WriteInt32(Flags);
data.WriteBit(IsChoice);
data.FlushBits();
foreach (TreasurePickCurrency treasurePickCurrency in Currencies)
treasurePickCurrency.Write(data);
foreach (TreasurePickItem treasurePickItem in Items)
treasurePickItem.Write(data);
foreach (TreasurePickerBonus treasurePickerBonus in Bonuses)
treasurePickerBonus.Write(data);
}
}
} }