From c7e3f97a85962aa837d35c5ba7ab441043db0ba7 Mon Sep 17 00:00:00 2001 From: anth64 Date: Sun, 12 Jul 2026 19:06:43 +0200 Subject: [PATCH] feat: implement claimlink unlink --- ClaimLink/ClaimLinkChatCommand.cs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/ClaimLink/ClaimLinkChatCommand.cs b/ClaimLink/ClaimLinkChatCommand.cs index dd92e04..ab67d38 100644 --- a/ClaimLink/ClaimLinkChatCommand.cs +++ b/ClaimLink/ClaimLinkChatCommand.cs @@ -67,7 +67,7 @@ public static class ClaimLinkChatCommand Array.Empty(), true, Cancel), new(new[] { "unlink", "ul" }, "Remove a claim you own from its claim link.", - new ICommandArgumentParser[] { p.Word("claim") }, true, Unlink), + new ICommandArgumentParser[] { p.Word("groupname"), p.IntRange("claim", 0, 999) }, true, Unlink), new(new[] { "kick" }, "Force-unlink another player's claim from the link (Owner/Op).", new ICommandArgumentParser[] { p.OnlinePlayer("playername"), p.Word("claim") }, true, Kick), @@ -189,7 +189,29 @@ public static class ClaimLinkChatCommand } public static TextCommandResult Confirm(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink confirm"); public static TextCommandResult Cancel(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink cancel"); - public static TextCommandResult Unlink(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink unlink"); + public static TextCommandResult Unlink(TextCommandCallingArgs args) + { + string groupName = (string)args[0]; + int claimIndex = (int)args[1]; + + TextCommandResult? err = TryResolveGroup(groupName, out PlayerGroup group); + if (err != null) return err; + + err = TryResolveClaimLink(group, out ClaimLink link); + if (err != null) return err; + + string playerUid = args.Caller.Player.PlayerUID; + + ClaimLinkMember? member = link.Members.Find(m => m.OwnerPlayerUid == playerUid); + if (member == null || !member.LocalClaimIndices.Remove(claimIndex)) + return TextCommandResult.Error($"Claim {claimIndex} is not linked into '{groupName}' by you."); + + if (member.LocalClaimIndices.Count == 0) + link.Members.Remove(member); + + ClaimLinkModSystem.Registry.Save(); + return TextCommandResult.Success($"Unlinked claim {claimIndex} from '{groupName}'."); + } public static TextCommandResult Kick(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink kick"); public static TextCommandResult Delete(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink delete"); public static TextCommandResult TransferOwnership(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink transferownership");