From 7b5b94cbd4040b38d6a5ac0d2b39bec5c553fe8f Mon Sep 17 00:00:00 2001 From: mettaursp Date: Fri, 30 May 2025 12:12:57 -0700 Subject: [PATCH 1/2] move packet handling to a deferred buffer on the field's thread --- Maple2.Server.Core/Network/PacketRouter.cs | 5 +++ .../PacketHandlers/PacketHandler.cs | 4 ++ .../Field/FieldManager/FieldManager.cs | 22 ++++++++++ Maple2.Server.Game/Maple2.Server.Game.csproj | 44 +++++++++---------- .../PacketHandlers/AchievementHandler.cs | 4 +- .../PacketHandlers/AttendanceHandler.cs | 4 +- .../PacketHandlers/AttributePointHandler.cs | 4 +- .../PacketHandlers/BadgeEquipHandler.cs | 4 +- .../PacketHandlers/BeautyHandler.cs | 4 +- .../PacketHandlers/BlackMarketHandler.cs | 4 +- .../PacketHandlers/BonusGameHandler.cs | 4 +- .../PacketHandlers/BreakableHandler.cs | 4 +- .../PacketHandlers/BuddyBadgeHandler.cs | 4 +- .../PacketHandlers/BuddyEmoteHandler.cs | 4 +- .../PacketHandlers/BuddyHandler.cs | 4 +- .../PacketHandlers/ChangeAttributesHandler.cs | 4 +- .../ChangeAttributesScrollHandler.cs | 4 +- .../PacketHandlers/ChannelHandler.cs | 4 +- .../PacketHandlers/CharacterInfoHandler.cs | 4 +- .../PacketHandlers/ChatStickerHandler.cs | 4 +- .../CheckCharacterNameHandler.cs | 4 +- .../PacketHandlers/ClubHandler.cs | 4 +- .../PacketHandlers/DungeonRoomHandler.cs | 4 +- .../PacketHandlers/EmoteHandler.cs | 4 +- .../PacketHandlers/EnchantScrollHandler.cs | 4 +- .../PacketHandlers/EnterEventFieldHandler.cs | 4 +- .../PacketHandlers/EventRewardHandler.cs | 4 +- .../PacketHandlers/FallDamageHandler.cs | 4 +- .../Field/FieldPacketHandler.cs | 27 ++++++++++++ .../PacketHandlers/FieldEnterHandler.cs | 4 +- .../PacketHandlers/FileHandler.cs | 4 +- .../PacketHandlers/FishingHandler.cs | 4 +- .../PacketHandlers/FunctionCubeHandler.cs | 4 +- .../FurnishingStorageHandler.cs | 4 +- .../PacketHandlers/GlobalPortalHandler.cs | 4 +- .../PacketHandlers/GroupChatHandler.cs | 4 +- .../PacketHandlers/GuideObjectSyncHandler.cs | 4 +- .../PacketHandlers/GuideRecordHandler.cs | 4 +- .../PacketHandlers/GuildHandler.cs | 4 +- .../PacketHandlers/HomeActionHandler.cs | 4 +- .../PacketHandlers/HomeBankHandler.cs | 4 +- .../PacketHandlers/HomeDoctorHandler.cs | 4 +- .../PacketHandlers/HomeHandler.cs | 4 +- .../PacketHandlers/InsigniaHandler.cs | 4 +- .../PacketHandlers/InstrumentHandler.cs | 4 +- .../PacketHandlers/InteractObjectHandler.cs | 4 +- .../PacketHandlers/ItemBoxHandler.cs | 4 +- .../PacketHandlers/ItemDismantleHandler.cs | 4 +- .../PacketHandlers/ItemEnchantHandler.cs | 4 +- .../PacketHandlers/ItemEquipHandler.cs | 4 +- .../ItemExchangeScrollHandler.cs | 4 +- .../PacketHandlers/ItemExtractionHandler.cs | 4 +- .../PacketHandlers/ItemInventoryHandler.cs | 4 +- .../PacketHandlers/ItemLockHandler.cs | 4 +- .../PacketHandlers/ItemMergeHandler.cs | 4 +- .../PacketHandlers/ItemPickupHandler.cs | 4 +- .../PacketHandlers/ItemRepackHandler.cs | 4 +- .../PacketHandlers/ItemSocketHandler.cs | 4 +- .../PacketHandlers/ItemSocketScrollHandler.cs | 4 +- .../PacketHandlers/ItemUseHandler.cs | 4 +- .../PacketHandlers/JobHandler.cs | 4 +- .../PacketHandlers/KeyTableHandler.cs | 4 +- .../PacketHandlers/LapenshardHandler.cs | 4 +- .../PacketHandlers/LiftableHandler.cs | 4 +- .../PacketHandlers/LoadUgcMapHandler.cs | 4 +- .../PacketHandlers/LogSendHandler.cs | 4 +- .../PacketHandlers/MailHandler.cs | 4 +- .../PacketHandlers/MapleopolyHandler.cs | 4 +- .../PacketHandlers/MasteryHandler.cs | 4 +- .../PacketHandlers/MentorHandler.cs | 4 +- .../PacketHandlers/MeretMarketHandler.cs | 4 +- .../PacketHandlers/MesoMarketHandler.cs | 4 +- .../PacketHandlers/MesoPickupHandler.cs | 4 +- .../PacketHandlers/MoveFieldHandler.cs | 4 +- .../PacketHandlers/MyInfoHandler.cs | 4 +- .../PacketHandlers/NewsNotificationHandler.cs | 4 +- .../PacketHandlers/NpcTalkHandler.cs | 4 +- .../PacketHandlers/PartyHandler.cs | 4 +- .../PacketHandlers/PartySearchHandler.cs | 4 +- .../PacketHandlers/PetHandler.cs | 4 +- .../PacketHandlers/PetInventoryHandler.cs | 4 +- .../PacketHandlers/PremiumClubHandler.cs | 4 +- .../PacketHandlers/PrestigeHandler.cs | 4 +- .../PacketHandlers/QuestHandler.cs | 4 +- .../PacketHandlers/QuitHandler.cs | 4 +- .../PacketHandlers/RequestCubeHandler.cs | 4 +- .../PacketHandlers/RequestReportHandler.cs | 4 +- .../ResolveDeathPenaltyHandler.cs | 4 +- .../PacketHandlers/ResponseKeyHandler.cs | 4 +- .../PacketHandlers/RevivalHandler.cs | 4 +- .../PacketHandlers/RideHandler.cs | 4 +- .../PacketHandlers/RideSyncHandler.cs | 4 +- .../PacketHandlers/SetCraftModeHandler.cs | 4 +- .../PacketHandlers/ShopHandler.cs | 4 +- .../PacketHandlers/SkillBookHandler.cs | 4 +- .../PacketHandlers/SkillHandler.cs | 4 +- .../PacketHandlers/SkillMacroHandler.cs | 4 +- .../PacketHandlers/StateHandler.cs | 4 +- .../PacketHandlers/StateSkillHandler.cs | 4 +- .../PacketHandlers/StorageInventoryHandler.cs | 4 +- .../PacketHandlers/SuperChatHandler.cs | 4 +- .../PacketHandlers/SurvivalHandler.cs | 4 +- .../PacketHandlers/SystemInfoHandler.cs | 4 +- .../PacketHandlers/SystemShopHandler.cs | 4 +- .../PacketHandlers/TakeBoatHandler.cs | 4 +- .../PacketHandlers/TaxiHandler.cs | 4 +- .../PacketHandlers/TimeSyncHandler.cs | 4 +- .../PacketHandlers/TombstoneHandler.cs | 4 +- .../PacketHandlers/TradeHandler.cs | 4 +- .../PacketHandlers/TriggerHandler.cs | 4 +- .../PacketHandlers/TutorialItemHandler.cs | 4 +- .../PacketHandlers/UgcHandler.cs | 4 +- .../PacketHandlers/UserChatHandler.cs | 4 +- .../PacketHandlers/UserEnvHandler.cs | 4 +- .../PacketHandlers/UserSyncHandler.cs | 4 +- .../PacketHandlers/VibrateHandler.cs | 4 +- .../PacketHandlers/WardrobeHandler.cs | 4 +- .../PacketHandlers/WeddingBillboardHandler.cs | 4 +- .../PacketHandlers/WeddingHandler.cs | 4 +- .../PacketHandlers/WorldMapHandler.cs | 4 +- 120 files changed, 310 insertions(+), 252 deletions(-) create mode 100644 Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs diff --git a/Maple2.Server.Core/Network/PacketRouter.cs b/Maple2.Server.Core/Network/PacketRouter.cs index b1df24cc1..f4f0dfb0f 100644 --- a/Maple2.Server.Core/Network/PacketRouter.cs +++ b/Maple2.Server.Core/Network/PacketRouter.cs @@ -24,6 +24,11 @@ public void OnPacket(object? sender, IByteReader reader) { var op = reader.Read(); PacketHandler? handler = handlers.GetValueOrDefault(op); if (sender is T session) { + // Let another system schedule when to call Handle + if (handler?.TryHandleDeferred(session, reader) ?? false) { + return; + } + handler?.Handle(session, reader); } } diff --git a/Maple2.Server.Core/PacketHandlers/PacketHandler.cs b/Maple2.Server.Core/PacketHandlers/PacketHandler.cs index 317ef3803..ea8429b72 100644 --- a/Maple2.Server.Core/PacketHandlers/PacketHandler.cs +++ b/Maple2.Server.Core/PacketHandlers/PacketHandler.cs @@ -14,6 +14,10 @@ public abstract class PacketHandler where T : Session { protected PacketHandler() { } + public virtual bool TryHandleDeferred(T session, IByteReader reader) { + return false; + } + public abstract void Handle(T session, IByteReader packet); public override string ToString() => $"[0x{(ushort) OpCode:X4}] {GetType().Name}"; diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs index 92736bfa0..c77074e3c 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using System.CommandLine; using System.Diagnostics.CodeAnalysis; using System.Numerics; using DotRecast.Core.Numerics; @@ -18,6 +19,7 @@ using Maple2.Server.Game.Model; using Maple2.Server.Game.Model.Field; using Maple2.Server.Game.Model.Skill; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Server.Game.Util; @@ -66,6 +68,7 @@ public partial class FieldManager : IField { internal readonly FieldActor FieldActor; private readonly CancellationTokenSource cancel; private readonly Thread thread; + private readonly List<(FieldPacketHandler handler, GameSession session, IByteReader reader)> queuedPackets; private bool initialized; public bool Disposed { get; private set; } @@ -93,6 +96,7 @@ public FieldManager(MapMetadata metadata, UgcMapMetadata ugcMetadata, MapEntityM FieldActor = new FieldActor(this, npcMetadata); // pulls from argument because member NpcMetadata is null here cancel = new CancellationTokenSource(); thread = new Thread(UpdateLoop); + queuedPackets = new(); Ai = new AiManager(this); RoomId = NextGlobalId(); @@ -249,6 +253,22 @@ public virtual void Init() { // Use this to keep systems in sync. Do not use Environment.TickCount directly public long FieldTick { get; private set; } + public void QueuePacket(FieldPacketHandler handler, GameSession session, IByteReader reader) { + lock (queuedPackets) { + queuedPackets.Add((handler, session, reader)); + } + } + + private void ProcessPackets() { + lock (queuedPackets) { + foreach ((FieldPacketHandler handler, GameSession session, IByteReader reader) packet in queuedPackets) { + packet.handler.Handle(packet.session, packet.reader); + } + + queuedPackets.Clear(); + } + } + private void UpdateLoop() { while (!cancel.IsCancellationRequested) { if (!(DebugRenderer?.IsActive ?? false)) { @@ -261,6 +281,8 @@ private void UpdateLoop() { } public void Update() { + ProcessPackets(); + if (Players.IsEmpty) { return; } diff --git a/Maple2.Server.Game/Maple2.Server.Game.csproj b/Maple2.Server.Game/Maple2.Server.Game.csproj index 40b58f768..a7a9fc15a 100644 --- a/Maple2.Server.Game/Maple2.Server.Game.csproj +++ b/Maple2.Server.Game/Maple2.Server.Game.csproj @@ -15,37 +15,37 @@ - - + + - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + diff --git a/Maple2.Server.Game/PacketHandlers/AchievementHandler.cs b/Maple2.Server.Game/PacketHandlers/AchievementHandler.cs index 658a12d08..7722a5eb5 100644 --- a/Maple2.Server.Game/PacketHandlers/AchievementHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/AchievementHandler.cs @@ -1,12 +1,12 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class AchievementHandler : PacketHandler { +public class AchievementHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Achieve; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/AttendanceHandler.cs b/Maple2.Server.Game/PacketHandlers/AttendanceHandler.cs index 2a49183e5..09543f26d 100644 --- a/Maple2.Server.Game/PacketHandlers/AttendanceHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/AttendanceHandler.cs @@ -7,13 +7,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class AttendanceHandler : PacketHandler { +public class AttendanceHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Attendance; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/AttributePointHandler.cs b/Maple2.Server.Game/PacketHandlers/AttributePointHandler.cs index 329c93808..b8cd938fd 100644 --- a/Maple2.Server.Game/PacketHandlers/AttributePointHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/AttributePointHandler.cs @@ -1,12 +1,12 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class AttributePointHandler : PacketHandler { +public class AttributePointHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.AttributePoint; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/BadgeEquipHandler.cs b/Maple2.Server.Game/PacketHandlers/BadgeEquipHandler.cs index 6219be2e7..e1d9bfa23 100644 --- a/Maple2.Server.Game/PacketHandlers/BadgeEquipHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BadgeEquipHandler.cs @@ -1,14 +1,14 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; using Maple2.Server.Game.Packets; using Maple2.Model.Game; namespace Maple2.Server.Game.PacketHandlers; -public class BadgeEquipHandler : PacketHandler { +public class BadgeEquipHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.BadgeEquip; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/BeautyHandler.cs b/Maple2.Server.Game/PacketHandlers/BeautyHandler.cs index 6f08d6e50..015e3d163 100644 --- a/Maple2.Server.Game/PacketHandlers/BeautyHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BeautyHandler.cs @@ -9,7 +9,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -18,7 +18,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class BeautyHandler : PacketHandler { +public class BeautyHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Beauty; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/BlackMarketHandler.cs b/Maple2.Server.Game/PacketHandlers/BlackMarketHandler.cs index c2634a0c1..3e8f5e361 100644 --- a/Maple2.Server.Game/PacketHandlers/BlackMarketHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BlackMarketHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Server.World.Service; @@ -12,7 +12,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class BlackMarketHandler : PacketHandler { +public class BlackMarketHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.BlackMarket; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/BonusGameHandler.cs b/Maple2.Server.Game/PacketHandlers/BonusGameHandler.cs index 6bde10ad7..c8556eb74 100644 --- a/Maple2.Server.Game/PacketHandlers/BonusGameHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BonusGameHandler.cs @@ -3,14 +3,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Tools; namespace Maple2.Server.Game.PacketHandlers; -public class BonusGameHandler : PacketHandler { +public class BonusGameHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.BonusGame; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/BreakableHandler.cs b/Maple2.Server.Game/PacketHandlers/BreakableHandler.cs index f7ac9b6c2..21b8c2c79 100644 --- a/Maple2.Server.Game/PacketHandlers/BreakableHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BreakableHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Model.Skill; using Maple2.Server.Game.Packets; @@ -12,7 +12,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class BreakableHandler : PacketHandler { +public class BreakableHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Breakable; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/BuddyBadgeHandler.cs b/Maple2.Server.Game/PacketHandlers/BuddyBadgeHandler.cs index 5d2403a86..1e47e07fa 100644 --- a/Maple2.Server.Game/PacketHandlers/BuddyBadgeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BuddyBadgeHandler.cs @@ -2,14 +2,14 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class BuddyBadgeHandler : PacketHandler { +public class BuddyBadgeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.BuddyBadge; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/BuddyEmoteHandler.cs b/Maple2.Server.Game/PacketHandlers/BuddyEmoteHandler.cs index c4cb4930b..2a197190a 100644 --- a/Maple2.Server.Game/PacketHandlers/BuddyEmoteHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BuddyEmoteHandler.cs @@ -2,7 +2,7 @@ using Maple2.Model.Error; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -10,7 +10,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class BuddyEmoteHandler : PacketHandler { +public class BuddyEmoteHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.BuddyEmote; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/BuddyHandler.cs b/Maple2.Server.Game/PacketHandlers/BuddyHandler.cs index 0bee2a0e3..03b776b4c 100644 --- a/Maple2.Server.Game/PacketHandlers/BuddyHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/BuddyHandler.cs @@ -1,11 +1,11 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class BuddyHandler : PacketHandler { +public class BuddyHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Buddy; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs b/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs index cdad7e392..a6e00e8f0 100644 --- a/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Server.Game.Util; @@ -12,7 +12,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ChangeAttributesHandler : PacketHandler { +public class ChangeAttributesHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ChangeAttributes; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ChangeAttributesScrollHandler.cs b/Maple2.Server.Game/PacketHandlers/ChangeAttributesScrollHandler.cs index e4d3b2c3f..83de699f2 100644 --- a/Maple2.Server.Game/PacketHandlers/ChangeAttributesScrollHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ChangeAttributesScrollHandler.cs @@ -5,7 +5,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Server.Game.Util; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ChangeAttributesScrollHandler : PacketHandler { +public class ChangeAttributesScrollHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ChangeAttributesScroll; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ChannelHandler.cs b/Maple2.Server.Game/PacketHandlers/ChannelHandler.cs index fda3f6105..1b98170e6 100644 --- a/Maple2.Server.Game/PacketHandlers/ChannelHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ChannelHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ChannelHandler : PacketHandler { +public class ChannelHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Channel; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/CharacterInfoHandler.cs b/Maple2.Server.Game/PacketHandlers/CharacterInfoHandler.cs index 23cea192a..caae31419 100644 --- a/Maple2.Server.Game/PacketHandlers/CharacterInfoHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/CharacterInfoHandler.cs @@ -1,12 +1,12 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class CharacterInfoHandler : PacketHandler { +public class CharacterInfoHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.CharacterInfo; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/ChatStickerHandler.cs b/Maple2.Server.Game/PacketHandlers/ChatStickerHandler.cs index a89491f46..9282d8bca 100644 --- a/Maple2.Server.Game/PacketHandlers/ChatStickerHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ChatStickerHandler.cs @@ -3,13 +3,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ChatStickerHandler : PacketHandler { +public class ChatStickerHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ChatSticker; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/CheckCharacterNameHandler.cs b/Maple2.Server.Game/PacketHandlers/CheckCharacterNameHandler.cs index 0347655ab..87b449e6e 100644 --- a/Maple2.Server.Game/PacketHandlers/CheckCharacterNameHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/CheckCharacterNameHandler.cs @@ -2,7 +2,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -10,7 +10,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class CheckCharacterNameHandler : PacketHandler { +public class CheckCharacterNameHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.CheckCharName; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/ClubHandler.cs b/Maple2.Server.Game/PacketHandlers/ClubHandler.cs index b7bb88811..b34dfe75d 100644 --- a/Maple2.Server.Game/PacketHandlers/ClubHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ClubHandler.cs @@ -6,7 +6,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -16,7 +16,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ClubHandler : PacketHandler { +public class ClubHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Club; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/DungeonRoomHandler.cs b/Maple2.Server.Game/PacketHandlers/DungeonRoomHandler.cs index 001aeb967..6e785fbdc 100644 --- a/Maple2.Server.Game/PacketHandlers/DungeonRoomHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/DungeonRoomHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Error; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class DungeonRoomHandler : PacketHandler { +public class DungeonRoomHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RoomDungeon; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/EmoteHandler.cs b/Maple2.Server.Game/PacketHandlers/EmoteHandler.cs index 5f03cb3bf..82ec67291 100644 --- a/Maple2.Server.Game/PacketHandlers/EmoteHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/EmoteHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class EmoteHandler : PacketHandler { +public class EmoteHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Emote; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/EnchantScrollHandler.cs b/Maple2.Server.Game/PacketHandlers/EnchantScrollHandler.cs index f03dd6587..5ceb682f8 100644 --- a/Maple2.Server.Game/PacketHandlers/EnchantScrollHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/EnchantScrollHandler.cs @@ -6,7 +6,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -15,7 +15,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class EnchantScrollHandler : PacketHandler { +public class EnchantScrollHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.EnchantScroll; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/EnterEventFieldHandler.cs b/Maple2.Server.Game/PacketHandlers/EnterEventFieldHandler.cs index eeb95cbb9..5b7bec46a 100644 --- a/Maple2.Server.Game/PacketHandlers/EnterEventFieldHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/EnterEventFieldHandler.cs @@ -5,13 +5,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class EnterEventFieldHandler : PacketHandler { +public class EnterEventFieldHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.EnterEventField; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/EventRewardHandler.cs b/Maple2.Server.Game/PacketHandlers/EventRewardHandler.cs index 382a6c7ec..7a0bb4953 100644 --- a/Maple2.Server.Game/PacketHandlers/EventRewardHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/EventRewardHandler.cs @@ -7,13 +7,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class EventRewardHandler : PacketHandler { +public class EventRewardHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.EventReward; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/FallDamageHandler.cs b/Maple2.Server.Game/PacketHandlers/FallDamageHandler.cs index 72c9292d4..5b2b02f1f 100644 --- a/Maple2.Server.Game/PacketHandlers/FallDamageHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/FallDamageHandler.cs @@ -1,12 +1,12 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class FallDamageHandler : PacketHandler { +public class FallDamageHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.StateFallDamage; private const float BASE_FALL_DISTANCE = Constant.BlockSize * 5; diff --git a/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs b/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs new file mode 100644 index 000000000..ac85211e5 --- /dev/null +++ b/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs @@ -0,0 +1,27 @@ +using Maple2.PacketLib.Tools; +using Maple2.Server.Core.Constants; +using Maple2.Server.Core.Network; +using Serilog; +using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.Session; + +namespace Maple2.Server.Game.PacketHandlers.Field; + +// Safe for use for freely modifying state on Field. Handlers are run on Field's thread +public abstract class FieldPacketHandler : PacketHandler { + protected FieldPacketHandler() { } + + public override bool TryHandleDeferred(GameSession session, IByteReader reader) { + if (reader is not ByteReader packet) { + return false; + } + + if (session.Field is null) { + return false; + } + + session.Field.QueuePacket(this, session, reader); + + return true; + } +} diff --git a/Maple2.Server.Game/PacketHandlers/FieldEnterHandler.cs b/Maple2.Server.Game/PacketHandlers/FieldEnterHandler.cs index dfd3e4ff4..b08683c9c 100644 --- a/Maple2.Server.Game/PacketHandlers/FieldEnterHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/FieldEnterHandler.cs @@ -1,12 +1,12 @@ using System.Diagnostics; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class FieldEnterHandler : PacketHandler { +public class FieldEnterHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ResponseFieldEnter; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/FileHandler.cs b/Maple2.Server.Game/PacketHandlers/FileHandler.cs index 31f8ba379..6a29b4f22 100644 --- a/Maple2.Server.Game/PacketHandlers/FileHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/FileHandler.cs @@ -1,11 +1,11 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; using Serilog; namespace Maple2.Server.Game.PacketHandlers; -public class FileHashHandler : PacketHandler { +public class FileHashHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.FileHash; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/FishingHandler.cs b/Maple2.Server.Game/PacketHandlers/FishingHandler.cs index 3fccdfde2..a9b98c327 100644 --- a/Maple2.Server.Game/PacketHandlers/FishingHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/FishingHandler.cs @@ -8,7 +8,7 @@ using Maple2.Model.Metadata.FieldEntity; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -17,7 +17,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class FishingHandler : PacketHandler { +public class FishingHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Fishing; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/FunctionCubeHandler.cs b/Maple2.Server.Game/PacketHandlers/FunctionCubeHandler.cs index 9f0641706..442721f21 100644 --- a/Maple2.Server.Game/PacketHandlers/FunctionCubeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/FunctionCubeHandler.cs @@ -6,7 +6,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -14,7 +14,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class FunctionCubeHandler : PacketHandler { +public class FunctionCubeHandler : FieldPacketHandler { #region Autofac Autowired // ReSharper disable MemberCanBePrivate.Global diff --git a/Maple2.Server.Game/PacketHandlers/FurnishingStorageHandler.cs b/Maple2.Server.Game/PacketHandlers/FurnishingStorageHandler.cs index 10f18f288..e86ad3b02 100644 --- a/Maple2.Server.Game/PacketHandlers/FurnishingStorageHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/FurnishingStorageHandler.cs @@ -1,11 +1,11 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class FurnishingStorageHandler : PacketHandler { +public class FurnishingStorageHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.FurnishingStorage; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/GlobalPortalHandler.cs b/Maple2.Server.Game/PacketHandlers/GlobalPortalHandler.cs index 2b36e9039..560b96a4d 100644 --- a/Maple2.Server.Game/PacketHandlers/GlobalPortalHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/GlobalPortalHandler.cs @@ -5,7 +5,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; using Maple2.Server.World.Service; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class GlobalPortal : PacketHandler { +public class GlobalPortal : FieldPacketHandler { public override RecvOp OpCode => RecvOp.GlobalPortal; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/GroupChatHandler.cs b/Maple2.Server.Game/PacketHandlers/GroupChatHandler.cs index 4003efc33..de40bf61e 100644 --- a/Maple2.Server.Game/PacketHandlers/GroupChatHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/GroupChatHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class GroupChatHandler : PacketHandler { +public class GroupChatHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.GroupChat; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/GuideObjectSyncHandler.cs b/Maple2.Server.Game/PacketHandlers/GuideObjectSyncHandler.cs index 577cf9a7f..3516ebe3f 100644 --- a/Maple2.Server.Game/PacketHandlers/GuideObjectSyncHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/GuideObjectSyncHandler.cs @@ -3,13 +3,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class GuideObjectSyncHandler : PacketHandler { +public class GuideObjectSyncHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.GuideObjectSync; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/GuideRecordHandler.cs b/Maple2.Server.Game/PacketHandlers/GuideRecordHandler.cs index 88a4419e5..0aa923e19 100644 --- a/Maple2.Server.Game/PacketHandlers/GuideRecordHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/GuideRecordHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class GuideRecordHandler : PacketHandler { +public class GuideRecordHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.GuideRecord; diff --git a/Maple2.Server.Game/PacketHandlers/GuildHandler.cs b/Maple2.Server.Game/PacketHandlers/GuildHandler.cs index 65b435ab2..b0062ca54 100644 --- a/Maple2.Server.Game/PacketHandlers/GuildHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/GuildHandler.cs @@ -7,7 +7,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -17,7 +17,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class GuildHandler : PacketHandler { +public class GuildHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Guild; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/HomeActionHandler.cs b/Maple2.Server.Game/PacketHandlers/HomeActionHandler.cs index 63108d9c6..c0452f705 100644 --- a/Maple2.Server.Game/PacketHandlers/HomeActionHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/HomeActionHandler.cs @@ -5,7 +5,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class HomeActionHandler : PacketHandler { +public class HomeActionHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.HomeAction; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/HomeBankHandler.cs b/Maple2.Server.Game/PacketHandlers/HomeBankHandler.cs index a576ae35c..a876688cc 100644 --- a/Maple2.Server.Game/PacketHandlers/HomeBankHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/HomeBankHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class HomeBankHandler : PacketHandler { +public class HomeBankHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestHomeBank; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/HomeDoctorHandler.cs b/Maple2.Server.Game/PacketHandlers/HomeDoctorHandler.cs index e16d77432..5a63dc5cf 100644 --- a/Maple2.Server.Game/PacketHandlers/HomeDoctorHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/HomeDoctorHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class HomeDoctorHandler : PacketHandler { +public class HomeDoctorHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestHomeDoctor; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/HomeHandler.cs b/Maple2.Server.Game/PacketHandlers/HomeHandler.cs index b764abba7..a796b5bec 100644 --- a/Maple2.Server.Game/PacketHandlers/HomeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/HomeHandler.cs @@ -7,7 +7,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -17,7 +17,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class HomeHandler : PacketHandler { +public class HomeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestHome; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/InsigniaHandler.cs b/Maple2.Server.Game/PacketHandlers/InsigniaHandler.cs index ff66959fb..af32f988c 100644 --- a/Maple2.Server.Game/PacketHandlers/InsigniaHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/InsigniaHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class InsigniaHandler : PacketHandler { +public class InsigniaHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Insignia; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/InstrumentHandler.cs b/Maple2.Server.Game/PacketHandlers/InstrumentHandler.cs index de74d45c9..8fbec0ddc 100644 --- a/Maple2.Server.Game/PacketHandlers/InstrumentHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/InstrumentHandler.cs @@ -9,7 +9,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -17,7 +17,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class InstrumentHandler : PacketHandler { +public class InstrumentHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.PlayInstrument; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/InteractObjectHandler.cs b/Maple2.Server.Game/PacketHandlers/InteractObjectHandler.cs index fd2a69106..fc4298e36 100644 --- a/Maple2.Server.Game/PacketHandlers/InteractObjectHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/InteractObjectHandler.cs @@ -3,14 +3,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class InteractObjectHandler : PacketHandler { +public class InteractObjectHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.InteractObject; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemBoxHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemBoxHandler.cs index dcad60b14..7a9127dde 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemBoxHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemBoxHandler.cs @@ -3,13 +3,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemBoxHandler : PacketHandler { +public class ItemBoxHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemBox; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/ItemDismantleHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemDismantleHandler.cs index 4bbc94a13..ffab58c5a 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemDismantleHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemDismantleHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemDismantleHandler : PacketHandler { +public class ItemDismantleHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemDismantle; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemEnchantHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemEnchantHandler.cs index c28b2e34f..290ac8879 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemEnchantHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemEnchantHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemEnchantHandler : PacketHandler { +public class ItemEnchantHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemEnchant; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemEquipHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemEquipHandler.cs index 10e74b7f5..c52bb3861 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemEquipHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemEquipHandler.cs @@ -1,12 +1,12 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemEquipHandler : PacketHandler { +public class ItemEquipHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemEquip; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemExchangeScrollHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemExchangeScrollHandler.cs index 27f42e455..dd4076db2 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemExchangeScrollHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemExchangeScrollHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemExchangeScroll : PacketHandler { +public class ItemExchangeScroll : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemExchangeScroll; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemExtractionHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemExtractionHandler.cs index 2985cf58c..a57d1316a 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemExtractionHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemExtractionHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemExtractionHandler : PacketHandler { +public class ItemExtractionHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemExtractionScroll; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/ItemInventoryHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemInventoryHandler.cs index bc6ccd157..cbed74fcf 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemInventoryHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemInventoryHandler.cs @@ -3,7 +3,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -11,7 +11,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ItemInventoryHandler : PacketHandler { +public class ItemInventoryHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemInventory; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemLockHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemLockHandler.cs index 6487011ba..aac7be7b5 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemLockHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemLockHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemLockHandler : PacketHandler { +public class ItemLockHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemLock; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemMergeHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemMergeHandler.cs index d3a4e8134..5265bc79d 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemMergeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemMergeHandler.cs @@ -1,11 +1,11 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemMergeHandler : PacketHandler { +public class ItemMergeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemMerge; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemPickupHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemPickupHandler.cs index 9a04f68ac..34912fae2 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemPickupHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemPickupHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemPickupHandler : PacketHandler { +public class ItemPickupHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemPickup; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/ItemRepackHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemRepackHandler.cs index 1a0f65ba3..fcab14912 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemRepackHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemRepackHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ItemRepackHandler : PacketHandler { +public class ItemRepackHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemRepack; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemSocketHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemSocketHandler.cs index 025b6eca8..afe750bfe 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemSocketHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemSocketHandler.cs @@ -5,14 +5,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using static Maple2.Model.Error.ItemSocketError; namespace Maple2.Server.Game.PacketHandlers; -public class ItemSocketHandler : PacketHandler { +public class ItemSocketHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemSocketSystem; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemSocketScrollHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemSocketScrollHandler.cs index 5fb02bc0c..d8d617e6e 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemSocketScrollHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemSocketScrollHandler.cs @@ -4,14 +4,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using static Maple2.Model.Error.ItemSocketScrollError; namespace Maple2.Server.Game.PacketHandlers; -public class ItemSocketScrollHandler : PacketHandler { +public class ItemSocketScrollHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ItemSocketScroll; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ItemUseHandler.cs b/Maple2.Server.Game/PacketHandlers/ItemUseHandler.cs index da68ba653..8240122af 100644 --- a/Maple2.Server.Game/PacketHandlers/ItemUseHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ItemUseHandler.cs @@ -6,7 +6,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -16,7 +16,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ItemUseHandler : PacketHandler { +public class ItemUseHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemUse; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/JobHandler.cs b/Maple2.Server.Game/PacketHandlers/JobHandler.cs index 9cebd4e3e..902e90a28 100644 --- a/Maple2.Server.Game/PacketHandlers/JobHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/JobHandler.cs @@ -3,14 +3,14 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class JobHandler : PacketHandler { +public class JobHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Job; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/KeyTableHandler.cs b/Maple2.Server.Game/PacketHandlers/KeyTableHandler.cs index 747227904..05acd7ba2 100644 --- a/Maple2.Server.Game/PacketHandlers/KeyTableHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/KeyTableHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager.Config; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class KeyTableHandler : PacketHandler { +public class KeyTableHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.KeyTable; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/LapenshardHandler.cs b/Maple2.Server.Game/PacketHandlers/LapenshardHandler.cs index eda09e3d1..a6937dab8 100644 --- a/Maple2.Server.Game/PacketHandlers/LapenshardHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/LapenshardHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class LapenshardHandler : PacketHandler { +public class LapenshardHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Lapenshard; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/LiftableHandler.cs b/Maple2.Server.Game/PacketHandlers/LiftableHandler.cs index c9fc3a1a3..dd6b3f756 100644 --- a/Maple2.Server.Game/PacketHandlers/LiftableHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/LiftableHandler.cs @@ -1,13 +1,13 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class LiftableHandler : PacketHandler { +public class LiftableHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Liftable; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs b/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs index 1ffce167c..109a074f6 100644 --- a/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/LoadUgcMapHandler.cs @@ -6,14 +6,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class LoadUgcMapHandler : PacketHandler { +public class LoadUgcMapHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestLoadUgcMap; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/LogSendHandler.cs b/Maple2.Server.Game/PacketHandlers/LogSendHandler.cs index f5f152d78..fe133f196 100644 --- a/Maple2.Server.Game/PacketHandlers/LogSendHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/LogSendHandler.cs @@ -1,6 +1,6 @@ -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; -namespace Maple2.Server.Game.PacketHandlers; +namespace Maple2.Server.Core.PacketHandlers; public class LogSendHandler : LogSendHandler { } diff --git a/Maple2.Server.Game/PacketHandlers/MailHandler.cs b/Maple2.Server.Game/PacketHandlers/MailHandler.cs index 8e4d14d7b..9dd16dd6b 100644 --- a/Maple2.Server.Game/PacketHandlers/MailHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MailHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class MailHandler : PacketHandler { +public class MailHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Mail; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/MapleopolyHandler.cs b/Maple2.Server.Game/PacketHandlers/MapleopolyHandler.cs index f28f7f520..8799c665d 100644 --- a/Maple2.Server.Game/PacketHandlers/MapleopolyHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MapleopolyHandler.cs @@ -6,13 +6,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class MapleopolyHandler : PacketHandler { +public class MapleopolyHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Mapleopoly; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/MasteryHandler.cs b/Maple2.Server.Game/PacketHandlers/MasteryHandler.cs index 34a480923..60d5b24e4 100644 --- a/Maple2.Server.Game/PacketHandlers/MasteryHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MasteryHandler.cs @@ -5,14 +5,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Tools.Extensions; namespace Maple2.Server.Game.PacketHandlers; -public class MasteryHandler : PacketHandler { +public class MasteryHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Mastery; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/MentorHandler.cs b/Maple2.Server.Game/PacketHandlers/MentorHandler.cs index cd7ed115e..888e99b86 100644 --- a/Maple2.Server.Game/PacketHandlers/MentorHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MentorHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class MentorHandler : PacketHandler { +public class MentorHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Mentor; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/MeretMarketHandler.cs b/Maple2.Server.Game/PacketHandlers/MeretMarketHandler.cs index 7f4f1d7fc..828548f6c 100644 --- a/Maple2.Server.Game/PacketHandlers/MeretMarketHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MeretMarketHandler.cs @@ -7,7 +7,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -16,7 +16,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class MeretMarketHandler : PacketHandler { +public class MeretMarketHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.MeretMarket; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/MesoMarketHandler.cs b/Maple2.Server.Game/PacketHandlers/MesoMarketHandler.cs index af4e9bcb5..0a0a98fd3 100644 --- a/Maple2.Server.Game/PacketHandlers/MesoMarketHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MesoMarketHandler.cs @@ -4,14 +4,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using static Maple2.Model.Error.MesoMarketError; namespace Maple2.Server.Game.PacketHandlers; -public class MesoMarketHandler : PacketHandler { +public class MesoMarketHandler : FieldPacketHandler { // TODO: Periodically update this by querying `meso-market-sold` table private const int AVERAGE_PRICE = 200; diff --git a/Maple2.Server.Game/PacketHandlers/MesoPickupHandler.cs b/Maple2.Server.Game/PacketHandlers/MesoPickupHandler.cs index ead91e347..5c7e506a1 100644 --- a/Maple2.Server.Game/PacketHandlers/MesoPickupHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MesoPickupHandler.cs @@ -3,13 +3,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class MesoPickupHandler : PacketHandler { +public class MesoPickupHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestMesoPickup; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs b/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs index 5017b7bf2..0da621b1f 100644 --- a/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Manager.Field; using Maple2.Server.Game.Packets; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class MoveFieldHandler : PacketHandler { +public class MoveFieldHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestMoveField; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/MyInfoHandler.cs b/Maple2.Server.Game/PacketHandlers/MyInfoHandler.cs index 7819c6a5a..25ca5796f 100644 --- a/Maple2.Server.Game/PacketHandlers/MyInfoHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MyInfoHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class MyInfoHandler : PacketHandler { +public class MyInfoHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.MyInfo; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/NewsNotificationHandler.cs b/Maple2.Server.Game/PacketHandlers/NewsNotificationHandler.cs index 9b5bf8e47..2d567b564 100644 --- a/Maple2.Server.Game/PacketHandlers/NewsNotificationHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/NewsNotificationHandler.cs @@ -1,12 +1,12 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class NewsNotificationHandler : PacketHandler { +public class NewsNotificationHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.NewsNotification; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/NpcTalkHandler.cs b/Maple2.Server.Game/PacketHandlers/NpcTalkHandler.cs index 67690caed..6eb5fe713 100644 --- a/Maple2.Server.Game/PacketHandlers/NpcTalkHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/NpcTalkHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class NpcTalkHandler : PacketHandler { +public class NpcTalkHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.NpcTalk; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/PartyHandler.cs b/Maple2.Server.Game/PacketHandlers/PartyHandler.cs index aae632ffc..5953d17c7 100644 --- a/Maple2.Server.Game/PacketHandlers/PartyHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/PartyHandler.cs @@ -6,7 +6,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Server.World.Service; @@ -14,7 +14,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class PartyHandler : PacketHandler { +public class PartyHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Party; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/PartySearchHandler.cs b/Maple2.Server.Game/PacketHandlers/PartySearchHandler.cs index 514864ed1..279f5b17d 100644 --- a/Maple2.Server.Game/PacketHandlers/PartySearchHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/PartySearchHandler.cs @@ -3,7 +3,7 @@ using Maple2.Model.Game.Party; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Server.World.Service; @@ -11,7 +11,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class PartySearchHandler : PacketHandler { +public class PartySearchHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.PartySearch; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/PetHandler.cs b/Maple2.Server.Game/PacketHandlers/PetHandler.cs index 59d96ec79..5942c47de 100644 --- a/Maple2.Server.Game/PacketHandlers/PetHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/PetHandler.cs @@ -2,7 +2,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager.Config; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -10,7 +10,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class PetHandler : PacketHandler { +public class PetHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestPet; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/PetInventoryHandler.cs b/Maple2.Server.Game/PacketHandlers/PetInventoryHandler.cs index 5b41e63a7..ab0902c83 100644 --- a/Maple2.Server.Game/PacketHandlers/PetInventoryHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/PetInventoryHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class PetInventoryHandler : PacketHandler { +public class PetInventoryHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestPetInventory; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/PremiumClubHandler.cs b/Maple2.Server.Game/PacketHandlers/PremiumClubHandler.cs index e9d9482ca..7e2215fe3 100644 --- a/Maple2.Server.Game/PacketHandlers/PremiumClubHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/PremiumClubHandler.cs @@ -4,14 +4,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class PremiumClubHandler : PacketHandler { +public class PremiumClubHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.PremiumClub; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/PrestigeHandler.cs b/Maple2.Server.Game/PacketHandlers/PrestigeHandler.cs index 0dbbc6903..4cd85387e 100644 --- a/Maple2.Server.Game/PacketHandlers/PrestigeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/PrestigeHandler.cs @@ -4,13 +4,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class PrestigeHandler : PacketHandler { +public class PrestigeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Prestige; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/QuestHandler.cs b/Maple2.Server.Game/PacketHandlers/QuestHandler.cs index 741ceb34d..a19348577 100644 --- a/Maple2.Server.Game/PacketHandlers/QuestHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/QuestHandler.cs @@ -5,14 +5,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class QuestHandler : PacketHandler { +public class QuestHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Quest; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/QuitHandler.cs b/Maple2.Server.Game/PacketHandlers/QuitHandler.cs index 63a07cc09..3eda61870 100644 --- a/Maple2.Server.Game/PacketHandlers/QuitHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/QuitHandler.cs @@ -2,7 +2,7 @@ using Grpc.Core; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; using Maple2.Server.World.Service; @@ -11,7 +11,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class QuitHandler : PacketHandler { +public class QuitHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestQuit; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/RequestCubeHandler.cs b/Maple2.Server.Game/PacketHandlers/RequestCubeHandler.cs index 30930a636..6548e7f07 100644 --- a/Maple2.Server.Game/PacketHandlers/RequestCubeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/RequestCubeHandler.cs @@ -8,7 +8,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Manager.Items; using Maple2.Server.Game.Model; @@ -19,7 +19,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class RequestCubeHandler : PacketHandler { +public class RequestCubeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestCube; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/RequestReportHandler.cs b/Maple2.Server.Game/PacketHandlers/RequestReportHandler.cs index 19b35373b..440ee643c 100644 --- a/Maple2.Server.Game/PacketHandlers/RequestReportHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/RequestReportHandler.cs @@ -3,12 +3,12 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class RequestReportHandler : PacketHandler { +public class RequestReportHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestReport; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/ResolveDeathPenaltyHandler.cs b/Maple2.Server.Game/PacketHandlers/ResolveDeathPenaltyHandler.cs index 3205377ef..93f2168f5 100644 --- a/Maple2.Server.Game/PacketHandlers/ResolveDeathPenaltyHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ResolveDeathPenaltyHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ResolveDeathPenaltyHandler : PacketHandler { +public class ResolveDeathPenaltyHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ResolvePenalty; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/ResponseKeyHandler.cs b/Maple2.Server.Game/PacketHandlers/ResponseKeyHandler.cs index 504422bc8..6a2e46950 100644 --- a/Maple2.Server.Game/PacketHandlers/ResponseKeyHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ResponseKeyHandler.cs @@ -2,7 +2,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; using Maple2.Server.World.Service; @@ -11,7 +11,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ResponseKeyHandler : PacketHandler { +public class ResponseKeyHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ResponseKey; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/RevivalHandler.cs b/Maple2.Server.Game/PacketHandlers/RevivalHandler.cs index e79964b68..662dbcefb 100644 --- a/Maple2.Server.Game/PacketHandlers/RevivalHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/RevivalHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class RevivalHandler : PacketHandler { +public class RevivalHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Revival; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/RideHandler.cs b/Maple2.Server.Game/PacketHandlers/RideHandler.cs index ef8ef2196..7f4acea56 100644 --- a/Maple2.Server.Game/PacketHandlers/RideHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/RideHandler.cs @@ -6,7 +6,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Manager.Field; using Maple2.Server.Game.Model; @@ -15,7 +15,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class RideHandler : PacketHandler { +public class RideHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestRide; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/RideSyncHandler.cs b/Maple2.Server.Game/PacketHandlers/RideSyncHandler.cs index 7cc07cf8d..4949bd451 100644 --- a/Maple2.Server.Game/PacketHandlers/RideSyncHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/RideSyncHandler.cs @@ -2,14 +2,14 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Tools.Extensions; namespace Maple2.Server.Game.PacketHandlers; -public class RideSyncHandler : PacketHandler { +public class RideSyncHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RideSync; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/SetCraftModeHandler.cs b/Maple2.Server.Game/PacketHandlers/SetCraftModeHandler.cs index bbea43c92..f2d4008b8 100644 --- a/Maple2.Server.Game/PacketHandlers/SetCraftModeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SetCraftModeHandler.cs @@ -3,14 +3,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Tools.Extensions; namespace Maple2.Server.Game.PacketHandlers; -public class SetCraftModeHandler : PacketHandler { +public class SetCraftModeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestSetCraftMode; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/ShopHandler.cs b/Maple2.Server.Game/PacketHandlers/ShopHandler.cs index 7c7635484..fd7a9a379 100644 --- a/Maple2.Server.Game/PacketHandlers/ShopHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ShopHandler.cs @@ -1,12 +1,12 @@ using Maple2.Database.Storage; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class ShopHandler : PacketHandler { +public class ShopHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Shop; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/SkillBookHandler.cs b/Maple2.Server.Game/PacketHandlers/SkillBookHandler.cs index 016340256..0a0772cd0 100644 --- a/Maple2.Server.Game/PacketHandlers/SkillBookHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SkillBookHandler.cs @@ -2,14 +2,14 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Tools.Extensions; namespace Maple2.Server.Game.PacketHandlers; -public class SkillBookHandler : PacketHandler { +public class SkillBookHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestSkillBookTree; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/SkillHandler.cs b/Maple2.Server.Game/PacketHandlers/SkillHandler.cs index 84f9914b6..0f322018a 100644 --- a/Maple2.Server.Game/PacketHandlers/SkillHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SkillHandler.cs @@ -5,17 +5,17 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model; using Maple2.Server.Game.Model.Enum; using Maple2.Server.Game.Model.Skill; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class SkillHandler : PacketHandler { +public class SkillHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Skill; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/SkillMacroHandler.cs b/Maple2.Server.Game/PacketHandlers/SkillMacroHandler.cs index 29775a0d9..9b1442119 100644 --- a/Maple2.Server.Game/PacketHandlers/SkillMacroHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SkillMacroHandler.cs @@ -1,14 +1,14 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; using Maple2.Tools.Extensions; namespace Maple2.Server.Game.PacketHandlers; -public class SkillMacroHandler : PacketHandler { +public class SkillMacroHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.SkillMacro; private const int TOTAL_SKILL_MACROS = 3; diff --git a/Maple2.Server.Game/PacketHandlers/StateHandler.cs b/Maple2.Server.Game/PacketHandlers/StateHandler.cs index c86c1ed36..38c51d251 100644 --- a/Maple2.Server.Game/PacketHandlers/StateHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/StateHandler.cs @@ -1,12 +1,12 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class StateHandler : PacketHandler { +public class StateHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.State; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/StateSkillHandler.cs b/Maple2.Server.Game/PacketHandlers/StateSkillHandler.cs index 42c56c421..2951112c4 100644 --- a/Maple2.Server.Game/PacketHandlers/StateSkillHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/StateSkillHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class StateSkillHandler : PacketHandler { +public class StateSkillHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.StateSkill; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/StorageInventoryHandler.cs b/Maple2.Server.Game/PacketHandlers/StorageInventoryHandler.cs index 1a7ca9264..f2e31f01e 100644 --- a/Maple2.Server.Game/PacketHandlers/StorageInventoryHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/StorageInventoryHandler.cs @@ -1,12 +1,12 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager.Items; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class StorageInventoryHandler : PacketHandler { +public class StorageInventoryHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestItemStorage; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/SuperChatHandler.cs b/Maple2.Server.Game/PacketHandlers/SuperChatHandler.cs index 4a5c5981b..29d32357f 100644 --- a/Maple2.Server.Game/PacketHandlers/SuperChatHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SuperChatHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class SuperChatHandler : PacketHandler { +public class SuperChatHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.SuperWorldChat; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/SurvivalHandler.cs b/Maple2.Server.Game/PacketHandlers/SurvivalHandler.cs index 9b34068b3..5cb341f55 100644 --- a/Maple2.Server.Game/PacketHandlers/SurvivalHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SurvivalHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; using Maple2.Server.Game.Util; namespace Maple2.Server.Game.PacketHandlers; -public class SurvivalHandler : PacketHandler { +public class SurvivalHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Survival; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/SystemInfoHandler.cs b/Maple2.Server.Game/PacketHandlers/SystemInfoHandler.cs index f70859fb0..d06dab5dd 100644 --- a/Maple2.Server.Game/PacketHandlers/SystemInfoHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SystemInfoHandler.cs @@ -1,6 +1,6 @@ -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; -namespace Maple2.Server.Game.PacketHandlers; +namespace Maple2.Server.Core.PacketHandlers; public class SystemInfoHandler : SystemInfoHandler { } diff --git a/Maple2.Server.Game/PacketHandlers/SystemShopHandler.cs b/Maple2.Server.Game/PacketHandlers/SystemShopHandler.cs index b1215a939..aa1b5cd81 100644 --- a/Maple2.Server.Game/PacketHandlers/SystemShopHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/SystemShopHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class SystemShopHandler : PacketHandler { +public class SystemShopHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.SystemShop; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/TakeBoatHandler.cs b/Maple2.Server.Game/PacketHandlers/TakeBoatHandler.cs index 3e0a6ab5f..ef714254d 100644 --- a/Maple2.Server.Game/PacketHandlers/TakeBoatHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TakeBoatHandler.cs @@ -1,11 +1,11 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class TakeBoatHandler : PacketHandler { +public class TakeBoatHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.TakeBoat; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/TaxiHandler.cs b/Maple2.Server.Game/PacketHandlers/TaxiHandler.cs index 2ea287bec..03e7ed6f0 100644 --- a/Maple2.Server.Game/PacketHandlers/TaxiHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TaxiHandler.cs @@ -4,7 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -14,7 +14,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class TaxiHandler : PacketHandler { +public class TaxiHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestTaxi; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/TimeSyncHandler.cs b/Maple2.Server.Game/PacketHandlers/TimeSyncHandler.cs index ad0decf27..ec202c86d 100644 --- a/Maple2.Server.Game/PacketHandlers/TimeSyncHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TimeSyncHandler.cs @@ -1,6 +1,6 @@ -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; -namespace Maple2.Server.Game.PacketHandlers; +namespace Maple2.Server.Core.PacketHandlers; public class TimeSyncHandler : TimeSyncHandler { } diff --git a/Maple2.Server.Game/PacketHandlers/TombstoneHandler.cs b/Maple2.Server.Game/PacketHandlers/TombstoneHandler.cs index ce089170e..25f5d8877 100644 --- a/Maple2.Server.Game/PacketHandlers/TombstoneHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TombstoneHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Enum; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class TombstoneHandler : PacketHandler { +public class TombstoneHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Tombstone; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/TradeHandler.cs b/Maple2.Server.Game/PacketHandlers/TradeHandler.cs index 1a214851b..0f3c7945b 100644 --- a/Maple2.Server.Game/PacketHandlers/TradeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TradeHandler.cs @@ -1,6 +1,6 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -9,7 +9,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class TradeHandler : PacketHandler { +public class TradeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Trade; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/TriggerHandler.cs b/Maple2.Server.Game/PacketHandlers/TriggerHandler.cs index eae88917b..d6a063067 100644 --- a/Maple2.Server.Game/PacketHandlers/TriggerHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TriggerHandler.cs @@ -1,6 +1,6 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Model.Widget; using Maple2.Server.Game.Packets; @@ -8,7 +8,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class TriggerHandler : PacketHandler { +public class TriggerHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Trigger; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/TutorialItemHandler.cs b/Maple2.Server.Game/PacketHandlers/TutorialItemHandler.cs index 9d4f80738..e151366ab 100644 --- a/Maple2.Server.Game/PacketHandlers/TutorialItemHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/TutorialItemHandler.cs @@ -3,12 +3,12 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class TutorialItemHandler : PacketHandler { +public class TutorialItemHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestTutorialItem; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/UgcHandler.cs b/Maple2.Server.Game/PacketHandlers/UgcHandler.cs index 817317b67..89fb045bf 100644 --- a/Maple2.Server.Game/PacketHandlers/UgcHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/UgcHandler.cs @@ -8,7 +8,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model.Field; using Maple2.Server.Game.Packets; @@ -19,7 +19,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class UgcHandler : PacketHandler { +public class UgcHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Ugc; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/UserChatHandler.cs b/Maple2.Server.Game/PacketHandlers/UserChatHandler.cs index 7dc363156..aad219746 100644 --- a/Maple2.Server.Game/PacketHandlers/UserChatHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/UserChatHandler.cs @@ -8,7 +8,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -18,7 +18,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class UserChatHandler : PacketHandler { +public class UserChatHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.UserChat; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/UserEnvHandler.cs b/Maple2.Server.Game/PacketHandlers/UserEnvHandler.cs index 1013aead6..9ffdb089d 100644 --- a/Maple2.Server.Game/PacketHandlers/UserEnvHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/UserEnvHandler.cs @@ -1,12 +1,12 @@ using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class UserEnvHandler : PacketHandler { +public class UserEnvHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestUserEnv; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/UserSyncHandler.cs b/Maple2.Server.Game/PacketHandlers/UserSyncHandler.cs index 31b654021..eae4a3320 100644 --- a/Maple2.Server.Game/PacketHandlers/UserSyncHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/UserSyncHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class UserSyncHandler : PacketHandler { +public class UserSyncHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.UserSync; public override void Handle(GameSession session, IByteReader packet) { diff --git a/Maple2.Server.Game/PacketHandlers/VibrateHandler.cs b/Maple2.Server.Game/PacketHandlers/VibrateHandler.cs index 7309ce4d9..2087bbafa 100644 --- a/Maple2.Server.Game/PacketHandlers/VibrateHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/VibrateHandler.cs @@ -3,14 +3,14 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model.Skill; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class VibrateHandler : PacketHandler { +public class VibrateHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Vibrate; #region Autofac Autowired diff --git a/Maple2.Server.Game/PacketHandlers/WardrobeHandler.cs b/Maple2.Server.Game/PacketHandlers/WardrobeHandler.cs index 65808963f..05c0941bd 100644 --- a/Maple2.Server.Game/PacketHandlers/WardrobeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/WardrobeHandler.cs @@ -2,13 +2,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class WardrobeHandler : PacketHandler { +public class WardrobeHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Wardrobe; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/WeddingBillboardHandler.cs b/Maple2.Server.Game/PacketHandlers/WeddingBillboardHandler.cs index 3b53ca71e..38caa0b13 100644 --- a/Maple2.Server.Game/PacketHandlers/WeddingBillboardHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/WeddingBillboardHandler.cs @@ -7,7 +7,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Manager; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; @@ -17,7 +17,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class WeddingBillboardHandler : PacketHandler { +public class WeddingBillboardHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.WeddingBillboard; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/WeddingHandler.cs b/Maple2.Server.Game/PacketHandlers/WeddingHandler.cs index 1e9e92eb8..bd16862a0 100644 --- a/Maple2.Server.Game/PacketHandlers/WeddingHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/WeddingHandler.cs @@ -5,7 +5,7 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Model; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; @@ -13,7 +13,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class WeddingHandler : PacketHandler { +public class WeddingHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.Wedding; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/WorldMapHandler.cs b/Maple2.Server.Game/PacketHandlers/WorldMapHandler.cs index beec955ae..9db3173c8 100644 --- a/Maple2.Server.Game/PacketHandlers/WorldMapHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/WorldMapHandler.cs @@ -1,13 +1,13 @@ using Maple2.Model.Game; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; -using Maple2.Server.Core.PacketHandlers; +using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Game.Packets; using Maple2.Server.Game.Session; namespace Maple2.Server.Game.PacketHandlers; -public class WorldMapHandler : PacketHandler { +public class WorldMapHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.RequestWorldmap; private enum Command : byte { From 3ce97738e7915f2b99106cb7c77268e186647513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Mon, 2 Jun 2025 19:34:46 -0300 Subject: [PATCH 2/2] fixes Fix: Make a copy of the packet so it doesn't get mutated Fix: When migrating, don't defer to field Fix: force save changes --- Maple2.Server.Core/Network/PacketRouter.cs | 12 +- .../Field/FieldManager/FieldManager.cs | 42 ++-- .../PacketHandlers/ChangeAttributesHandler.cs | 179 ++++++------------ .../Field/FieldPacketHandler.cs | 9 +- .../PacketHandlers/HomeHandler.cs | 3 +- .../PacketHandlers/MoveFieldHandler.cs | 3 +- .../PacketHandlers/QuitHandler.cs | 3 +- Maple2.Server.Game/Session/GameSession.cs | 5 + 8 files changed, 109 insertions(+), 147 deletions(-) diff --git a/Maple2.Server.Core/Network/PacketRouter.cs b/Maple2.Server.Core/Network/PacketRouter.cs index f4f0dfb0f..21954552a 100644 --- a/Maple2.Server.Core/Network/PacketRouter.cs +++ b/Maple2.Server.Core/Network/PacketRouter.cs @@ -23,14 +23,14 @@ public PacketRouter(IEnumerable> packetHandlers) { public void OnPacket(object? sender, IByteReader reader) { var op = reader.Read(); PacketHandler? handler = handlers.GetValueOrDefault(op); - if (sender is T session) { - // Let another system schedule when to call Handle - if (handler?.TryHandleDeferred(session, reader) ?? false) { - return; - } + if (sender is not T session) return; - handler?.Handle(session, reader); + // Let another system schedule when to call Handle + if (handler?.TryHandleDeferred(session, reader) ?? false) { + return; } + + handler?.Handle(session, reader); } private void Register(ImmutableDictionary>.Builder builder, PacketHandler packetHandler) { diff --git a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs index 8e5e19c10..13bab7260 100644 --- a/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs +++ b/Maple2.Server.Game/Manager/Field/FieldManager/FieldManager.cs @@ -1,5 +1,4 @@ -using System.Collections.Concurrent; -using System.CommandLine; +using System.Buffers; using System.Diagnostics.CodeAnalysis; using System.Numerics; using System.Runtime.CompilerServices; @@ -70,7 +69,7 @@ public partial class FieldManager : IField { internal readonly FieldActor FieldActor; private readonly CancellationTokenSource cancel; private readonly Thread thread; - private readonly List<(FieldPacketHandler handler, GameSession session, IByteReader reader)> queuedPackets; + private readonly List<(FieldPacketHandler handler, GameSession session, ByteReader reader)> queuedPackets; private bool initialized; public bool Disposed { get; private set; } @@ -258,7 +257,7 @@ public virtual void Init() { // Use this to keep systems in sync. Do not use Environment.TickCount directly public long FieldTick { get; private set; } - public void QueuePacket(FieldPacketHandler handler, GameSession session, IByteReader reader) { + public void QueuePacket(FieldPacketHandler handler, GameSession session, ByteReader reader) { lock (queuedPackets) { queuedPackets.Add((handler, session, reader)); } @@ -266,8 +265,15 @@ public void QueuePacket(FieldPacketHandler handler, GameSession session, IByteRe private void ProcessPackets() { lock (queuedPackets) { - foreach ((FieldPacketHandler handler, GameSession session, IByteReader reader) packet in queuedPackets) { - packet.handler.Handle(packet.session, packet.reader); + foreach ((FieldPacketHandler handler, GameSession session, ByteReader reader) packet in queuedPackets) { + try { + if (packet.session.State is SessionState.Disconnected) { + continue; + } + packet.handler.Handle(packet.session, packet.reader); + } finally { + ArrayPool.Shared.Return(packet.reader.Buffer); + } } queuedPackets.Clear(); @@ -510,17 +516,15 @@ public bool UsePortal(GameSession session, int portalId, string password) { case CubePortalDestination.SelectedMap: session.MigrateOutOfInstance(srcPortal.TargetMapId); return true; - case CubePortalDestination.FriendHome: { - using GameStorage.Request db = session.GameStorage.Context(); - Home? home = db.GetHome(fieldPortal.HomeId); - if (home is null) { - session.Send(FieldEnterPacket.Error(MigrationError.s_move_err_no_server)); - return false; - } - - session.MigrateToInstance(home.Indoor.MapId, home.Indoor.OwnerId); - return true; + case CubePortalDestination.FriendHome: + Home? home = GetHome(session, fieldPortal); + if (home is null) { + session.Send(FieldEnterPacket.Error(MigrationError.s_move_err_no_server)); + return false; } + + session.MigrateToInstance(home.Indoor.MapId, home.Indoor.OwnerId); + return true; } return false; case PortalType.LeaveDungeon: @@ -631,6 +635,12 @@ public void VibrateObjects(DamageRecord record, Vector3 position) { } } + private static Home? GetHome(GameSession session, FieldPortal fieldPortal) { + using GameStorage.Request db = session.GameStorage.Context(); + Home? home = db.GetHome(fieldPortal.HomeId); + return home; + } + #region DebugUtils public void BroadcastAiMessage(ByteWriter packet) { foreach ((int objectId, FieldPlayer player) in Players) { diff --git a/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs b/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs index e0bce5734..330a24047 100644 --- a/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/ChangeAttributesHandler.cs @@ -13,12 +13,10 @@ namespace Maple2.Server.Game.PacketHandlers; -public class ChangeAttributesHandler : FieldPacketHandler -{ +public class ChangeAttributesHandler : FieldPacketHandler { public override RecvOp OpCode => RecvOp.ChangeAttributes; - private enum Command : byte - { + private enum Command : byte { Change = 0, Select = 2, Unknown5 = 5, @@ -31,11 +29,9 @@ private enum Command : byte // ReSharper restore All #endregion - public override void Handle(GameSession session, IByteReader packet) - { + public override void Handle(GameSession session, IByteReader packet) { var command = packet.Read(); - switch (command) - { + switch (command) { case Command.Change: HandleChange(session, packet); return; @@ -51,65 +47,52 @@ public override void Handle(GameSession session, IByteReader packet) } } - private void HandleChange(GameSession session, IByteReader packet) - { + private void HandleChange(GameSession session, IByteReader packet) { long itemUid = packet.ReadLong(); packet.ReadLong(); bool useLock = packet.ReadBool(); bool isSpecialAttribute = false; short attribute = -1; - if (useLock) - { + if (useLock) { isSpecialAttribute = packet.ReadBool(); attribute = packet.ReadShort(); } - lock (session.Item) - { + lock (session.Item) { // Validate item being changed + lock attributes/lock item if necessary. Item? item = session.Item.GetGear(itemUid) ?? session.Item.Inventory.Get(itemUid, InventoryType.Pets); - if (item == null) - { + if (item == null) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_not_in_inven)); return; } - if (!IsValidItem(item)) - { + if (!IsValidItem(item)) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_impossible)); return; } - if (item.Stats == null) - { + if (item.Stats == null) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_null_status)); return; } Item? lockItem = null; - if (useLock) - { + if (useLock) { ItemStats.Option itemOption = item.Stats[ItemStats.Type.Random]; - if (isSpecialAttribute) - { - if (!itemOption.Special.ContainsKey((SpecialAttribute)attribute)) - { + if (isSpecialAttribute) { + if (!itemOption.Special.ContainsKey((SpecialAttribute) attribute)) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_impossible)); return; } - } - else - { - if (!itemOption.Basic.ContainsKey((BasicAttribute)attribute)) - { + } else { + if (!itemOption.Basic.ContainsKey((BasicAttribute) attribute)) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_impossible)); return; } } lockItem = GetLockConsumeItem(session, item); - if (lockItem == null) - { + if (lockItem == null) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_default)); return; } @@ -120,65 +103,50 @@ private void HandleChange(GameSession session, IByteReader packet) (string tag1Str, int amount1, string tag2Str, int amount2, string tag3Str, int amount3) = item.Type.IsPet ? Lua.CalcGetPetRemakeIngredient(item.TimeChangedOption, item.Rarity, 0) : Lua.CalcGetItemRemakeIngredientNew(item.Type.Type, item.TimeChangedOption, item.Rarity, item.Metadata.Limit.Level); - if (Enum.TryParse(tag1Str, out ItemTag tag1)) - { + if (Enum.TryParse(tag1Str, out ItemTag tag1)) { ingredients.Add(new IngredientInfo(tag1, amount1)); } - if (Enum.TryParse(tag2Str, out ItemTag tag2)) - { + if (Enum.TryParse(tag2Str, out ItemTag tag2)) { ingredients.Add(new IngredientInfo(tag2, amount2)); } - if (Enum.TryParse(tag3Str, out ItemTag tag3)) - { + if (Enum.TryParse(tag3Str, out ItemTag tag3)) { ingredients.Add(new IngredientInfo(tag3, amount3)); } // Clone the item so we can preview changes without modifying existing item. Item changeItem = item.Clone(); - if (changeItem.Stats == null) - { // This should be impossible, but check again to make linter happy. + if (changeItem.Stats == null) { // This should be impossible, but check again to make linter happy. session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_null_status)); return; } // Randomize attributes. - if (lockItem != null) - { + if (lockItem != null) { // Add back the locked attribute. - if (isSpecialAttribute) - { - if (!ItemStatsCalc.UpdateRandomOption(ref changeItem, new LockOption((SpecialAttribute)attribute, true))) - { + if (isSpecialAttribute) { + if (!ItemStatsCalc.UpdateRandomOption(ref changeItem, new LockOption((SpecialAttribute) attribute, true))) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_default)); return; } - } - else - { - if (!ItemStatsCalc.UpdateRandomOption(ref changeItem, new LockOption((BasicAttribute)attribute, true))) - { + } else { + if (!ItemStatsCalc.UpdateRandomOption(ref changeItem, new LockOption((BasicAttribute) attribute, true))) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_default)); return; } } - } - else - { - if (!ItemStatsCalc.UpdateRandomOption(ref changeItem)) - { + } else { + if (!ItemStatsCalc.UpdateRandomOption(ref changeItem)) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_default)); return; } } // Consume required materials. - if (!session.Item.Inventory.Consume(ingredients)) - { + if (!session.Item.Inventory.Consume(ingredients)) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_lack_price)); return; } - if (lockItem != null && !session.Item.Inventory.Consume(lockItem.Uid, 1)) - { + if (lockItem != null && !session.Item.Inventory.Consume(lockItem.Uid, 1)) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_fail_lack_lock_consume_item)); return; } @@ -190,27 +158,22 @@ private void HandleChange(GameSession session, IByteReader packet) } } - private static void HandleSelect(GameSession session, IByteReader packet) - { + private static void HandleSelect(GameSession session, IByteReader packet) { long itemUid = packet.ReadLong(); - if (session.ChangeAttributesItem == null || session.ChangeAttributesItem.Uid != itemUid) - { + if (session.ChangeAttributesItem == null || session.ChangeAttributesItem.Uid != itemUid) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_fail_apply_option)); return; } - lock (session.Item) - { + lock (session.Item) { Item? item = session.Item.GetGear(itemUid) ?? session.Item.Inventory.Get(itemUid, InventoryType.Pets); - if (item == null) - { + if (item == null) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_not_in_inven)); return; } - if (item.Stats == null || session.ChangeAttributesItem.Stats == null) - { + if (item.Stats == null || session.ChangeAttributesItem.Stats == null) { session.Send(ChangeAttributesPacket.Error(s_itemremake_error_server_null_status)); return; } @@ -221,40 +184,33 @@ private static void HandleSelect(GameSession session, IByteReader packet) } } - private static void HandleUnknown5(GameSession session, IByteReader packet) - { + private static void HandleUnknown5(GameSession session, IByteReader packet) { long itemUid = packet.ReadLong(); packet.ReadLong(); // unknown bool useLock = packet.ReadBool(); - if (useLock) - { + if (useLock) { byte index = packet.ReadByte(); - var attribute = (BasicAttribute)packet.ReadShort(); + var attribute = (BasicAttribute) packet.ReadShort(); } packet.ReadBool(); packet.ReadInt(); } - private static void HandleForceFill(GameSession session, IByteReader packet) - { + private static void HandleForceFill(GameSession session, IByteReader packet) { long itemUid = packet.ReadLong(); int count = packet.ReadInt(); } // It needs to be epic or better armor and accessories at level 50 and above. - private static bool IsValidItem(Item item) - { - if (item.Rarity is < Constant.ChangeAttributesMinRarity or > Constant.ChangeAttributesMaxRarity) - { + private static bool IsValidItem(Item item) { + if (item.Rarity is < Constant.ChangeAttributesMinRarity or > Constant.ChangeAttributesMaxRarity) { return false; } - if (!item.Type.IsWeapon && !item.Type.IsArmor && !item.Type.IsAccessory && !item.Type.IsCombatPet) - { + if (!item.Type.IsWeapon && !item.Type.IsArmor && !item.Type.IsAccessory && !item.Type.IsCombatPet) { return false; } - if (item.Metadata.Limit.Level < Constant.ChangeAttributesMinLevel) - { + if (item.Metadata.Limit.Level < Constant.ChangeAttributesMinLevel) { return false; } @@ -262,23 +218,17 @@ private static bool IsValidItem(Item item) } // TODO: Rather than selecting first time, select best option (e.g. earliest expiring,untradeable) - public static Item? GetLockConsumeItem(GameSession session, Item changeItem) - { - if (!IsValidItem(changeItem)) - { + public static Item? GetLockConsumeItem(GameSession session, Item changeItem) { + if (!IsValidItem(changeItem)) { return null; } - if (changeItem.Type.IsWeapon) - { - return session.Item.Inventory.Filter(item => - { - if (item.Metadata.Property.Tag != ItemTag.LockItemOptionWeapon || item.IsExpired()) - { + if (changeItem.Type.IsWeapon) { + return session.Item.Inventory.Filter(item => { + if (item.Metadata.Property.Tag != ItemTag.LockItemOptionWeapon || item.IsExpired()) { return false; } - return item.Rarity switch - { + return item.Rarity switch { 4 => item.Id is 30000859 or 30001134 or 30001162, 5 => item.Id is 30001039 or 30050859 or 30051134 or 30051162, 6 => item.Id is 30060859 or 30061134 or 30061162, @@ -286,16 +236,12 @@ private static bool IsValidItem(Item item) }; }, InventoryType.Misc).FirstOrDefault(); } - if (changeItem.Type.IsArmor) - { - return session.Item.Inventory.Filter(item => - { - if (item.Metadata.Property.Tag != ItemTag.LockItemOptionArmor || item.IsExpired()) - { + if (changeItem.Type.IsArmor) { + return session.Item.Inventory.Filter(item => { + if (item.Metadata.Property.Tag != ItemTag.LockItemOptionArmor || item.IsExpired()) { return false; } - return item.Rarity switch - { + return item.Rarity switch { 4 => item.Id is 30000860 or 30000891 or 30000911 or 30001163, 5 => item.Id is 30001040 or 30050860 or 30050911 or 30051163 or 31002003, 6 => item.Id is 30060860 or 30060911 or 30061163 or 31001995, @@ -303,17 +249,13 @@ private static bool IsValidItem(Item item) }; }, InventoryType.Misc).FirstOrDefault(); } - if (changeItem.Type.IsAccessory) - { - return session.Item.Inventory.Filter(item => - { - if (item.Metadata.Property.Tag != ItemTag.LockItemOptionAccessory || item.IsExpired()) - { + if (changeItem.Type.IsAccessory) { + return session.Item.Inventory.Filter(item => { + if (item.Metadata.Property.Tag != ItemTag.LockItemOptionAccessory || item.IsExpired()) { return false; } // TODO: 30061170=(Event) Accessory Attribute Lock Scroll - return item.Rarity switch - { + return item.Rarity switch { 4 => item.Id is 30000889 or 30001038 or 30001164, 5 => item.Id is 30050889 or 30051038 or 30051164, 6 => item.Id is 30060889 or 30061038 or 30061164, @@ -321,12 +263,9 @@ private static bool IsValidItem(Item item) }; }, InventoryType.Misc).FirstOrDefault(); } - if (changeItem.Type.IsCombatPet) - { - return session.Item.Inventory.Filter(item => - { - if (item.Metadata.Property.Tag != ItemTag.LockItemOptionPet || item.IsExpired()) - { + if (changeItem.Type.IsCombatPet) { + return session.Item.Inventory.Filter(item => { + if (item.Metadata.Property.Tag != ItemTag.LockItemOptionPet || item.IsExpired()) { return false; } return item.Id is 30000923 or 30000924 or 30001308; diff --git a/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs b/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs index ac85211e5..28b5ab017 100644 --- a/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/Field/FieldPacketHandler.cs @@ -1,4 +1,5 @@ -using Maple2.PacketLib.Tools; +using System.Buffers; +using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; using Maple2.Server.Core.Network; using Serilog; @@ -20,7 +21,11 @@ public override bool TryHandleDeferred(GameSession session, IByteReader reader) return false; } - session.Field.QueuePacket(this, session, reader); + byte[] bufferCopy = ArrayPool.Shared.Rent(packet.Length); + Array.Copy(packet.Buffer, bufferCopy, packet.Length); + var packetCopy = new ByteReader(bufferCopy, packet.Position); + + session.Field.QueuePacket(this, session, packetCopy); return true; } diff --git a/Maple2.Server.Game/PacketHandlers/HomeHandler.cs b/Maple2.Server.Game/PacketHandlers/HomeHandler.cs index a796b5bec..7aced9c68 100644 --- a/Maple2.Server.Game/PacketHandlers/HomeHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/HomeHandler.cs @@ -7,6 +7,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; +using Maple2.Server.Core.PacketHandlers; using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Packets; @@ -17,7 +18,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class HomeHandler : FieldPacketHandler { +public class HomeHandler : PacketHandler { public override RecvOp OpCode => RecvOp.RequestHome; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs b/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs index 0da621b1f..987f8ee30 100644 --- a/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/MoveFieldHandler.cs @@ -4,6 +4,7 @@ using Maple2.Model.Metadata; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; +using Maple2.Server.Core.PacketHandlers; using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Manager.Field; @@ -13,7 +14,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class MoveFieldHandler : FieldPacketHandler { +public class MoveFieldHandler : PacketHandler { public override RecvOp OpCode => RecvOp.RequestMoveField; private enum Command : byte { diff --git a/Maple2.Server.Game/PacketHandlers/QuitHandler.cs b/Maple2.Server.Game/PacketHandlers/QuitHandler.cs index 3eda61870..863954215 100644 --- a/Maple2.Server.Game/PacketHandlers/QuitHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/QuitHandler.cs @@ -2,6 +2,7 @@ using Grpc.Core; using Maple2.PacketLib.Tools; using Maple2.Server.Core.Constants; +using Maple2.Server.Core.PacketHandlers; using Maple2.Server.Game.PacketHandlers.Field; using Maple2.Server.Core.Packets; using Maple2.Server.Game.Session; @@ -11,7 +12,7 @@ namespace Maple2.Server.Game.PacketHandlers; -public class QuitHandler : FieldPacketHandler { +public class QuitHandler : PacketHandler { public override RecvOp OpCode => RecvOp.RequestQuit; #region Autofac Autowired diff --git a/Maple2.Server.Game/Session/GameSession.cs b/Maple2.Server.Game/Session/GameSession.cs index 4a48e7a9d..be8ef6063 100644 --- a/Maple2.Server.Game/Session/GameSession.cs +++ b/Maple2.Server.Game/Session/GameSession.cs @@ -558,6 +558,7 @@ public RewardRecord GetRewardContent(int id) { long exp = 0; if (baseMetadata.ExpTableId > 0) { if (baseMetadata.ExpTableId > 100000 && TableMetadata.RewardContentTable.ExpStaticEntries.TryGetValue(baseMetadata.ExpTableId, out exp)) { + // Static exp entry found } else if (TableMetadata.ExpTable.ExpBase.TryGetValue(baseMetadata.ExpTableId, out IReadOnlyDictionary? expTable)) { exp = expTable[Player.Value.Character.Level]; } @@ -699,6 +700,7 @@ public void MigrateOutOfInstance(int mapId) { MigrateOutResponse response = World.MigrateOut(request); var endpoint = new IPEndPoint(IPAddress.Parse(response.IpAddress), response.Port); Send(MigrationPacket.GameToGame(endpoint, response.Token, mapId)); + Player.Value.Character.MapId = mapId; Player.Value.Character.ReturnChannel = 0; State = SessionState.ChangeMap; } catch (RpcException ex) { @@ -709,6 +711,7 @@ public void MigrateOutOfInstance(int mapId) { } } + #region Dispose ~GameSession() => Dispose(false); @@ -763,6 +766,8 @@ protected override void Dispose(bool disposing) { Achievement.Save(db); Quest.Save(db); Dungeon.Save(db); + db.Commit(); + db.SaveChanges(); } base.Dispose(disposing);