Commit Graph
29 Commits
Author SHA1 Message Date
CAtlas0784 365e66ffe0 feat: capture in-game battle damage statistics & add battle_report API endpoints 2026-10-17 13:08:13 +07:00
CAtlas0784 5c4d0d4149 fix: restore battle entry and character profile initialization 2026-10-17 11:58:20 +07:00
CAtlas0784 cfbbc7b970 feat(api): add data-in-game endpoint for firefly compatibility 2026-10-17 11:08:37 +07:00
CAtlas0784 d65838f27f feat(api): add /api/command GM dispatcher endpoint 2026-10-17 10:48:11 +07:00
CAtlas0784 5159d7ef14 feat(sdkserver): support catalog proxying in apiGachabaseFetch 2026-10-17 10:28:54 +07:00
CAtlas0784 a6f5ca6779 feat(sdkserver): add /api/gachabase/fetch proxy endpoint for Gachabase integration 2026-10-17 03:45:06 +07:00
CAtlas0784 7aa3974233 fix(sdkserver): enable corsWrapper and support raw/wrapped JSON payloads in /srtools endpoint 2026-10-17 03:36:10 +07:00
CAtlas0784 31a9779029 chore: sync freesr-data with full E6 unlocks and default lineups 2026-10-17 01:32:44 +07:00
CAtlas0784 16303423d2 feat: set default battle starting energy to 50% for all avatars 2026-10-17 01:16:00 +07:00
CAtlas0784 83fa8c7d44 feat: safely merge partial persistent updates and update hide ui script 2026-10-17 01:05:58 +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 74f3c4411b fix: sync current handlers, repair relic data and restore visible launcher consoles 2026-10-16 22:19:52 +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 9aab62414f feat: replace local web UI with REST API gateway for freesr and persistent integration (GaC-Srtool) 2026-10-16 20:07:49 +07:00
CAtlas0784 5b33715c1b fix: resolve Calyx NullReferenceException by omitting WaveParam, capping wave count, and setting default monster HP 2026-10-16 20:07:49 +07:00
C 57714379de Update README.md 2026-10-07 13:56:04 +07:00
CAtlas0784 5027cde96c docs(memory): log events-page black screen cause 2026-10-07 02:54:42 +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 ebf313256f docs(memory): log MapRotation crash cause and repo setup 2026-10-07 02:29:11 +07:00
CAtlas0784 29b16b5cf9 fix(scene): never answer GetMapRotationData with an empty ScRsp
Client session 02:20 died in AdventurePhase._EnterStep1_InitializeMapInfo
('AdventureModule should not be null' -> RuntimeGroupManager
_InitMissionToLegacyGroupRelation NRE) and never left the loading screen.

The 01:00 session reached the scene when this request was dropped; the
empty reply added in the auto-empty round put the client into map-rotation
mode with a null state. Drop it again until real RotaterData is built.
2026-10-07 02:28:32 +07:00
CAtlas0784 eb58b2e464 docs(skill): record round-2/3 client-test lessons in AI TOOLBOX 2026-10-07 02:22:52 +07:00
CAtlas0784 5cc172239d feat(activity): real 4.6.51 activity schedule from March7th dump
The synthetic 1000-60000 ranges filled the Travel Log with entries the
client cannot resolve. Replaced with the 147 real (activityId, panelId)
rows dumped from the March7th PS ActivityConfig (matches the 4.6.51
client), keeping the Apocalyptic Shadow panel 21001 block that the AS
tab requires
2026-10-07 02:16:08 +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 72861c3028 docs: keep single SKILL.md copy in AI TOOLBOX per user's layout 2026-10-07 01:20:38 +07:00
CAtlas0784 91ee027eb7 fix(gameserver): answer UI-gating cmds the 4.6.51 client stalls on
First real-client session (2026-10-07 01:00) showed the client walking and
attacking but UI interactions stalling: ~120 CsReq dropped with no reply.

- auto-empty responder: any unknown CsReq with a Cmd-enum ScRsp pair now
  gets an empty ScRsp, except the danger families (GridFight/ChessRogue/
  EvolveBuild/ChimeraDuel/Jukebox/CycleScore) which must stay dropped
  (client Sync(nil) NREs on empty, per the Rust lessons)
- GetUnreleasedBlockInfo: the Endgame entry waits on this - 4.6.51 wire is
  CsReq 4190 -> ScRsp 4112 retcode tag 14 (the Rust build answered 4130,
  an id this client never sends)
- SetClientPaused acked (client pauses itself when opening menus/map)
- explicit handlers: TakeQuestReward, GetFirstTalkNpc, QuitBattle,
  GetMapRotationData (Amphoreus teleport pillars), GetPamSkinData,
  GetAllServerPrefsData/UpdateServerPrefsData, GetHeartDialInfo, GetPetData,
  GetShopList
- SendRaw now logs (dummy/raw replies were invisible in gameserver.log)
- cmdpairs.go: req->rsp id pairs generated from the Cmd enum (865 pairs),
  stable across message renames
- smoke test extended: 4190->4112 and SetClientPaused ack verified
2026-10-07 01:19:56 +07:00
CAtlas0784 580717c3d8 docs: add SKILL.md and AI TOOLBOX (skills + memory) to the Go project 2026-10-07 00:31:53 +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