feat(CS): authentic Crown-hold throne capture (S6 protocol) replacing Sinior-talk
Some checks failed
.NET Core / build (push) Has been cancelled

Break all gates + hold both switches (defenses down) -> the Crown shield drops
(C1 B2 16=0). The guild master then stands on the Crown (176,212) and holds for
CrownHoldDuration (default 60s, client shows a 60s countdown via C1 B2 15) to
capture; capture broadcasts C1 B2 18 + golden text and sets the occupier. Losing a
switch or leaving the crown resets the hold (contestable until the siege timer ends).
Sinior (223) is now informational guidance. +2 tests (14 total).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Acentech Dev
2026-07-15 15:04:10 +03:00
parent 4651ef232c
commit 3dd4881406
7 changed files with 322 additions and 8 deletions

View File

@@ -28,4 +28,25 @@ public interface ICastleSiegeStatusViewPlugIn : IViewPlugIn
/// </summary>
/// <param name="guildLogo">The owner guild's 32-byte logo/emblem.</param>
ValueTask SetCastleFlagAsync(ReadOnlyMemory<byte> guildLogo);
/// <summary>
/// Drops (down = true) or raises (down = false) the shield/barrier over the crown (C1 B2 16).
/// The crown is only clickable/capturable while the shield is down.
/// </summary>
/// <param name="down">Whether the shield should be down.</param>
ValueTask SetCrownShieldAsync(bool down);
/// <summary>
/// Sends the crown-hold registration state (C1 B2 15): state 0 = started/in-progress (starts the client's
/// 60-second countdown), 1 = success, 2 = failed/reset.
/// </summary>
/// <param name="state">The registration state (0 progress, 1 success, 2 fail).</param>
/// <param name="accessMilliseconds">Accumulated hold time in milliseconds (client shows 60000 - this).</param>
ValueTask SetCrownRegistAsync(byte state, uint accessMilliseconds);
/// <summary>
/// Broadcasts that a guild registered the official seal / took the crown (C1 B2 18, state 1).
/// </summary>
/// <param name="guildName">The capturing guild's name (max 8 bytes).</param>
ValueTask AnnounceSealCapturedAsync(string guildName);
}