From 6a8d584ea911c2c69dea77081965436ec5d1b070 Mon Sep 17 00:00:00 2001 From: milimoe Date: Tue, 22 Jul 2025 01:18:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OshimaModules/Skills/dddovo/平衡强化.cs | 10 +- OshimaServers/AnonymousServer.cs | 8 +- OshimaServers/Service/FunGameConstant.cs | 1 + OshimaServers/Service/FunGameService.cs | 50 +- OshimaWebAPI/Controllers/FunGameController.cs | 453 ++++++++---------- OshimaWebAPI/Services/RainBOTService.cs | 6 +- 6 files changed, 255 insertions(+), 273 deletions(-) diff --git a/OshimaModules/Skills/dddovo/平衡强化.cs b/OshimaModules/Skills/dddovo/平衡强化.cs index 7ae93a5..1888ef0 100644 --- a/OshimaModules/Skills/dddovo/平衡强化.cs +++ b/OshimaModules/Skills/dddovo/平衡强化.cs @@ -25,12 +25,13 @@ namespace Oshima.FunGame.OshimaModules.Skills { public override long Id => Skill.Id; public override string Name => Skill.Name; - public override string Description => $"敏捷提高 20% [ {敏捷提升:0.##} ] 点,然后将目前的力量补充到与敏捷持平,持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。"; + public override string Description => $"敏捷提高 20% [ {敏捷提升:0.##} ] 点,然后将当前力量补充到敏捷的 {平衡系数 * 100:0.##}%{(Skill.Character != null ? $" [ {Skill.Character.AGI * 平衡系数:0.##} ]" : "")},持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。"; public override bool Durative => true; public override double Duration => 30; public override DispelledType DispelledType => DispelledType.CannotBeDispelled; - private double 敏捷提升 => 0.2 * Skill.Character?.BaseAGI ?? 0; + private double 敏捷提升 => (0.2 * Skill.Character?.BaseAGI) ?? 0.2; + private double 平衡系数 => 0.5 + 0.1 * (Skill.Level - 1); private double 本次提升的敏捷 = 0; private double 本次提升的力量 = 0; @@ -43,9 +44,10 @@ namespace Oshima.FunGame.OshimaModules.Skills 本次提升的敏捷 = character.BaseAGI * 0.2; character.ExAGI += 本次提升的敏捷; 本次提升的力量 = 0; - if (character.STR < character.AGI) + double 平衡敏捷 = character.AGI * 平衡系数; + if (character.STR < 平衡敏捷) { - 本次提升的力量 = character.AGI - character.STR; + 本次提升的力量 = 平衡敏捷 - character.STR; character.ExSTR += 本次提升的力量; } character.Recovery(pastHP, pastMP, pastMaxHP, pastMaxMP); diff --git a/OshimaServers/AnonymousServer.cs b/OshimaServers/AnonymousServer.cs index 65d007c..55d1708 100644 --- a/OshimaServers/AnonymousServer.cs +++ b/OshimaServers/AnonymousServer.cs @@ -135,7 +135,7 @@ namespace Oshima.FunGame.OshimaServers foreach (string filePath in filePaths) { string fileName = Path.GetFileNameWithoutExtension(filePath); - PluginConfig pc = FunGameService.GetUserConfig(fileName); + PluginConfig pc = FunGameService.GetUserConfig(fileName, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); @@ -161,7 +161,7 @@ namespace Oshima.FunGame.OshimaServers } if (updateQuest || updateExplore) { - FunGameService.SetUserConfig(user.Id, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(user.Id, pc, user); } if (FunGameConstant.UserLastVisitStore.TryGetValue(user.Id, out LastStoreModel? value) && value != null && (DateTime.Now - value.LastTime).TotalMinutes > 2) { @@ -205,7 +205,7 @@ namespace Oshima.FunGame.OshimaServers foreach (string filePath in filePaths) { string fileName = Path.GetFileNameWithoutExtension(filePath); - PluginConfig pc = FunGameService.GetUserConfig(fileName); + PluginConfig pc = FunGameService.GetUserConfig(fileName, out _); pc.Add("signed", false); pc.Add("logon", false); pc.Add("exploreTimes", FunGameConstant.MaxExploreTimes); @@ -384,7 +384,7 @@ namespace Oshima.FunGame.OshimaServers public string SCList(Dictionary data) { - string result = ""; + string result; SQLHelper? sql = Controller.SQLHelper; if (sql != null) diff --git a/OshimaServers/Service/FunGameConstant.cs b/OshimaServers/Service/FunGameConstant.cs index edce64e..ea9c255 100644 --- a/OshimaServers/Service/FunGameConstant.cs +++ b/OshimaServers/Service/FunGameConstant.cs @@ -18,6 +18,7 @@ namespace Oshima.FunGame.OshimaServers.Service public const int MaxExploreTimes = 60; public const int DrawCardReduce = 1000; public const int DrawCardReduce_Material = 5; + public const int SemaphoreSlimTimeout = 5000; public static List Characters { get; } = []; public static List Skills { get; } = []; public static List PassiveSkills { get; } = []; diff --git a/OshimaServers/Service/FunGameService.cs b/OshimaServers/Service/FunGameService.cs index d9820f0..cc2b5a7 100644 --- a/OshimaServers/Service/FunGameService.cs +++ b/OshimaServers/Service/FunGameService.cs @@ -1,4 +1,5 @@ using System.Text; +using Milimoe.FunGame; using Milimoe.FunGame.Core.Api.Transmittal; using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; @@ -965,7 +966,7 @@ namespace Oshima.FunGame.OshimaServers.Service tasks.Add(Task.Run(() => { string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); - PluginConfig pc = GetUserConfig(fileNameWithoutExtension); + PluginConfig pc = GetUserConfig(fileNameWithoutExtension, out _); if (pc.Count > 0) { User user = GetUser(pc); @@ -982,7 +983,7 @@ namespace Oshima.FunGame.OshimaServers.Service item.IsTradable = true; } } - SetUserConfig(user.Id, pc, user, false); + SetUserConfigAndReleaseSemaphoreSlim(user.Id, pc, user, false); } else { @@ -2016,7 +2017,13 @@ namespace Oshima.FunGame.OshimaServers.Service if (daily is null) { // 生成每日商店 - daily = new($"{user.Username}的每日商店"); + daily = new($"{user.Username}的每日商店") + { + AutoRefresh = true, + NextRefreshDate = DateTime.Today.AddHours(4), + RefreshInterval = 1 + }; + daily.UpdateRefreshTime(daily.NextRefreshDate); for (int i = 0; i < 4; i++) { Item item; @@ -3282,8 +3289,8 @@ namespace Oshima.FunGame.OshimaServers.Service itemsTradeRecord.Add("offeree", offereeItems); itemsTradeRecord.SaveConfig(); - SetUserConfig(user.Id, pc, user); - SetUserConfig(user2.Id, pc2, user2); + SetUserConfigAndReleaseSemaphoreSlim(user.Id, pc, user); + SetUserConfigAndReleaseSemaphoreSlim(user2.Id, pc2, user2); AddNotice(offer.Offeror, $"报价编号 {offerId} 已交易完成,请通过【查报价{offerId}】查询报价记录。"); @@ -3960,7 +3967,7 @@ namespace Oshima.FunGame.OshimaServers.Service public static void ReleaseUserSemaphoreSlim(string key) { - if (FunGameConstant.UserSemaphoreSlims.TryGetValue(key, out SemaphoreSlim? obj) && obj != null) + if (FunGameConstant.UserSemaphoreSlims.TryGetValue(key, out SemaphoreSlim? obj) && obj != null && obj.CurrentCount == 0) { obj.Release(); } @@ -3968,37 +3975,40 @@ namespace Oshima.FunGame.OshimaServers.Service public static void ReleaseUserSemaphoreSlim(long uid) => ReleaseUserSemaphoreSlim(uid.ToString()); - public static void SetUserConfig(string key, PluginConfig pc, User user, bool updateLastTime = true) + public static void SetUserConfig(string key, PluginConfig pc, User user, bool updateLastTime = true, bool release = true) { if (updateLastTime) user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); - if (FunGameConstant.UserSemaphoreSlims.TryGetValue(key, out SemaphoreSlim? obj) && obj != null) + if (release && FunGameConstant.UserSemaphoreSlims.TryGetValue(key, out SemaphoreSlim? obj) && obj != null && obj.CurrentCount == 0) { obj.Release(); } } - public static void SetUserConfig(long uid, PluginConfig pc, User user, bool updateLastTime = true) => SetUserConfig(uid.ToString(), pc, user, updateLastTime); + public static void SetUserConfigAndReleaseSemaphoreSlim(long uid, PluginConfig pc, User user, bool updateLastTime = true) => SetUserConfig(uid.ToString(), pc, user, updateLastTime); + + public static void SetUserConfigButNotRelease(long uid, PluginConfig pc, User user, bool updateLastTime = true) => SetUserConfig(uid.ToString(), pc, user, updateLastTime, false); - public static PluginConfig GetUserConfig(string key) + public static PluginConfig GetUserConfig(string key, out bool isTimeout) { - if (FunGameConstant.UserSemaphoreSlims.TryGetValue(key, out SemaphoreSlim? obj) && obj != null) + isTimeout = false; + try { - obj.Wait(); + SemaphoreSlim obj = FunGameConstant.UserSemaphoreSlims.GetOrAdd(key, _ => new SemaphoreSlim(1, 1)); + obj.Wait(FunGameConstant.SemaphoreSlimTimeout); + PluginConfig pc = new("saved", key); + pc.LoadConfig(); + return pc; } - else + catch { - obj = new(1, 1); - obj.Wait(); - FunGameConstant.UserSemaphoreSlims[key] = obj; + isTimeout = true; + return new("saved", "0"); } - PluginConfig pc = new("saved", key); - pc.LoadConfig(); - return pc; } - public static PluginConfig GetUserConfig(long uid) => GetUserConfig(uid.ToString()); + public static PluginConfig GetUserConfig(long uid, out bool isTimeout) => GetUserConfig(uid.ToString(), out isTimeout); public static bool CheckSemaphoreSlim(string key) { diff --git a/OshimaWebAPI/Controllers/FunGameController.cs b/OshimaWebAPI/Controllers/FunGameController.cs index a1dc4fc..9cdb295 100644 --- a/OshimaWebAPI/Controllers/FunGameController.cs +++ b/OshimaWebAPI/Controllers/FunGameController.cs @@ -271,7 +271,7 @@ namespace Oshima.FunGame.WebAPI.Controllers public string GetSkillInfo([FromQuery] long? uid = null, [FromQuery] long? id = null) { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List msg = []; Character? character = null; @@ -312,7 +312,7 @@ namespace Oshima.FunGame.WebAPI.Controllers public string GetSkillInfo_Name([FromQuery] long? uid = null, [FromQuery] string? name = null) { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List msg = []; Character? character = null; @@ -353,7 +353,7 @@ namespace Oshima.FunGame.WebAPI.Controllers public string GetItemInfo([FromQuery] long? uid = null, [FromQuery] long? id = null) { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List msg = []; Character? character = null; @@ -389,7 +389,7 @@ namespace Oshima.FunGame.WebAPI.Controllers public string GetItemInfo_Name([FromQuery] long? uid = null, [FromQuery] string? name = null) { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List msg = []; Character? character = null; @@ -475,8 +475,8 @@ namespace Oshima.FunGame.WebAPI.Controllers character.Recovery(); user.Inventory.Characters.Add(character); FunGameConstant.UserIdAndUsername[user.Id] = user; - PluginConfig pc = FunGameService.GetUserConfig(user.Id); - FunGameService.SetUserConfig(user.Id, pc, user); + PluginConfig pc = FunGameService.GetUserConfig(user.Id, out _); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(user.Id, pc, user); return $"创建存档成功!你的昵称是【{username}】。"; } else @@ -498,7 +498,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } else if (uid != null && uid != 0) { - PluginConfig pc = FunGameService.GetUserConfig(uid.Value); + PluginConfig pc = FunGameService.GetUserConfig(uid.Value, out _); if (pc.Count == 0) { @@ -506,7 +506,7 @@ namespace Oshima.FunGame.WebAPI.Controllers user.Inventory.Credits = 5000; user.Inventory.Characters.Add(new CustomCharacter(uid.Value, username)); FunGameConstant.UserIdAndUsername[uid.Value] = user; - FunGameService.SetUserConfig(uid.Value, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(uid.Value, pc, user); return $"创建存档成功!你的昵称是【{username}】。"; } else @@ -551,7 +551,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -593,7 +593,7 @@ namespace Oshima.FunGame.WebAPI.Controllers builder.AppendLine($"注册时间:{user.RegTime.ToString(General.GeneralDateTimeFormatChinese)}"); builder.AppendLine($"最后访问:{user.LastTime.ToString(General.GeneralDateTimeFormatChinese)}"); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return builder.ToString().Trim(); } else @@ -608,7 +608,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -646,7 +646,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = $"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法改名!"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -661,7 +661,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -712,7 +712,7 @@ namespace Oshima.FunGame.WebAPI.Controllers renameExamine.SaveConfig(); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); TaskUtility.NewTask(() => { @@ -741,7 +741,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); bool isConfirm = confirm ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); EntityModuleConfig emc = new("randomcustom", userid.ToString()); emc.LoadConfig(); @@ -783,7 +783,7 @@ namespace Oshima.FunGame.WebAPI.Controllers character.InitialSPD = newCustom.InitialSPD; character.InitialHR = newCustom.InitialHR; character.InitialMR = newCustom.InitialMR; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); emc.Clear(); emc.SaveConfig(); return $"你已完成重随属性确认,新的自建角色属性如下:\r\n" + @@ -820,7 +820,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } newCustom = new CustomCharacter(FunGameConstant.CustomCharacterId, ""); FunGameService.SetCharacterPrimaryAttribute(newCustom); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); emc.Add("newCustom", newCustom); emc.SaveConfig(); return $"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},获取到重随属性预览如下:\r\n" + @@ -877,7 +877,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -907,7 +907,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -929,7 +929,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int showPage = page ?? 1; if (showPage <= 0) showPage = 1; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List list = []; @@ -1005,7 +1005,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int showPage = page ?? 1; if (showPage <= 0) showPage = 1; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List list = []; @@ -1127,7 +1127,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int itemtype = type ?? -1; if (showPage <= 0) showPage = 1; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List list = []; @@ -1238,7 +1238,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int showPage = page ?? 1; if (showPage <= 0) showPage = 1; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); List list = []; @@ -1298,7 +1298,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -1311,7 +1311,7 @@ namespace Oshima.FunGame.WebAPI.Controllers else { user.Inventory.Characters.Add(new CustomCharacter(FunGameConstant.CustomCharacterId, user.Username)); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"恭喜你成功创建了一个自建角色【{user.Username}】,请查看你的角色库存!"; } } @@ -1327,13 +1327,13 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); List result = FunGameService.DrawCards(user, false, true); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return result; } else @@ -1348,13 +1348,13 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); List result = FunGameService.DrawCards(user, true, true); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return result; } else @@ -1369,13 +1369,13 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); List result = FunGameService.DrawCards(user, false, false); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return result; } else @@ -1390,13 +1390,13 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); List result = FunGameService.DrawCards(user, true, false); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return result; } else @@ -1412,7 +1412,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); double useMaterials = materials ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -1425,7 +1425,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int reward = reduce / 10 * 2000; user.Inventory.Credits += reward; user.Inventory.Materials -= reduce; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"兑换成功!你消耗了 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},增加了 {reward} {General.GameplayEquilibriumConstant.InGameCurrency}!"; } else @@ -1450,7 +1450,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int cIndex = seq ?? 0; bool isSimple = simple ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -1502,7 +1502,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int cIndex = seq ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -1546,7 +1546,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int cIndex = seq ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -1590,7 +1590,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int itemIndex = seq ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -1629,7 +1629,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int showPage = page ?? 1; if (showPage <= 0) showPage = 1; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -1740,7 +1740,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int characterIndex = c ?? 0; int itemIndex = i ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -1794,7 +1794,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } if (character != null && item != null && character.Equip(item)) { - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"角色:{character.ToStringWithLevelWithOutUser()}\r\n装备{ItemSet.GetQualityTypeName(item.QualityType)}{ItemSet.GetItemTypeName(item.ItemType)}【{item.Name}】成功!" + $"({ItemSet.GetEquipSlotTypeName(item.EquipSlotType)}栏位)\r\n物品描述:{item.Description}"; } @@ -1827,7 +1827,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int characterIndex = c ?? 0; EquipSlotType type = (EquipSlotType)(i ?? 0); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -1841,7 +1841,7 @@ namespace Oshima.FunGame.WebAPI.Controllers if (item != null && user.Inventory.Items.Where(i => i.Guid == item.Guid).FirstOrDefault() is Item itemInventory) { itemInventory.EquipSlotType = EquipSlotType.None; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"角色:{character.ToStringWithLevelWithOutUser()}\r\n取消装备{ItemSet.GetQualityTypeName(item.QualityType)}{ItemSet.GetItemTypeName(item.ItemType)}【{item.Name}】成功!({ItemSet.GetEquipSlotTypeName(type)}栏位)"; } else @@ -1879,17 +1879,14 @@ namespace Oshima.FunGame.WebAPI.Controllers long enemyid = eqq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); bool showAllRound = all ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); - - PluginConfig pc2 = FunGameService.GetUserConfig(enemyid); - FunGameService.ReleaseUserSemaphoreSlim(enemyid); - User? user1 = null, user2 = null; + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); + if (pc.Count > 0) { user1 = FunGameService.GetUser(pc); - FunGameService.SetUserConfig(userid, pc, user1); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user1); } else { @@ -1897,6 +1894,9 @@ namespace Oshima.FunGame.WebAPI.Controllers return [noSaved]; } + PluginConfig pc2 = FunGameService.GetUserConfig(enemyid, out _); + FunGameService.ReleaseUserSemaphoreSlim(enemyid); + if (pc2.Count > 0) { user2 = FunGameService.GetUser(pc2); @@ -1958,17 +1958,14 @@ namespace Oshima.FunGame.WebAPI.Controllers long enemyid = eqq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); bool showAllRound = all ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); - - PluginConfig pc2 = FunGameService.GetUserConfig(enemyid); - FunGameService.ReleaseUserSemaphoreSlim(enemyid); - User? user1 = null, user2 = null; + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); + if (pc.Count > 0) { user1 = FunGameService.GetUser(pc); - FunGameService.SetUserConfig(userid, pc, user1); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user1); if (user1.Inventory.Squad.Count == 0) { @@ -1981,6 +1978,9 @@ namespace Oshima.FunGame.WebAPI.Controllers return [noSaved]; } + PluginConfig pc2 = FunGameService.GetUserConfig(enemyid, out _); + FunGameService.ReleaseUserSemaphoreSlim(enemyid); + if (pc2.Count > 0) { user2 = FunGameService.GetUser(pc2); @@ -2063,7 +2063,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int useTimes = times ?? 1; List charactersIndex = characters?.ToList() ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -2128,7 +2128,7 @@ namespace Oshima.FunGame.WebAPI.Controllers if (FunGameService.UseItem(item, useTimes, user, targets, out string msg)) { - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); } else { @@ -2184,7 +2184,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } List charactersIndex = characters?.ToList() ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -2227,7 +2227,7 @@ namespace Oshima.FunGame.WebAPI.Controllers bool result = FunGameService.UseItems(items, user, targets, msgs); if (result) { - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); } else { @@ -2273,7 +2273,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int itemToIndex = id2 ?? 0; bool isCharacter = c ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -2367,7 +2367,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -2410,7 +2410,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int[] itemsIndex = idsAndCids.Item1; int[] charactersIndex = idsAndCids.Item2; - PluginConfig pc = FunGameService.GetUserConfig(uid); + PluginConfig pc = FunGameService.GetUserConfig(uid, out _); if (pc.Count > 0) { @@ -2528,7 +2528,7 @@ namespace Oshima.FunGame.WebAPI.Controllers if (result) { - FunGameService.SetUserConfig(uid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(uid, pc, user); } else { @@ -2560,7 +2560,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int characterIndex = c ?? 0; int upCount = count ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -2605,7 +2605,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg += $"\r\n该角色已升级至满级,恭喜!"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -2628,7 +2628,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = id ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -2666,7 +2666,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -2741,7 +2741,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"突破成功!角色 [ {character} ] 目前突破进度:{character.LevelBreak + 1}/{General.GameplayEquilibriumConstant.LevelBreakList.Count}。" + $"{(character.LevelBreak + 1 == General.GameplayEquilibriumConstant.LevelBreakList.Count ? "\r\n该角色已完成全部的突破阶段,恭喜!" : @@ -2774,17 +2774,17 @@ namespace Oshima.FunGame.WebAPI.Controllers } long targetid = target ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); - FunGameService.ReleaseUserSemaphoreSlim(userid); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); string msg = ""; if (user.IsAdmin || userid > 0) { - PluginConfig pc2 = FunGameService.GetUserConfig(targetid); + PluginConfig pc2 = FunGameService.GetUserConfig(targetid, out _); if (pc2.Count > 0) { User user2 = FunGameService.GetUser(pc2); @@ -2884,7 +2884,7 @@ namespace Oshima.FunGame.WebAPI.Controllers FunGameService.ReleaseUserSemaphoreSlim(targetid); return $"此物品不存在!"; } - FunGameService.SetUserConfig(targetid, pc2, user2); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(targetid, pc2, user2); } else { @@ -2901,6 +2901,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { + FunGameService.ReleaseUserSemaphoreSlim(userid); return noSaved; } } @@ -2915,17 +2916,17 @@ namespace Oshima.FunGame.WebAPI.Controllers } long targetid = target ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); - FunGameService.ReleaseUserSemaphoreSlim(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); string msg = ""; if (user.IsAdmin || userid > 0) { - PluginConfig pc2 = FunGameService.GetUserConfig(targetid); + PluginConfig pc2 = FunGameService.GetUserConfig(targetid, out _); if (pc2.Count > 0) { User user2 = FunGameService.GetUser(pc2); @@ -2951,7 +2952,7 @@ namespace Oshima.FunGame.WebAPI.Controllers FunGameService.ReleaseUserSemaphoreSlim(targetid); return $"游戏中不存在 ID 为 {magicId} 的魔法技能,生成失败!"; } - FunGameService.SetUserConfig(targetid, pc2, user2); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(targetid, pc2, user2); } else { @@ -2980,7 +2981,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int[] ids = items ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3024,7 +3025,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { user.Inventory.Materials += totalGained; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"分解完毕!分解 {ids.Length} 件,库存允许分解 {dict.Count} 件,成功 {successCount} 件,得到了 {totalGained} {General.GameplayEquilibriumConstant.InGameMaterial}!"; } else @@ -3054,7 +3055,7 @@ namespace Oshima.FunGame.WebAPI.Controllers return "数量必须大于0!"; } - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3102,7 +3103,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { user.Inventory.Materials += totalGained; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"分解完毕!分解 {useCount} 件物品,成功 {successCount} 件,得到了 {totalGained} {General.GameplayEquilibriumConstant.InGameMaterial}!"; } else @@ -3138,7 +3139,7 @@ namespace Oshima.FunGame.WebAPI.Controllers return $"品质序号输入错误!"; } - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3185,7 +3186,7 @@ namespace Oshima.FunGame.WebAPI.Controllers totalGained = successCount * gained; user.Inventory.Materials += totalGained; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"分解完毕!成功分解 {successCount} 件{qualityName}物品,得到了 {totalGained} {General.GameplayEquilibriumConstant.InGameMaterial}!"; } else @@ -3210,7 +3211,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); List itemsIndex = items?.ToList() ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3255,7 +3256,7 @@ namespace Oshima.FunGame.WebAPI.Controllers user.Inventory.Items.Remove(mfks[0]); user.Inventory.Items.Remove(mfks[1]); user.Inventory.Items.Remove(mfks[2]); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"合成魔法卡包成功!获得魔法卡包:\r\n{item.ToStringInventory(true)}"; } else @@ -3292,7 +3293,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3310,7 +3311,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } user.Inventory.MainCharacter = character; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"设置主战角色成功:{character}"; } else @@ -3335,7 +3336,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3359,7 +3360,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } user.Inventory.Training[character.Id] = DateTime.Now; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"角色 [{character}] 开始练级,请过一段时间后进行【练级结算】,时间越长奖励越丰盛!练级时间上限 2880 分钟(48小时),超时将不会再产生收益,请按时领取奖励!练级结束时,角色将根据练级总分钟数获得生命回复和魔法回复。"; } else @@ -3383,7 +3384,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3431,7 +3432,7 @@ namespace Oshima.FunGame.WebAPI.Controllers user.Inventory.Items.Add(item); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"角色 [ {character} ] 练级结束,{msg}"; } else @@ -3461,7 +3462,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -3508,7 +3509,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int characterIndex = c ?? 0; string skillName = s ?? ""; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -3558,7 +3559,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int characterIndex = c ?? 0; string skillName = s ?? ""; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3656,7 +3657,7 @@ namespace Oshima.FunGame.WebAPI.Controllers skill.Level += 1; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); needy.Remove("角色等级"); needy.Remove("角色突破进度"); string msg = $"{isStudy}技能成功!本次消耗:{string.Join(",", needy.Select(kv => kv.Key + " * " + kv.Value))},成功将【{skill.Name}】技能提升至 {skill.Level} 级!"; @@ -3706,7 +3707,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -3745,7 +3746,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3838,7 +3839,7 @@ namespace Oshima.FunGame.WebAPI.Controllers na.Level += 1; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); needy.Remove("角色等级"); needy.Remove("角色突破进度"); string msg = $"角色 [ {character} ] 升级【{na.Name}】成功!本次消耗:{string.Join(",", needy.Select(kv => kv.Key + " * " + kv.Value))},成功将【{na.Name}】提升至 {na.Level} 级!"; @@ -3911,7 +3912,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int bossIndex = index ?? 0; bool showAllRound = all ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3942,7 +3943,7 @@ namespace Oshima.FunGame.WebAPI.Controllers boss.EP = boss2.EP; msgs.Add($"挑战 Boss 失败,请稍后再来!"); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msgs; } @@ -3967,7 +3968,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -3997,7 +3998,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } user.Inventory.Squad.Add(character.Id); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"添加小队角色成功:{character}\r\n当前小队角色如下:\r\n{FunGameService.GetSquadInfo(user.Inventory.Characters, user.Inventory.Squad)}"; } else @@ -4022,7 +4023,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int characterIndex = c ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4046,7 +4047,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } user.Inventory.Squad.Remove(character.Id); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"移除小队角色成功:{character}\r\n当前小队角色如下:\r\n{FunGameService.GetSquadInfo(user.Inventory.Characters, user.Inventory.Squad)}"; } else @@ -4071,7 +4072,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int[] characterIndexs = c ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4093,7 +4094,7 @@ namespace Oshima.FunGame.WebAPI.Controllers user.Inventory.Squad.Add(character.Id); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"设置小队成员成功!当前小队角色如下:\r\n{FunGameService.GetSquadInfo(user.Inventory.Characters, user.Inventory.Squad)}"; } else @@ -4118,14 +4119,14 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int[] characterIndexs = c ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); user.Inventory.Squad.Clear(); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"清空小队成员成功!"; } else @@ -4149,7 +4150,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -4176,7 +4177,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int bossIndex = index ?? 0; bool showAllRound = all ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4212,7 +4213,7 @@ namespace Oshima.FunGame.WebAPI.Controllers boss.EP = boss2.EP; msgs.Add($"挑战 Boss 失败,请稍后再来!"); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msgs; } @@ -4234,7 +4235,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4245,7 +4246,7 @@ namespace Oshima.FunGame.WebAPI.Controllers string msg = FunGameService.CheckQuestList(quests); quests.SaveConfig(); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -4261,7 +4262,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4280,7 +4281,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = "你当前没有正在进行中的任务!"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -4297,7 +4298,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int questid = id ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); List msgs = []; if (pc.Count > 0) @@ -4353,7 +4354,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msgs.Add($"没有找到序号为 {questid} 的任务!请使用【任务列表】指令来检查你的任务列表!"); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msgs; } @@ -4369,7 +4370,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4381,7 +4382,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { quests.SaveConfig(); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return "任务结算已完成,请查看你的任务列表!"; } @@ -4398,7 +4399,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); bool showSquad = squad ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -4433,7 +4434,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4468,7 +4469,7 @@ namespace Oshima.FunGame.WebAPI.Controllers pc.Add("signed", true); pc.Add("days", days + 1); pc.Add("lastTime", newLastTime); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg + "\r\n>>> 请发送【帮助】来获取更多玩法指令!<<<"; } else @@ -4484,7 +4485,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long clubid = id ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4528,7 +4529,7 @@ namespace Oshima.FunGame.WebAPI.Controllers emc.Add("club", club); emc.SaveConfig(); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -4543,7 +4544,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4587,7 +4588,7 @@ namespace Oshima.FunGame.WebAPI.Controllers string msg = $"退出社团 [ {club.Name} ] 成功!"; pc.Add("club", 0); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -4604,7 +4605,7 @@ namespace Oshima.FunGame.WebAPI.Controllers bool isPublic = @public ?? false; string clubPrefix = prefix ?? ""; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -4664,7 +4665,7 @@ namespace Oshima.FunGame.WebAPI.Controllers string msg = $"创建社团 [ {club.Name} ] (编号 {clubid})成功!"; pc.Add("club", clubid); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -4679,7 +4680,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -4749,7 +4750,7 @@ namespace Oshima.FunGame.WebAPI.Controllers int showPage = page ?? 1; if (showPage <= 0) showPage = 1; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -4896,11 +4897,13 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); + long clubid = 0; if (pc.TryGetValue("club", out object? value) && long.TryParse(value.ToString(), out long temp)) { @@ -4909,7 +4912,6 @@ namespace Oshima.FunGame.WebAPI.Controllers if (clubid == 0) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } @@ -4918,13 +4920,11 @@ namespace Oshima.FunGame.WebAPI.Controllers Club? club = emc.Get("club"); if (club is null) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"不存在编号为 {clubid} 的社团!"; } if (club.Master?.Id != userid) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你不是社团的社长,没有权限使用此指令!"; } @@ -4935,7 +4935,7 @@ namespace Oshima.FunGame.WebAPI.Controllers System.IO.File.Delete(path); msg = $"解散社团 [ {club.Name} ] 成功!"; pc.Add("club", 0); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); string directoryPath = $@"{AppDomain.CurrentDomain.BaseDirectory}configs/saved"; if (Directory.Exists(directoryPath)) { @@ -4943,7 +4943,7 @@ namespace Oshima.FunGame.WebAPI.Controllers foreach (string filePath in filePaths) { string fileName = Path.GetFileNameWithoutExtension(filePath); - PluginConfig pc2 = FunGameService.GetUserConfig(fileName); + PluginConfig pc2 = FunGameService.GetUserConfig(fileName, out _); if (pc2.TryGetValue("club", out value) && long.TryParse(value.ToString(), out long userClub) && userClub == clubid) { User user2 = FunGameService.GetUser(pc2); @@ -4959,7 +4959,6 @@ namespace Oshima.FunGame.WebAPI.Controllers } catch { - FunGameService.ReleaseUserSemaphoreSlim(userid); msg = $"解散社团 [ {club.Name} ] 失败,请联系服务器管理员处理!"; } return msg; @@ -4978,11 +4977,12 @@ namespace Oshima.FunGame.WebAPI.Controllers long applicant = id ?? 0; bool isApproval = approval ?? false; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); string msg = ""; if (pc.TryGetValue("club", out object? value) && long.TryParse(value.ToString(), out long userClub) && userClub != 0) @@ -4992,13 +4992,12 @@ namespace Oshima.FunGame.WebAPI.Controllers Club? club = emc.Get("club"); if (club is null) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } if (club.Master?.Id == userid || club.Admins.ContainsKey(userid)) { - PluginConfig pc2 = FunGameService.GetUserConfig(applicant); + PluginConfig pc2 = FunGameService.GetUserConfig(applicant, out _); if (pc2.ContainsKey("user")) { User user2 = FunGameService.GetUser(pc2); @@ -5015,7 +5014,7 @@ namespace Oshima.FunGame.WebAPI.Controllers if (!pc2.ContainsKey("club") || (pc2.TryGetValue("club", out value) && long.TryParse(value.ToString(), out long user2Club) && user2Club == 0)) { pc2.Add("club", userClub); - FunGameService.SetUserConfig(applicant, pc2, user2); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(applicant, pc2, user2); } else { @@ -5032,31 +5031,25 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); FunGameService.ReleaseUserSemaphoreSlim(applicant); return $"对方并没有申请此社团!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); FunGameService.ReleaseUserSemaphoreSlim(applicant); return $"对方似乎还没创建存档呢!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你没有权限审批申请人!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } - - FunGameService.SetUserConfig(userid, pc, user); return msg; } else @@ -5072,11 +5065,12 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long kickid = id ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); string msg = ""; if (pc.TryGetValue("club", out object? value) && long.TryParse(value.ToString(), out long userClub) && userClub != 0) @@ -5086,7 +5080,6 @@ namespace Oshima.FunGame.WebAPI.Controllers Club? club = emc.Get("club"); if (club is null) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } @@ -5094,7 +5087,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { if (!club.Admins.ContainsKey(kickid) || (club.Master?.Id == userid && club.Admins.ContainsKey(kickid))) { - PluginConfig pc2 = FunGameService.GetUserConfig(kickid); + PluginConfig pc2 = FunGameService.GetUserConfig(kickid, out _); if (pc2.ContainsKey("user")) { User user2 = FunGameService.GetUser(pc2); @@ -5106,44 +5099,37 @@ namespace Oshima.FunGame.WebAPI.Controllers club.Admins.Remove(user2.Id); msg += $"操作成功,已将 [ {user2.Username} ] 踢出社团 [ {club.Name} ] !"; pc2.Add("club", 0); - FunGameService.SetUserConfig(kickid, pc2, user2); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(kickid, pc2, user2); emc.Add("club", club); emc.SaveConfig(); } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); FunGameService.ReleaseUserSemaphoreSlim(kickid); return $"对方并不在此社团中,无法踢出!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); FunGameService.ReleaseUserSemaphoreSlim(kickid); return $"对方似乎还没创建存档呢!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你没有权限踢出管理员!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你没有权限踢出成员!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } - - FunGameService.SetUserConfig(userid, pc, user); return msg; } else @@ -5160,11 +5146,13 @@ namespace Oshima.FunGame.WebAPI.Controllers string name = part?.Trim().ToLower() ?? ""; string[] values = args ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { User user = FunGameService.GetUser(pc); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); + string msg; if (pc.TryGetValue("club", out object? value) && long.TryParse(value.ToString(), out long userClub) && userClub != 0) @@ -5174,7 +5162,6 @@ namespace Oshima.FunGame.WebAPI.Controllers Club? club = emc.Get("club"); if (club is null) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } @@ -5188,7 +5175,6 @@ namespace Oshima.FunGame.WebAPI.Controllers case "name": if (!isMaster) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "只有社长可以修改社团名称!"; } if (values.Length > 0) @@ -5200,20 +5186,17 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "社团名称只能包含2至15个字符!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "请提供新的社团名称!"; } break; case "prefix": if (!isMaster) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "只有社长可以修改社团前缀!"; } string pattern = @"^[a-zA-Z0-9-_=+*%#^~.?!;:'"",]{3,4}$"; @@ -5222,7 +5205,6 @@ namespace Oshima.FunGame.WebAPI.Controllers string clubPrefix = values[0]; if (!Regex.IsMatch(clubPrefix, pattern)) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"社团的前缀只能包含总共3-4个英文字母和数字、允许的特殊字符,此前缀不满足条件。"; } club.Prefix = clubPrefix; @@ -5230,7 +5212,6 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "请提供新的社团前缀!"; } break; @@ -5243,7 +5224,6 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "请提供新的社团描述!"; } break; @@ -5255,7 +5235,6 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "请提供正确的布尔值(true 或 false)来设置加入是否需要批准!"; } break; @@ -5267,14 +5246,12 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "请提供正确的布尔值(true 或 false)来设置社团是否公开/私密!"; } break; case "setadmin": if (!isMaster) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "只有社长可以设置社团管理员!"; } if (values.Length > 0 && long.TryParse(values[0], out long id) && club.Members.ContainsKey(id) && FunGameConstant.UserIdAndUsername.TryGetValue(id, out User? user2) && user2 != null) @@ -5284,14 +5261,12 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "指定的用户不是此社团的成员!"; } break; case "setnotadmin": if (!isMaster) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "只有社长可以取消社团管理员!"; } if (values.Length > 0 && long.TryParse(values[0], out id) && club.Members.ContainsKey(id) && FunGameConstant.UserIdAndUsername.TryGetValue(id, out user2) && user2 != null) @@ -5307,14 +5282,12 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "指定的用户不是此社团的成员!"; } break; case "setmaster": if (!isMaster) { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "只有社长可以转让社团!"; } if (values.Length > 0 && long.TryParse(values[0], out id) && club.Members.ContainsKey(id) && FunGameConstant.UserIdAndUsername.TryGetValue(id, out user2) && user2 != null) @@ -5326,12 +5299,10 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return "指定的用户不是此社团的成员!"; } break; default: - FunGameService.ReleaseUserSemaphoreSlim(userid); return "未知的社团设置项,设置失败。"; } @@ -5340,17 +5311,13 @@ namespace Oshima.FunGame.WebAPI.Controllers } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你没有权限修改社团设置!"; } } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return $"你当前没有加入任何社团!"; } - - FunGameService.SetUserConfig(userid, pc, user); return msg; } else @@ -5365,7 +5332,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -5375,7 +5342,7 @@ namespace Oshima.FunGame.WebAPI.Controllers stores.LoadConfig(); string msg = FunGameService.CheckDailyStore(stores, user); stores.SaveConfig(); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -5397,7 +5364,7 @@ namespace Oshima.FunGame.WebAPI.Controllers return "数量必须大于0!"; } - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -5428,7 +5395,7 @@ namespace Oshima.FunGame.WebAPI.Controllers stores.Add("daily", daily); stores.SaveConfig(); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -5444,7 +5411,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long goodid = id ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -5498,7 +5465,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); string itemName = name ?? ""; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -5540,7 +5507,7 @@ namespace Oshima.FunGame.WebAPI.Controllers user.Inventory.Items.Add(newItem); string msg = $"恭喜你获得礼包【{itemName}】一份!"; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -5649,7 +5616,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long[] characterIds = cids ?? []; int characterCount = characterIds.Length; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -5758,7 +5725,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } pc.Add("exploreTimes", exploreTimes); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return (msg, exploreId); } @@ -5781,7 +5748,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); string msg = ""; @@ -5842,7 +5809,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg; if (pc.Count > 0) @@ -5868,7 +5835,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = $"你目前没有角色正在探索。"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -5884,7 +5851,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -5902,7 +5869,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -5918,7 +5885,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -5958,7 +5925,7 @@ namespace Oshima.FunGame.WebAPI.Controllers $"150 {General.GameplayEquilibriumConstant.InGameCurrency} / 50% 生命值以下的角色\r\n" + $"50 {General.GameplayEquilibriumConstant.InGameCurrency} / 50% 生命值以上的角色"; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -5973,7 +5940,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6013,7 +5980,7 @@ namespace Oshima.FunGame.WebAPI.Controllers $"0.6 {General.GameplayEquilibriumConstant.InGameMaterial} / 100 点能量值以下的角色\r\n" + $"0.2 {General.GameplayEquilibriumConstant.InGameMaterial} / 200 点能量值以下的角色"; - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -6043,14 +6010,14 @@ namespace Oshima.FunGame.WebAPI.Controllers long activityid = aid ?? 0; long questid = qid ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) { User user = FunGameService.GetUser(pc); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -6069,7 +6036,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int[] items = seq ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -6135,7 +6102,7 @@ namespace Oshima.FunGame.WebAPI.Controllers if (msg != "") msg += "\r\n"; msg += "没有找到与这个序号相对应的物品:" + string.Join(",", failedItems); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -6160,7 +6127,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6184,7 +6151,7 @@ namespace Oshima.FunGame.WebAPI.Controllers return $"目标玩家不存在。"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -6211,7 +6178,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6227,7 +6194,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = "没有找到对应的报价。"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -6252,7 +6219,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6261,7 +6228,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = FunGameService.SendOffer(user, offerId ?? -1); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -6286,7 +6253,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6328,7 +6295,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); string msg = ""; @@ -6451,7 +6418,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6467,7 +6434,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = "没有找到对应的报价。"; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -6491,7 +6458,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6500,7 +6467,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = FunGameService.CancelOffer(user, offerId ?? -1); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -6525,7 +6492,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); int[] ids = items ?? []; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -6590,7 +6557,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { user.Inventory.Credits += totalGained; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return $"出售完毕!出售 {ids.Length} 件,成功 {successCount} 件!\r\n{string.Join("\r\n", msgs)}"; } else @@ -6614,7 +6581,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); string msg = ""; @@ -6655,7 +6622,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); string msg = ""; @@ -6732,7 +6699,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6740,7 +6707,7 @@ namespace Oshima.FunGame.WebAPI.Controllers User user = FunGameService.GetUser(pc); if (user.Id != target) { - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); } else { @@ -6754,7 +6721,7 @@ namespace Oshima.FunGame.WebAPI.Controllers List strings = renameExamine.Get>(target.ToString()) ?? []; if (strings.Count > 0) { - PluginConfig pc2 = FunGameService.GetUserConfig(target); + PluginConfig pc2 = FunGameService.GetUserConfig(target, out _); if (pc2.Count > 0) { @@ -6778,7 +6745,6 @@ namespace Oshima.FunGame.WebAPI.Controllers user2.Inventory.Name = user2.Username + "的库存"; } user2.Inventory.Items.Remove(gmk); - FunGameService.SetUserConfig(target, pc2, user2); FunGameConstant.UserIdAndUsername[user2.Id] = user2; renameExamine.Remove(target.ToString()); msg = $"该用户的新昵称【{name}】已审核通过!"; @@ -6787,11 +6753,11 @@ namespace Oshima.FunGame.WebAPI.Controllers else { gmk.IsLock = false; - FunGameService.SetUserConfig(target, pc2, user2); renameExamine.Remove(target.ToString()); msg = $"已拒绝该用户的新昵称【{name}】申请!"; FunGameService.AddNotice(user2.Id, $"改名系统通知:你先前提交的新昵称【{name}】审核不通过,请重新提交申请!"); } + FunGameService.SetUserConfigButNotRelease(target, pc2, user2); } else { @@ -6805,6 +6771,7 @@ namespace Oshima.FunGame.WebAPI.Controllers renameExamine.Remove(target.ToString()); msg = $"该用户不存在。"; } + FunGameService.ReleaseUserSemaphoreSlim(target); } else { @@ -6817,17 +6784,16 @@ namespace Oshima.FunGame.WebAPI.Controllers { msg = "你没有权限使用此指令。"; } - FunGameService.ReleaseUserSemaphoreSlim(target); return msg; } else { - FunGameService.ReleaseUserSemaphoreSlim(target); return noSaved; } } catch (Exception e) { + FunGameService.ReleaseUserSemaphoreSlim(target); Logger.LogError(e, "Error: {e}", e); return busy; } @@ -6840,7 +6806,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -6913,7 +6879,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msgs.Add($"没有成功上架任何物品。请检查物品是否存在或是否满足上架条件。"); } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return string.Join("\r\n", msgs); } else @@ -6937,7 +6903,7 @@ namespace Oshima.FunGame.WebAPI.Controllers try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); string msg = ""; if (pc.Count > 0) @@ -6995,7 +6961,7 @@ namespace Oshima.FunGame.WebAPI.Controllers } pc.Add("exploreTimes", exploreTimes); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } @@ -7018,7 +6984,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -7028,7 +6994,7 @@ namespace Oshima.FunGame.WebAPI.Controllers stores.LoadConfig(); string msg = FunGameService.CheckRegionStore(stores, user, storeRegion, storeName, out bool exist); - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -7043,7 +7009,7 @@ namespace Oshima.FunGame.WebAPI.Controllers { long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); if (pc.Count > 0) { @@ -7072,7 +7038,7 @@ namespace Oshima.FunGame.WebAPI.Controllers msg = exist ? $"正在获取最新商店数据,请稍后查看。" : msg2; } - FunGameService.SetUserConfig(userid, pc, user); + FunGameService.SetUserConfigAndReleaseSemaphoreSlim(userid, pc, user); return msg; } else @@ -7088,7 +7054,7 @@ namespace Oshima.FunGame.WebAPI.Controllers long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); long goodid = id ?? 0; - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(userid, out _); FunGameService.ReleaseUserSemaphoreSlim(userid); if (pc.Count > 0) @@ -7138,35 +7104,38 @@ namespace Oshima.FunGame.WebAPI.Controllers } [HttpPost("template")] - public string Template([FromQuery] long? uid = null) + public string Template([FromQuery] long uid = -1) { - long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); - try { - PluginConfig pc = FunGameService.GetUserConfig(userid); + PluginConfig pc = FunGameService.GetUserConfig(uid, out bool isTimeout); + if (isTimeout) + { + return busy; + } string msg = ""; if (pc.Count > 0) { User user = FunGameService.GetUser(pc); - FunGameService.SetUserConfig(userid, pc, user); - + FunGameService.SetUserConfigButNotRelease(uid, pc, user); return msg; } else { - FunGameService.ReleaseUserSemaphoreSlim(userid); return noSaved; } } catch (Exception e) { - FunGameService.ReleaseUserSemaphoreSlim(userid); Logger.LogError(e, "Error: {e}", e); return busy; } + finally + { + FunGameService.ReleaseUserSemaphoreSlim(uid); + } } [HttpGet("reload")] diff --git a/OshimaWebAPI/Services/RainBOTService.cs b/OshimaWebAPI/Services/RainBOTService.cs index 19a98e2..a98768d 100644 --- a/OshimaWebAPI/Services/RainBOTService.cs +++ b/OshimaWebAPI/Services/RainBOTService.cs @@ -567,9 +567,9 @@ namespace Oshima.FunGame.WebAPI.Services } if (e.Detail.StartsWith("生成")) - { - e.UseNotice = false; - string pattern = @"生成\s*(\d+)\s*个\s*([\s\S]+)(?:\s*给\s*(\d+))?"; + { + e.UseNotice = false; + string pattern = @"生成\s*(\d+)\s*个\s*([^给\s]+)(?:\s*给\s*(\d+))?"; Regex regex = new(pattern, RegexOptions.IgnoreCase); Match match = regex.Match(e.Detail);