diff --git a/02-A-Realm-Reborn/Thornmarch(Hard).cs b/02-A-Realm-Reborn/Thornmarch(Hard).cs index 27b975c..48a8e84 100644 --- a/02-A-Realm-Reborn/Thornmarch(Hard).cs +++ b/02-A-Realm-Reborn/Thornmarch(Hard).cs @@ -1,6 +1,705 @@ -namespace The_Navel___EX._02_A_Realm_Reborn; +using System; +using System.ComponentModel; +using System.Linq; +using System.Numerics; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using Dalamud.Game.ClientState.Objects.Types; +using Newtonsoft.Json; +using Dalamud.Utility.Numerics; +using KodakkuAssist.Script; +using KodakkuAssist.Module.GameEvent; +using KodakkuAssist.Module.Draw; +using ECommons; +using ECommons.DalamudServices; +using ECommons.GameFunctions; +using ECommons.MathHelpers; +using System.Threading.Tasks; -public class Thornmarch_Hard_ +namespace Thornmarch_Hard; + +[ScriptType(guid: "cd81e178-12e6-4e53-9b81-63002cc51ecb", name: "莫古力贤王歼灭战(?)", territorys: [1067], + version: "0.0.0.1", author: "Tetora", note: noteStr)] + +public class Thornmarch_Hard { + const string noteStr = + """ + v0.0.0.1: + LV50 莫古力贤王歼灭战 + 纯整活无意义,不喜欢可以不用 + 台词暂时适用于CN版,暂未适配其他语言端 + """; -} \ No newline at end of file + [UserSetting("台词TTS开关")] + public bool isTTS { get; set; } = true; + + [UserSetting("台词文本弹窗开关")] + public bool isText { get; set; } = true; + + [UserSetting("机制文本弹窗开关")] + public bool isText2 { get; set; } = true; + + [UserSetting("打印气泡台词至聊天框")] + public bool isSendMessage { get; set; } = true; + + [UserSetting("机制填充动画开关")] + public bool isFill { get; set; } = true; + + #region 台词部分 + + [ScriptMethod(name: "反抗莫古力家臣团的人,会被莫古们彻底击溃库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:反抗莫古力家臣团的人\n会被莫古们彻底击溃库啵!"])] + public void 会被莫古们彻底击溃库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("反抗莫古力家臣团的人,会被莫古们彻底击溃库啵!", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("反抗莫古力家臣团的人,会被莫古们彻底击溃,库啵!"); + } + + [ScriptMethod(name: "尝尝莫古的斧头库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1950"])] + public void 尝尝莫古的斧头库啵(Event @event, ScriptAccessory accessory) + { + //if (isTTS)accessory.Method.EdgeTTS("尝尝莫古的斧头库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 毛毛之斧 库普塔·咔帕:尝尝莫古的斧头库啵!"); + } + + [ScriptMethod(name: "看莫古射你屁股库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1960"])] + public void 看莫古射你屁股库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("看莫古射你屁股库啵!", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("看莫古射你屁股库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 软软之弓 库普括·叩吉:看莫古射你屁股库啵!"); + } + + [ScriptMethod(name: "居然输了库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1947"])] + public void 居然输了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("居然输了库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 绒绒之壁 库普迪·库普:居然输了库啵……"); + } + + [ScriptMethod(name: "被打倒了库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1952"])] + public void 被打倒了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("被打倒了库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 毛毛之斧 库普塔·咔帕:被打倒了库啵……"); + } + + [ScriptMethod(name: "被干掉了库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1962"])] + public void 被干掉了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("被干掉了库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 软软之弓 库普括·叩吉:被干掉了库啵……"); + } + + [ScriptMethod(name: "想被穿成肉串吗库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1955"])] + public void 想被穿成肉串吗库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("想被穿成肉串吗库啵!", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("想被穿成肉串吗库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 茸茸之愈 库普洛·奇普:想被穿成肉串吗库啵!"); + } + + [ScriptMethod(name: "来跟莫古一起跳库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1573"])] + public void 来跟莫古一起跳库啵(Event @event, ScriptAccessory accessory) + { + //if (isTTS)accessory.Method.EdgeTTS("来跟莫古一起跳库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 绵绵之音 普库嘻·皮叩:来跟莫古一起跳库啵!"); + } + + [ScriptMethod(name: "莫古输了库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1957"])] + public void 莫古输了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("莫古输了库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 茸茸之愈 库普洛·奇普:莫古输了库啵……"); + } + + [ScriptMethod(name: "已经没法唱歌了库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1975"])] + public void 已经没法唱歌了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("已经没法唱歌了库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 绵绵之音 普库嘻·皮叩:已经没法唱歌了库啵……"); + } + + [ScriptMethod(name: "玩火好有趣啊库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1965"])] + public void 玩火好有趣啊库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("玩火好有趣啊库啵!", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("玩火好有趣啊库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 柔柔之力 普库啦·普奇:玩火好有趣啊库啵!"); + } + + [ScriptMethod(name: "真、真的要打吗库啵?", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1978"])] + public void 真的要打吗库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("真、真的要打吗库啵?"); + if (isSendMessage)accessory.Method.SendChat("/e 蓬蓬之障 普库呐·帕叩:真、真的要打吗库啵?"); + } + + [ScriptMethod(name: "将力量集中到绒绒陨石上,把你们砸烂库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:将力量集中到绒绒陨石上,\n把你们砸烂库啵!"])] + public void 会把你们砸烂库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("将力量集中到绒绒陨石上,把你们砸烂库啵!", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("将力量集中到绒绒陨石上,把你们砸烂库啵!"); + } + + [ScriptMethod(name: "莫古已经燃尽了库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1967"])] + public void 莫古已经燃尽了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("莫古已经燃尽了库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 柔柔之力 普库啦·普奇:莫古已经燃尽了库啵……"); + } + + [ScriptMethod(name: "好可怕库啵……", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1980"])] + public void 好可怕库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("好可怕库啵……"); + if (isSendMessage)accessory.Method.SendChat("/e 蓬蓬之障 普库呐·帕叩:好可怕库啵……"); + } + + [ScriptMethod(name: "挺、挺厉害的嘛库啵……但贤王大人会收拾你们的库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:挺、挺厉害的嘛库啵……\n但贤王大人会收拾你们的库啵!"])] + public void 贤王大人会收拾你们的库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("挺、挺厉害的嘛库啵……但贤王大人会收拾你们的库啵!"); + } + + [ScriptMethod(name: "贤王大人啊,请降下您的制裁库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:贤王大人啊,\n请降下您的制裁库啵!"])] + public void 请降下您的制裁库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("贤王大人啊,请降下您的制裁库啵!", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("贤王大人啊,请降下您的制裁库啵!"); + } + + [ScriptMethod(name: "贤王大人啊……后半句是啥来着库啵?", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1982"])] + public void 后半句是啥来着库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("贤王大人啊……后半句是啥来着库啵?"); + if (isSendMessage)accessory.Method.SendChat("/e 蓬蓬之障 普库呐·帕叩:贤王大人啊……后半句是啥来着库啵?"); + } + + [ScriptMethod(name: "死亡莫古警告!你们会为忤逆行为付出代价库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:死亡莫古警告!\n你们会为忤逆行为付出代价库啵!"])] + public void 你们会为忤逆行为付出代价库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("死亡莫古警告!你们会为忤逆行为付出代价库啵!"); + } + + [ScriptMethod(name: "莫古们的战斗才刚刚开始库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:莫古们的战斗才刚刚开始库啵!"])] + public void 莫古们的战斗才刚刚开始库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("莫古们的战斗才刚刚开始库啵!"); + } + + [ScriptMethod(name: "家臣们,到你们出马的时候了库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:家臣们,\n到你们出马的时候了库啵!"])] + public void 到你们出马的时候了库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("家臣们,到你们出马的时候了库啵!"); + } + + [ScriptMethod(name: "让、让你们见识一下莫古真正的实力库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13788"])] + public void 让你们见识一下莫古真正的实力库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("让、让你们见识一下莫古真正的实力库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 蓬蓬之障 普库呐·帕叩:让、让你们见识一下莫古真正的实力库啵!"); + } + + [ScriptMethod(name: "尝尝纷乱箭库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1963"])] + public void 尝尝纷乱箭库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("尝尝纷乱箭库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 软软之弓 库普括·叩吉:尝尝纷乱箭库啵!"); + } + + [ScriptMethod(name: "沉到毒沼里去吧库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:1981"])] + public void 沉到毒沼里去吧库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("沉到毒沼里去吧库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 蓬蓬之障 普库呐·帕叩:沉到毒沼里去吧库啵!"); + } + + [ScriptMethod(name: "家臣们,给坏人以制裁库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:家臣们,\n给坏人以制裁库啵!"])] + public void 给坏人以制裁库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("家臣们,给坏人以制裁库啵!"); + } + + [ScriptMethod(name: "要有自知之明库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13781"])] + public void 要有自知之明库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("要有自知之明库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 贤王莫古尔·莫古十二世:要有自知之明库啵!"); + } + + [ScriptMethod(name: "把你们打散架库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13783"])] + public void 把你们打散架库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("把你们打散架库啵!\n打得你们屁滚尿流库啵! ", duration: 8700, true); + if (isTTS)accessory.Method.EdgeTTS("把你们打散架库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 毛毛之斧 库普塔·咔帕:把你们打散架库啵!"); + } + + [ScriptMethod(name: "打得你们屁滚尿流库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13782"])] + public void 打得你们屁滚尿流库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("把你们打散架库啵!\n打得你们屁滚尿流库啵! ", duration: 8700, true); + if (isTTS)accessory.Method.EdgeTTS("打得你们屁滚尿流库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 绒绒之壁 库普迪·库普:打得你们屁滚尿流库啵!"); + } + + [ScriptMethod(name: "听莫古一曲库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13787"])] + public void 听莫古一曲库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("听莫古一曲库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 绵绵之音 普库嘻·皮叩:听莫古一曲库啵!"); + } + + [ScriptMethod(name: "家臣们,联起手来,对抗敌人库啵!", userControl: false,eventType: EventTypeEnum.Chat, eventCondition: + ["Type:NPCDialogueAnnouncements","Message:家臣们,\n联起手来,对抗敌人库啵!"])] + public void 对抗敌人库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("家臣们,联起手来,对抗敌人库啵!"); + } + + [ScriptMethod(name: "莫古的魔力在熊熊燃烧库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13789"])] + public void 莫古的魔力在熊熊燃烧库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("莫古的魔力在熊熊燃烧库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 柔柔之力 普库啦·普奇:莫古的魔力在熊熊燃烧库啵"); + } + + [ScriptMethod(name: "碾碎你们库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13784"])] + public void 碾碎你们库啵(Event @event, ScriptAccessory accessory) + { + if (isText)accessory.Method.TextInfo("碾碎你们库啵! ", duration: 4000, true); + if (isTTS)accessory.Method.EdgeTTS("碾碎你们库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 贤王莫古尔·莫古十二世:碾碎你们库啵!"); + } + + [ScriptMethod(name: "吃莫古一击库啵!", userControl: false,eventType: EventTypeEnum.NpcYell, eventCondition: ["Id:13785"])] + public void 吃莫古一击库啵(Event @event, ScriptAccessory accessory) + { + if (isTTS)accessory.Method.EdgeTTS("吃莫古一击库啵!"); + if (isSendMessage)accessory.Method.SendChat("/e 茸茸之愈 库普洛·奇普:吃莫古一击库啵!"); + } + #endregion + + #region 机制部分 + /* 每次贤王号令都是不同的 Action id 不用计数了 + private volatile int timeDecree=0; + public void Init(ScriptAccessory accessory) { + timeDecree=0; + } + */ + + [ScriptMethod(name: "回转莫古盾(钢铁)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29216"])] + public void 回转莫古盾(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "回转莫古盾"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = new Vector2(6f); + dp.DestoryAt = 2700; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + [ScriptMethod(name: "回转莫古盾销毁", eventType: EventTypeEnum.CancelAction, eventCondition: ["ActionId:29216"],userControl: false)] + public void 回转莫古盾销毁(Event @event, ScriptAccessory accessory) + { + accessory.Method.RemoveDraw("回转莫古盾"); + } + + [ScriptMethod(name: "莫古死亡雨(分散)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29191"])] + public void 莫古死亡雨(Event @event, ScriptAccessory accessory) + { + if (isText2)accessory.Method.TextInfo("分散站位", duration: 2500, true); + accessory.Method.EdgeTTS("分散站位"); + } + + [ScriptMethod(name: "百库啵横扫(顺劈)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29215"])] + public void 百库啵横扫(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "百库啵横扫"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = new Vector2(20); + dp.Radian = 90f.DegToRad(); + dp.DestoryAt = 4700; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Fan, dp); + } + + [ScriptMethod(name: "百库啵横扫销毁", eventType: EventTypeEnum.CancelAction, eventCondition: ["ActionId:29215"],userControl: false)] + public void 百库啵横扫销毁(Event @event, ScriptAccessory accessory) + { + accessory.Method.RemoveDraw("百库啵横扫"); + } + + [ScriptMethod(name: "绒绒神圣(AOE)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:regex:^2921[01]$"])] + public void 绒绒神圣(Event @event, ScriptAccessory accessory) + { + accessory.Method.EdgeTTS("AOE"); + } + + [ScriptMethod(name: "莫古狂夜曲(顺劈)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29213"])] + public void 莫古狂夜曲(Event @event, ScriptAccessory accessory) + { + // 命中后附加 11s [3080] 狂欢 debuff + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "莫古狂夜曲"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = new Vector2(30); + dp.Radian = 120f.DegToRad(); + dp.DestoryAt = 4700; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Fan, dp); + } + + [ScriptMethod(name: "狂欢", eventType: EventTypeEnum.StatusAdd, eventCondition: ["StatusID:3080"],userControl: false)] + public void 狂欢(Event @event, ScriptAccessory accessory) + { + if ( @event.TargetId() != accessory.Data.Me) return; + accessory.Method.TextInfo("黄圈出来你不躲?", duration: 11000, true); + accessory.Method.EdgeTTS("黄圈出来你不躲?"); + } + + [ScriptMethod(name: "莫古狂夜曲销毁", eventType: EventTypeEnum.CancelAction, eventCondition: ["ActionId:29213"],userControl: false)] + public void 莫古狂夜曲销毁(Event @event, ScriptAccessory accessory) + { + accessory.Method.RemoveDraw("莫古狂夜曲"); + } + + [ScriptMethod(name: "绒绒陨石(踩塔)", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:29193"])] + public void 绒绒陨石(Event @event, ScriptAccessory accessory) + { + // if (isText2)accessory.Method.TextInfo("踩塔", duration: 2700, true); + accessory.Method.EdgeTTS("踩塔"); + } + + [ScriptMethod(name: "莫古刺(死刑)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29214"])] + public void 莫古刺(Event @event, ScriptAccessory accessory) + { + accessory.Method.EdgeTTS($"死刑点{@event.TargetName()}"); + } + + [ScriptMethod(name: "死亡莫古警告(AOE)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29217"])] + public void 死亡莫古警告(Event @event, ScriptAccessory accessory) + { + accessory.Method.EdgeTTS("AOE"); + } + + [ScriptMethod(name: "贤王号令", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:regex:^(2918[89]|29190)$"])] + public void 贤王号令(Event @event, ScriptAccessory accessory) + { + switch (@event.ActionId()) + { + case 29188: + { + if (isText2)accessory.Method.TextInfo("一运:远离毒圈,先集合 > 再分散 ,最后AOE", duration: 3700, true); + } + break; + case 29189: + { + if (isText2)accessory.Method.TextInfo("二运:三穿一大圈,远离顺劈,分摊死刑后AOE", duration: 3700, true); + } + break; + case 29190: + { + if (isText2)accessory.Method.TextInfo("三运:先躲避三连黄圈 后踩塔,先集合分摊,再躲钢铁月环,最后AOE接死刑", duration: 3700, true); + } + break; + } + } + + [ScriptMethod(name: "绒绒沼泽(毒圈)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29207"])] + public void 绒绒沼泽(Event @event, ScriptAccessory accessory) + { + accessory.Method.EdgeTTS("躲避毒池AOE"); + // 命中后附加 3082 猛毒 + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "绒绒沼泽"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = new Vector2(8f); + dp.DestoryAt = 5000; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + [ScriptMethod(name: "猛毒", eventType: EventTypeEnum.StatusAdd, eventCondition: ["StatusID:3082"],userControl: false)] + public void 猛毒(Event @event, ScriptAccessory accessory) + { + if ( @event.TargetId() != accessory.Data.Me) return; + accessory.Method.TextInfo("让你别吃你还吃?", duration: 3000, true); + accessory.Method.EdgeTTS("让你别吃你还吃?"); + } + + [ScriptMethod(name: "莫古崩石(分摊)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29204"])] + public void 莫古崩石(Event @event, ScriptAccessory accessory) + { + if (isText2)accessory.Method.TextInfo($"靠近{@event.TargetName()}分摊", duration: 5300, true); + accessory.Method.EdgeTTS($"靠近{@event.TargetName()}分摊"); + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "莫古崩石"; + dp.Color = accessory.Data.DefaultSafeColor; + dp.Owner = @event.TargetId(); + dp.Scale = new Vector2(6f); + dp.DestoryAt = 6000; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + [ScriptMethod(name: "莫古飞天乱(大圈)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:regex:^2919[67]$"])] + public void 莫古飞天乱(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "莫古飞天乱"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = new Vector2(20f); + dp.DestoryAt = 8700; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + [ScriptMethod(name: "绒绒双重陨石(分摊死刑)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29206"])] + public void 绒绒双重陨石(Event @event, ScriptAccessory accessory) + { + accessory.Method.EdgeTTS($"分摊死刑点{@event.TargetName()}"); + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "绒绒双重陨石"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.TargetId(); + dp.Scale = new Vector2(6f); + dp.DestoryAt = 5000; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + [ScriptMethod(name: "莫古彗星(引导黄圈)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29198"])] + public void 莫古彗星提示(Event @event, ScriptAccessory accessory) + { + if (isText2)accessory.Method.TextInfo("引导三连黄圈", duration: 5000, true); + accessory.Method.EdgeTTS("引导三连黄圈"); + } + + [ScriptMethod(name: "莫古彗星(三连黄圈)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29199"])] + public void 莫古彗星(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "莫古彗星"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Position = @event.EffectPosition(); + dp.Scale = new Vector2(6f); + dp.DestoryAt = 2700; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + + [ScriptMethod(name: "绒绒垒石(月环)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29619"])] + public void 绒绒垒石月环(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "绒绒垒石月环"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = new Vector2(30f); + dp.InnerScale = new Vector2(20f); + dp.Radian = float.Pi * 2; + dp.DestoryAt = 4700; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, dp); + } + + /* + [ScriptMethod(name: "绒绒垒石(月环)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:regex:^(29202|29619)$"])] + public void 绒绒垒石月环(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "绒绒垒石月环"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.SourceId(); + dp.Scale = @event.ActionId() == 29202 ? new Vector2(20f) : new Vector2(30f); + dp.InnerScale = @event.ActionId() == 29202 ? new Vector2(10f) : new Vector2(20f); + dp.Radian = float.Pi * 2; + dp.DestoryAt = 4700; + // if (isFill)dp.ScaleMode = ScaleMode.ByTime; + // 月环填充怎么是从中间扩散一个月环出去的啊好丑啊! + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, dp); + } + */ + + [ScriptMethod(name: "绒绒垒石(钢铁)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29201"])] + public void 绒绒垒石钢铁(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "绒绒垒石钢铁"; + dp.Color = accessory.Data.DefaultDangerColor; + dp.Owner = @event.TargetId(); + dp.Scale = new Vector2(10f); + dp.DestoryAt = 4700; + if (isFill)dp.ScaleMode = ScaleMode.ByTime; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp); + } + + [ScriptMethod(name: "森罗贤王(直线)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29208"])] + public void 森罗贤王(Event @event, ScriptAccessory accessory) + { + var dp = accessory.Data.GetDefaultDrawProperties(); + dp.Name = "森罗贤王"; + dp.Scale = new (10, 50f); + dp.Owner = @event.SourceId(); + dp.Color = accessory.Data.DefaultDangerColor; + dp.DestoryAt = 2700; + accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Rect, dp); + } + + [ScriptMethod(name: "千库啵冲锋(死刑)", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:29209"])] + public void 千库啵冲锋(Event @event, ScriptAccessory accessory) + { + accessory.Method.EdgeTTS($"死刑点{@event.TargetName()}"); + } + #endregion + +} + + + +public static class EventExtensions +{ + private static bool ParseHexId(string? idStr, out uint id) + { + id = 0; + if (string.IsNullOrEmpty(idStr)) return false; + try + { + var idStr2 = idStr.Replace("0x", ""); + id = uint.Parse(idStr2, System.Globalization.NumberStyles.HexNumber); + return true; + } + catch (Exception) + { + return false; + } + } + + public static uint ActionId(this Event @event) + { + return JsonConvert.DeserializeObject(@event["ActionId"]); + } + + public static uint SourceId(this Event @event) + { + return ParseHexId(@event["SourceId"], out var id) ? id : 0; + } + + public static uint SourceDataId(this Event @event) + { + return JsonConvert.DeserializeObject(@event["SourceDataId"]); + } + + public static uint Command(this Event @event) + { + return ParseHexId(@event["Command"], out var cid) ? cid : 0; + } + + public static uint DurationMilliseconds(this Event @event) + { + return JsonConvert.DeserializeObject(@event["DurationMilliseconds"]); + } + + public static float SourceRotation(this Event @event) + { + return JsonConvert.DeserializeObject(@event["SourceRotation"]); + } + + public static float TargetRotation(this Event @event) + { + return JsonConvert.DeserializeObject(@event["TargetRotation"]); + } + + public static byte Index(this Event @event) + { + return (byte)(ParseHexId(@event["Index"], out var index) ? index : 0); + } + + public static uint State(this Event @event) + { + return ParseHexId(@event["State"], out var state) ? state : 0; + } + + public static string SourceName(this Event @event) + { + return @event["SourceName"]; + } + + public static string TargetName(this Event @event) + { + return @event["TargetName"]; + } + + public static uint TargetId(this Event @event) + { + return ParseHexId(@event["TargetId"], out var id) ? id : 0; + } + + public static Vector3 SourcePosition(this Event @event) + { + return JsonConvert.DeserializeObject(@event["SourcePosition"]); + } + + public static Vector3 TargetPosition(this Event @event) + { + return JsonConvert.DeserializeObject(@event["TargetPosition"]); + } + + public static Vector3 EffectPosition(this Event @event) + { + return JsonConvert.DeserializeObject(@event["EffectPosition"]); + } + + public static uint DirectorId(this Event @event) + { + return ParseHexId(@event["DirectorId"], out var id) ? id : 0; + } + + public static uint StatusId(this Event @event) + { + return JsonConvert.DeserializeObject(@event["StatusId"]); + } + + public static uint StackCount(this Event @event) + { + return JsonConvert.DeserializeObject(@event["StackCount"]); + } + + public static uint Param(this Event @event) + { + return JsonConvert.DeserializeObject(@event["Param"]); + } +} + + +public static class Extensions +{ + public static void TTS(this ScriptAccessory accessory, string text, bool isTTS, bool isDRTTS) + { + if (isDRTTS) + { + accessory.Method.SendChat($"/pdr tts {text}"); + } + else if (isTTS) + { + accessory.Method.TTS(text); + } + } +}