From ee03383008ec6af3774cbae7bfce96657b6641ae Mon Sep 17 00:00:00 2001 From: milimoe Date: Tue, 11 Feb 2025 00:43:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A2=E7=B4=A2=E5=9C=B0?= =?UTF-8?q?=E5=8C=BA=EF=BC=881=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OshimaModules/Regions/OshimaRegion.cs | 6 +-- OshimaServers/Service/FunGameConstant.cs | 54 ++++++++++--------- OshimaServers/Service/FunGameService.cs | 6 ++- OshimaWebAPI/Controllers/FunGameController.cs | 44 ++++++++++++++- OshimaWebAPI/Services/RainBOTService.cs | 25 +++++++++ 5 files changed, 103 insertions(+), 32 deletions(-) diff --git a/OshimaModules/Regions/OshimaRegion.cs b/OshimaModules/Regions/OshimaRegion.cs index d1c2dc9..73d354a 100644 --- a/OshimaModules/Regions/OshimaRegion.cs +++ b/OshimaModules/Regions/OshimaRegion.cs @@ -31,19 +31,19 @@ namespace Oshima.FunGame.OshimaModules.Regions if (Characters.Count > 0) { builder.AppendLine($"== 头目 =="); - builder.AppendLine(string.Join(",", Characters.Select(o => o.Name))); + builder.AppendLine(string.Join(",", Characters.Select(c => c.Name))); } if (Units.Count > 0) { builder.AppendLine($"== 生物 =="); - builder.AppendLine(string.Join(",", Units.Select(o => o.Name))); + builder.AppendLine(string.Join(",", Units.Select(u => u.Name))); } if (Crops.Count > 0) { builder.AppendLine($"== 作物 =="); - builder.AppendLine(string.Join(",", Crops.Select(c => c.Name))); + builder.AppendLine(string.Join(",", Crops.Select(i => i.Name + ":" + i.Description + "\"" + i.BackgroundStory + "\""))); } builder.AppendLine($"探索难度:{CharacterSet.GetRarityTypeName(Difficulty)}"); diff --git a/OshimaServers/Service/FunGameConstant.cs b/OshimaServers/Service/FunGameConstant.cs index 4449157..911efab 100644 --- a/OshimaServers/Service/FunGameConstant.cs +++ b/OshimaServers/Service/FunGameConstant.cs @@ -11,6 +11,7 @@ namespace Oshima.FunGame.OshimaServers.Service public const long CustomCharacterId = -1; public const int ItemsPerPage1 = 6; public const int ItemsPerPage2 = 10; + public const int ExploreTime = 2; public static List Characters { get; } = []; public static List Skills { get; } = []; public static List PassiveSkills { get; } = []; @@ -19,6 +20,7 @@ namespace Oshima.FunGame.OshimaServers.Service public static List Equipment { get; } = []; public static List Items { get; } = []; public static List DrawCardItems { get; } = []; + public static Dictionary> ExploreItems { get; } = []; public static List ItemSkills { get; } = []; public static List AllItems { get; } = []; public static List AllSkills { get; } = []; @@ -374,23 +376,23 @@ namespace Oshima.FunGame.OshimaServers.Service { { "星银警戒协议·弎级响应", - "星银合金守卫在悖论引擎周边暴走,形成包围核心区的杀戮矩阵,必须在三刻钟内解除警戒协议" + "星银合金守卫在悖论引擎周边暴走,形成包围核心区的杀戮矩阵,必须在三刻钟内解除警戒协议。" }, { "音律囚笼突破作战", - "苏醒的旋律古龙释放出高频震波,将精灵们困在水晶共振牢笼中,需在下次地貌重组前切断声波共鸣节点" + "苏醒的旋律古龙释放出高频震波,将精灵们困在水晶共振牢笼中,需在下次地貌重组前切断声波共鸣节点。" }, { "深渊火种收容危机", - "矿道底层的深渊火钻因元素污染进入链式裂变,引发全矿道魔能过载,立即部署熵减力场遏制反应" + "矿道底层的深渊火钻因元素污染进入链式裂变,引发全矿道魔能过载,立即部署熵减力场遏制反应。" }, { "时霜逆流救援行动", - "科研小组被困在加速百倍的时间泡内,其肉体正以肉眼可见的速度衰老,必须校准哨塔时钟恢复时间流速" + "科研小组被困在加速百倍的时间泡内,其肉体正以肉眼可见的速度衰老,必须校准哨塔时钟恢复时间流速。" }, { "镜像侵蚀净化指令", - "镜像守卫突破湖面屏障入侵现实维度,携带的认知病毒正在改写物理法则,启动银辉城防卫协议实施净化" + "镜像守卫突破湖面屏障入侵现实维度,携带的认知病毒正在改写物理法则,启动银辉城防卫协议实施净化。" }, { "雷霆风暴紧急预警", @@ -422,7 +424,7 @@ namespace Oshima.FunGame.OshimaServers.Service }, { "记忆共鸣失控事件", - "回音棱镜林的记忆共鸣失控,引发空间褶皱,必须立即稳定空间。" + "回音棱镜林的记忆共鸣失控,引发空间褶皱,必须立即稳定空间。" }, { "活体金属苔藓异变", @@ -458,83 +460,83 @@ namespace Oshima.FunGame.OshimaServers.Service { { "月光萃取计划", - "在星银合金建筑的沟壑中采集 {0} 份液态月光(注意避开月光洪流的高潮时段/每夜丑时三刻)。" + "前往【银辉城】,在星银合金建筑的沟壑中采集 {0} 份液态月光(注意避开月光洪流的高潮时段/每夜丑时三刻)。" }, { "灵脉汁液采收行动", - "使用抗腐蚀容器收集 {0} 份瑟兰薇歌林海的荧蓝汁液(树木自卫系统激活时汁液会转化为神经毒素)。" + "使用抗腐蚀容器收集 {0} 份【瑟兰薇歌林海】的荧蓝汁液(树木自卫系统激活时汁液会转化为神经毒素)。" }, { "火钻精炼协议", - "在矿工灵魂烙印的指引下获取 {0} 颗深渊火钻(未烙印者触碰火钻将引发元素爆燃)。" + "在【赫菲斯托斯之喉】矿工灵魂烙印的指引下获取 {0} 颗深渊火钻(未烙印者触碰火钻将引发元素爆燃)。" }, { "时霜逆向工程", - "通过时间镜像收集 {0} 份不同历史断片的时霜药剂样本(注意时空回响对记忆的覆盖效应)。" + "通过时间镜像收集 {0} 份来自【永霜裂痕】不同历史断片的时霜药剂样本(注意时空回响对记忆的覆盖效应)。" }, { "瞳孔密钥重构计划", - "从 {0} 个瞳孔状传送门提取量子纠缠碎片(每个采集点需保持镜像对称操作以避免维度塌缩)。" + "前往【千瞳镜湖】,从 {0} 个瞳孔状传送门提取量子纠缠碎片(每个采集点需保持镜像对称操作以避免维度塌缩)。" }, { "泰坦符文拓印", - "在雷霆王座山脉的裁决尖碑上拓印 {0} 份不同的泰坦符文(注意避开雷暴时段/每逢子时)。" + "在【雷霆王座山脉】的裁决尖碑上拓印 {0} 份不同的泰坦符文(注意避开雷暴时段/每逢子时)。" }, { "时间碎片收集", - "在流沙时计荒漠的昨日之城中收集 {0} 份不同的时间碎片(注意时间碎片会随机重组)。" + "在【流沙时计荒漠】的昨日之城中收集 {0} 份不同的时间碎片(注意时间碎片会随机重组)。" }, { "共生母体样本采集", - "从腐萤沼渊的共生母体上采集 {0} 份不同的菌类样本(注意菌类会释放麻痹毒素)。" + "从【腐萤沼渊】的共生母体上采集 {0} 份不同的菌类样本(注意菌类会释放麻痹毒素)。" }, { "星锚能量校准", - "在苍穹碎屿的星锚之地校准 {0} 个不同的引雷柱(注意引雷柱会释放高压电流)。" + "在【苍穹碎屿】的星锚之地校准 {0} 个不同的引雷柱(注意引雷柱会释放高压电流)。" }, { "改造逆转实验", - "在齿与血回廊的造物车间进行 {0} 次不同的改造逆转实验(注意改造实验会引发身体异变)。" + "在【齿与血回廊】的造物车间进行 {0} 次不同的改造逆转实验(注意改造实验会引发身体异变)。" }, { "星辉水母观测记录", - "在穹顶之泪湖记录 {0} 次星辉水母重构水体重力法则的完整过程(注意水母重构时会产生重力波动)。" + "在【穹顶之泪湖】记录 {0} 次星辉水母重构水体重力法则的完整过程(注意水母重构时会产生重力波动)。" }, { "构装巨龙残骸分析", - "在齿轮坟场分析 {0} 个不同的构装巨龙残骸(注意残骸可能带有自毁装置)。" + "在【齿轮坟场】分析 {0} 个不同的构装巨龙残骸(注意残骸可能带有自毁装置)。" }, { "亡者记忆提取", - "在回音棱镜林提取 {0} 份不同的亡者记忆(注意记忆提取会引发共感)。" + "在【回音棱镜林】提取 {0} 份不同的亡者记忆(注意记忆提取会引发共感)。" }, { "活体金属苔藓培养", - "在永燃坩埚培养 {0} 份不同的活体金属苔藓样本(注意苔藓会吸收金属)。" + "在【永燃坩埚】培养 {0} 份不同的活体金属苔藓样本(注意苔藓会吸收金属)。" }, { "幽灵船能量分析", - "在骨桥深渊收集 {0} 份幽灵船的能量波动数据(注意幽灵船会释放虚空能量)。" + "在【骨桥深渊】收集 {0} 份幽灵船的能量波动数据(注意幽灵船会释放虚空能量)。" }, { "时凝液提纯", - "在时漏沙漠提纯 {0} 份时凝液(注意时凝液会加速时间流速)。" + "在【时漏沙漠】提纯 {0} 份时凝液(注意时凝液会加速时间流速)。" }, { "蜜蜡编码破解", - "在脉轮圣树破解 {0} 份不同的蜜蜡编码(注意编码会引发精神干扰)。" + "在【脉轮圣树】破解 {0} 份不同的蜜蜡编码(注意编码会引发精神干扰)。" }, { "神经宝石能量分析", - "在悲鸣矿脉分析 {0} 份不同的神经宝石能量(注意宝石会引发山体剧痛)。" + "在【悲鸣矿脉】分析 {0} 份不同的神经宝石能量(注意宝石会引发山体剧痛)。" }, { "湮灭边界观察", - "在双生月崖观察 {0} 次不同的湮灭边界现象(注意湮灭边界会吞噬物质)。" + "在【双生月崖】观察 {0} 次不同的湮灭边界现象(注意湮灭边界会吞噬物质)。" }, { "梦境碎片分析", - "在谵妄海市分析 {0} 份不同的梦境碎片(注意梦境碎片会引发幻觉)。" + "在【谵妄海市】分析 {0} 份不同的梦境碎片(注意梦境碎片会引发幻觉)。" } }; diff --git a/OshimaServers/Service/FunGameService.cs b/OshimaServers/Service/FunGameService.cs index ab7f6b7..97df93d 100644 --- a/OshimaServers/Service/FunGameService.cs +++ b/OshimaServers/Service/FunGameService.cs @@ -55,11 +55,14 @@ namespace Oshima.FunGame.OshimaServers.Service foreach (OshimaRegion region in FunGameConstant.Regions) { - FunGameConstant.AllItems.AddRange(region.Crops.Select(i => i.Copy())); + List items = [.. region.Crops.Select(i => i.Copy())]; + FunGameConstant.ExploreItems.Add(region, items); } FunGameConstant.DrawCardItems.AddRange(FunGameConstant.AllItems.Where(i => !FunGameConstant.ItemCanNotDrawCard.Contains(i.ItemType))); + FunGameConstant.AllItems.AddRange(FunGameConstant.ExploreItems.Values.SelectMany(list => list)); + Skill?[] activeSkills = [.. FunGameConstant.Equipment.Select(i => i.Skills.Active), .. FunGameConstant.Items.Select(i => i.Skills.Active)]; foreach (Skill? skill in activeSkills) { @@ -376,6 +379,7 @@ namespace Oshima.FunGame.OshimaServers.Service FunGameConstant.PassiveSkills.Clear(); FunGameConstant.Magics.Clear(); FunGameConstant.DrawCardItems.Clear(); + FunGameConstant.ExploreItems.Clear(); FunGameConstant.AllItems.Clear(); FunGameConstant.ItemSkills.Clear(); FunGameConstant.AllSkills.Clear(); diff --git a/OshimaWebAPI/Controllers/FunGameController.cs b/OshimaWebAPI/Controllers/FunGameController.cs index f014d3b..c4118c9 100644 --- a/OshimaWebAPI/Controllers/FunGameController.cs +++ b/OshimaWebAPI/Controllers/FunGameController.cs @@ -5095,8 +5095,13 @@ namespace Oshima.FunGame.WebAPI.Controllers regions.Add($"世界地图:"); for (int i = 0; i < FunGameConstant.Regions.Count; i++) { - Region region = FunGameConstant.Regions[i]; - regions.Add($"{region.Id}. {region.Name}"); + OshimaRegion region = FunGameConstant.Regions[i]; + List crops = []; + if (FunGameConstant.ExploreItems.TryGetValue(region, out List? list) && list != null) + { + crops = list; + } + regions.Add($"{region.Id}. {region.Name}" + (crops.Count > 0 ? "(作物:" + string.Join(",", crops.Select(i => i.Name)) + ")" : "")); } regions.Add($"提示:使用【查地区+序号】指令来查看指定地区的信息。"); } @@ -5107,6 +5112,41 @@ namespace Oshima.FunGame.WebAPI.Controllers return regions; } + [HttpPost("exploreregion")] + public string ExploreRegion([FromQuery] long? uid = null, [FromQuery] int? id = null) + { + long userid = uid ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11)); + int regionid = id ?? 0; + + PluginConfig pc = new("saved", userid.ToString()); + pc.LoadConfig(); + + string msg = ""; + if (pc.Count > 0) + { + User user = FunGameService.GetUser(pc); + + if (regionid > 0 && regionid <= FunGameConstant.Regions.Count && FunGameConstant.Regions.FirstOrDefault(r => r.Id == regionid) is OshimaRegion region) + { + msg = $"开始探索【{region.Name}】,探索时间:{FunGameConstant.ExploreTime} 分钟。(骗你的,其实还没做)"; + } + else + { + return $"没有找到与这个序号相对应的地区!"; + } + + user.LastTime = DateTime.Now; + pc.Add("user", user); + pc.SaveConfig(); + + return msg; + } + else + { + return noSaved; + } + } + [HttpGet("reload")] public string Relaod([FromQuery] long? master = null) { diff --git a/OshimaWebAPI/Services/RainBOTService.cs b/OshimaWebAPI/Services/RainBOTService.cs index cb8278b..418f8c8 100644 --- a/OshimaWebAPI/Services/RainBOTService.cs +++ b/OshimaWebAPI/Services/RainBOTService.cs @@ -1982,6 +1982,31 @@ namespace Oshima.FunGame.WebAPI.Services return result; } + if (e.Detail == "世界地图") + { + List msgs = Controller.GetRegion(); + if (msgs.Count > 0) + { + await SendAsync(e, "世界地图", string.Join("\r\n", msgs)); + } + return result; + } + + if (e.Detail.StartsWith("探索", StringComparison.CurrentCultureIgnoreCase) || e.Detail.StartsWith("前往", StringComparison.CurrentCultureIgnoreCase)) + { + string detail = e.Detail.Replace("探索", "").Replace("前往", "").Trim(); + string msg = ""; + if (int.TryParse(detail, out int cid)) + { + msg = Controller.ExploreRegion(cid); + if (msg.Trim() != "") + { + await SendAsync(e, "探索", msg); + } + } + return result; + } + if (uid == GeneralSettings.Master && e.Detail.StartsWith("重载FunGame", StringComparison.CurrentCultureIgnoreCase)) { string msg = NetworkUtility.JsonDeserialize(Controller.Relaod(uid)) ?? "";