From 070c25f327a9886006e984ade7793041cdbb9b9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=97=E6=B2=A2=E5=93=8D=E4=B9=9F?= <72963826+Hibiya615@users.noreply.github.com> Date: Mon, 15 Sep 2025 03:17:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A=E6=AD=BB=E8=80=85?= =?UTF-8?q?=E5=AE=AB=E6=AE=BF190=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Deep_Dungeon/the_Palace_of_the_Dead.cs | 139 ++++++++++++++++++++----- OnlineRepo.json | 6 +- 2 files changed, 118 insertions(+), 27 deletions(-) diff --git a/Deep_Dungeon/the_Palace_of_the_Dead.cs b/Deep_Dungeon/the_Palace_of_the_Dead.cs index b418c2b..dee06b3 100644 --- a/Deep_Dungeon/the_Palace_of_the_Dead.cs +++ b/Deep_Dungeon/the_Palace_of_the_Dead.cs @@ -22,13 +22,13 @@ namespace the_Palace_of_the_Dead; [ScriptType(guid: "4210c323-eba4-4d67-a7e7-b90799494729", name: "死者宫殿", author: "Tetora", territorys: [561,562,563,564,565,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607], - version: "0.0.0.5",note: noteStr)] + version: "0.0.0.6",note: noteStr)] public class the_Palace_of_the_Dead { const string noteStr = """ - v0.0.0.5: + v0.0.0.6: 死者宫殿绘制 注:方法设置中的层数仅做分割线效果,并不是批量开关 出现问题请携带ARR反馈! @@ -71,8 +71,8 @@ public class the_Palace_of_the_Dead [UserSetting("弹窗文本提示开关")] public bool isText { get; set; } = true; - [UserSetting("测试性功能(慎用)")] - public bool isTest { get; set; } = false; + // [UserSetting("测试性功能(慎用)")] + // public bool isTest { get; set; } = false; [UserSetting("启用底裤(需要对应插件与权限)")] public bool isHack { get; set; } = false; @@ -112,7 +112,8 @@ public class the_Palace_of_the_Dead KnockPenalty = false; } - //190 治疗爆弹怪 计数 注意暂时还没有写重置计数!! + //190 治疗爆弹怪 计数 + private int timesRemedyBomb = 0; private int Sap = 0; public void Init(ScriptAccessory accessory) { @@ -124,6 +125,14 @@ public class the_Palace_of_the_Dead private bool isExplosionInterrupted = false; // 190层 特大爆炸打断状态 + [ScriptMethod(name: "死亡重置", eventType: EventTypeEnum.Death, eventCondition: ["TargetDataId:0"], userControl: false)] + public void 死亡重置(Event @event, ScriptAccessory accessory) + { + timesRemedyBomb=0; // 190 治疗爆弹怪 生成计数 + Sap = 0; // 190 地面爆破 读条计数 + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:检测到死亡,已重置变量"); + } + #endregion // 通用内容 @@ -794,7 +803,7 @@ public class the_Palace_of_the_Dead #endregion - #region 190层 BOSS 爆弹怪教父 [熔岩爆弹怪预测计数问题待修复] + #region 190层 BOSS 爆弹怪教父 [ScriptMethod(name: "190 眩晕爆弹怪 冰碎(钢铁)", eventType: EventTypeEnum.AddCombatant, eventCondition: ["DataId:6387"])] public void 眩晕爆弹怪_冰碎(Event @event, ScriptAccessory accessory) { @@ -811,28 +820,114 @@ public class the_Palace_of_the_Dead [ScriptMethod(name: "190 治疗爆弹怪 击杀提示", eventType: EventTypeEnum.AddCombatant, eventCondition: ["DataId:6385"])] public void 治疗爆弹怪_击杀提示(Event @event, ScriptAccessory accessory) { - accessory.Method.TextInfo("击杀治疗爆弹怪", duration: 5, true); - accessory.Method.TTS("击杀治疗爆弹怪"); + if(isText) accessory.Method.TextInfo("击杀治疗爆弹怪", duration: 5000, false); + if(isTTS) accessory.Method.TTS("击杀治疗爆弹怪"); + if(isEdgeTTS) accessory.Method.EdgeTTS("击杀治疗爆弹怪"); + // Interlocked.Increment(ref timesRemedyBomb); //防止多线程出问题,锁定一下 ++timesRemedyBomb; //记录 治疗爆弹怪出现次数 注意:还没有写重置次数条件 需要在团灭重生时销毁 (或者反正这个也就单挑比较有用死了就重置算了x) - if(isDeveloper) accessory.Method.SendChat($"/e 调试信息:已记录 治疗爆弹怪生成 第{timesRemedyBomb}次"); + // if(isDeveloper) accessory.Method.SendChat($"/e 调试信息:已记录 治疗爆弹怪生成 第{timesRemedyBomb}次"); } - [ScriptMethod(name: "190 地面爆破 读条计数", userControl:false, eventType: EventTypeEnum.AddCombatant, eventCondition: ["ActionId:7169"])] + [ScriptMethod(name: "190 地面爆破 读条计数", userControl:false, eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:7169"])] public void 地面爆破读条计数(Event @event, ScriptAccessory accessory) { ++Sap; if(isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破读条次数: {Sap}"); } + [ScriptMethod(name: "190 熔岩爆弹怪 出现位置预测", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:7169"])] + public void 熔岩爆弹怪_震撼弹预测_通过地面爆破读条次数(Event @event, ScriptAccessory accessory) + { + //暂未知 治疗爆弹怪死亡时间 与BOSS黄圈技能时间轴是否有关联 + // 在打治疗爆弹怪时,BOSS应读条1次地面爆破,正常击杀时间打完后,BOSS应再读条3次地面爆破,所以在第4n次读条时该开始绘制预测 + + if (Sap % 4 == 0 && Sap > 0) + { + + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "熔岩爆弹怪_震撼弹预测"; + dp.Color = new Vector4(0f, 0f, 1f, 1.5f); + dp.Scale = new Vector2(7.2f); + dp.DestoryAt = 5500; + + // 根据 地面爆破 读条4n次 决定位置 + switch (Sap / 4) + { + case 1: + { + dp.Position = new Vector3(-288.63f, 0.14f, -300.26f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测1"); + break; + } + + case 2: + { + dp.Position = new Vector3(-297.46f, 0.12f, -297.52f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测2"); + break; + } + + case 3: + { + dp.Position = new Vector3(-288.84f, 0.12f, -305.54f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测3"); + break; + } + + case 4: + { + dp.Position = new Vector3(-309.13f, 0.05f, -303.74f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测4"); + break; + } + + case 5: + { + dp.Position = new Vector3(-298.36f, 0.05f, -293.63f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测5"); + break; + } + + case 6: + { + dp.Position = new Vector3(-301.96f, 0.05f, -314.29f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测6"); + break; + } + + case 7: + { + dp.Position = new Vector3(-299.12f, 0.05f, -297.56f); + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次,开始绘制生成位置预测7"); + break; + } + + default: + { + if (isDeveloper) accessory.Method.SendChat($"/e 调试信息:地面爆破第{Sap}次(4n次),开始绘制生成位置预测"); + break; + } + + } + + if(isText) accessory.Method.TextInfo("已预测 <熔岩爆弹怪> 刷新位置", duration: 3500, false); + if(isTTS) accessory.Method.TTS("已预测熔岩爆弹怪刷新位置"); + if(isEdgeTTS) accessory.Method.EdgeTTS("已预测熔岩爆弹怪刷新位置"); + + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + + } + + } - /*/ 有点计数问题,先放着等有缘人修 + /* // 废案 [ScriptMethod(name: "190 熔岩爆弹怪 出现位置预测", eventType: EventTypeEnum.AddCombatant, eventCondition: ["DataId:6385"])] - public void 熔岩爆弹怪_震撼弹预测(Event @event, ScriptAccessory accessory) + public void 熔岩爆弹怪_震撼弹预测_通过治疗爆弹怪(Event @event, ScriptAccessory accessory) { //在治疗爆弹怪 刷新约54s后 出现熔岩爆弹怪 ,期间BOSS会读条3次 [7169]地面爆破 第3次与第2次间隔较长,应在第3次黄圈读条时准备将BOSS拉去刷新位置 //暂未知 治疗爆弹怪死亡时间 与BOSS黄圈技能时间轴是否有关联 - //在刷新45s时 大约会读条第3次黄圈,故应 Delay = 45000,DestoryAt = 9000 + //在刷新45s时 大约会读条第3次黄圈(该出现预兆时分别为 4n 次读条),故应 Delay = 45000,DestoryAt = 9000 if(isDeveloper) accessory.Method.SendChat($"/e 调试信息:已捕获 治疗爆弹怪生成{timesRemedyBomb}次,开始45秒后绘制倒计时"); @@ -844,7 +939,6 @@ public class the_Palace_of_the_Dead dp.DestoryAt = 9000; // 根据 治疗爆弹怪 出现次数 决定 熔岩爆弹怪 生成位置 - // 或者根据 地面爆破 读条3n次 决定位置 switch(timesRemedyBomb) { case 1: { @@ -895,12 +989,10 @@ public class the_Palace_of_the_Dead } } - - if(isText) accessory.Method.TextInfo("已预测 <熔岩爆弹怪> 刷新位置", duration: 5000, false); - if(isTTS) accessory.Method.TTS("已预测熔岩爆弹怪刷新位置"); - if(isEdgeTTS) accessory.Method.EdgeTTS("已预测熔岩爆弹怪刷新位置"); + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); - } + } + */ [ScriptMethod(name: "熔岩爆弹怪 震撼弹预测销毁", eventType: EventTypeEnum.AddCombatant, eventCondition: ["DataId:6386"], userControl: false)] public void 熔岩爆弹怪_震撼弹预测销毁(Event @event, ScriptAccessory accessory) @@ -908,8 +1000,6 @@ public class the_Palace_of_the_Dead accessory.Method.RemoveDraw($"熔岩爆弹怪_震撼弹预测"); } - // */ - [ScriptMethod(name: "190 熔岩爆弹怪 震撼弹提示", eventType: EventTypeEnum.AddCombatant, eventCondition: ["DataId:6386"])] public void 熔岩爆弹怪_震撼弹(Event @event, ScriptAccessory accessory) { @@ -932,21 +1022,22 @@ public class the_Palace_of_the_Dead accessory.Method.RemoveDraw($"熔岩爆弹怪_震撼弹"); } - + [ScriptMethod(name: "190 爆弹怪教父 特大爆炸提示", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:7103"])] public async void 爆弹怪教父_特大爆炸提示(Event @event, ScriptAccessory accessory) { isExplosionInterrupted = false; - await Task.Delay(14800); + await Task.Delay(15800); if (!isExplosionInterrupted) { - if(isText) accessory.Method.TextInfo("99.9%真伤,注意瞬回", duration: 9500, true); + if(isText) accessory.Method.TextInfo("99.9%真伤,注意瞬回", duration: 8500, true); if(isTTS) accessory.Method.TTS("99.9%真伤,注意瞬回"); if(isEdgeTTS) accessory.Method.EdgeTTS("99.9%真伤,注意瞬回"); } } + [ScriptMethod(name: "特大爆炸打断销毁", eventType: EventTypeEnum.CancelAction, eventCondition: ["ActionId:7103"], userControl: false)] public void 特大爆炸打断销毁(Event @event, ScriptAccessory accessory) diff --git a/OnlineRepo.json b/OnlineRepo.json index dd8ca7b..3475e40 100644 --- a/OnlineRepo.json +++ b/OnlineRepo.json @@ -641,12 +641,12 @@ { "Name": "死者宫殿", "Guid": "4210c323-eba4-4d67-a7e7-b90799494729", - "Version": "0.0.0.5", + "Version": "0.0.0.6", "Author": "Tetora", "Repo": "https://github.com/Hibiya615/TetoraKAScript", "DownloadUrl": "https://raw.githubusercontent.com/Hibiya615/TetoraKAScript/refs/heads/main/Deep_Dungeon/the_Palace_of_the_Dead.cs", - "Note": "v0.0.0.5:\n死者宫殿 初版绘制", - "UpdateInfo": "v0.0.0.5 全部层数进行二次更新", + "Note": "v0.0.0.6:\n死者宫殿 初版绘制", + "UpdateInfo": "v0.0.0.6 全部层数进行二次更新,增加190熔岩爆弹怪生成位置预测", "TerritoryIds": [ 561, 562,