From 1e927f6a66c0009adce67ca92e0f6e79aa89cee0 Mon Sep 17 00:00:00 2001 From: wtclaude Date: Mon, 5 Oct 2026 12:14:51 -0500 Subject: [PATCH] fix: the example kits' permission is kits.runicnpc (stage 6) Kits registers a kit's RequiredPermission, and Oxide warns on every Kits load that a permission a plugin registers must start with that plugin's name: "Missing plugin name prefix 'kits' for permission 'runicnpc.examplekits'". The org lead chose Kits' prefix. Nobody is granted it, so no player can claim an example kit by name; RunicNPC's GiveKit call skips it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY --- plugin/RunicNPC.cs | 2 +- tools/RunicNpcTest.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/RunicNPC.cs b/plugin/RunicNPC.cs index c120c3b..f11a9be 100644 --- a/plugin/RunicNPC.cs +++ b/plugin/RunicNPC.cs @@ -3946,7 +3946,7 @@ namespace Oxide.Plugins private const string DataState = "RunicNPC/state"; /// The permission every example kit needs, which nobody is granted: no player can claim one by name (D284). - private const string ExamplePermission = "runicnpc.examplekits"; + private const string ExamplePermission = "kits.runicnpc"; private sealed class StateFile { diff --git a/tools/RunicNpcTest.cs b/tools/RunicNpcTest.cs index a7fdb5a..bb900c1 100644 --- a/tools/RunicNpcTest.cs +++ b/tools/RunicNpcTest.cs @@ -2143,8 +2143,8 @@ namespace Oxide.Plugins string[] missing = exampleKits.Where(k => !(kits?.Call("IsKit", k) is bool && (bool)kits.Call("IsKit", k))).ToArray(); Check("s6.examples.kits", missing.Length == 0, missing.Length == 0 ? "all four in Kits" : "missing: " + string.Join(", ", missing)); JObject kitFile = Interface.Oxide.DataFileSystem.ReadObject("Kits/kits_data"); - Check("s6.examples.permission", exampleKits.All(k => (string)kitFile?["_kits"]?[k]?["RequiredPermission"] == "runicnpc.examplekits"), - "each needs runicnpc.examplekits, which nobody is granted"); + Check("s6.examples.permission", exampleKits.All(k => (string)kitFile?["_kits"]?[k]?["RequiredPermission"] == "kits.runicnpc"), + "each needs kits.runicnpc, which nobody is granted"); JObject state = Interface.Oxide.DataFileSystem.ReadObject("RunicNPC/state"); Check("s6.examples.once", state?["examplesWritten"]?.Type == JTokenType.Boolean && (bool)state["examplesWritten"], "state.json: " + state?.ToString(Formatting.None)); JObject items = kitFile?["_kits"]?["rnpc_juggernaut"] as JObject;