From d625a4d3935926c8c63e77a8c62c0c3e646960c0 Mon Sep 17 00:00:00 2001 From: RedAsteroid <123588653+RedAsteroid@users.noreply.github.com> Date: Thu, 21 Dec 2023 00:35:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E5=86=85=E5=AE=B9=20part1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- Triggers/omo.cpp | 1 - img/dalamud_theme.md | 2 +- src/TEA_P2_Transition_cn.cs | 405 ++++++++++++++++++++++++++++++++++++ 4 files changed, 407 insertions(+), 3 deletions(-) delete mode 100644 Triggers/omo.cpp create mode 100644 src/TEA_P2_Transition_cn.cs diff --git a/README.md b/README.md index 5666a35..b45450a 100644 --- a/README.md +++ b/README.md @@ -55,5 +55,5 @@ https://raw.kgithub.com/RedAsteroid/FFXIV_Triggers/main/Test/Testtriggers_pure.x * 巴尔巴莉希娅歼殛战 * 亚历山大绝境战 -## 补充 +## 其他内容 - 预览图里的卫月样式:[**Catppuccin Macchiato v1**](https://github.com/RedAsteroid/FFXIV_Triggers/blob/main/img/dalamud_theme.md) diff --git a/Triggers/omo.cpp b/Triggers/omo.cpp deleted file mode 100644 index 8b13789..0000000 --- a/Triggers/omo.cpp +++ /dev/null @@ -1 +0,0 @@ - diff --git a/img/dalamud_theme.md b/img/dalamud_theme.md index d1e34a3..ac9fa26 100644 --- a/img/dalamud_theme.md +++ b/img/dalamud_theme.md @@ -8,6 +8,6 @@ DS1H4sIAAAAAAAACqVYS3PbNhD+Kxme2hmNh3gQD91iu40PcScTu5O2N5qCJda0qFKU8vDkv3fxJAhKbqT6IgHe/Xb328VioZeszOboIp9lD9n8JfsDFrle/ZnNxUX+fZZV2dxsLJyYcmL5RWGk4BOkHuG/s2zpZFdOtnbr8sFt/O2UmTNBjIknJ9Y4qedEihqpdbLLzG7rdulIdhOctLu52f0nm0u90YEdCG6WbZ1EDxtYf9m5jb1xbZZ9dusvzrOvB4P/dtBaWbptMgq2aiHMl+xefemDGi+wpAg7ZYE5LYDNv/RCspwLSmbZJ+MCAGjN63pbPjRqERBYkUuRU4fAtAqiDsIsCKcRxqd6vWg/Xy6DPkKcUZ4zB4BwQWWOHQASApMi9uFqVTeLc9QtNR/azW4Tq1MDILy6oQMJp481HxBeZP+y7RaqG/gbWWdj/uA/hXTGDS5nLEDcrUogYpo/p51HTv/alc8qdrpgAkz5QkDGkJDeaSIxSMjIaQdw0+5VF6UOhRQbHJwbTe5xmPkTU5y3VV/v1fnu3Nd9o/5PEhxA4kduKfZ+6LIE26EWoC4gYDSFuWqbptxsI2JORrpV691l2cUxmagF9zEFqo9xe1d14MfDCOS1ogjy7zrd5JwGHp1GPCpIYv3Gh4xqkLQ8zNnFhWeBemgDVvjGcRgrLRHuz6Vlw/CJWGDDuRmdclU93Zbd06kHzbnS1HDCRsScqZ/EIXQUSPqs6joX2FJiuvTQJnZ93/p7AyK0bQr5vISStomxBUYm+mlGSODNZsSi+oyM+k2hU52LAJUEQguWS0kCksxFjkKFM46lKOLqvFFl3PYmB8Qv3QExpVJM9NN4TqbFwiSxEMwxQ76LEcoQl3ppQCiFlHEWg9ypTdmVfTuEQ8YdjPhasQghy1OENKDTqsyjJPHInHJKPSmiQIIWPjOSQ1eJXfmotvU39a6rN+f2gAFhUm4FAk90HVhaGBGSCu+KI/YwVBJSQTjHxAMVVAjCfN0ykhOCNPlDY4472qk1AsqTOpNCCqwHARsI4gIaUggEYYIxHl0wk5MPNUEkChAUciQI9hVfUJQzLBI3fl8/ttUuvljOCSagpJxSjAQJeeYo53yoNqhmwrR/Aeq6rZ7q9fJDp/a1GgYP7KtV16bVtUwA5KD1y/Om/xrdTL6Tew7jKvjQtP37eq22w4zoA9ZfbNLRIYVx3kxHtWz700yKRO2m3vbtEsaS847gCCKtGkEZNJPQ6/VhgNYSsBiwz8apapRtUPEVfvJQomHciNh37Xp5+qw59P4I7H29XPVndDw94ZsxuvB4H0fz+2szyiD+tumTrJrP6N4EDebeGHeqUVWv4jH/lSol2rHrrlxed+3mvuyW6pipwTkJKr+V+xvgpBnxctSOTQ7o2AcMHIlU+XhgPNG8rp+j0HxX9F3Ax4X1XNkuysbq/ZgSkKEfrDCmZ/Psquw3m11V1es3t2VVrWq4bN78tEc/Z/Coto/BcnLWxlTZsKMxyp8G/8KLpOC9/gNSi+lD1jfRSEr9B6lW6nHggwdGeOBEfwuyy0mkPPc5jjFXk8pmByzXEylvFRHzF8n6nx6iefEo009HSze+9JuoJyRUS91qguDQFr1RegBumFOhVR08MVbO/+IxBE2JpXBMzjCKwJ0ZHpfBwxE58MtIkhboXgdsD8OaEGFqDZjQoiLZ4eKBaz9Jj0F3kiAKHR92v/8Lj32RwowSAAA= ``` -请复制上方文本后,按照图片教程应用。 +复制参数后,参考图片应用预设 ![tu](https://raw.githubusercontent.com/RedAsteroid/FFXIV_Triggers/main/img/3.png) \ No newline at end of file diff --git a/src/TEA_P2_Transition_cn.cs b/src/TEA_P2_Transition_cn.cs new file mode 100644 index 0000000..6f9c2ed --- /dev/null +++ b/src/TEA_P2_Transition_cn.cs @@ -0,0 +1,405 @@ +using Dalamud.Game.ClientState.Conditions; +using Dalamud.Game.ClientState.Objects.Types; +using Dalamud.Interface.Colors; +using ECommons; +using ECommons.DalamudServices; +using ECommons.Hooks; +using ECommons.Hooks.ActionEffectTypes; +using ECommons.ImGuiMethods; +using ECommons.Logging; +using Splatoon; +using Splatoon.Memory; +using Splatoon.SplatoonScripting; +using System; +using System.Collections.Generic; +using System.Numerics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SplatoonScriptsOfficial.Duties.Shadowbringers +{ + public class TEA_P2_Transition : SplatoonScript + { + public override HashSet ValidTerritories => new() { 887 }; + public override Metadata? Metadata => new(1, "Madou Shoujo-ErrerCNserver-redrawtest"); + private string ElementNamePrefix = "TEA_P2_Transition_Bait_Position"; + // ActionEffectId of the exaflare. + private uint HawkBlast = 18480; + // Circular ordered list of center of outside flares. + // Note the vector3 element order is: (X, Z, Y) because that's how it is stored from ActionEffectSet. + private List FlareList = new List { + new Vector3(90, 0, 90), + new Vector3(100, 0, 86), + new Vector3(110, 0, 90), + new Vector3(114, 0, 100), + new Vector3(110, 0, 110), + new Vector3(100, 0, 114), + new Vector3(90, 0, 110), + new Vector3(86, 0, 100), + }; + + private int LCNumber = 0; + private bool MechanicActive = false; + private uint BlastCount = 0; + private Element? Flare_a; + private Element? Flare_b; + private Element? Flare_m0; + private Element? Flare_m; + private Element? Indicator_a; + private Element? Indicator_b; + // add outer ring and change colors + private Element? Flare_a1; + private Element? Flare_b1; + private Element? Flare_m1; + private Element? Indicator_a1; + private Element? Indicator_b1; + + public override void OnSetup() + { + Element fa = new Element(0); + fa.Enabled = false; + fa.radius = 10f; + fa.Filled = false; + fa.color = 4278255421; + fa.thicc = 3f; + Controller.RegisterElement(ElementNamePrefix + "Flare_a", fa, true); + Flare_a = Controller.GetElementByName(ElementNamePrefix + "Flare_a"); + + // add fa1 + Element fa1 = new Element(0); + fa1.Enabled = false; + fa1.radius = 10f; + fa1.Filled = true; + fa1.color = 1258356541; + fa1.thicc = 3f; + Controller.RegisterElement(ElementNamePrefix + "Flare_a1", fa1, true); + Flare_a1 = Controller.GetElementByName(ElementNamePrefix + "Flare_a1"); + + Element fb = new Element(0); + fb.Enabled = false; + fb.radius = 10f; + fb.Filled = false; + fb.color = 4278255421; + fb.thicc = 3f; + Controller.RegisterElement(ElementNamePrefix + "Flare_b", fb, true); + Flare_b = Controller.GetElementByName(ElementNamePrefix + "Flare_b"); + + // add fb1 + Element fb1 = new Element(0); + fb1.Enabled = false; + fb1.radius = 10f; + fb1.Filled = true; + fb1.color = 1258356541; + fb1.thicc = 3f; + Controller.RegisterElement(ElementNamePrefix + "Flare_b1", fb1, true); + Flare_b1 = Controller.GetElementByName(ElementNamePrefix + "Flare_b1"); + + // add fm0 + Element fm0 = new Element(0); + fm0.Enabled = false; + SetElementPosition(fm0, 100, 100, 0); + fm0.radius = 10f; + fm0.Filled = false; + fm0.color = 4294967295; + fm0.thicc = 6f; + Controller.RegisterElement(ElementNamePrefix + "Flare_m0", fm0, true); + Flare_m0 = Controller.GetElementByName(ElementNamePrefix + "Flare_m0"); + + Element fm = new Element(0); + fm.Enabled = false; + SetElementPosition(fm, 100, 100, 0); + fm.radius = 10f; + fm.Filled = false; + fm.color = 4294904576; + fm.thicc = 3f; + Controller.RegisterElement(ElementNamePrefix + "Flare_m", fm, true); + Flare_m = Controller.GetElementByName(ElementNamePrefix + "Flare_m"); + + // add fm1 + Element fm1 = new Element(0); + fm1.Enabled = false; + SetElementPosition(fm1, 100, 100, 0); + fm1.radius = 10f; + fm1.Filled = true; + fm1.color = 1258356541; + fm1.thicc = 3f; + Controller.RegisterElement(ElementNamePrefix + "Flare_m1", fm1, true); + Flare_m1 = Controller.GetElementByName(ElementNamePrefix + "Flare_m1"); + + Element a = new Element(0); + a.Enabled = false; + a.radius = 0.5f; + a.overlayFScale = 1f; + a.color = 4294911232; + a.thicc = 6f; + a.overlayBGColor = 4278190080; + a.overlayTextColor = 4294967295; + Controller.RegisterElement(ElementNamePrefix + "Indicator_a", a, true); + Indicator_a = Controller.GetElementByName(ElementNamePrefix + "Indicator_a"); + + // add Indicator_a1 + Element a1 = new Element(0); + a1.Enabled = false; + a1.radius = 0.5f; + a1.overlayFScale = 1f; + a1.color = 4294967295; + a1.thicc = 3f; + a1.overlayBGColor = 4278190080; + a1.overlayTextColor = 4294967295; + Controller.RegisterElement(ElementNamePrefix + "Indicator_a1", a1, true); + Indicator_a1 = Controller.GetElementByName(ElementNamePrefix + "Indicator_a1"); + + Element b = new Element(0); + b.Enabled = false; + b.radius = 0.5f; + b.overlayFScale = 1f; + b.color = 4294911232; + b.thicc = 6f; + b.overlayBGColor = 4278190080; + b.overlayTextColor = 4294967295; + Controller.RegisterElement(ElementNamePrefix + "Indicator_b", b, true); + Indicator_b = Controller.GetElementByName(ElementNamePrefix + "Indicator_b"); + + // add Indicator_b1 + Element b1 = new Element(0); + b1.Enabled = false; + b1.radius = 0.5f; + b1.overlayFScale = 1f; + b1.color = 4294967295; + b1.thicc = 3f; + b1.overlayBGColor = 4278190080; + b1.overlayTextColor = 4294967295; + Controller.RegisterElement(ElementNamePrefix + "Indicator_b1", b1, true); + Indicator_b1 = Controller.GetElementByName(ElementNamePrefix + "Indicator_b1"); + } + + private void Reset() + { + MechanicActive = false; + BlastCount = 0; + Flare_a.Enabled = false; + Flare_b.Enabled = false; + Flare_m0.Enabled = false; + Flare_m.Enabled = false; + Indicator_a.Enabled = false; + Indicator_b.Enabled = false; + // add more + Flare_a1.Enabled = false; + Flare_b1.Enabled = false; + Flare_m1.Enabled = false; + Indicator_a1.Enabled = false; + Indicator_b1.Enabled = false; + } + + public override void OnEnable() + { + ActionEffect.ActionEffectEvent += ActionEffect_ActionEffectEvent; + } + + public override void OnDisable() + { + ActionEffect.ActionEffectEvent -= ActionEffect_ActionEffectEvent; + } + + public override void OnMessage(string Message) + { + if (Message == "代号摧毁者! 发现威胁差分闭合宇宙的敌人……开始歼灭!") + { + MechanicActive = true; + } + } + + public override void OnUpdate() + { + if (MechanicActive && BlastCount >= 18) + Reset(); + } + + public override void OnDirectorUpdate(DirectorUpdateCategory category) + { + if (category.EqualsAny(DirectorUpdateCategory.Wipe, DirectorUpdateCategory.Recommence)) + Reset(); + } + + public override void OnVFXSpawn(uint target, string vfxPath) + { + if (vfxPath.StartsWith("vfx/lockon/eff/m0361trg_a")) + LCNumber = GetMyNumber(); + } + + private Vector3 GetNextFlare(Vector3 current) + { + for (var i = 0; i < FlareList.Count; i++) + { + if (Vector3.Distance(current, FlareList[i]) < 5) + return FlareList[(i+1) % FlareList.Count]; + } + return new Vector3(100, 0, 100); + } + + private void SetElementPosition(Element e, float x, float y, float z) + { + e.refX = x; + e.refY = y; + e.refZ = z; + } + + private int GetMyNumber() + { + if (AttachedInfo.VFXInfos.TryGetValue(Svc.ClientState.LocalPlayer.Address, out var info)) + { + if (info.OrderBy(x => x.Value.Age).TryGetFirst(x => x.Key.StartsWith("vfx/lockon/eff/m0361trg_a"), out var effect)) + { + return int.Parse(effect.Key.Replace("vfx/lockon/eff/m0361trg_a", "")[0].ToString()); + } + } + return 0; + } + + private void MarkBaitTether(Element e, int n) + { + if (LCNumber == n) + e.tether = true; + else + e.tether = false; + e.overlayText = n.ToString(); + } + + private void ActionEffect_ActionEffectEvent(ActionEffectSet set) + { + if (!MechanicActive) + return; + + if (set.Action.RowId == HawkBlast) + { + BlastCount++; + + // Show next flare. + if (BlastCount == 1 || BlastCount == 3 || BlastCount == 5 || BlastCount == 10 || BlastCount == 12 || BlastCount == 14) + { + Vector3 nextFlare = GetNextFlare(set.Position); + SetElementPosition(Flare_a, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_a.Enabled = true; + // add more + SetElementPosition(Flare_a1, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_a1.Enabled = true; + } + if (BlastCount == 2 || BlastCount == 4 || BlastCount == 6 || BlastCount == 11 || BlastCount == 13 || BlastCount == 15) + { + Vector3 nextFlare = GetNextFlare(set.Position); + SetElementPosition(Flare_b, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_b.Enabled = true; + // add more + SetElementPosition(Flare_b1, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_b1.Enabled = true; + } + if (BlastCount == 7 || BlastCount == 16) + { + Vector3 nextFlare = GetNextFlare(set.Position); + SetElementPosition(Flare_a, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_a.Enabled = false; + // add more + SetElementPosition(Flare_a1, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_a1.Enabled = false; + } + if (BlastCount == 8 || BlastCount == 17) + { + Vector3 nextFlare = GetNextFlare(set.Position); + SetElementPosition(Flare_b, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_b.Enabled = false; + //add more + SetElementPosition(Flare_b1, nextFlare.X, nextFlare.Z, nextFlare.Y); + Flare_b1.Enabled = false; + Flare_m0.Enabled = true; + Flare_m.Enabled = true; + Flare_m1.Enabled = true; + } + if (BlastCount == 9) + { + Flare_m0.Enabled = false; + Flare_m.Enabled = false; + Flare_m1.Enabled = false; + Flare_a.Enabled = true; + Flare_b.Enabled = true; + // add more + Flare_a1.Enabled = true; + Flare_b1.Enabled = true; + } + + // 1 bait position + if (BlastCount == 5) + { + SetElementPosition(Indicator_a, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a, 1); + Indicator_a.Enabled = true; + // add more + SetElementPosition(Indicator_a1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a1, 1); + Indicator_a1.Enabled = true; + } + if (BlastCount == 6) + { + SetElementPosition(Indicator_b, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b, 1); + Indicator_b.Enabled = true; + // add more + SetElementPosition(Indicator_b1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b1, 1); + Indicator_b1.Enabled = true; + } + // 3 bait position + if (BlastCount == 7) + { + SetElementPosition(Indicator_a, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a, 3); + // add more + SetElementPosition(Indicator_a1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a1, 3); + } + if (BlastCount == 8) + { + SetElementPosition(Indicator_b, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b, 3); + // add more + SetElementPosition(Indicator_b1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b1, 3); + } + // 5 bait position + if (BlastCount == 12) + { + SetElementPosition(Indicator_a, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a, 5); + // add more + SetElementPosition(Indicator_a1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a1, 5); + } + if (BlastCount == 13) + { + SetElementPosition(Indicator_b, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b, 5); + // add more + SetElementPosition(Indicator_b1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b1, 5); + } + // 7 bait position + if (BlastCount == 16) + { + SetElementPosition(Indicator_a, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a, 7); + // add more + SetElementPosition(Indicator_a1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_a1, 7); + } + if (BlastCount == 17) + { + SetElementPosition(Indicator_b, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b, 7); + // add more + SetElementPosition(Indicator_b1, set.Position.X, set.Position.Z, set.Position.Y); + MarkBaitTether(Indicator_b1, 7); + } + } + } + } +} \ No newline at end of file