feat(CS): authentic Crown-hold throne capture (S6 protocol) replacing Sinior-talk
Some checks failed
.NET Core / build (push) Has been cancelled
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:
@@ -65,17 +65,34 @@ public class CastleSiegeThroneCaptureTalkPlugIn : IPlayerTalkToNpcPlugIn
|
||||
return;
|
||||
}
|
||||
|
||||
var (success, reason) = context.TryCaptureThrone(guildName);
|
||||
if (success)
|
||||
// The throne is taken by holding the Crown, not by talking here — give guidance based on the state.
|
||||
await ShowAsync(player, DescribeThroneStep(context, guildName)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static string DescribeThroneStep(CastleSiegeContext context, string guildName)
|
||||
{
|
||||
if (context.Phase != CastleSiegePhase.Siege)
|
||||
{
|
||||
await player.GameContext.ForEachPlayerAsync(p =>
|
||||
p.InvokeViewPlugInAsync<IShowMessagePlugIn>(v =>
|
||||
v.ShowMessageAsync($"Guild '{guildName}' has CAPTURED THE THRONE! They will win the castle if they hold it until the siege ends.", MessageType.GoldenCenter)).AsTask()).ConfigureAwait(false);
|
||||
return "The siege is not running yet.";
|
||||
}
|
||||
else
|
||||
|
||||
if (context.DefensesRemaining > 0)
|
||||
{
|
||||
await ShowAsync(player, reason).ConfigureAwait(false);
|
||||
return $"Destroy all castle gates first ({context.DefensesRemaining} remaining), then hold both Crown Switches.";
|
||||
}
|
||||
|
||||
var eligible = context.GetShieldEligibleGuild();
|
||||
if (eligible is null)
|
||||
{
|
||||
return "All gates are down! Hold BOTH Crown Switches with your guild — the Crown's shield will drop.";
|
||||
}
|
||||
|
||||
if (eligible == guildName)
|
||||
{
|
||||
return "Your guild holds both switches and the shield is down — send your GUILD MASTER to hold the Crown to take the throne!";
|
||||
}
|
||||
|
||||
return $"Guild '{eligible}' is holding both switches. Take a switch back to raise their shield.";
|
||||
}
|
||||
|
||||
private static ValueTask ShowAsync(Player player, string text)
|
||||
|
||||
Reference in New Issue
Block a user