feat(hs): disable wings in-event + periodic HUD-state packet/broadcast

- HeykelSavasiContext.IsItemAllowedToEquip disallows wings/capes during
  Playing only (so entry is never rejected for wearing wings); auto-unequips
  any equipped wing/cape into a free inventory slot in OnGameStartAsync.
- New S2C packet HeykelSavasiHudState (C1, code FB, length 11) carrying
  phase, team, counts, statue progress and remaining seconds, plus its view
  plugin/interface, broadcast once per second across registration/prep/
  battle and one-shot on join/statue-break/game-end.
This commit is contained in:
Acentech Dev
2026-07-21 03:16:29 +03:00
parent 5750ab6511
commit 7aae9dff0c
9 changed files with 697 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
# C1 FB - HeykelSavasiHudState (by server)
## Is sent when
Periodically (about once per second) while the Heykel Savasi (Statue War) event is open for registration, in its pre-battle countdown, or being played.
## Causes the following actions on the client side
The client updates its Heykel Savasi HUD panel (team counts, statue progress, and remaining time).
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 11 | Packet header - length of the packet |
| 2 | 1 | Byte | 0xFB | Packet header - packet type identifier |
| 3 | 1 | Byte | | Phase; 0 = registration open, 1 = preparation countdown, 2 = battle, 3 = ended. |
| 4 | 1 | Byte | | MyTeam; 0 = none, 1 = red, 2 = blue. |
| 5 | 1 | Byte | | RedCount |
| 6 | 1 | Byte | | BlueCount |
| 7 | 1 | Byte | | RedProgress; The number (0-7) of statues the red team has destroyed of the blue team's line. |
| 8 | 1 | Byte | | BlueProgress; The number (0-7) of statues the blue team has destroyed of the red team's line. |
| 9 | 2 | ShortBigEndian | | RemainingSeconds; The number of seconds left in the current phase. |

View File

@@ -242,3 +242,4 @@
* [C2 F6 1B - QuestStateExtended (by server)](C2-F6-1B-QuestStateExtended_by-server.md)
* [C3 F9 01 - OpenNpcDialog (by server)](C3-F9-01-OpenNpcDialog_by-server.md)
* [C1 FA - HeykelSavasiOpenTeamPanel (by server)](C1-FA-HeykelSavasiOpenTeamPanel_by-server.md)
* [C1 FB - HeykelSavasiHudState (by server)](C1-FB-HeykelSavasiHudState_by-server.md)