From 8b9c2d8b1034f8c0fbd7cb8986aed4452efb31f3 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Thu, 3 Oct 2024 23:08:44 -0400 Subject: [PATCH] feat: Equipment Presets Added the ability to save equipment presets. --- Arrowgene.Ddon.GameServer/DdonGameServer.cs | 3 ++ .../Handler/EquipGetEquipPresetListHandler.cs | 21 ++++++++ .../Handler/EquipUpdateEquipPresetHandler.cs | 31 +++++++++++ .../EquipUpdateEquipPresetNameHandler.cs | 24 +++++++++ .../Entity/EntitySerializer.cs | 10 ++++ .../C2SEquipGetEquipPresetListReq.cs | 23 ++++++++ .../C2SEquipUpdateEquipPresetNameReq.cs | 34 ++++++++++++ .../C2SEquipUpdateEquipPresetReq.cs | 41 +++++++++++++++ .../S2CEquipGetEquipPresetListRes.cs | 36 +++++++++++++ .../S2CEquipUpdateEquipPresetNameRes.cs | 30 +++++++++++ .../S2CEquipUpdateEquipPresetRes.cs | 35 +++++++++++++ .../Entity/Structure/CDataEquipPreset.cs | 46 ++++++++++++++++ .../Entity/Structure/CDataPresetEquipInfo.cs | 52 +++++++++++++++++++ .../Entity/Structure/CDatapresetEquipUnk0.cs | 35 +++++++++++++ Arrowgene.Ddon.Shared/Model/Storages.cs | 20 ++++++- 15 files changed, 440 insertions(+), 1 deletion(-) create mode 100644 Arrowgene.Ddon.GameServer/Handler/EquipGetEquipPresetListHandler.cs create mode 100644 Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetHandler.cs create mode 100644 Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetNameHandler.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipGetEquipPresetListReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetNameReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipGetEquipPresetListRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetNameRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/Structure/CDataEquipPreset.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/Structure/CDataPresetEquipInfo.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/Structure/CDatapresetEquipUnk0.cs diff --git a/Arrowgene.Ddon.GameServer/DdonGameServer.cs b/Arrowgene.Ddon.GameServer/DdonGameServer.cs index 397c0698f..48e150765 100644 --- a/Arrowgene.Ddon.GameServer/DdonGameServer.cs +++ b/Arrowgene.Ddon.GameServer/DdonGameServer.cs @@ -340,6 +340,9 @@ private void LoadPacketHandler() AddHandler(new EquipUpdateHideCharacterLanternHandler(this)); AddHandler(new EquipUpdateHidePawnHeadArmorHandler(this)); AddHandler(new EquipUpdateHidePawnLanternHandler(this)); + AddHandler(new EquipGetEquipPresetListHandler(this)); + AddHandler(new EquipUpdateEquipPresetHandler(this)); + AddHandler(new EquipUpdateEquipPresetNameHandler(this)); AddHandler(new EventStartHandler(this)); AddHandler(new EventEndHandler(this)); diff --git a/Arrowgene.Ddon.GameServer/Handler/EquipGetEquipPresetListHandler.cs b/Arrowgene.Ddon.GameServer/Handler/EquipGetEquipPresetListHandler.cs new file mode 100644 index 000000000..e7c9682b9 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/EquipGetEquipPresetListHandler.cs @@ -0,0 +1,21 @@ + +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class EquipGetEquipPresetListHandler : GameRequestPacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(EquipGetEquipPresetListHandler)); + + public EquipGetEquipPresetListHandler(DdonGameServer server) : base(server) + { + } + + public override S2CEquipGetEquipPresetListRes Handle(GameClient client, C2SEquipGetEquipPresetListReq request) + { + return new S2CEquipGetEquipPresetListRes(); + } + } +} diff --git a/Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetHandler.cs b/Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetHandler.cs new file mode 100644 index 000000000..24b682a4c --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetHandler.cs @@ -0,0 +1,31 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model; +using Arrowgene.Logging; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class EquipUpdateEquipPresetHandler : GameRequestPacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(EquipUpdateEquipPresetHandler)); + + public EquipUpdateEquipPresetHandler(DdonGameServer server) : base(server) + { + } + + public override S2CEquipUpdateEquipPresetRes Handle(GameClient client, C2SEquipUpdateEquipPresetReq request) + { + var result = new S2CEquipUpdateEquipPresetRes(); + + result.EquipPreset.PresetName = request.PresetName; + result.EquipPreset.PresetNo = request.PresetNo; + result.EquipPreset.PresetEquipInfoList = client.Character.Equipment.AsCDataPresetEquipInfo(EquipType.Performance); + result.EquipPreset.Job = client.Character.Job; + + return result; + } + } +} + diff --git a/Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetNameHandler.cs b/Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetNameHandler.cs new file mode 100644 index 000000000..f35bb8638 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/EquipUpdateEquipPresetNameHandler.cs @@ -0,0 +1,24 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model; +using Arrowgene.Logging; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class EquipUpdateEquipPresetNameHandler : GameRequestPacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(EquipUpdateEquipPresetNameHandler)); + + public EquipUpdateEquipPresetNameHandler(DdonGameServer server) : base(server) + { + } + + public override S2CEquipUpdateEquipPresetNameRes Handle(GameClient client, C2SEquipUpdateEquipPresetNameReq request) + { + return new S2CEquipUpdateEquipPresetNameRes(); + } + } +} + diff --git a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs index b3c040e41..ff2df6eba 100644 --- a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs +++ b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs @@ -129,6 +129,7 @@ static EntitySerializer() Create(new S2CCraftCraftRankUpNtc.Serializer()); Create(new CDataCurrentEquipInfo.Serializer()); Create(new CDataEquipSlot.Serializer()); + Create(new CDataEquipPreset.Serializer()); Create(new CDataDeliveredItem.Serializer()); Create(new CDataDeliveredItemRecord.Serializer()); Create(new CDataDeliveryItem.Serializer()); @@ -278,6 +279,8 @@ static EntitySerializer() Create(new CDataPlayPointDataSerializer()); Create(new CDataPresetAbilityParam.Serializer()); + Create(new CDataPresetEquipInfo.Serializer()); + Create(new CDatapresetEquipUnk0.Serializer()); Create(new CDataPriorityQuest.Serializer()); Create(new CDataPriorityQuestSetting.Serializer()); @@ -522,6 +525,9 @@ static EntitySerializer() Create(new C2SEquipUpdateHideCharacterLanternReq.Serializer()); Create(new C2SEquipUpdateHidePawnHeadArmorReq.Serializer()); Create(new C2SEquipUpdateHidePawnLanternReq.Serializer()); + Create(new C2SEquipGetEquipPresetListReq.Serializer()); + Create(new C2SEquipUpdateEquipPresetReq.Serializer()); + Create(new C2SEquipUpdateEquipPresetNameReq.Serializer()); Create(new C2SEntryBoardEntryBoardListReq.Serializer()); Create(new C2SEntryBoardEntryBoardItemCreateReq.Serializer()); @@ -1020,6 +1026,10 @@ static EntitySerializer() Create(new S2CEquipUpdateHideCharacterLanternRes.Serializer()); Create(new S2CEquipUpdateHidePawnHeadArmorRes.Serializer()); Create(new S2CEquipUpdateHidePawnLanternRes.Serializer()); + Create(new S2CEquipGetEquipPresetListRes.Serializer()); + Create(new S2CEquipUpdateEquipPresetRes.Serializer()); + Create(new S2CEquipUpdateEquipPresetNameRes.Serializer()); + Create(new S2CExtendEquipSlotNtc.Serializer()); Create(new S2CGpGetGpRes.Serializer()); Create(new S2CGpGetGpDetailRes.Serializer()); diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipGetEquipPresetListReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipGetEquipPresetListReq.cs new file mode 100644 index 000000000..55c026aca --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipGetEquipPresetListReq.cs @@ -0,0 +1,23 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SEquipGetEquipPresetListReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_EQUIP_GET_EQUIP_PRESET_LIST_REQ; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SEquipGetEquipPresetListReq obj) + { + } + + public override C2SEquipGetEquipPresetListReq Read(IBuffer buffer) + { + C2SEquipGetEquipPresetListReq obj = new C2SEquipGetEquipPresetListReq(); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetNameReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetNameReq.cs new file mode 100644 index 000000000..6916f9d9e --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetNameReq.cs @@ -0,0 +1,34 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SEquipUpdateEquipPresetNameReq : IPacketStructure + { + public PacketId Id => PacketId.C2S_EQUIP_UPDATE_EQUIP_PRESET_NAME_REQ; + + public C2SEquipUpdateEquipPresetNameReq() + { + } + + public uint PresetNo { get; set; } + public string PresetName { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SEquipUpdateEquipPresetNameReq obj) + { + WriteUInt32(buffer, obj.PresetNo); + WriteMtString(buffer, obj.PresetName); + } + + public override C2SEquipUpdateEquipPresetNameReq Read(IBuffer buffer) + { + C2SEquipUpdateEquipPresetNameReq obj = new C2SEquipUpdateEquipPresetNameReq(); + obj.PresetNo = ReadUInt32(buffer); + obj.PresetName = ReadMtString(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetReq.cs new file mode 100644 index 000000000..1db4e09e5 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SEquipUpdateEquipPresetReq.cs @@ -0,0 +1,41 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SEquipUpdateEquipPresetReq : IPacketStructure + { + public C2SEquipUpdateEquipPresetReq() + { + PresetName = string.Empty; + } + + public PacketId Id => PacketId.C2S_EQUIP_UPDATE_EQUIP_PRESET_REQ; + + public uint PresetNo { get; set; } + public uint PawnId { get; set; } + public uint Type { get; set; } + public string PresetName { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SEquipUpdateEquipPresetReq obj) + { + WriteUInt32(buffer, obj.PresetNo); + WriteUInt32(buffer, obj.PawnId); + WriteUInt32(buffer, obj.Type); + WriteMtString(buffer, obj.PresetName); + } + + public override C2SEquipUpdateEquipPresetReq Read(IBuffer buffer) + { + C2SEquipUpdateEquipPresetReq obj = new C2SEquipUpdateEquipPresetReq(); + obj.PresetNo = ReadUInt32(buffer); + obj.PawnId = ReadUInt32(buffer); + obj.Type = ReadUInt32(buffer); + obj.PresetName = ReadMtString(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipGetEquipPresetListRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipGetEquipPresetListRes.cs new file mode 100644 index 000000000..b39013e8d --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipGetEquipPresetListRes.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CEquipGetEquipPresetListRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_EQUIP_GET_EQUIP_PRESET_LIST_RES; + + public S2CEquipGetEquipPresetListRes() + { + EquipPresetList = new List(); + } + + public List EquipPresetList; + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CEquipGetEquipPresetListRes obj) + { + WriteServerResponse(buffer, obj); + WriteEntityList(buffer, obj.EquipPresetList); + } + + public override S2CEquipGetEquipPresetListRes Read(IBuffer buffer) + { + S2CEquipGetEquipPresetListRes obj = new S2CEquipGetEquipPresetListRes(); + ReadServerResponse(buffer, obj); + obj.EquipPresetList = ReadEntityList(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetNameRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetNameRes.cs new file mode 100644 index 000000000..78d199d16 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetNameRes.cs @@ -0,0 +1,30 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CEquipUpdateEquipPresetNameRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_EQUIP_UPDATE_EQUIP_PRESET_NAME_RES; + + public S2CEquipUpdateEquipPresetNameRes() + { + } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CEquipUpdateEquipPresetNameRes obj) + { + WriteServerResponse(buffer, obj); + } + + public override S2CEquipUpdateEquipPresetNameRes Read(IBuffer buffer) + { + S2CEquipUpdateEquipPresetNameRes obj = new S2CEquipUpdateEquipPresetNameRes(); + ReadServerResponse(buffer, obj); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetRes.cs new file mode 100644 index 000000000..2a0819d38 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CEquipUpdateEquipPresetRes.cs @@ -0,0 +1,35 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CEquipUpdateEquipPresetRes : ServerResponse + { + public override PacketId Id => PacketId.S2C_EQUIP_UPDATE_EQUIP_PRESET_RES; + + public S2CEquipUpdateEquipPresetRes() + { + EquipPreset = new CDataEquipPreset(); + } + + public CDataEquipPreset EquipPreset { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CEquipUpdateEquipPresetRes obj) + { + WriteServerResponse(buffer, obj); + WriteEntity(buffer, obj.EquipPreset); + } + + public override S2CEquipUpdateEquipPresetRes Read(IBuffer buffer) + { + S2CEquipUpdateEquipPresetRes obj = new S2CEquipUpdateEquipPresetRes(); + ReadServerResponse(buffer, obj); + obj.EquipPreset = ReadEntity(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataEquipPreset.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataEquipPreset.cs new file mode 100644 index 000000000..231c13bdf --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataEquipPreset.cs @@ -0,0 +1,46 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Model; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.Shared.Entity.Structure +{ + public class CDataEquipPreset + { + public CDataEquipPreset() + { + PresetName = string.Empty; + PresetEquipInfoList = new List(); + PresetJobItemList = new List(); + } + + public uint PresetNo { get; set; } + public string PresetName { get; set; } + public JobId Job { get; set; } + public List PresetEquipInfoList { get; set; } + public List PresetJobItemList { get; set; } + + + public class Serializer : EntitySerializer + { + public override void Write(IBuffer buffer, CDataEquipPreset obj) + { + WriteUInt32(buffer, obj.PresetNo); + WriteMtString(buffer, obj.PresetName); + WriteByte(buffer, (byte) obj.Job); + WriteEntityList(buffer, obj.PresetEquipInfoList); + WriteEntityList(buffer, obj.PresetJobItemList); + } + + public override CDataEquipPreset Read(IBuffer buffer) + { + CDataEquipPreset obj = new CDataEquipPreset(); + obj.PresetNo = ReadUInt32(buffer); + obj.PresetName = ReadMtString(buffer); + obj.Job = (JobId)ReadByte(buffer); + obj.PresetEquipInfoList = ReadEntityList(buffer); + obj.PresetJobItemList = ReadEntityList(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataPresetEquipInfo.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataPresetEquipInfo.cs new file mode 100644 index 000000000..d96e5ede3 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataPresetEquipInfo.cs @@ -0,0 +1,52 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Model; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.Shared.Entity.Structure +{ + public class CDataPresetEquipInfo + { + public CDataPresetEquipInfo() + { + ItemUId = string.Empty; + EquipElementParamList = new List(); + Unk0List = new List(); + } + + public string ItemUId { get; set; } + public uint ItemId { get; set; } + public byte EquipSlotNo { get; set; } + public byte Color { get; set; } + public List EquipElementParamList { get; set; } + public List Unk0List { get; set; } // Emblem? + public byte PlusValue { get; set; } + + + public class Serializer : EntitySerializer + { + public override void Write(IBuffer buffer, CDataPresetEquipInfo obj) + { + WriteMtString(buffer, obj.ItemUId); + WriteUInt32(buffer, obj.ItemId); + WriteByte(buffer, obj.EquipSlotNo); + WriteByte(buffer, obj.Color); + WriteEntityList(buffer, obj.EquipElementParamList); + WriteEntityList(buffer, obj.Unk0List); + WriteByte(buffer, obj.PlusValue); + } + + public override CDataPresetEquipInfo Read(IBuffer buffer) + { + CDataPresetEquipInfo obj = new CDataPresetEquipInfo(); + obj.ItemUId = ReadMtString(buffer); + obj.ItemId = ReadUInt32(buffer); + obj.EquipSlotNo = ReadByte(buffer); + obj.Color = ReadByte(buffer); + obj.EquipElementParamList = ReadEntityList(buffer); + obj.Unk0List = ReadEntityList(buffer); + obj.PlusValue = ReadByte(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDatapresetEquipUnk0.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDatapresetEquipUnk0.cs new file mode 100644 index 000000000..c14584add --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDatapresetEquipUnk0.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using Arrowgene.Buffers; + +namespace Arrowgene.Ddon.Shared.Entity.Structure +{ + public class CDatapresetEquipUnk0 + { + public CDatapresetEquipUnk0() + { + } + + public byte Unk0 { get; set; } + public byte Unk1 { get; set; } + public ushort Unk2 { get; set; } + + public class Serializer : EntitySerializer + { + public override void Write(IBuffer buffer, CDatapresetEquipUnk0 obj) + { + WriteByte(buffer, obj.Unk0); + WriteByte(buffer, obj.Unk1); + WriteUInt16(buffer, obj.Unk2); + } + + public override CDatapresetEquipUnk0 Read(IBuffer buffer) + { + CDatapresetEquipUnk0 obj = new CDatapresetEquipUnk0(); + obj.Unk0 = ReadByte(buffer); + obj.Unk1 = ReadByte(buffer); + obj.Unk2 = ReadUInt16(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Model/Storages.cs b/Arrowgene.Ddon.Shared/Model/Storages.cs index 176f8f5e3..b0a363f5c 100644 --- a/Arrowgene.Ddon.Shared/Model/Storages.cs +++ b/Arrowgene.Ddon.Shared/Model/Storages.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Security.Cryptography; using Arrowgene.Ddon.Shared.Entity.PacketStructure; using Arrowgene.Ddon.Shared.Entity.Structure; @@ -326,7 +327,24 @@ public List AsCDataCharacterEquipInfo(EquipType equipTy }) .ToList(); } - + + public List AsCDataPresetEquipInfo(EquipType equipType) + { + return GetItems(equipType) + .Select((x, index) => new { item = x, slot = (byte)(index + 1) }) + .Where(tuple => tuple.item != null) + .Select(tuple => new CDataPresetEquipInfo() + { + ItemId = tuple!.item.ItemId, + ItemUId = tuple!.item.UId, + EquipSlotNo = tuple!.slot, + Color = tuple!.item.Color, + PlusValue = tuple!.item.PlusValue, + EquipElementParamList = tuple!.item.EquipElementParamList + }) + .ToList(); + } + private int calculateEquipTypeOffset(EquipType equipType) { return equipType == EquipType.Performance ? 0 : EquipmentTemplate.TOTAL_EQUIP_SLOTS;