From 284a3c55ae3227445c0c55d226df6c9bbe643d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Wed, 4 Sep 2024 22:16:45 -0300 Subject: [PATCH 1/2] Fix: FieldEnterPacket --- Maple2.File.Ingest/Maple2.File.Ingest.csproj | 2 +- Maple2.Model/Game/FieldInstance.cs | 13 +++++++++++-- Maple2.Server.Game/Manager/Field/FieldManager.cs | 2 +- Maple2.Server.Game/Packets/FieldEnterPacket.cs | 3 ++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Maple2.File.Ingest/Maple2.File.Ingest.csproj b/Maple2.File.Ingest/Maple2.File.Ingest.csproj index 3a55fa4cb..43539a042 100644 --- a/Maple2.File.Ingest/Maple2.File.Ingest.csproj +++ b/Maple2.File.Ingest/Maple2.File.Ingest.csproj @@ -20,7 +20,7 @@ - + diff --git a/Maple2.Model/Game/FieldInstance.cs b/Maple2.Model/Game/FieldInstance.cs index 8c16c3536..0f1299062 100644 --- a/Maple2.Model/Game/FieldInstance.cs +++ b/Maple2.Model/Game/FieldInstance.cs @@ -1,17 +1,26 @@ using System.Runtime.InteropServices; using Maple2.Model.Enum; +using Maple2.PacketLib.Tools; +using Maple2.Tools; namespace Maple2.Model.Game; -[StructLayout(LayoutKind.Sequential, Size = 6)] -public readonly struct FieldInstance { +public sealed class FieldInstance : IByteSerializable { public readonly bool BlockChangeChannel; public readonly InstanceType InstanceType; public readonly int InstanceId; + public FieldInstance() { } + public FieldInstance(bool blockChangeChannel, InstanceType instanceType, int instanceId) { BlockChangeChannel = blockChangeChannel; InstanceType = instanceType; InstanceId = instanceId; } + + public void WriteTo(IByteWriter writer) { + writer.WriteBool(BlockChangeChannel); + writer.Write(InstanceType); + writer.WriteInt(InstanceId); + } } diff --git a/Maple2.Server.Game/Manager/Field/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager.cs index d31158f64..e217a5dfe 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager.cs @@ -67,7 +67,7 @@ public sealed partial class FieldManager : IDisposable { public int MapId => Metadata.Id; public readonly long OwnerId; public readonly int InstanceId; - public FieldInstance FieldInstance = default; + public FieldInstance FieldInstance = new(); public readonly AiManager Ai; public IFieldRenderer? DebugRenderer { get; private set; } diff --git a/Maple2.Server.Game/Packets/FieldEnterPacket.cs b/Maple2.Server.Game/Packets/FieldEnterPacket.cs index 9e6b19d95..b3fb22c9e 100644 --- a/Maple2.Server.Game/Packets/FieldEnterPacket.cs +++ b/Maple2.Server.Game/Packets/FieldEnterPacket.cs @@ -7,6 +7,7 @@ using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model; using Maple2.Server.Game.Session; +using Maple2.Tools.Extensions; namespace Maple2.Server.Game.Packets; @@ -15,7 +16,7 @@ public static ByteWriter Request(IActor player) { var pWriter = Packet.Of(SendOp.RequestFieldEnter); pWriter.Write(MigrationError.ok); pWriter.WriteInt(player.Value.Character.MapId); - pWriter.Write(player.Field.FieldInstance); + pWriter.WriteClass(player.Field.FieldInstance); pWriter.WriteInt(); pWriter.Write(player.Position); pWriter.Write(player.Rotation); From 589d776d0be731e6688b4664cf4baaaed9b0311d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Wed, 4 Sep 2024 22:29:22 -0300 Subject: [PATCH 2/2] zin suggestion --- Maple2.Model/Game/FieldInstance.cs | 4 ++-- Maple2.Server.Game/Manager/Field/FieldManager.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Maple2.Model/Game/FieldInstance.cs b/Maple2.Model/Game/FieldInstance.cs index 0f1299062..183779b6a 100644 --- a/Maple2.Model/Game/FieldInstance.cs +++ b/Maple2.Model/Game/FieldInstance.cs @@ -6,12 +6,12 @@ namespace Maple2.Model.Game; public sealed class FieldInstance : IByteSerializable { + public static FieldInstance Default = new(false, InstanceType.none, 0); + public readonly bool BlockChangeChannel; public readonly InstanceType InstanceType; public readonly int InstanceId; - public FieldInstance() { } - public FieldInstance(bool blockChangeChannel, InstanceType instanceType, int instanceId) { BlockChangeChannel = blockChangeChannel; InstanceType = instanceType; diff --git a/Maple2.Server.Game/Manager/Field/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager.cs index e217a5dfe..17451dc3a 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager.cs @@ -67,7 +67,7 @@ public sealed partial class FieldManager : IDisposable { public int MapId => Metadata.Id; public readonly long OwnerId; public readonly int InstanceId; - public FieldInstance FieldInstance = new(); + public FieldInstance FieldInstance = FieldInstance.Default; public readonly AiManager Ai; public IFieldRenderer? DebugRenderer { get; private set; }