From 91e2033735044bdee21234f2aed974ba35f77efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Fri, 28 Mar 2025 02:35:22 -0300 Subject: [PATCH 1/2] Return to instances with SaveMap property --- Maple2.Model/Game/FieldInstance.cs | 6 ++++-- .../Manager/Field/FieldManager/FieldManager.State.cs | 2 +- .../Manager/Field/FieldManager/FieldManager.cs | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Maple2.Model/Game/FieldInstance.cs b/Maple2.Model/Game/FieldInstance.cs index 3b6b1b78a..f390651da 100644 --- a/Maple2.Model/Game/FieldInstance.cs +++ b/Maple2.Model/Game/FieldInstance.cs @@ -5,14 +5,16 @@ namespace Maple2.Model.Game; public sealed class FieldInstance : IByteSerializable { - public static FieldInstance Default = new(InstanceType.none, 0); + public static FieldInstance Default = new(InstanceType.none, 0, false); public readonly InstanceType InstanceType; public readonly int InstanceId; + public readonly bool SaveMap; - public FieldInstance(InstanceType instanceType, int instanceId) { + public FieldInstance(InstanceType instanceType, int instanceId, bool saveMap) { InstanceType = instanceType; InstanceId = instanceId; + SaveMap = saveMap; } public void WriteTo(IByteWriter writer) { diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs index 8d7f9868c..bfd254172 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs @@ -94,7 +94,7 @@ public FieldPlayer SpawnPlayer(GameSession session, Player player, int portalId player.Character.ReviveMapId = Metadata.Property.RevivalReturnId; } - if (FieldInstance.InstanceType == InstanceType.none) { + if (FieldInstance.InstanceType == InstanceType.none || FieldInstance.SaveMap) { if (Metadata.Property.EnterReturnId != 0) { player.Character.ReturnMapId = Metadata.Property.EnterReturnId; } diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs index 510a554c9..5cfc118ea 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs @@ -120,7 +120,7 @@ public virtual void Init() { } if (ServerTableMetadata.InstanceFieldTable.Entries.TryGetValue(Metadata.Id, out InstanceFieldMetadata? instanceField)) { - FieldInstance = new FieldInstance(instanceField.Type, instanceField.InstanceId); + FieldInstance = new FieldInstance(instanceField.Type, instanceField.InstanceId, instanceField.SaveField); } if (ugcMetadata.Plots.Count > 0) { From 3a6c302960ce2d9e1e279d806a12ac993d9e63e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Fri, 28 Mar 2025 03:19:30 -0300 Subject: [PATCH 2/2] replace FieldInstance with InstanceFieldMetadata --- Maple2.Model/Game/FieldInstance.cs | 24 ------------------- Maple2.Server.Game/Manager/DungeonManager.cs | 2 +- .../Field/FieldManager/FieldManager.State.cs | 2 +- .../Field/FieldManager/FieldManager.cs | 6 ++--- .../Manager/Field/FieldManager/IField.cs | 2 +- .../Packets/FieldEnterPacket.cs | 3 ++- 6 files changed, 8 insertions(+), 31 deletions(-) delete mode 100644 Maple2.Model/Game/FieldInstance.cs diff --git a/Maple2.Model/Game/FieldInstance.cs b/Maple2.Model/Game/FieldInstance.cs deleted file mode 100644 index f390651da..000000000 --- a/Maple2.Model/Game/FieldInstance.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Maple2.Model.Enum; -using Maple2.PacketLib.Tools; -using Maple2.Tools; - -namespace Maple2.Model.Game; - -public sealed class FieldInstance : IByteSerializable { - public static FieldInstance Default = new(InstanceType.none, 0, false); - - public readonly InstanceType InstanceType; - public readonly int InstanceId; - public readonly bool SaveMap; - - public FieldInstance(InstanceType instanceType, int instanceId, bool saveMap) { - InstanceType = instanceType; - InstanceId = instanceId; - SaveMap = saveMap; - } - - public void WriteTo(IByteWriter writer) { - writer.Write(InstanceType); - writer.WriteInt(InstanceId); - } -} diff --git a/Maple2.Server.Game/Manager/DungeonManager.cs b/Maple2.Server.Game/Manager/DungeonManager.cs index 3dd157fec..dc177a138 100644 --- a/Maple2.Server.Game/Manager/DungeonManager.cs +++ b/Maple2.Server.Game/Manager/DungeonManager.cs @@ -72,7 +72,7 @@ public void LoadField() { return; } - if (session.Field.FieldInstance.InstanceType == InstanceType.DungeonLobby) { + if (session.Field.FieldInstance.Type == InstanceType.DungeonLobby) { session.Send(DungeonWaitingPacket.Set(Lobby.DungeonId, Lobby.Size)); } } diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs index bfd254172..055414581 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.State.cs @@ -94,7 +94,7 @@ public FieldPlayer SpawnPlayer(GameSession session, Player player, int portalId player.Character.ReviveMapId = Metadata.Property.RevivalReturnId; } - if (FieldInstance.InstanceType == InstanceType.none || FieldInstance.SaveMap) { + if (FieldInstance.Type == InstanceType.none || FieldInstance.SaveField) { if (Metadata.Property.EnterReturnId != 0) { player.Character.ReturnMapId = Metadata.Property.EnterReturnId; } diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs index 5cfc118ea..7ae376bcf 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs @@ -74,7 +74,7 @@ public partial class FieldManager : IField { public int DungeonId { get; init; } public int Size { get; init; } public FieldType FieldType { get; init; } - public FieldInstance FieldInstance { get; private set; } + public InstanceFieldMetadata FieldInstance { get; private set; } public readonly AiManager Ai; public IFieldRenderer? DebugRenderer { get; private set; } @@ -92,7 +92,7 @@ public FieldManager(MapMetadata metadata, UgcMapMetadata ugcMetadata, MapEntityM Ai = new AiManager(this); RoomId = NextGlobalId(); - FieldInstance = FieldInstance.Default; + FieldInstance = new InstanceFieldMetadata(0, InstanceType.none, 0, false, 0, true, 0, 0, 0, 0); ItemDrop = new ItemDropManager(this); @@ -120,7 +120,7 @@ public virtual void Init() { } if (ServerTableMetadata.InstanceFieldTable.Entries.TryGetValue(Metadata.Id, out InstanceFieldMetadata? instanceField)) { - FieldInstance = new FieldInstance(instanceField.Type, instanceField.InstanceId, instanceField.SaveField); + FieldInstance = instanceField; } if (ugcMetadata.Plots.Count > 0) { diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/IField.cs b/Maple2.Server.Game/Manager/Field/FieldManager/IField.cs index 05ab32032..7fd186cf0 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/IField.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/IField.cs @@ -52,7 +52,7 @@ public interface IField : IDisposable { public ConcurrentDictionary Pets { get; } public RoomTimer? RoomTimer { get; } - public FieldInstance FieldInstance { get; } + public InstanceFieldMetadata FieldInstance { get; } public FieldType FieldType { get; } public int Size { get; init; } diff --git a/Maple2.Server.Game/Packets/FieldEnterPacket.cs b/Maple2.Server.Game/Packets/FieldEnterPacket.cs index b73e3bb95..82cc28301 100644 --- a/Maple2.Server.Game/Packets/FieldEnterPacket.cs +++ b/Maple2.Server.Game/Packets/FieldEnterPacket.cs @@ -17,7 +17,8 @@ public static ByteWriter Request(IActor player) { pWriter.Write(MigrationError.ok); pWriter.WriteInt(player.Value.Character.MapId); pWriter.Write(player.Field.FieldType); - pWriter.WriteClass(player.Field.FieldInstance); + pWriter.Write(player.Field.FieldInstance.Type); + pWriter.WriteInt(player.Field.FieldInstance.InstanceId); pWriter.WriteInt(player.Field.DungeonId); pWriter.Write(player.Position); pWriter.Write(player.Rotation);