11 Commits
Author SHA1 Message Date
CAtlas0784 0cbe460e49 Update GaCy-GO 2026-10-28 18:54:43 +07:00
CAtlas0784 da8a32f60d pre cw with probe and a bunch script to read game behavior 2026-10-21 20:40:13 +07:00
CAtlas0784 639cef7d19 Save endgame progress, team presets, technique support and camera controls 2026-10-17 23:44:36 +07:00
CAtlas0784 a681affdb3 chore: checkpoint stable battle and eidolon progression 2026-10-17 16:38:03 +07:00
CAtlas0784 332171cafb feat: add enable_aha_global passive support to Persistent and battle handlers 2026-10-17 00:49:09 +07:00
CAtlas0784 163d4433e6 fix(scene): unlock all teleports across maps, merge resource configs, fix scenary not load error, and add quick farm battle handlers 2026-10-16 20:08:13 +07:00
CAtlas0784 e9ae89f0d7 fix(activity): revert to synthetic schedule - real ids black-screen the events page
The events page NREs when the schedule references real activities: the
client renders their panels and requests per-activity data
(GetActivityHotData/GetActiveActivityData/...) that this PS cannot fill
yet, Sync(nil) -> black screen. The synthetic list resolves to nothing
and keeps the page open (empty but usable).

realActivitySchedule stays in handlers_activity_data.go for the future
round where per-activity data handlers exist.
2026-10-07 02:54:23 +07:00
CAtlas0784 768baeb62a fix(scene): persist scene only after the client actually moves
The user's save was bricked by teleporting to entry 100000304: the client
offers it in the map but NREs in AdventurePhase._EnterStep1_InitializeMapInfo
while loading, and the server had already saved that scene - every login
then replayed the broken scene (stuck on the train-window loading screen).

- loadScene no longer calls SavePersistent; SceneEntityMove's 5s cadence
  persists the scene only once the client walks in it (the existing arena
  guard already kept challenge scenes out of the save)
- reset persistent to entry 102020107 (proven walkable in the 01:00/01:38
  sessions)
2026-10-07 02:39:41 +07:00
CAtlas0784 876f20d857 fix(challenge,scene): challenge id auto-detect, real ScRsp ids, teleport ownership
Round-2 fixes from the 01:44-01:53 client session:

- StartChallenge (MoC/PF/AS normal start) decoded challenge_id=0 -> client
  retried and aborted. detectChallengeID scans top-level varints for the
  first plausible id (challenge_data + known mode ranges) when the strict
  tag-14 decode misses; payload hexdump logged when still 0
- StartChallengeScRsp now carries stage_info (tag 13) with boss node buff
  echo, per the 4.6.51 proto
- GetSwitchHandData replies 8108 (the real ScRsp) - 8104 is
  SwitchHandStartCsReq, we were sending a request id back at the client
- GetSceneMapInfo: strict proto parse failed on some payloads (layout
  drift) which stalled the map UI ('no pillars / navigation loading') -
  now a raw handler with a lenient wire walk fallback + hexdump logging
- teleport destination ('AA teleport landed in AP'): teleport ids repeat
  on every floor and teleports.json was scanned globally in random map
  order. Map clicks now resolve floor-first via scene_identifier, and the
  global id scan never touches teleports.json
- tierce: arena 3014101 -> 3000101 fallback (client has no MapEntrance
  3014101), same as StartChallenge
2026-10-07 02:13:45 +07:00
CAtlas0784 d364b9616f fix(scene): unlock teleport pillars on maps missing from mapDefaultEntranceMap
The user report: pillars visible on the map but locked, and clicking a
teleport does nothing (client never sends EnterScene).

Root cause: mapDefaultEntranceMap covers only 115 of 371 floors - the
GetSceneMapInfo reply had no unlocked teleports for the missing floors
(mostly new-region 2xxxxx maps), so the client locked the pillars and
never initiated the teleport.

- findEntryForFloor: resolve entry by searching config names P*_F<floor>
  directly, with mapDefaultEntranceMap as the first chance
- GetSceneMapInfo: use the new resolver and merge teleports.json keys
  into unlocked_teleport_list for every floor
- EnterScene: floor ids resolve through the same path; a teleport id
  arriving via scene_identifier (MDAIDPPKOPO.PLIDNBMCIJH) now also
  resolves the destination entry
- loadScene: exact teleport position from teleports.json when the res
  config has no inline teleport with that id
2026-10-07 01:45:56 +07:00
CAtlas0784 59ea97b1a6 feat: port GaC-hkrpg-ps to Go with SceneCastSkill camera-detach fix
- mihoyo-variant KCP in pure Go (28-byte conv+token header), UDP gateway
  with 0xFF/0x145/0x194 handshake, ms-precision KCP clock + retransmit ticker
- protobuf for 4.6.51 generated from the AstralOS StarRail.proto (4932
  messages) plus CmdID map from // CmdID: comments (2114 ids)
- sdkserver port: query_dispatch/query_gateway (Gateserver pb + base64),
  hotfix fetch, auth endpoints, SRTools freesr-data.json upload
- gameserver handlers: login flow, scene load/spawn with real monster
  entity tracking, lineup, avatar/skin, missions, tutorials (1249+855),
  bag/equip, challenge incl. StartChallenge 1787 layout + Tierce 8973 +
  peak 8948, all raw tierce replies
- SceneCastSkill camera bug fix: only real scene monsters (tracked per
  session) trigger battle; attacking props/NPCs/air replies retcode 0
  without battle_info so the camera stays locked on the character
- end-to-end smoke test simulating a client over real UDP: handshake,
  PlayerGetToken, and both SceneCastSkill paths
- reuses the Rust PS data files unchanged (freesr-data.json, persistent,
  res.json, teleports.json, challenge_data.json, mission_unlocks.json)
2026-10-07 00:22:23 +07:00