upd(readme): revise

This commit is contained in:
capyb2222 committed 2026-09-07 22:19:20 -07:00
1 parent e344e699de
commit bdfe2a1541
1 file changed
+3 -67
+3 -67
View File
@@ -11,11 +11,6 @@ Goals: a full combat system including combat events, and
- .NET 10 SDK - .NET 10 SDK
- `protoc` (only to regenerate the protocol) - `protoc` (only to regenerate the protocol)
Everything the server reads but does not own lives in `stuff/` and is not tracked here: the
game data it merges (`stuff/turnbasedgamedata/ExcelOutput` from Dimbreath and
`stuff/pearl-sr/resources` for the beta overlay), the proto dump, and the reference servers.
`Data.Sources` in `config/config.json` points at the first two, in priority order.
## Running ## Running
``` ```
@@ -27,66 +22,18 @@ Or just `run.bat`.
## What works ## What works
- Teams: six squads, join/quit/swap/leader/rename/switch, virtual lineups for challenges, - WIP
shared technique points (Phainon and Himeko Nova raise the cap), all remembered between runs.
- Overworld fights: hitting a monster resolves its own stage for your world level, the attacker's
element breaks toughness on entry, ambushes work, destructible props break, and fodder-clearing
techniques (Acheron, Phainon, Silver Wolf 999, Himeko Nova) skip the fight. Won fights remove
the monsters; HP and energy carry over until you teleport.
- Calyxes, Stagnant Shadows / Caverns, Battle College (trial characters), story stages by event.
- Memory of Chaos, Pure Fiction, Apocalyptic Shadow with both nodes, scores, stars, records; Anomaly
Arbitration with saved mob teams, hard mode and settle screens. Every floor reports as cleared so
none sit locked behind the one before them; set `GameServer.UnlockAllChallenges` to false to
report only what has actually been played.
- Position, paths, gender, head icon, server-side settings and challenge records persist in
`data/player.json`.
## Chat commands ## Chat commands
The friend list has one entry, CapySR. Message it: - WIP
| command | effect |
|-----------------------------|-----------------------------------------------------|
| `/help` | list the commands |
| `/tp <entryId> [teleportId]`| travel to a map entrance |
| `/unstuck` | respawn at the current map's anchor |
| `/heal` | full health and technique points |
| `/mp [n]` | set technique points |
| `/wl <0-6>` | set the equilibrium level (monsters scale with it) |
| `/stage <stageId>` | the next fight you start plays that stage |
| `/sync` | reload `freesr-data.json` now |
| `/lineup`, `/pos`, `/clear` | show the team, show where you are, clear the map |
## srtools ## srtools
Point srtools at `http://127.0.0.1:21000/srtools` and upload. The game server watches - WIP
`data/freesr-data.json` and pushes the new roster, gear and teams to a logged-in client without a relog.
`GameServer.BattleSource` in `config/config.json` decides what the uploaded `battle_config` drives:
| value | behaviour |
|---------------------|---------------------------------------------------------------|
| `auto` (default) | every non-challenge fight plays the srtools battle |
| `srtools` | the same, and never falls back to the encounter's own stage |
| `stage` | everything plays its real stage |
So a calyx runs whatever stage `freesr-data.json` names. That is how an older Apocalyptic
Shadow, Pure Fiction or Memory of Chaos floor gets replayed, while F4 keeps the current
rotation. Challenges always play their own stage.
### Hotfix URLs ### Hotfix URLs
Unknown versions are fetched from the official dispatch once and cached in
`config/versions.json`. A beta dispatch stops answering as soon as its window closes, so a
client newer than anything cached cannot be looked up by anyone any more. When that happens
the closest older build of the same channel is lent out, which keeps a packaged client
booting: an empty `ex_resource_url` hangs it at about 99% before it ever reaches the game
server. Turn `Hotfix.EnableDesignDataUpdate` off while a version is running on borrowed urls,
or it will try to download design data that does not match its build.
The version a client will ask for, and its dispatch seed, are in
`StarRail_Data/StreamingAssets/BinaryVersion.bytes`.
For OS: For OS:
```json ```json
{ {
@@ -105,23 +52,12 @@ For OS:
dotnet test tests/CapySR.Tests dotnet test tests/CapySR.Tests
``` ```
`FlowTests` drive a real gateway end to end: login, team edits, an overworld fight, technique
points, and a two-node Memory of Chaos floor.
## Regenerating the protocol ## Regenerating the protocol
``` ```
dotnet run --project tools/CapySR.ProtoGen dotnet run --project tools/CapySR.ProtoGen
``` ```
The generated protocol is committed, so this is only needed after a proto dump changes. Clone
[TurnBaseGameProto](https://github.com/Mar7thLover/TurnBaseGameProto) into `stuff/` first.
Reads `stuff/TurnBaseGameProto/Raw/StarRail.proto`, resolves the 11 duplicate type names the dump's
translation pass produces, runs protoc, and writes `CmdId.g.cs` / `CmdIdTable.g.cs`. Duplicate
resolution is scored against the `CmdXxxType` service enums and `packetIds.txt`; deliberate calls
live in `DuplicateResolver.Overrides`.
## Credits ## Credits
- capyb2222 - capyb2222
- Various other server reimplementation. - Various other server reimplementation.