feat: implement claimlink transferownership with debug logging

This commit is contained in:
2026-07-13 07:50:50 +02:00
parent bee6b6434a
commit 41a2f1a09d
2 changed files with 56 additions and 1 deletions
+49 -1
View File
@@ -324,7 +324,55 @@ public static class ClaimLinkChatCommand
return TextCommandResult.Success($"'{groupName}' is no longer a claim link.");
});
}
public static TextCommandResult TransferOwnership(TextCommandCallingArgs args) => TextCommandResult.Success("stub: claimlink transferownership");
public static TextCommandResult TransferOwnership(TextCommandCallingArgs args)
{
string groupName = (string)args[0];
IPlayer target = (IPlayer)args[1];
IPlayer player = args.Caller.Player;
TextCommandResult? err = TryResolveGroup(groupName, out PlayerGroup group);
if (err != null) return err;
err = TryResolveClaimLink(group, out _);
if (err != null) return err;
err = RequireOwner(player, group);
if (err != null) return err;
err = RequireMember(target, group);
if (err != null) return err;
if (target.PlayerUID == player.PlayerUID)
return TextCommandResult.Error($"You already own '{groupName}'.");
string playerUid = player.PlayerUID;
string targetName = target.PlayerName;
string targetUid = target.PlayerUID;
EnumPlayerGroupMemberShip oldOwnerLevel = player.GetGroup(group.Uid)!.Level;
EnumPlayerGroupMemberShip targetLevel = target.GetGroup(group.Uid)!.Level;
return Stage(playerUid, $"Ownership of '{groupName}' will be transferred to {targetName}.", () =>
{
string beforeOwnerUid = group.OwnerUID;
// TODO remove debug logging once transfer ownership persistence is confirmed tested
ClaimLinkModSystem.Logger.Notification(
$"claimlink: transferownership '{groupName}' (uid {group.Uid}) BEFORE OwnerUID={beforeOwnerUid} " +
$"(old owner {player.PlayerName}/{playerUid} level={oldOwnerLevel}, new owner {targetName}/{targetUid} level={targetLevel})");
group.OwnerUID = targetUid;
EnumPlayerGroupMemberShip afterOldOwnerLevel = player.GetGroup(group.Uid)!.Level;
EnumPlayerGroupMemberShip afterTargetLevel = target.GetGroup(group.Uid)!.Level;
ClaimLinkModSystem.Logger.Notification(
$"claimlink: transferownership '{groupName}' (uid {group.Uid}) AFTER OwnerUID={group.OwnerUID} " +
$"(old owner {player.PlayerName}/{playerUid} level={afterOldOwnerLevel}, new owner {targetName}/{targetUid} level={afterTargetLevel})");
return TextCommandResult.Success($"'{groupName}' is now owned by {targetName}.");
});
}
public static TextCommandResult Info(TextCommandCallingArgs args)
{
+7
View File
@@ -29,6 +29,13 @@ public class ClaimLinkModSystem : ModSystem
ClaimLinkChatCommand.Register(api);
api.Event.PlayerDisconnect += ClaimLinkCommandListener.OnPlayerDisconnect;
// TODO remove debug logging once transfer ownership persistence is confirmed tested
foreach (ClaimLink link in Registry.All)
{
PlayerGroup group = Groups.PlayerGroupsById[link.GroupId];
Logger.Notification($"claimlink: startup state '{group.Name}' (uid {group.Uid}) OwnerUID={group.OwnerUID}");
}
}
public override void Dispose()