81fe842c15f7b29febfc5fc9d9ddbe9dbdec341d
The DAILY child gacha (type_detail=3, is_daily_single=true) is the once-per-day half-off crystal single-pack. Two bugs: 1. /pack/open Daily case was calling TrySpendAsync(Rupee) — decompiled client (GachaUI.cs:1046 CheckBuyPackWithCrystal, :1187 SetClystalConfirmDialog) confirms it's a crystal purchase. Freeplay mode masked the mismatch in testing. Swapped to Crystal + insufficient_crystals error. 2. /pack/info kept emitting is_daily_single=true after the viewer's first claim, so the client re-showed the half-off button and a second click 400'd with daily_free_already_claimed. Added a per-parent-pack gate that flips is_daily_single false when LastDailyFreeAt.Date == today. The child entry itself stays so the CRYSTAL_MULTI full-price button still activates. TODO(daily-reset) comments now reference docs/plans/daily-reset-service.md (in the outer repo) — the current UTC-midnight comparison will migrate to the JST 02:00 reset boundary via that plan. Updated the existing daily test to use cost=50 and assert Crystals: 200 -> 150 + Rupees untouched (previously used cost=0 so the currency choice was undetectable). Added two /pack/info gate tests. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Description
The SV Simulator server code, including the DCG Engine, SVSim content, and an entrypoint for the official game client.
Languages
C#
100%