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. + """); + }); + } + } +}