feat(CS): on-map siege countdown timer (S6 client protocol C1 B2 17/1E)
Some checks failed
.NET Core / build (push) Has been cancelled

Client already renders the siege-map countdown but never received the packets.
New ICastleSiegeStatusViewPlugIn + RemoteView impl send the raw S6 packets:
C1 B2 17 (battle start/stop flag, arms the countdown) and C1 B2 1E (remaining
hour/minute). CastleSiegeEventPlugIn broadcasts them to players on the battle map
every 10s during Siege and sends stop at Settlement. No client changes. +1 test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Acentech Dev
2026-07-15 13:45:01 +03:00
parent ac6700a356
commit 7cf790c2a8
5 changed files with 167 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
// <copyright file="ICastleSiegeStatusViewPlugIn.cs" company="MUnique">
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
// </copyright>
namespace MUnique.OpenMU.GameLogic.Views.CastleSiege;
/// <summary>
/// Interface of a view which drives the client's on-map Castle Siege countdown (Season 6 protocol
/// C1 B2 17 = battle start/stop flag, C1 B2 1E = remaining hour/minute).
/// </summary>
public interface ICastleSiegeStatusViewPlugIn : IViewPlugIn
{
/// <summary>
/// Sends the siege battle start/stop flag (C1 B2 17). The client only ticks its countdown while this is set.
/// </summary>
/// <param name="started">Whether the siege battle is running.</param>
ValueTask SetBattleStateAsync(bool started);
/// <summary>
/// Sends the remaining siege time as hour/minute (C1 B2 1E) to (re)seed the countdown.
/// </summary>
/// <param name="hour">The remaining hours.</param>
/// <param name="minute">The remaining minutes.</param>
ValueTask SetTimerAsync(byte hour, byte minute);
}