This website requires JavaScript.
268b864e28
refactor(battle-node): delete legacy ComputeFrames switch; dispatch is now lookup-or-drop
gamer147
2026-06-03 14:38:22 -04:00
503c382646
refactor(battle-node): extract ForwardWhenBothReadyHandler; share handler instances via BuildHandlers
gamer147
2026-06-03 14:33:26 -04:00
db2f711894
refactor(battle-node): extract JudgeHandler
gamer147
2026-06-03 14:30:40 -04:00
aacd7b56ad
refactor(battle-node): extract TurnStartHandler
gamer147
2026-06-03 14:27:17 -04:00
c03fb3c139
refactor(battle-node): extract RetireKillHandler
gamer147
2026-06-03 14:24:35 -04:00
d35818360f
refactor(battle-node): extract TurnEndFinalHandler
gamer147
2026-06-03 14:21:54 -04:00
538099ff4b
refactor(battle-node): extract TurnEndHandler
gamer147
2026-06-03 14:17:20 -04:00
477faf3df3
refactor(battle-node): extract SwapHandler (mulligan barrier)
gamer147
2026-06-03 14:13:26 -04:00
3e2931b085
refactor(battle-node): extract LoadedHandler
gamer147
2026-06-03 14:10:33 -04:00
e5ec8a0de1
refactor(battle-node): extract InitBattleHandler
gamer147
2026-06-03 14:07:49 -04:00
7c36933c06
refactor(battle-node): extract InitNetworkHandler
gamer147
2026-06-03 14:04:58 -04:00
73d2c4e1b8
refactor(battle-node): add frame-handler contract, context, and empty registry shim
gamer147
2026-06-03 13:59:02 -04:00
57d91236a0
chore: ignore *.bak editor backups
gamer147
2026-06-03 13:56:59 -04:00
4f89463f9c
refactor(battle-node): extract frame factories into BattleFrames
gamer147
2026-06-03 13:52:36 -04:00
85c43a9a72
refactor(battle-node): move session phase + post-swap hands into BattleSessionState
gamer147
2026-06-03 13:47:35 -04:00
95554cee04
refactor(battle-node): name ComputeFrames routes as DispatchRoute
gamer147
2026-06-03 13:43:39 -04:00
afe2984075
test(battle-node): drive PvP flow handshakes through the mulligan barrier
gamer147
2026-06-03 10:58:33 -04:00
feb387d3d5
test(battle-node): real scripted bot drives handshake through the mulligan barrier
gamer147
2026-06-03 10:53:51 -04:00
2d31037648
fix(battle-node): type-agnostic mulligan barrier withholds Ready until both swap
gamer147
2026-06-03 10:52:33 -04:00
8052ed60ec
refactor(battle-node): scripted bot drives the handshake as a real participant
gamer147
2026-06-03 10:51:08 -04:00
a533e9d89d
feat(battle-node): client-shaped handshake builders for the scripted bot
gamer147
2026-06-03 10:49:38 -04:00
633c29b44f
feat(battle-node): BuildReady overload carrying the opponent's hand
gamer147
2026-06-03 10:48:43 -04:00
ae11fe0957
fix(battle-node): assign turnState per side instead of hardcoding 0
gamer147
2026-06-03 10:47:56 -04:00
84ed07d3af
chore(dev): enable Steam-ticket bypass + PvP matching for local smoke
gamer147
2026-06-03 09:09:23 -04:00
feaa149f04
feat(auth): select ISteamServer impl by Auth:BypassSteamTicket config
gamer147
2026-06-03 09:07:51 -04:00
c27bf444a5
refactor(auth): drop null-guard on dev steam ticket log; add test fixture doc
gamer147
2026-06-03 09:06:26 -04:00
ae94d62357
feat(auth): add Dev-only always-valid ISteamServer for local no-Steam clients
gamer147
2026-06-03 09:02:54 -04:00
05d8169012
refactor: type reward_type columns as UserGoodsType enum
gamer147
2026-06-03 07:50:49 -04:00
fb1e91cdf1
Diagnostic logging
gamer147
2026-06-02 22:10:18 -04:00
c551d7b05e
refactor(battle-node): drop dead BattleResult.{Lose,Win,Consistency} members
gamer147
2026-06-02 21:17:30 -04:00
d76b96b339
test(battle-node): lock server-authored frame shapes against prod captures
gamer147
2026-06-02 20:03:56 -04:00
a198174ede
fix(battle-node): involuntary-drop survivor gets DisconnectWin, not Win=NoContest
gamer147
2026-06-02 19:26:16 -04:00
0a8a84b2cc
refactor(battle-node): unify TurnEndFinal / Retire-Kill / gameplay-forwarder dispatch across types
gamer147
2026-06-02 18:37:24 -04:00
1685b509c3
fix(battle-node): TurnEndFinal pushes LifeWin=101 (player perspective), not LifeLose=102
gamer147
2026-06-02 18:11:24 -04:00
ee23985055
fix(battle-node): push BattleFinish on Scripted TurnEndFinal so the client doesn't park on the disconnect-checker
gamer147
2026-06-02 17:48:20 -04:00
c7e61c6f8d
fix(battle-node): hand events are unencrypted JSON arrays, not encrypted dicts
gamer147
2026-06-02 17:14:13 -04:00
8f270a87f0
refactor(battle-node): gate WS diagnostic logging behind config flag
gamer147
2026-06-02 16:49:17 -04:00
9fc1d055d8
fix(battle-node): ack 'hand' SIO events to unblock client emit queue
gamer147
2026-06-02 16:41:40 -04:00
672a89ed46
refactor(matching): IMatchingResolver shared by every do_matching family
gamer147
2026-06-02 15:18:48 -04:00
9f11896f7b
feat(battle-node): polite Socket.IO close on waiting-room timeout
gamer147
2026-06-02 14:05:25 -04:00
a6b9a942ab
chore(battle-node): delete dead ScriptedProfiles.Opponent{Matched,BattleStart}Profile fields
gamer147
2026-06-02 13:58:32 -04:00
5c4e427fab
feat(battle-node): clear RealParticipant outbound archive on session terminate
gamer147
2026-06-02 13:10:15 -04:00
10d9f74d05
feat(battle-node): add OutboundSequencer.Clear() for terminate cascade
gamer147
2026-06-02 13:07:00 -04:00
3991bcc653
feat(battle-node): bound InboundTracker with watermark-guarded sliding window
gamer147
2026-06-02 13:06:08 -04:00
898b872edd
fix(rank-battle): route ai-start through the queue-time MatchContext
gamer147
2026-06-02 12:28:42 -04:00
24f9b2240e
feat(matching): move BotRoster from hardcoded fixture to DB-backed seed
gamer147
2026-06-02 11:58:19 -04:00
8aead62116
fix(battle-node): revert Bot Matched/BattleStart push (corrupts OppoBattleStartInfo)
gamer147
2026-06-02 11:23:13 -04:00
d87f9beb81
fix(rank-battle): use prod-verified bot cosmetic ids to unblock LoadOpponentAssets
gamer147
2026-06-02 11:09:20 -04:00
51e9dd2094
fix(battle-node): Bot mode must push Matched + BattleStart (client state-machine triggers)
gamer147
2026-06-02 09:56:22 -04:00
45c4461515
fix(rank-battle): use real rm_ai_setting.csv ai_id values in BotRoster
gamer147
2026-06-02 09:41:38 -04:00
bf783639c1
fix(rank-battle): inherit BaseRequest so auth fields survive translation roundtrip
gamer147
2026-06-02 09:29:48 -04:00
8723cff998
test(battle-node): BotBattle_FullLifecycle integration test
gamer147
2026-06-02 01:32:07 -04:00
fee84cca24
feat(battle-node): wire WS handler's case BattleType.Bot to real (Real, NoOp) session
gamer147
2026-06-02 01:29:11 -04:00
a4685a9188
feat(battle-node): Bot dispatch arms in ComputeFrames
gamer147
2026-06-02 01:27:08 -04:00
07eb6f1c05
feat(rank-battle): AiStart returns ai_id + camelCase self/oppo_info
gamer147
2026-06-02 01:24:04 -04:00
bb63b0df2f
feat(rank-battle): real DoMatching with PvP pair + AI fallback mapping
gamer147
2026-06-02 01:21:38 -04:00
7c4aa89d45
feat(rank-battle): RankBattleController shell + DTOs + routing smoke tests
gamer147
2026-06-02 01:19:02 -04:00
a55187e10e
feat(matching): IBotRoster + hardcoded BotRoster fixture (8 bots, one per class)
gamer147
2026-06-02 01:15:41 -04:00
7eaf13893e
feat(matching): MatchContextBuilder.BuildForRankBattleAsync for rank battles
gamer147
2026-06-02 01:13:19 -04:00
b65cf81977
feat(matching): per-mode policy + AI-fallback branch in InProcessPairUp
gamer147
2026-06-02 01:09:42 -04:00
3866c93065
refactor(matching): extend PairUpResult with IsAiFallback flag
gamer147
2026-06-02 00:57:25 -04:00
d7bb44973a
feat(matching): ModePolicy registry for per-mode pair-up policy
gamer147
2026-06-02 00:55:18 -04:00
b17c802581
feat(config): MatchingConfig section with AI-fallback threshold
gamer147
2026-06-02 00:54:44 -04:00
0095bdf0cf
feat(arena-tk2): SoloDefaultsToScripted config flag for dev convenience
gamer147
2026-06-01 23:48:14 -04:00
8112b3f81f
feat(arena-tk2): split do_matching success into 3007 owner / 3004 joiner
gamer147
2026-06-01 23:24:13 -04:00
0ecd565774
fix(arena-tk2): park returns 3002 RETRY + empty node_server_url
gamer147
2026-06-01 22:50:48 -04:00
43c0a6cf31
test(battle-node): PvP integration tests (handshake, gameplay, Retire, disconnect, timeout)
gamer147
2026-06-01 22:30:01 -04:00
225c20daeb
feat(arena-tk2): PvP pair-up trigger via /do_matching, ?scripted=1 opt-in
gamer147
2026-06-01 22:14:04 -04:00
28b1d7531a
feat(emulated-entrypoint): InProcessPairUp service for TK2 PvP matching
gamer147
2026-06-01 22:06:49 -04:00
0bb19320df
feat(battle-node): WS handler Pvp branch with WaitingRoom
gamer147
2026-06-01 22:02:21 -04:00
ca5a1e926d
feat(battle-node): RealParticipant session-finished signal + Pvp cascade
gamer147
2026-06-01 21:58:47 -04:00
2789dc08cb
feat(battle-node): WaitingRoom for PvP WS rendezvous
gamer147
2026-06-01 21:55:11 -04:00
db054205b3
feat(battle-node): PvP TurnEnd broadcast + flipped Retire/Kill result
gamer147
2026-06-01 21:51:27 -04:00
72dc1887d9
feat(battle-node): PvP gameplay-frame forwarding arms
gamer147
2026-06-01 21:46:28 -04:00
8a97dd0194
test(battle-node): PvP handshake dispatch sees cross-perspective contexts
gamer147
2026-06-01 21:41:35 -04:00
875a4baa29
refactor(battle-node): move handshake phase reads to per-participant
gamer147
2026-06-01 21:33:17 -04:00
ac78473a3e
feat(battle-node): add RealParticipant.Phase for per-side handshake state
gamer147
2026-06-01 21:25:11 -04:00
b75eb512ea
docs(battle-node): refresh ScriptedBotParticipant <remarks> to match Phase 2 wiring
gamer147
2026-06-01 21:23:09 -04:00
560feb231a
refactor(battle-node): generalise BuildMatched/BuildBattleStart for PvP
gamer147
2026-06-01 21:16:11 -04:00
2d7cee38d3
refactor(battle-node): drop old BattleSession; rename V2 -> BattleSession
gamer147
2026-06-01 20:10:14 -04:00
91472df6fc
refactor(battle-node): cut handler over to BattleSessionV2 + participants
gamer147
2026-06-01 20:07:45 -04:00
bbc3a47f7a
test(battle-node): BattleSessionV2 dispatch covers Scripted-mode routing
gamer147
2026-06-01 20:03:06 -04:00
b2f3d25be0
feat(battle-node): add BattleSessionV2 broker (unused yet)
gamer147
2026-06-01 20:01:54 -04:00
d665f88067
refactor(battle-node): unify IMatchingBridge.RegisterBattle signature
gamer147
2026-06-01 20:00:52 -04:00
acd0997cfb
feat(battle-node): add RealParticipant wrapping WS + sequencers
gamer147
2026-06-01 19:57:45 -04:00
fcdcc5d590
feat(battle-node): add ScriptedBotParticipant wrapping v1.2 burst
gamer147
2026-06-01 19:56:01 -04:00
553a79c795
feat(battle-node): add NoOpBotParticipant
gamer147
2026-06-01 19:55:00 -04:00
9079715da6
feat(battle-node): add IBattleParticipant interface
gamer147
2026-06-01 19:54:03 -04:00
ae7ff25af0
feat(battle-node): add BattleType, BattleFinishReason, BattlePlayer
gamer147
2026-06-01 19:53:31 -04:00
479548fa56
test(battle-node): integration test expects three frames per cycle
gamer147
2026-06-01 17:42:44 -04:00
136149ed6b
test(battle-node): wire-shape test for BuildOpponentJudge
gamer147
2026-06-01 17:40:33 -04:00
1ef101f851
feat(battle-node): push Judge after opponent TurnEnd so client transitions
gamer147
2026-06-01 17:37:55 -04:00
007513e55c
test(battle-node): TurnEnd dispatch tests expect three-frame burst (TDD red)
gamer147
2026-06-01 17:34:59 -04:00
8a5b8b747d
feat(battle-node): BuildOpponentJudge builder for v1.2 turn-end Judge
gamer147
2026-06-01 17:32:22 -04:00
70b2872589
feat(battle-node): add JudgeBody record for opponent turn-end Judge push
gamer147
2026-06-01 17:30:00 -04:00
5021217134
test(battle-node): wire-shape test + refresh stale comment for v1.1
gamer147
2026-06-01 15:20:48 -04:00
ff8e4abea8
test(battle-node): integration test drives two opponent-turn cycles
gamer147
2026-06-01 15:04:21 -04:00
decdef29cf
test(battle-node): TurnEnd cycle can fire multiple times
gamer147
2026-06-01 15:01:19 -04:00
e30fdb7570
feat(battle-node): scripted opponent turn loop pushes TurnStart + TurnEnd
gamer147
2026-06-01 14:57:49 -04:00
96ae090a3a
test(battle-node): rewrite TurnEnd dispatch test for two-frame cycle
gamer147
2026-06-01 14:53:32 -04:00