fix: split adminfree (by player name) from adminfreehere (by position)

This commit is contained in:
2026-07-21 19:36:48 +02:00
parent c8fc86069b
commit d248b772dc
3 changed files with 26 additions and 0 deletions
+2
View File
@@ -12,6 +12,7 @@ public class ClaimLinkModSystem : ModSystem
internal static ClaimLinkRegistry Registry = null!; internal static ClaimLinkRegistry Registry = null!;
internal static IGroupManager Groups = null!; internal static IGroupManager Groups = null!;
internal static IWorldAccessor World = null!; internal static IWorldAccessor World = null!;
internal static IPlayerDataManager PlayerData = null!;
internal ClaimLinkCommandListener? CmdListener; internal ClaimLinkCommandListener? CmdListener;
public override bool ShouldLoad(EnumAppSide forSide) => forSide == EnumAppSide.Server; public override bool ShouldLoad(EnumAppSide forSide) => forSide == EnumAppSide.Server;
@@ -22,6 +23,7 @@ public class ClaimLinkModSystem : ModSystem
World = api.World; World = api.World;
Groups = api.Groups; Groups = api.Groups;
Logger = api.Logger; Logger = api.Logger;
PlayerData = api.PlayerData;
Registry = new ClaimLinkRegistry(api.WorldManager.SaveGame); Registry = new ClaimLinkRegistry(api.WorldManager.SaveGame);
CmdListener = new ClaimLinkCommandListener(); CmdListener = new ClaimLinkCommandListener();
+6
View File
@@ -142,6 +142,12 @@ public class ClaimLinkRegistry
Save(); Save();
} }
public void ClearAllForPlayer(string uid)
{
entries.Remove(uid);
Save();
}
public IEnumerable<string> MemberUidsForGroup(int groupId) public IEnumerable<string> MemberUidsForGroup(int groupId)
{ {
foreach (var (uid, groups) in entries) foreach (var (uid, groups) in entries)
+18
View File
@@ -22,6 +22,7 @@ public class ClaimLinkCommandListener : ICommandHookListener
["claim"] = Claim, ["claim"] = Claim,
["free"] = Free, ["free"] = Free,
["adminfree"] = AdminFree, ["adminfree"] = AdminFree,
["adminfreehere"] = AdminFreeHere,
}; };
private static readonly Dictionary<string, SubHandler> claimSub = new() private static readonly Dictionary<string, SubHandler> claimSub = new()
@@ -124,6 +125,23 @@ public class ClaimLinkCommandListener : ICommandHookListener
} }
private static void AdminFree(Caller caller, CmdArgs args) private static void AdminFree(Caller caller, CmdArgs args)
{
if (caller.Player == null)
return;
string? name = args.PopWord();
if (name == null)
return;
string? uid = ClaimLinkModSystem.PlayerData.GetPlayerDataByLastKnownName(name)?.PlayerUID;
if (uid == null)
return;
ClaimLinkModSystem.Registry.ClearAllForPlayer(uid);
ClaimLinkChatCommand.PendingActions.Remove(uid);
}
private static void AdminFreeHere(Caller caller, CmdArgs args)
{ {
if (caller.Player == null) if (caller.Player == null)
return; return;