From 788d534cc2315bcd183fbe0c1384a3c752c0a077 Mon Sep 17 00:00:00 2001
From: yo! <1125404308@qq.com>
Date: Tue, 15 Sep 2026 21:45:33 +0800
Subject: [PATCH 1/2] Add SimpleScript class with various methods
---
yoyokity/test.cs | 282 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 282 insertions(+)
create mode 100644 yoyokity/test.cs
diff --git a/yoyokity/test.cs b/yoyokity/test.cs
new file mode 100644
index 0000000..f873414
--- /dev/null
+++ b/yoyokity/test.cs
@@ -0,0 +1,282 @@
+using System;
+using System.Numerics;
+using System.Reflection.Metadata;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Dalamud.Utility.Numerics;
+using FFXIVClientStructs.FFXIV.Client.Game.Character;
+using KodakkuAssist.Extensions;
+using KodakkuAssist.Module.Draw;
+using KodakkuAssist.Module.GameEvent;
+using KodakkuAssist.Module.GameEvent.Struct;
+using KodakkuAssist.Script;
+using static FFXIVClientStructs.FFXIV.Component.GUI.AtkTimer.Delegates;
+
+namespace MyScriptNamespace
+{
+ ///
+ /// name and version affect the script name and version number displayed in the user interface.
+ /// territorys specifies the regions where this trigger is effective. If left empty, it will be effective in all regions.
+ /// Classes with the same GUID will be considered the same trigger. Please ensure your GUID is unique and does not conflict with others.
+ ///
+ [ScriptType(name: "SimpleScript", territorys: [179, 979], guid: "d3b6a9b4-1e0e-4e0c-b7b7-ff1fce0e6cf1", version: "0.0.0.2", author: "yoyokity", note: noteStr, updateInfo: updateInfoStr)]
+ public class SimpleScript : IDisposable
+ {
+ const string noteStr =
+ """
+ 这是一个提示文本.
+ 他有多行显示.
+ 请在这里放置你的提示文本
+ """;
+ const string updateInfoStr =
+ """
+ 这里是更新信息.
+ 他有多行显示.
+ 请在这里放置你的更新信息
+ """;
+ ///
+ /// note will be displayed to the user as a tooltip.
+ ///
+ [UserSetting(note: "This is a test Property")]
+ public int prop1 { get; set; } = 1;
+ [UserSetting("Another Test Property")]
+ public bool prop2 { get; set; } = false;
+
+ [UserSetting("UserColorSetting")]
+ public ScriptColor color { get; set; } = new();
+
+ [UserSetting("EnumSetting")]
+ public TestEnum enumSetting { get; set; }
+ int n = 0;
+
+
+ public enum TestEnum
+ {
+ First,
+ Second
+ }
+ ///
+ /// This method is called at the start of each battle reset.
+ /// If this method is not defined, the program will execute an empty method.
+ ///
+ public void Init(ScriptAccessory accessory)
+ {
+ n = 0;
+ }
+
+ ///
+ /// name is the name of the method as presented to the user.
+ /// eventType is the type of event that triggers this method.
+ /// eventCondition is an array of strings specifying the properties that the event must have,
+ /// in the format name:value,For specific details, please refer to the GameEvent of the plugin.
+ /// userControl set to false will make the method not be shown to the user
+ /// and cannot be disabled by the user.
+ /// Please note, the method will be executed asynchronously.
+ ///
+ /// The event instance that triggers this method.
+ /// Pass the instances of methods and data that might be needed.
+ [ScriptMethod(name: "Test StartCasting", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:133"])]
+ public void PrintInfo(Event @event, ScriptAccessory accessory)
+ {
+ n++;
+ accessory.Method.SendChat($"/e {@event["SourceId"]} {n}-th use the Medica II");
+ accessory.Log.Debug($"Prop2 is {prop2}");
+ accessory.Log.Debug($"enum is {enumSetting}");
+ }
+
+ [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:124"])]
+ public void DrawCircle(Event @event, ScriptAccessory accessory)
+ {
+ var sid = @event.SourceId;
+
+ var prop = accessory.Data.GetDefaultDrawProperties();
+ prop.Owner = accessory.Data.Me;
+ prop.DestoryAt = 10000;
+ prop.Color = accessory.Data.DefaultDangerColor;
+ prop.Scale = new(5);
+ prop.InnerScale = new(3);
+ var start = DateTime.Now;
+ var n = 0;
+ //accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, prop);
+
+ accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, prop, (dpc) =>
+ {
+ var elapsedSeconds = (float)(DateTime.Now - start).TotalSeconds;
+ float hue = (elapsedSeconds * 0.5f) % 1f;
+ dpc.Color = HueToRGB(hue);
+ if (elapsedSeconds > 2)
+ {
+ start = DateTime.Now;
+ n++;
+ dpc.Radian = MathF.PI / 4 * n;
+ }
+ dpc.Scale = new(3 + hue * 3);
+ });
+
+
+ }
+ [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:999999"])]
+ public void TestTTS(Event @event, ScriptAccessory accessory)
+ {
+ accessory.Method.TTS($"黏黏{DateTime.Now:T}");
+
+ }
+
+ [ScriptMethod(name: "Test Suppress", eventType: EventTypeEnum.Waymark)]
+ public void TestSuppress(Event @event, ScriptAccessory accessory)
+ {
+ n++;
+ accessory.Log.Debug($"WayMark {n} {@event.EventTriggerSource}");
+ uint id = 0x40000001;
+ if (accessory.Data.EnmityList.TryGetValue(id, out var objs))
+ {
+ var firstId = objs[0];
+ }
+ }
+ [ScriptMethod(name: "Test Action", eventType: EventTypeEnum.Waymark)]
+ public void TestAction(Event @event, ScriptAccessory accessory)
+ {
+ accessory.Method.UseAction(accessory.Data.Me, 37010);
+ }
+ [ScriptMethod(name: "Test ActionLocation", eventType: EventTypeEnum.Waymark)]
+ public void TestActionLocation(Event @event, ScriptAccessory accessory)
+ {
+ //accessory.Method.UseActionLocation(new System.Numerics.Vector3(-750, -30, -560), 3569, 1);
+ }
+
+ [ScriptMethod(name: "Unconfigurable Method", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:124"], userControl: false)]
+ public void UnconfigurableMethod(Event @event, ScriptAccessory accessory)
+ {
+ accessory.Log.Debug($"The unconfigurable method has been triggered.");
+ }
+ string guid = "";
+ [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:37010"])]
+ public void TestRunOnFrame(Event @event, ScriptAccessory accessory)
+ {
+ guid = accessory.Method.RegistFrameworkUpdateAction(() =>
+ {
+ var a = 123;
+ });
+
+ }
+ [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:124"])]
+ public void TestRunOnFrame2(Event @event, ScriptAccessory accessory)
+ {
+ accessory.Method.RegistFrameworkUpdateAction(TestRunOnFrame22);
+ }
+ [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:124"])]
+ public void TestFadeOut(Event @event, ScriptAccessory accessory)
+ {
+ var dp = accessory.Data.GetDefaultDrawProperties();
+ dp.Name = $"TestFadeOut";
+ dp.Scale = new(5);
+ dp.Color = accessory.Data.DefaultDangerColor;
+ dp.Owner = 0x400003B8;
+ dp.FadeCentreObject = 0x400003B8;
+ dp.FadeDistance = 5;
+ dp.FadeMode = FadeMode.OmenCentre;
+ dp.DestoryAt = 15000;
+ accessory.Method.SendDraw(DrawModeEnum.Vfx, DrawTypeEnum.Circle, dp);
+ }
+
+ [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
+ public void TestCreateLockOn(Event @event, ScriptAccessory accessory)
+ {
+ var objHandle = accessory.Method.ObjectMethod.CreateEmptyChara(0x40001234);
+ Task.Delay(50).ContinueWith(t =>
+ {
+ var start = DateTime.Now;
+ var handle = accessory.Method.VfxMethod.CreateLockOn(1, 0x40001234, new Vector4(1, 0, 0, 1), 10000,
+ (ref Vector4 color, ref Vector4 pos, ref Vector3 scale) =>
+ {
+ var elapsedSeconds = (float)(DateTime.Now - start).TotalSeconds;
+ float hue = (elapsedSeconds * 0.5f) % 1f;
+ scale = new(hue * 1 + 0.5f);
+ color = HueToRGB(hue);
+ //pos = new(hue);
+ unsafe
+ {
+ var obj = (BattleChara*)objHandle;
+ obj->Position = new(hue);
+ }
+
+ });
+ });
+ Task.Delay(5000).ContinueWith(t => { accessory.Method.ObjectMethod.DestoryChara(objHandle); });
+
+
+
+ }
+
+ [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
+ public void TestCreateOmen(Event @event, ScriptAccessory accessory)
+ {
+ var start = DateTime.Now;
+ var pos = accessory.Data.MyObject.Position;
+ var handle = accessory.Method.VfxMethod.CreateOmen(3, new(3), accessory.Data.MyObject.Position, 0, new Vector4(1, 0, 0, 1), 10000,
+ (ref Vector4 color, ref Vector4 pos, ref Vector3 scale) =>
+ {
+ var elapsedSeconds = (float)(DateTime.Now - start).TotalSeconds;
+ float hue = (elapsedSeconds * 0.5f) % 1f;
+ color = HueToRGB(hue);//算一个rgb跑马灯颜色并赋值给颜色
+ pos = new(accessory.Data.MyObject.Position, pos.W + MathF.PI / 100);//追踪游戏人物的坐标
+ scale = new(2 + hue * 3);//随时间大小变化
+ });
+ }
+ [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
+ public void TestMark(Event @event, ScriptAccessory accessory)
+ {
+ accessory.Method.Mark(accessory.Data.Me, KodakkuAssist.Module.GameOperate.MarkType.Attack1);
+ accessory.Method.Mark((uint)accessory.Data.MyObject.TargetObjectId, KodakkuAssist.Module.GameOperate.MarkType.Attack2, true);
+ }
+ [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
+ public void TestClearMark(Event @event, ScriptAccessory accessory)
+ {
+ accessory.Method.MarkClear();
+ }
+ System.Threading.Timer t;
+ [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
+ public void TestVarDestory(Event @event, ScriptAccessory accessory)
+ {
+ t = new(_ =>
+ {
+ accessory.Log.Debug($"来自版本F的timer,每5秒钟提示一次");
+
+
+ }, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
+ }
+ public void TestRunOnFrame22()
+ {
+ var a = 111;
+ }
+ private static Vector4 HueToRGB(float hue)
+ {
+ float r = 0, g = 0, b = 0;
+ float h = hue * 6f;
+ int segment = (int)h;
+ float f = h - segment;
+
+ float p = 0f;
+ float q = 0.5f * (1f - f);
+ float t = 0.5f * f;
+
+ switch (segment)
+ {
+ case 0: r = 1; g = t; b = p; break;
+ case 1: r = q; g = 1; b = p; break;
+ case 2: r = p; g = 1; b = t; break;
+ case 3: r = p; g = q; b = 1; break;
+ case 4: r = t; g = p; b = 1; break;
+ case 5: r = 1; g = p; b = q; break;
+ }
+
+ return new Vector4(r, g, b, 1f);
+ }
+
+ public void Dispose()
+ {
+ t.Dispose();
+ }
+ }
+}
+
From c7485fe07607f87ba97082c1cdd1af5a1863d98a Mon Sep 17 00:00:00 2001
From: yo! <1125404308@qq.com>
Date: Tue, 15 Sep 2026 21:51:01 +0800
Subject: [PATCH 2/2] Delete yoyokity directory
---
yoyokity/test.cs | 282 -----------------------------------------------
1 file changed, 282 deletions(-)
delete mode 100644 yoyokity/test.cs
diff --git a/yoyokity/test.cs b/yoyokity/test.cs
deleted file mode 100644
index f873414..0000000
--- a/yoyokity/test.cs
+++ /dev/null
@@ -1,282 +0,0 @@
-using System;
-using System.Numerics;
-using System.Reflection.Metadata;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using Dalamud.Utility.Numerics;
-using FFXIVClientStructs.FFXIV.Client.Game.Character;
-using KodakkuAssist.Extensions;
-using KodakkuAssist.Module.Draw;
-using KodakkuAssist.Module.GameEvent;
-using KodakkuAssist.Module.GameEvent.Struct;
-using KodakkuAssist.Script;
-using static FFXIVClientStructs.FFXIV.Component.GUI.AtkTimer.Delegates;
-
-namespace MyScriptNamespace
-{
- ///
- /// name and version affect the script name and version number displayed in the user interface.
- /// territorys specifies the regions where this trigger is effective. If left empty, it will be effective in all regions.
- /// Classes with the same GUID will be considered the same trigger. Please ensure your GUID is unique and does not conflict with others.
- ///
- [ScriptType(name: "SimpleScript", territorys: [179, 979], guid: "d3b6a9b4-1e0e-4e0c-b7b7-ff1fce0e6cf1", version: "0.0.0.2", author: "yoyokity", note: noteStr, updateInfo: updateInfoStr)]
- public class SimpleScript : IDisposable
- {
- const string noteStr =
- """
- 这是一个提示文本.
- 他有多行显示.
- 请在这里放置你的提示文本
- """;
- const string updateInfoStr =
- """
- 这里是更新信息.
- 他有多行显示.
- 请在这里放置你的更新信息
- """;
- ///
- /// note will be displayed to the user as a tooltip.
- ///
- [UserSetting(note: "This is a test Property")]
- public int prop1 { get; set; } = 1;
- [UserSetting("Another Test Property")]
- public bool prop2 { get; set; } = false;
-
- [UserSetting("UserColorSetting")]
- public ScriptColor color { get; set; } = new();
-
- [UserSetting("EnumSetting")]
- public TestEnum enumSetting { get; set; }
- int n = 0;
-
-
- public enum TestEnum
- {
- First,
- Second
- }
- ///
- /// This method is called at the start of each battle reset.
- /// If this method is not defined, the program will execute an empty method.
- ///
- public void Init(ScriptAccessory accessory)
- {
- n = 0;
- }
-
- ///
- /// name is the name of the method as presented to the user.
- /// eventType is the type of event that triggers this method.
- /// eventCondition is an array of strings specifying the properties that the event must have,
- /// in the format name:value,For specific details, please refer to the GameEvent of the plugin.
- /// userControl set to false will make the method not be shown to the user
- /// and cannot be disabled by the user.
- /// Please note, the method will be executed asynchronously.
- ///
- /// The event instance that triggers this method.
- /// Pass the instances of methods and data that might be needed.
- [ScriptMethod(name: "Test StartCasting", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:133"])]
- public void PrintInfo(Event @event, ScriptAccessory accessory)
- {
- n++;
- accessory.Method.SendChat($"/e {@event["SourceId"]} {n}-th use the Medica II");
- accessory.Log.Debug($"Prop2 is {prop2}");
- accessory.Log.Debug($"enum is {enumSetting}");
- }
-
- [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:124"])]
- public void DrawCircle(Event @event, ScriptAccessory accessory)
- {
- var sid = @event.SourceId;
-
- var prop = accessory.Data.GetDefaultDrawProperties();
- prop.Owner = accessory.Data.Me;
- prop.DestoryAt = 10000;
- prop.Color = accessory.Data.DefaultDangerColor;
- prop.Scale = new(5);
- prop.InnerScale = new(3);
- var start = DateTime.Now;
- var n = 0;
- //accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, prop);
-
- accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, prop, (dpc) =>
- {
- var elapsedSeconds = (float)(DateTime.Now - start).TotalSeconds;
- float hue = (elapsedSeconds * 0.5f) % 1f;
- dpc.Color = HueToRGB(hue);
- if (elapsedSeconds > 2)
- {
- start = DateTime.Now;
- n++;
- dpc.Radian = MathF.PI / 4 * n;
- }
- dpc.Scale = new(3 + hue * 3);
- });
-
-
- }
- [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:999999"])]
- public void TestTTS(Event @event, ScriptAccessory accessory)
- {
- accessory.Method.TTS($"黏黏{DateTime.Now:T}");
-
- }
-
- [ScriptMethod(name: "Test Suppress", eventType: EventTypeEnum.Waymark)]
- public void TestSuppress(Event @event, ScriptAccessory accessory)
- {
- n++;
- accessory.Log.Debug($"WayMark {n} {@event.EventTriggerSource}");
- uint id = 0x40000001;
- if (accessory.Data.EnmityList.TryGetValue(id, out var objs))
- {
- var firstId = objs[0];
- }
- }
- [ScriptMethod(name: "Test Action", eventType: EventTypeEnum.Waymark)]
- public void TestAction(Event @event, ScriptAccessory accessory)
- {
- accessory.Method.UseAction(accessory.Data.Me, 37010);
- }
- [ScriptMethod(name: "Test ActionLocation", eventType: EventTypeEnum.Waymark)]
- public void TestActionLocation(Event @event, ScriptAccessory accessory)
- {
- //accessory.Method.UseActionLocation(new System.Numerics.Vector3(-750, -30, -560), 3569, 1);
- }
-
- [ScriptMethod(name: "Unconfigurable Method", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:124"], userControl: false)]
- public void UnconfigurableMethod(Event @event, ScriptAccessory accessory)
- {
- accessory.Log.Debug($"The unconfigurable method has been triggered.");
- }
- string guid = "";
- [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:37010"])]
- public void TestRunOnFrame(Event @event, ScriptAccessory accessory)
- {
- guid = accessory.Method.RegistFrameworkUpdateAction(() =>
- {
- var a = 123;
- });
-
- }
- [ScriptMethod(eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:124"])]
- public void TestRunOnFrame2(Event @event, ScriptAccessory accessory)
- {
- accessory.Method.RegistFrameworkUpdateAction(TestRunOnFrame22);
- }
- [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:124"])]
- public void TestFadeOut(Event @event, ScriptAccessory accessory)
- {
- var dp = accessory.Data.GetDefaultDrawProperties();
- dp.Name = $"TestFadeOut";
- dp.Scale = new(5);
- dp.Color = accessory.Data.DefaultDangerColor;
- dp.Owner = 0x400003B8;
- dp.FadeCentreObject = 0x400003B8;
- dp.FadeDistance = 5;
- dp.FadeMode = FadeMode.OmenCentre;
- dp.DestoryAt = 15000;
- accessory.Method.SendDraw(DrawModeEnum.Vfx, DrawTypeEnum.Circle, dp);
- }
-
- [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
- public void TestCreateLockOn(Event @event, ScriptAccessory accessory)
- {
- var objHandle = accessory.Method.ObjectMethod.CreateEmptyChara(0x40001234);
- Task.Delay(50).ContinueWith(t =>
- {
- var start = DateTime.Now;
- var handle = accessory.Method.VfxMethod.CreateLockOn(1, 0x40001234, new Vector4(1, 0, 0, 1), 10000,
- (ref Vector4 color, ref Vector4 pos, ref Vector3 scale) =>
- {
- var elapsedSeconds = (float)(DateTime.Now - start).TotalSeconds;
- float hue = (elapsedSeconds * 0.5f) % 1f;
- scale = new(hue * 1 + 0.5f);
- color = HueToRGB(hue);
- //pos = new(hue);
- unsafe
- {
- var obj = (BattleChara*)objHandle;
- obj->Position = new(hue);
- }
-
- });
- });
- Task.Delay(5000).ContinueWith(t => { accessory.Method.ObjectMethod.DestoryChara(objHandle); });
-
-
-
- }
-
- [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
- public void TestCreateOmen(Event @event, ScriptAccessory accessory)
- {
- var start = DateTime.Now;
- var pos = accessory.Data.MyObject.Position;
- var handle = accessory.Method.VfxMethod.CreateOmen(3, new(3), accessory.Data.MyObject.Position, 0, new Vector4(1, 0, 0, 1), 10000,
- (ref Vector4 color, ref Vector4 pos, ref Vector3 scale) =>
- {
- var elapsedSeconds = (float)(DateTime.Now - start).TotalSeconds;
- float hue = (elapsedSeconds * 0.5f) % 1f;
- color = HueToRGB(hue);//算一个rgb跑马灯颜色并赋值给颜色
- pos = new(accessory.Data.MyObject.Position, pos.W + MathF.PI / 100);//追踪游戏人物的坐标
- scale = new(2 + hue * 3);//随时间大小变化
- });
- }
- [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
- public void TestMark(Event @event, ScriptAccessory accessory)
- {
- accessory.Method.Mark(accessory.Data.Me, KodakkuAssist.Module.GameOperate.MarkType.Attack1);
- accessory.Method.Mark((uint)accessory.Data.MyObject.TargetObjectId, KodakkuAssist.Module.GameOperate.MarkType.Attack2, true);
- }
- [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
- public void TestClearMark(Event @event, ScriptAccessory accessory)
- {
- accessory.Method.MarkClear();
- }
- System.Threading.Timer t;
- [ScriptMethod(eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:99999"])]
- public void TestVarDestory(Event @event, ScriptAccessory accessory)
- {
- t = new(_ =>
- {
- accessory.Log.Debug($"来自版本F的timer,每5秒钟提示一次");
-
-
- }, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
- }
- public void TestRunOnFrame22()
- {
- var a = 111;
- }
- private static Vector4 HueToRGB(float hue)
- {
- float r = 0, g = 0, b = 0;
- float h = hue * 6f;
- int segment = (int)h;
- float f = h - segment;
-
- float p = 0f;
- float q = 0.5f * (1f - f);
- float t = 0.5f * f;
-
- switch (segment)
- {
- case 0: r = 1; g = t; b = p; break;
- case 1: r = q; g = 1; b = p; break;
- case 2: r = p; g = 1; b = t; break;
- case 3: r = p; g = q; b = 1; break;
- case 4: r = t; g = p; b = 1; break;
- case 5: r = 1; g = p; b = q; break;
- }
-
- return new Vector4(r, g, b, 1f);
- }
-
- public void Dispose()
- {
- t.Dispose();
- }
- }
-}
-