From e1687dae6e694da2950509beb322a9245a5d6f98 Mon Sep 17 00:00:00 2001 From: Und3rDragon <1306094605@qq.com> Date: Sun, 7 Jun 2026 16:48:09 +0800 Subject: [PATCH] Counter and Slider mode for Trigger Trigger --- Code/TriggerTrigger.cs | 45 +++++++++++++++++++++++++++++- Loenn/lang/en_gb.lang | 2 ++ Loenn/triggers/trigger_trigger.lua | 18 ++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/Code/TriggerTrigger.cs b/Code/TriggerTrigger.cs index 73042de..576a1c9 100644 --- a/Code/TriggerTrigger.cs +++ b/Code/TriggerTrigger.cs @@ -48,6 +48,10 @@ public TriggerTrigger(EntityData data, Vector2 offset) : base(data, offset) { absoluteValue = data.Bool("absoluteValue", false); flag = data.Attr("flag", ""); + counterName = data.Attr("counterName", ""); + sliderName = data.Attr("sliderName", ""); + counterValue = data.Attr("counterValue", "0"); + sliderValue = data.Attr("sliderValue", "0"); deaths = data.Int("deaths", -1); dashCount = data.Int("dashCount", 0); requiredSpeed = data.Float("requiredSpeed", 0f); @@ -263,6 +267,42 @@ public bool GetActivateCondition(Player player) { case ActivationTypes.DashCount: result = Compare(player.Dashes, dashCount); break; + case ActivationTypes.Counter: + if (!string.IsNullOrEmpty(counterName)) + { + if (!string.IsNullOrEmpty(counterValue)) + { + if (int.TryParse(counterValue, out int n)) + { + result = Compare(SceneAs().Session.GetCounter(counterName), n); + break; + } + + result = Compare(SceneAs().Session.GetCounter(counterName), + SceneAs().Session.GetCounter(counterValue)); + break; + } + } + result = false; + break; + case ActivationTypes.Slider: + if (!string.IsNullOrEmpty(sliderName)) + { + if (!string.IsNullOrEmpty(sliderValue)) + { + if (float.TryParse(sliderValue, out float m)) + { + result = Compare(SceneAs().Session.GetSlider(sliderName), m); + break; + } + + result = Compare(SceneAs().Session.GetSlider(sliderName), + SceneAs().Session.GetSlider(sliderValue)); + break; + } + } + result = false; + break; case ActivationTypes.DeathsInRoom: result = Compare(SceneAs().Session.DeathsInCurrentLevel, deaths); break; @@ -608,7 +648,8 @@ public static void UpdateFreezeInput() private Vector2[] nodes; private bool oneUse; public ActivationTypes activationType; - private string flag; + private string flag, counterName, sliderName; + private string counterValue, sliderValue; private int deaths; private int dashCount; private float requiredSpeed; @@ -663,6 +704,8 @@ public enum ActivationTypes { OnInput, OnGrounded, OnPlayerState, + Counter, + Slider }; public enum InputTypes { Left, diff --git a/Loenn/lang/en_gb.lang b/Loenn/lang/en_gb.lang index af3df4d..fab0a7d 100644 --- a/Loenn/lang/en_gb.lang +++ b/Loenn/lang/en_gb.lang @@ -81,6 +81,8 @@ triggers.vitellary/resetdoortrigger.placements.name.reset_door_trigger=Reset Doo triggers.vitellary/timedfadetrigger.placements.name.timed_fade_trigger=Timed Fade Trigger triggers.vitellary/triggertrigger.placements.name.coremode=Trigger Trigger (Core Mode) triggers.vitellary/triggertrigger.placements.name.flag=Trigger Trigger (Flag) +triggers.vitellary/triggertrigger.placements.name.counter=Trigger Trigger (Counter) +triggers.vitellary/triggertrigger.placements.name.slider=Trigger Trigger (Slider) triggers.vitellary/triggertrigger.placements.name.dashing=Trigger Trigger (Dashing) triggers.vitellary/triggertrigger.placements.name.dashcount=Trigger Trigger (Dash Count) triggers.vitellary/triggertrigger.placements.name.deathsinroom=Trigger Trigger (Deaths In Room) diff --git a/Loenn/triggers/trigger_trigger.lua b/Loenn/triggers/trigger_trigger.lua index 6b5442b..1571639 100644 --- a/Loenn/triggers/trigger_trigger.lua +++ b/Loenn/triggers/trigger_trigger.lua @@ -21,6 +21,8 @@ local activationTypes = { ["On Input"] = "OnInput", ["Grounded"] = "OnGrounded", ["Player State"] = "OnPlayerState", + ["Counter"] = "Counter", + ["Slider"] = "Slider", } local comparisonTypes = { @@ -97,6 +99,10 @@ function triggerTrigger.ignoredFields(entity) "includeCoyote", "includeWallJump", "resetAfterJump", + "counterValue", + "sliderValue", + "counterName", + "sliderName", } local function doNotIgnore(value) @@ -152,6 +158,14 @@ function triggerTrigger.ignoredFields(entity) doNotIgnore("resetAfterJump") elseif atype == "OnPlayerState" then doNotIgnore("playerState") + elseif atype == "Counter" then + doNotIgnore("counterValue") + doNotIgnore("counterName") + iscomparison = true + elseif atype == "Slider" then + doNotIgnore("sliderName") + doNotIgnore("sliderValue") + iscomparison = true end if iscomparison then @@ -197,6 +211,10 @@ for _, mode in pairs(activationTypes) do includeCoyote = false, includeWallJump = true, resetAfterJump = false, + counterValue = "0", + sliderValue = "0.0", + counterName = "counter", + sliderName = "slider", } } table.insert(triggerTrigger.placements, placement)