From f2dfd2544e4a0e674a6af3f58d9cc803f20a3115 Mon Sep 17 00:00:00 2001 From: Luke Policinski Date: Wed, 19 Aug 2026 10:31:53 -0400 Subject: [PATCH 1/7] Fix the plugin page's install state, config folder and mode links Three things the directory got wrong once a plugin was actually installed: - Install records intent and the nodes converge on their own, so a rollout part-way through is not waiting on anyone -- but the page kept offering a primary Install button until every node had it. Once the request is on record it reports the state instead, taken from what the nodes report rather than the catalog's install_state, which would sit still while the rollout moved. The count moves below it and a failed node gets a Retry. - The configure button opened addons//configs/plugins, which a framework only writes once a plugin has run, so a freshly installed plugin landed on "this directory doesn't exist yet". It opens the config file the catalog names, else where the release unpacks to. - The guidelines switch is replaced by the fact when 5stack Ranks is on, since ranks turns the same setting off and the risk is against the account rather than one server. A mode's plugin list links each plugin to its page in a new tab, so working out what belongs in a mode does not cost an unsaved selection. --- components/game-modes/GameModeForm.vue | 16 ++- i18n/locales/en.json | 10 +- pages/plugins/[slug].vue | 173 +++++++++++++++++++++++-- 3 files changed, 182 insertions(+), 17 deletions(-) diff --git a/components/game-modes/GameModeForm.vue b/components/game-modes/GameModeForm.vue index fe45e5672..e948dd4ea 100644 --- a/components/game-modes/GameModeForm.vue +++ b/components/game-modes/GameModeForm.vue @@ -12,7 +12,7 @@ import { SelectTrigger, SelectValue, } from "~/components/ui/select"; -import { AlertTriangle, Trash2 } from "lucide-vue-next"; +import { AlertTriangle, Trash2, ExternalLink } from "lucide-vue-next"; import { SELECT_NONE, nullableSelectField } from "~/utilities/selectNone"; @@ -112,7 +112,19 @@ import { SELECT_NONE, nullableSelectField } from "~/utilities/selectNone"; >
- {{ plugin.name }} + + + {{ plugin.name }} + + {{ $t("game_modes.form.restart_required") }} diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 24d8e1ab7..6122817d3 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -3658,7 +3658,9 @@ "off_hint": "Left on, the plugin still installs and loads — the parts that change what a player sees just do nothing.", "warning_title": "Warning: this can get your Steam GSLTs banned", "warning_description": "Per Valve, running outside their official server guidelines can trigger every Game Server Login Token (GSLT) on the server owner's Steam account to be banned. Enable at your own risk.", - "warning_link_label": "Valve's server guidelines" + "warning_link_label": "Valve's server guidelines", + "already_off": "Already off for this deployment: 5stack Ranks turns Valve's server guidelines off to show ranks in-game, and the risk it carries is against your Steam account rather than one server.", + "already_off_link": "5stack Ranks" }, "custom": { "add": "Add a plugin", @@ -3687,7 +3689,8 @@ "remove": "Remove from catalog", "remove_hint": "Uninstall it from your nodes before taking it out of the catalog.", "removed": "Removed from the catalog" - } + }, + "retry": "Retry" }, "awards": { "title": "Awards", @@ -8281,7 +8284,8 @@ "archive": "Archive", "archived": "Game mode archived", "runtime_none": "These plugins have no framework in common, so this mode cannot run anywhere. Remove whichever one targets the other framework.", - "runtime_only": "Runs on {runtime} only, because that is the one framework every plugin here ships for." + "runtime_only": "Runs on {runtime} only, because that is the one framework every plugin here ships for.", + "open_plugin": "Open this plugin's page in a new tab" } } } diff --git a/pages/plugins/[slug].vue b/pages/plugins/[slug].vue index 772d8a96f..aa29a263a 100644 --- a/pages/plugins/[slug].vue +++ b/pages/plugins/[slug].vue @@ -37,6 +37,8 @@ import { FolderOpen, Download, Wrench, + Loader2, + RefreshCw, } from "lucide-vue-next"; definePageMeta({ @@ -285,8 +287,13 @@ definePageMeta({