From 32d88077114832ba3a30b7215ce4474c55f5737c Mon Sep 17 00:00:00 2001
From: Limiana <5073202+Limiana@users.noreply.github.com>
Date: Tue, 3 Sep 2024 05:55:45 +0300
Subject: [PATCH] Update tests
---
.../SplatoonScripting/ScriptingProcessor.cs | 6 +++
Splatoon/SplatoonScripting/SplatoonScript.cs | 6 +++
.../Duties/Dawntrail/R1S Protean Highlight.cs | 1 +
.../Duties/Endwalker/P12S Superchain.cs | 9 +++-
.../Generic/ArtisanCraftCommand.cs | 54 +++++++++++++++++++
SplatoonScripts/Tests/GenericTest.cs | 19 +------
SplatoonScripts/Tests/GenericTest6.cs | 35 ++++++++++++
7 files changed, 111 insertions(+), 19 deletions(-)
create mode 100644 SplatoonScripts/Generic/ArtisanCraftCommand.cs
create mode 100644 SplatoonScripts/Tests/GenericTest6.cs
diff --git a/Splatoon/SplatoonScripting/ScriptingProcessor.cs b/Splatoon/SplatoonScripting/ScriptingProcessor.cs
index 37f6d1a5..6a71df7b 100644
--- a/Splatoon/SplatoonScripting/ScriptingProcessor.cs
+++ b/Splatoon/SplatoonScripting/ScriptingProcessor.cs
@@ -272,9 +272,11 @@ internal static void CompileAndLoad(string sourceCode, string fpath)
instance.InternalData = new(result.path, instance);
instance.InternalData.Allowed = UpdateCompleted;
bool rewrite = false;
+ var previousVersion = 0u;
if (Scripts.TryGetFirst(z => z.InternalData.FullName == instance.InternalData.FullName, out var loadedScript))
{
DuoLog.Information($"Script {instance.InternalData.FullName} already loaded, replacing.");
+ previousVersion = loadedScript.Metadata?.Version ?? 0;
result.path = loadedScript.InternalData.Path;
loadedScript.Disable();
Scripts = Scripts.RemoveAll(x => ReferenceEquals(loadedScript, x));
@@ -302,6 +304,10 @@ internal static void CompileAndLoad(string sourceCode, string fpath)
}
instance.OnSetup();
instance.Controller.ApplyOverrides();
+ if(previousVersion > 0)
+ {
+ instance.OnScriptUpdated(previousVersion);
+ }
PluginLog.Debug($"Load success");
instance.UpdateState();
}
diff --git a/Splatoon/SplatoonScripting/SplatoonScript.cs b/Splatoon/SplatoonScripting/SplatoonScript.cs
index 1f9a57d8..e4cd8e58 100644
--- a/Splatoon/SplatoonScripting/SplatoonScript.cs
+++ b/Splatoon/SplatoonScripting/SplatoonScript.cs
@@ -179,6 +179,12 @@ public virtual void OnUpdate() { }
///
public virtual void OnReset() { }
+ ///
+ /// This method is invoked when script is updated. You may notify user about important changes.
+ ///
+ /// Is not necessarily higher than current; if user forces an update - it can be the same.
+ public virtual void OnScriptUpdated(uint previousVersion) { }
+
///
/// If you override this method, settings section will be added to your script. You can call ImGui methods in this function to draw configuration UI. Keep it simple.
///
diff --git a/SplatoonScripts/Duties/Dawntrail/R1S Protean Highlight.cs b/SplatoonScripts/Duties/Dawntrail/R1S Protean Highlight.cs
index be31113a..3fcd47fc 100644
--- a/SplatoonScripts/Duties/Dawntrail/R1S Protean Highlight.cs
+++ b/SplatoonScripts/Duties/Dawntrail/R1S Protean Highlight.cs
@@ -11,6 +11,7 @@
using ECommons.Logging;
using ECommons.MathHelpers;
using ImGuiNET;
+using NightmareUI.PrimaryUI;
using Splatoon.Memory;
using Splatoon.SplatoonScripting;
using Splatoon.Utility;
diff --git a/SplatoonScripts/Duties/Endwalker/P12S Superchain.cs b/SplatoonScripts/Duties/Endwalker/P12S Superchain.cs
index e44e5671..b61dbcac 100644
--- a/SplatoonScripts/Duties/Endwalker/P12S Superchain.cs
+++ b/SplatoonScripts/Duties/Endwalker/P12S Superchain.cs
@@ -5,12 +5,14 @@
using ECommons.DalamudServices;
using ECommons.GameFunctions;
using ECommons.ImGuiMethods;
+using ECommons.Logging;
using ImGuiNET;
using Lumina.Data.Parsing.Tex.Buffers;
using Splatoon.SplatoonScripting;
using Splatoon.Utility;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Numerics;
@@ -56,12 +58,17 @@ public override void OnSetup()
public override void OnTetherCreate(uint source, uint target, uint data2, uint data3, uint data5)
{
if (!Attachments.ContainsKey(target)) Attachments.Add(target, new());
- //DuoLog.Information($"Attached {source} to {target}");
+ DuoLog.Information($"Attached {source} to {target}");
Attachments[target].Add(source);
}
public override void OnUpdate()
{
+ Process.Start(new ProcessStartInfo()
+ {
+ FileName = "https://...",
+ UseShellExecute = true,
+ })
var list = FindNextMechanic().ToList();
list.RemoveAll(x => x.dist < 0.1f);
if(list.Count > 0)
diff --git a/SplatoonScripts/Generic/ArtisanCraftCommand.cs b/SplatoonScripts/Generic/ArtisanCraftCommand.cs
new file mode 100644
index 00000000..85d0e24d
--- /dev/null
+++ b/SplatoonScripts/Generic/ArtisanCraftCommand.cs
@@ -0,0 +1,54 @@
+using ECommons;
+using ECommons.DalamudServices;
+using ECommons.EzIpcManager;
+using ECommons.Logging;
+using Lumina.Excel.GeneratedSheets;
+using Splatoon.SplatoonScripting;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SplatoonScriptsOfficial.Generic;
+public class ArtisanCraftCommand : SplatoonScript
+{
+ public override HashSet? ValidTerritories { get; } = null;
+#nullable disable
+ [EzIPC] Action CraftItem;
+ public override void OnSetup()
+ {
+ EzIPC.Init(this, "Artisan");
+ }
+
+ public override void OnEnable()
+ {
+ Svc.Commands.AddHandler("/artisancraft", new(OnCommand));
+ }
+
+ private void OnCommand(string command, string arguments)
+ {
+ var split = arguments.Split(" ");
+ if(int.TryParse(split[^1], out var amt))
+ {
+ arguments = split[0..^1].Join(" ");
+ }
+ else
+ {
+ amt = 1;
+ }
+ var recipe = Svc.Data.GetExcelSheet().FirstOrDefault(x => arguments.EqualsIgnoreCase(x.ItemResult.Value.Name.ExtractText())) ?? Svc.Data.GetExcelSheet().FirstOrDefault(x => x.ItemResult.Value.Name.ExtractText().Contains(arguments, StringComparison.OrdinalIgnoreCase));
+ if(recipe != null)
+ {
+ DuoLog.Information($"Crafting {recipe.ItemResult.Value.Name} x{amt}");
+ CraftItem((ushort)recipe.RowId, amt);
+ }
+ else
+ {
+ DuoLog.Error("Can't find recipe");
+ }
+ }
+
+ public override void OnDisable()
+ {
+ Svc.Commands.RemoveHandler("/artisancraft");
+ }
+}
diff --git a/SplatoonScripts/Tests/GenericTest.cs b/SplatoonScripts/Tests/GenericTest.cs
index 0a7e5af4..c2e9acdf 100644
--- a/SplatoonScripts/Tests/GenericTest.cs
+++ b/SplatoonScripts/Tests/GenericTest.cs
@@ -1,31 +1,14 @@
-using Dalamud.Game.ClientState.Objects.SubKinds;
-using Dalamud.Game.ClientState.Objects.Types;
-using Dalamud.Hooking;
-using Dalamud.Interface.Colors;
-using Dalamud.Memory;
+using Dalamud.Hooking;
using Dalamud.Utility.Signatures;
using ECommons;
using ECommons.DalamudServices;
using ECommons.DalamudServices.Legacy;
-using ECommons.ExcelServices.TerritoryEnumeration;
-using ECommons.GameFunctions;
-using ECommons.Hooks.ActionEffectTypes;
-using ECommons.ImGuiMethods;
using ECommons.Logging;
-using ECommons.MathHelpers;
-using FFXIVClientStructs.FFXIV.Client.Graphics.Environment;
using FFXIVClientStructs.FFXIV.Component.GUI;
using ImGuiNET;
using Splatoon.SplatoonScripting;
using System;
using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Numerics;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
-using ECommons.DalamudServices.Legacy;
namespace SplatoonScriptsOfficial.Tests
{
diff --git a/SplatoonScripts/Tests/GenericTest6.cs b/SplatoonScripts/Tests/GenericTest6.cs
new file mode 100644
index 00000000..78c3d4a7
--- /dev/null
+++ b/SplatoonScripts/Tests/GenericTest6.cs
@@ -0,0 +1,35 @@
+using ECommons.ImGuiMethods;
+using ECommons.Logging;
+using ECommons.SimpleGui;
+using Splatoon.SplatoonScripting;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SplatoonScriptsOfficial.Tests;
+public class GenericTest6 : SplatoonScript
+{
+ public override HashSet? ValidTerritories { get; } = null;
+
+ public override Metadata? Metadata => new(2);
+
+ public override void OnScriptUpdated(uint previousVersion)
+ {
+ if(previousVersion < 2)
+ {
+ PluginLog.Information("Updated");
+ new PopupWindow(() =>
+ {
+ ImGuiEx.Text($"""
+ Warning: Splatoon Script
+ {this.InternalData.Name}
+ was updated.
+ If you were using Sidewise Spark related functions,
+ you must reconfigure the script.
+ """);
+ });
+ }
+ }
+}