feat(all): add game SDK and harden client login and game rules

- Add costume burst upgrades with durable replay and fix permanent SR equipment gacha.
- Add server game.json rules for optional collaboration UR weapons, with packaging and documentation.
- Add GameNames/GameSdk NuGet tooling, readable types, reobfuscation, complete source/PDB navigation and shared-runtime installation.
- Split plugin responsibilities, prefer typeof/nameof, centralize MSBuild settings and ignore local paths; remove the unused LoginUI test project.
- Fix login recovery and TLS through native platform HTTP and a private game relay; read device region directly from the OS time zone.

Validation: go test ./... -count=1, go vet ./..., plugin Release builds, SDK/runtime self-tests, Roslyn embedded-source navigation, gofmt check and git diff --check.
This commit is contained in:
2026-10-03 23:04:32 +08:00
parent 5600f10b31
commit 992fa47fd5
83 changed files with 8970 additions and 2828 deletions
+13
View File
@@ -2,6 +2,19 @@
This BepInEx plugin is only for the separately extracted official client selected by the repository-root `versions.json`.
The SDK embeds the version-locked names table. Build with the game directory; the build generates the readable reference assembly and reobfuscates the plugin automatically:
```powershell
dotnet build plugins/CaptureEnvironment/CaptureEnvironment.csproj -c Release `
'-p:GameDir=<official-client-directory>'
```
Deploy the runtime `BD2CaptureEnvironment.dll` together with the adjacent
`BD2.GameNames.dll`. The launcher copies both from the staged build and requires
both to exist. The shared library validates the plugin/table version and game
binary before game patches are installed. See [the GameSdk guide](../GameSdk/README.md)
for the compiler/runtime name contract; the readable shell stays in `obj`.
- redirects `Application.persistentDataPath` to `<game>/IsolatedUserData`;
- prefixes game `PlayerPrefs` keys with a namespace derived from the configured client version;
- keeps account/profile/Neo/Intro and the installed GameData working set in