diff --git a/OshimaCore/Controllers/FunGameController.cs b/OshimaCore/Controllers/FunGameController.cs index c3bd6d3..0f9ab26 100644 --- a/OshimaCore/Controllers/FunGameController.cs +++ b/OshimaCore/Controllers/FunGameController.cs @@ -266,7 +266,7 @@ namespace Oshima.Core.Controllers [HttpGet("iteminfo")] public string GetItemInfo([FromQuery] long? id = null) { - IEnumerable items = FunGameService.Equipment; + IEnumerable items = FunGameService.AllItems; if (id != null) { List msg = []; @@ -2470,7 +2470,7 @@ namespace Oshima.Core.Controllers return NetworkUtility.JsonSerialize($"此技能【{skill.Name}】已经升至满级!"); } - return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{skill.Name}】技能等级:{skill.Level}/{General.GameplayEquilibriumConstant.MaxSkillLevel}" + + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{skill.Name}】技能等级:{skill.Level} / {General.GameplayEquilibriumConstant.MaxSkillLevel}" + $"\r\n下一级所需升级材料:\r\n" + FunGameService.GetSkillLevelUpNeedy(skill.Level + 1)); } return NetworkUtility.JsonSerialize($"此技能无法升级!"); @@ -2485,7 +2485,7 @@ namespace Oshima.Core.Controllers return NetworkUtility.JsonSerialize(noSaved); } } - + [HttpPost("skilllevelup")] public string SkillLevelUp([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] string? s = null) { @@ -2535,6 +2535,13 @@ namespace Oshima.Core.Controllers return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级不足 {needCount} 级,无法{isStudy}此技能!"); } } + else if (key == "角色突破进度") + { + if (character.LevelBreak < needCount) + { + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级突破进度不足 {needCount} 等阶,无法{isStudy}此技能!"); + } + } else if (key == General.GameplayEquilibriumConstant.InGameCurrency) { if (user.Inventory.Credits >= needCount) @@ -2583,6 +2590,8 @@ namespace Oshima.Core.Controllers user.LastTime = DateTime.Now; pc.Add("user", user); pc.SaveConfig(); + needy.Remove("角色等级"); + needy.Remove("角色突破进度"); string msg = $"{isStudy}技能成功!本次消耗:{string.Join(",", needy.Select(kv => kv.Key + " * " + kv.Value))},成功将【{skill.Name}】技能提升至 {skill.Level} 级!"; if (skill.Level == General.GameplayEquilibriumConstant.MaxSkillLevel) @@ -2618,6 +2627,171 @@ namespace Oshima.Core.Controllers } } + [HttpPost("getnormalattacklevelupneedy")] + public string GetNormalAttackLevelUpNeedy([FromQuery] long? qq = null, [FromQuery] int? c = null) + { + long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); + int characterIndex = c ?? 0; + + PluginConfig pc = new("saved", userid.ToString()); + pc.LoadConfig(); + + if (pc.Count > 0) + { + User user = FunGameService.GetUser(pc); + Character? character; + if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count) + { + character = user.Inventory.Characters.ToList()[characterIndex - 1]; + } + else + { + return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!"); + } + + NormalAttack na = character.NormalAttack; + + if (na.Level + 1 == General.GameplayEquilibriumConstant.MaxNormalAttackLevel) + { + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{na.Name}】已经升至满级!"); + } + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{na.Name}】等级:{na.Level} / {General.GameplayEquilibriumConstant.MaxNormalAttackLevel}" + + $"\r\n下一级所需升级材料:\r\n" + FunGameService.GetNormalAttackLevelUpNeedy(na.Level + 1)); + } + else + { + return NetworkUtility.JsonSerialize(noSaved); + } + } + + [HttpPost("normalattacklevelup")] + public string NormalAttackLevelUp([FromQuery] long? qq = null, [FromQuery] int? c = null) + { + try + { + long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); + int characterIndex = c ?? 0; + + PluginConfig pc = new("saved", userid.ToString()); + pc.LoadConfig(); + + if (pc.Count > 0) + { + User user = FunGameService.GetUser(pc); + + Character? character = null; + if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count) + { + character = user.Inventory.Characters.ToList()[characterIndex - 1]; + } + else + { + return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!"); + } + + NormalAttack na = character.NormalAttack; + if (na.Level == General.GameplayEquilibriumConstant.MaxNormalAttackLevel) + { + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{na.Name}】已经升至满级!"); + } + + if (FunGameService.NormalAttackLevelUpList.TryGetValue(na.Level + 1, out Dictionary? needy) && needy != null && needy.Count > 0) + { + foreach (string key in needy.Keys) + { + int needCount = needy[key]; + if (key == "角色等级") + { + if (character.Level < needCount) + { + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级不足 {needCount} 级,无法升级此技能!"); + } + } + else if (key == "角色突破进度") + { + if (character.LevelBreak < needCount) + { + return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级突破进度不足 {needCount} 等阶,无法升级此技能!"); + } + } + else if (key == General.GameplayEquilibriumConstant.InGameCurrency) + { + if (user.Inventory.Credits >= needCount) + { + user.Inventory.Credits -= needCount; + } + else + { + return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {needCount} 呢,不满足升级条件!"); + } + } + else if (key == General.GameplayEquilibriumConstant.InGameMaterial) + { + if (user.Inventory.Materials >= needCount) + { + user.Inventory.Materials -= needCount; + } + else + { + return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {needCount} 呢,不满足升级条件!"); + } + } + else + { + if (needCount > 0) + { + IEnumerable items = user.Inventory.Items.Where(i => i.Name == key); + if (items.Count() >= needCount) + { + items = items.TakeLast(needCount); + foreach (Item item in items) + { + user.Inventory.Items.Remove(item); + } + } + else + { + return NetworkUtility.JsonSerialize($"你的物品【{key}】数量不足 {needCount} 呢,不满足升级条件!"); + } + } + } + } + + na.Level += 1; + + user.LastTime = DateTime.Now; + pc.Add("user", user); + pc.SaveConfig(); + needy.Remove("角色等级"); + needy.Remove("角色突破进度"); + string msg = $"角色 [ {character} ] 升级【{na.Name}】成功!本次消耗:{string.Join(",", needy.Select(kv => kv.Key + " * " + kv.Value))},成功将【{na.Name}】提升至 {na.Level} 级!"; + + if (na.Level == General.GameplayEquilibriumConstant.MaxNormalAttackLevel) + { + msg += $"\r\n{na.Name}已经升至满级,恭喜!"; + } + else + { + msg += $"\r\n下一级所需升级材料:\r\n" + FunGameService.GetNormalAttackLevelUpNeedy(na.Level + 1); + } + + return NetworkUtility.JsonSerialize(msg); + } + + return NetworkUtility.JsonSerialize($"升级{na.Name}失败!角色 [ {character} ] 的【{na.Name}】当前等级:{na.Level}/{General.GameplayEquilibriumConstant.MaxNormalAttackLevel}" + + $"\r\n下一级所需升级材料:\r\n" + FunGameService.GetSkillLevelUpNeedy(na.Level + 1)); + } + else + { + return NetworkUtility.JsonSerialize(noSaved); + } + } + catch (Exception e) + { + return NetworkUtility.JsonSerialize(e.ToString()); + } + } + [HttpGet("reload")] public string Relaod([FromQuery] long? master = null) { diff --git a/OshimaCore/OshimaWebAPI.cs b/OshimaCore/OshimaWebAPI.cs index fbafb44..4b7a6dd 100644 --- a/OshimaCore/OshimaWebAPI.cs +++ b/OshimaCore/OshimaWebAPI.cs @@ -1,7 +1,6 @@ 锘縰sing Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Addon; -using Milimoe.FunGame.Core.Library.Constant; using Oshima.Core.Configs; using Oshima.Core.Constant; using Oshima.Core.Utils; diff --git a/OshimaCore/Utils/FunGameService.cs b/OshimaCore/Utils/FunGameService.cs index ad4bee4..ba29856 100644 --- a/OshimaCore/Utils/FunGameService.cs +++ b/OshimaCore/Utils/FunGameService.cs @@ -78,7 +78,7 @@ namespace Oshima.Core.Utils }; } } - public static Dictionary> SuperSkillLevelUpList + public static Dictionary> SkillLevelUpList { get { @@ -147,32 +147,32 @@ namespace Oshima.Core.Utils }; } } - public static Dictionary> SkillLevelUpList + public static Dictionary> NormalAttackLevelUpList { get { return new() { { - 1, new() + 2, new() { - { "瑙掕壊绛夌骇", 6 }, + { "瑙掕壊绛夌骇", 8 }, { General.GameplayEquilibriumConstant.InGameCurrency, 2000 }, { General.GameplayEquilibriumConstant.InGameMaterial, 10 }, { nameof(鎶鑳藉嵎杞), 1 }, } }, { - 2, new() + 3, new() { - { "瑙掕壊绛夌骇", 12 }, + { "瑙掕壊绛夌骇", 16 }, { General.GameplayEquilibriumConstant.InGameCurrency, 5000 }, { General.GameplayEquilibriumConstant.InGameMaterial, 30 }, { nameof(鎶鑳藉嵎杞), 2 }, } }, { - 3, new() + 4, new() { { "瑙掕壊绛夌骇", 24 }, { General.GameplayEquilibriumConstant.InGameCurrency, 10000 }, @@ -182,9 +182,9 @@ namespace Oshima.Core.Utils } }, { - 4, new() + 5, new() { - { "瑙掕壊绛夌骇", 36 }, + { "瑙掕壊绛夌骇", 32 }, { General.GameplayEquilibriumConstant.InGameCurrency, 18000 }, { General.GameplayEquilibriumConstant.InGameMaterial, 100 }, { nameof(鎶鑳藉嵎杞), 4 }, @@ -192,9 +192,10 @@ namespace Oshima.Core.Utils } }, { - 5, new() + 6, new() { - { "瑙掕壊绛夌骇", 48 }, + { "瑙掕壊绛夌骇", 40 }, + { "瑙掕壊绐佺牬杩涘害", 4 }, { General.GameplayEquilibriumConstant.InGameCurrency, 30000 }, { General.GameplayEquilibriumConstant.InGameMaterial, 150 }, { nameof(鎶鑳藉嵎杞), 5 }, @@ -203,15 +204,27 @@ namespace Oshima.Core.Utils } }, { - 6, new() + 7, new() { - { "瑙掕壊绛夌骇", 60 }, + { "瑙掕壊绛夌骇", 48 }, { General.GameplayEquilibriumConstant.InGameCurrency, 47000 }, { General.GameplayEquilibriumConstant.InGameMaterial, 210 }, { nameof(鎶鑳藉嵎杞), 6 }, { nameof(鏅烘収涔嬫灉), 4 }, { nameof(濂ユ湳绗︽枃), 2 } } + }, + { + 8, new() + { + { "瑙掕壊绛夌骇", 56 }, + { General.GameplayEquilibriumConstant.InGameCurrency, 70000 }, + { General.GameplayEquilibriumConstant.InGameMaterial, 280 }, + { nameof(鎶鑳藉嵎杞), 7 }, + { nameof(鏅烘収涔嬫灉), 5 }, + { nameof(濂ユ湳绗︽枃), 3 }, + { nameof(娣锋矊涔嬫牳), 1 } + } } }; } @@ -242,7 +255,7 @@ namespace Oshima.Core.Utils Equipment.AddRange([new 鏀诲嚮涔嬬埅5(), new 鏀诲嚮涔嬬埅15(), new 鏀诲嚮涔嬬埅25(), new 鏀诲嚮涔嬬埅35()]); Items.AddRange(exItems.Values.Where(i => (int)i.ItemType > 4)); - Items.AddRange([new 灏忕粡楠屼功(), new 涓粡楠屼功(), new 澶х粡楠屼功(), new 鍗囧崕涔嬪嵃(), new 娴佸厜涔嬪嵃(), new 姘告亽涔嬪嵃(), new 鎶鑳藉嵎杞(), new 鏅烘収涔嬫灉(), new 濂ユ湳绗︽枃()]); + Items.AddRange([new 灏忕粡楠屼功(), new 涓粡楠屼功(), new 澶х粡楠屼功(), new 鍗囧崕涔嬪嵃(), new 娴佸厜涔嬪嵃(), new 姘告亽涔嬪嵃(), new 鎶鑳藉嵎杞(), new 鏅烘収涔嬫灉(), new 濂ユ湳绗︽枃(), new 娣锋矊涔嬫牳()]); AllItems.AddRange(Equipment); AllItems.AddRange(Items); @@ -1161,9 +1174,44 @@ namespace Oshima.Core.Utils { if (SkillLevelUpList.TryGetValue(level, out Dictionary? needy) && needy != null && needy.Count > 0) { - return string.Join("锛", needy.Select(kv => kv.Key + " * " + kv.Value)); + return GetNeedyInfo(needy); } return ""; } + + public static string GetNormalAttackLevelUpNeedy(int level) + { + if (NormalAttackLevelUpList.TryGetValue(level, out Dictionary? needy) && needy != null && needy.Count > 0) + { + return GetNeedyInfo(needy); + } + return ""; + } + + public static string GetNeedyInfo(Dictionary needy) + { + string str = ""; + foreach (string key in needy.Keys) + { + int needCount = needy[key]; + if (str != "") + { + str += "锛"; + } + if (key == "瑙掕壊绛夌骇") + { + str += $"瑙掕壊绛夌骇 {needCount} 绾"; + } + else if (key == "瑙掕壊绐佺牬杩涘害") + { + str += $"瑙掕壊绐佺牬杩涘害 {needCount} 绛夐樁"; + } + else + { + str += $"{key} * {needCount}"; + } + } + return str; + } } } diff --git a/OshimaModules/Items/ItemID.cs b/OshimaModules/Items/ItemID.cs index ff8cee3..1d08379 100644 --- a/OshimaModules/Items/ItemID.cs +++ b/OshimaModules/Items/ItemID.cs @@ -23,5 +23,6 @@ 鎶鑳藉嵎杞 = 18004, 鏅烘収涔嬫灉 = 18005, 濂ユ湳绗︽枃 = 18006, + 娣锋矊涔嬫牳 = 18007, } } diff --git a/OshimaModules/Items/SpecialItem/娣锋矊涔嬫牳.cs b/OshimaModules/Items/SpecialItem/娣锋矊涔嬫牳.cs new file mode 100644 index 0000000..7a64651 --- /dev/null +++ b/OshimaModules/Items/SpecialItem/娣锋矊涔嬫牳.cs @@ -0,0 +1,13 @@ +锘縰sing Milimoe.FunGame.Core.Entity; +using Milimoe.FunGame.Core.Library.Constant; + +namespace Oshima.FunGame.OshimaModules.Items +{ + public class 娣锋矊涔嬫牳() : Item(ItemType.SpecialItem) + { + public override long Id => (long)SpecialItemID.娣锋矊涔嬫牳; + public override string Name => "娣锋矊涔嬫牳"; + public override string Description => "鍗囩骇鎶鑳藉繀澶囩殑缁堢骇鏉愭枡銆"; + public override QualityType QualityType => QualityType.Purple; + } +} diff --git a/OshimaModules/Modules/ItemModule.cs b/OshimaModules/Modules/ItemModule.cs index ffc27da..73010c9 100644 --- a/OshimaModules/Modules/ItemModule.cs +++ b/OshimaModules/Modules/ItemModule.cs @@ -38,6 +38,7 @@ namespace Oshima.FunGame.OshimaModules (long)SpecialItemID.鎶鑳藉嵎杞 => new 鎶鑳藉嵎杞(), (long)SpecialItemID.鏅烘収涔嬫灉 => new 鏅烘収涔嬫灉(), (long)SpecialItemID.濂ユ湳绗︽枃 => new 濂ユ湳绗︽枃(), + (long)SpecialItemID.娣锋矊涔嬫牳 => new 娣锋矊涔嬫牳(), _ => null, }; }; diff --git a/OshimaModules/configs/oshima-studios/oshima.fungame.items.json b/OshimaModules/configs/oshima-studios/oshima.fungame.items.json index 7a30c84..70fb795 100644 --- a/OshimaModules/configs/oshima-studios/oshima.fungame.items.json +++ b/OshimaModules/configs/oshima-studios/oshima.fungame.items.json @@ -1350,5 +1350,30 @@ } ] } + }, + "Yuki銇瓹alfSocks-鍦h癁闄愬畾": { + "Id": 14515, + "Name": "Yuki銇瓹alfSocks-鍦h癁闄愬畾", + "Description": "澧炲姞瑙掕壊 50% 鏆村嚮浼ゅ銆", + "BackgroundStory": "灏忛洩鐨勫湥璇為檺瀹氬皬鑵胯锛岀粨鍚堜簡鍦h癁鏍戠殑绾㈢豢鑹诧紝杩樻湁閾冮摏鍜岄箍瑙掔殑瑁呴グ銆", + "ItemType": 4, + "WeaponType": 0, + "QualityType": 3, + "Skills": { + "Active": null, + "Passives": [ + { + "Id": 7315, + "Name": "Yuki銇瓹alfSocks-鍦h癁闄愬畾", + "SkillType": 3, + "Effects": [ + { + "Id": 8015, + "excrd": 0.5 + } + ] + } + ] + } } }