refactor(battle-node): drop dead BattleResult.{Lose,Win,Consistency} members

No dispatch arm has emitted these since the Retire/Kill rewrite to RetireWin=105
/ RetireLose=106. Remove them and the docstring paragraph that explained them.

Test fallout: delete BattleFinishBody_LoseAndConsistency_SerializeAsZeroAndTwo
(its only purpose was locking the dead wire values), and re-point
BattleFinishBody_SerializesResultAndResultCode_AsNumericWireValues at the live
LifeWin=101 so it still guards the JsonNumberEnumConverter numeric-wire behavior.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-06-02 21:17:30 -04:00
parent d76b96b339
commit c551d7b05e
2 changed files with 5 additions and 36 deletions

View File

@@ -30,33 +30,12 @@ namespace SVSim.BattleNode.Protocol;
/// reproduction that exposed the inversion.
/// </para>
/// <para>
/// The legacy <c>Lose = 0</c> / <c>Win = 1</c> / <c>Consistency = 2</c> values
/// (client <c>RESULT_CODE.NotFinish</c> / <c>NoContest</c> / <c>Invalid</c>) are
/// no longer emitted by any dispatch arm: the Retire/Kill flow now ships the
/// proper <c>RetireWin</c> / <c>RetireLose</c> codes, and the involuntary-drop
/// cascade ships <c>DisconnectWin</c>. They survive only as wire-constant
/// references in serialization tests and can be deleted once those are dropped.
/// (Historically <c>Win = 1</c> was shipped on Retire and rendered client-side
/// as "battle ended in no contest" — the wrong text — which is why it was
/// replaced.)
/// </para>
/// <para>
/// Always serialize as the int value, not the name; see the
/// <c>JsonNumberEnumConverter</c> on <see cref="Bodies.BattleFinishBody.Result"/>.
/// </para>
/// </summary>
public enum BattleResult
{
/// <summary>Pre-2026-06-02 value, kept for the existing Retire/Kill Scripted flow.
/// Wire-equivalent of <c>RESULT_CODE.NotFinish = 0</c>. Don't use for new code.</summary>
Lose = 0,
/// <summary>Pre-2026-06-02 value, kept for the existing Retire/Kill Scripted flow.
/// Wire-equivalent of <c>RESULT_CODE.NoContest = 1</c>. Don't use for new code.</summary>
Win = 1,
/// <summary>Pre-2026-06-02 value, kept for the existing Retire/Kill Scripted flow.
/// Wire-equivalent of <c>RESULT_CODE.Invalid = 2</c>. Don't use for new code.</summary>
Consistency = 2,
/// <summary>Player won by reducing opponent's life to 0. Pushed to the winner
/// on <c>TurnEndFinal</c>. Routes through the client switch to
/// <c>InitiateGameEndSequence(hasWon: true)</c>.</summary>

View File

@@ -34,27 +34,17 @@ public class SmallBodiesTests
[Test]
public void BattleFinishBody_SerializesResultAndResultCode_AsNumericWireValues()
{
// The wire field is the int code (Win=1); BattleResult uses JsonNumberEnumConverter
// to override the default JsonStringEnumConverter (which would emit "Win" instead).
var body = new BattleFinishBody(Result: BattleResult.Win);
// The wire field is the int RESULT_CODE (LifeWin=101); BattleResult uses
// JsonNumberEnumConverter to override the default JsonStringEnumConverter (which
// would emit "LifeWin" instead).
var body = new BattleFinishBody(Result: BattleResult.LifeWin);
var node = (JsonObject)JsonSerializer.SerializeToNode(body)!;
Assert.That(node["result"]!.GetValue<int>(), Is.EqualTo(1));
Assert.That(node["result"]!.GetValue<int>(), Is.EqualTo(101));
Assert.That(node["resultCode"]!.GetValue<int>(), Is.EqualTo(1));
}
[Test]
public void BattleFinishBody_LoseAndConsistency_SerializeAsZeroAndTwo()
{
// Lock the wire values per BattleFinishResponsProcessing's switch (0=LOSE, 2=CONSISTENCY).
var lose = (JsonObject)JsonSerializer.SerializeToNode(new BattleFinishBody(BattleResult.Lose))!;
var consistency = (JsonObject)JsonSerializer.SerializeToNode(new BattleFinishBody(BattleResult.Consistency))!;
Assert.That(lose["result"]!.GetValue<int>(), Is.EqualTo(0));
Assert.That(consistency["result"]!.GetValue<int>(), Is.EqualTo(2));
}
[Test]
public void AlivePushBody_SerializesScsAndOcs_AndDoesNotIncludeResultCode()
{