From 49cf0d868dbe334a744c94b38dde3d245e4c5eb4 Mon Sep 17 00:00:00 2001 From: Kelvin <7710340+kOchirasu@users.noreply.github.com> Date: Sun, 9 Jun 2024 23:37:25 -0700 Subject: [PATCH] ExpUp for guild checkin --- .../PacketHandlers/LogSendHandler.cs | 10 +++++++--- Maple2.Server.Game/Manager/GuildManager.cs | 8 ++++---- Maple2.Server.Game/PacketHandlers/GuildHandler.cs | 2 +- Maple2.Server.Web/Controllers/GuildController.cs | 5 +++++ Maple2.Server.World/Containers/GuildManager.cs | 14 ++++---------- 5 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 Maple2.Server.Web/Controllers/GuildController.cs diff --git a/Maple2.Server.Core/PacketHandlers/LogSendHandler.cs b/Maple2.Server.Core/PacketHandlers/LogSendHandler.cs index 326205df..70b14ca6 100644 --- a/Maple2.Server.Core/PacketHandlers/LogSendHandler.cs +++ b/Maple2.Server.Core/PacketHandlers/LogSendHandler.cs @@ -30,9 +30,13 @@ private enum Command : byte { if (message.Contains("exception")) { // Read remaining string string debug = packet.ReadUnicodeString(); - SockExceptionInfo exceptionInfo = ErrorParserHelper.Parse(debug); - Logger.Error("[{message}] [SendOp: {sendOp}] [Offset: {offset}] [Hint: {hint}]", - message, exceptionInfo.SendOp, exceptionInfo.Offset, exceptionInfo.Hint); + try { + SockExceptionInfo exceptionInfo = ErrorParserHelper.Parse(debug); + Logger.Error("[{message}] [SendOp: {sendOp}] [Offset: {offset}] [Hint: {hint}]", + message, exceptionInfo.SendOp, exceptionInfo.Offset, exceptionInfo.Hint); + } catch (ArgumentException) { + Logger.Error("[{Message}] {Debug}", message, debug); + } session.OnError?.Invoke(session, debug); return; diff --git a/Maple2.Server.Game/Manager/GuildManager.cs b/Maple2.Server.Game/Manager/GuildManager.cs index 0a688530..4e56e048 100644 --- a/Maple2.Server.Game/Manager/GuildManager.cs +++ b/Maple2.Server.Game/Manager/GuildManager.cs @@ -21,7 +21,7 @@ public class GuildManager : IDisposable { public long Id => Guild?.Id ?? 0; public long LeaderId => Guild?.LeaderCharacterId ?? 0; - private GuildTable.Property properties; + public GuildTable.Property Properties { get; private set; } private readonly CancellationTokenSource tokenSource; private readonly ILogger logger = Log.Logger.ForContext(); @@ -300,16 +300,16 @@ public class GuildManager : IDisposable { return null; } - [MemberNotNull(nameof(properties))] + [MemberNotNull(nameof(Properties))] private void UpdateProperties() { int experience = Guild?.Experience ?? 0; KeyValuePair result = session.TableMetadata.GuildTable.Properties .OrderBy(entry => entry.Value.Experience) .MinBy(entry => entry.Value.Experience > experience); - properties = result.Value; + Properties = result.Value; if (Guild != null) { - Guild.Capacity = properties.Capacity; + Guild.Capacity = Properties.Capacity; } } diff --git a/Maple2.Server.Game/PacketHandlers/GuildHandler.cs b/Maple2.Server.Game/PacketHandlers/GuildHandler.cs index 65f714bd..6e6b870e 100644 --- a/Maple2.Server.Game/PacketHandlers/GuildHandler.cs +++ b/Maple2.Server.Game/PacketHandlers/GuildHandler.cs @@ -487,7 +487,7 @@ private enum Command : byte { } session.Send(GuildPacket.CheckedIn()); - // TODO: Send EXP + session.Exp.AddExp(session.Guild.Properties.Experience); // TODO: Guild coins // TODO: Achievement 22400001, 22400002 } catch (RpcException) { /* ignored */ } diff --git a/Maple2.Server.Web/Controllers/GuildController.cs b/Maple2.Server.Web/Controllers/GuildController.cs new file mode 100644 index 00000000..711b532b --- /dev/null +++ b/Maple2.Server.Web/Controllers/GuildController.cs @@ -0,0 +1,5 @@ +namespace Maple2.Server.Web.Controllers; + +public class GuildController { + +} diff --git a/Maple2.Server.World/Containers/GuildManager.cs b/Maple2.Server.World/Containers/GuildManager.cs index 75ceb8fd..31651b74 100644 --- a/Maple2.Server.World/Containers/GuildManager.cs +++ b/Maple2.Server.World/Containers/GuildManager.cs @@ -336,15 +336,9 @@ public class GuildManager : IDisposable { } private GuildTable.Property GuildProperty() { - long exp = Guild.Experience; - foreach (GuildTable.Property property in TableMetadata.GuildTable.Properties.Values) { - if (exp > property.Experience) { - continue; - } - - return property; - } - - return TableMetadata.GuildTable.Properties.Values.First(); + return TableMetadata.GuildTable.Properties.Values + .OrderBy(entry => entry.Experience) + .MinBy(entry => entry.Experience > Guild.Experience) + ?? TableMetadata.GuildTable.Properties.Values.First(); } }