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
+49
View File
@@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Runtime.Serialization;
// DataContractJsonSerializer populates these internal fields from the embedded table.
#pragma warning disable CS0649
namespace BD2.GameNames.Internal;
[DataContract]
internal sealed class NameTable
{
[DataMember] public int schema_version = 1;
[DataMember] public string game_version;
[DataMember] public string assembly_name;
[DataMember] public string assembly_mvid;
[DataMember] public string assembly_sha256;
[DataMember] public string mapping_sha256;
[DataMember] public string generator_sha256;
[DataMember] public List<TypeName> types = new List<TypeName>();
[DataMember] public List<MemberName> members = new List<MemberName>();
}
[DataContract]
internal sealed class TypeName
{
[DataMember] public int token;
[DataMember] public string readable;
[DataMember] public string original;
}
[DataContract]
internal sealed class MemberName
{
[DataMember] public int token;
[DataMember] public string kind;
[DataMember] public string declaring_type;
[DataMember] public string readable;
[DataMember] public string original;
[DataMember] public string signature;
[DataMember] public List<ParameterName> parameters = new List<ParameterName>();
}
[DataContract]
internal sealed class ParameterName
{
[DataMember] public int position;
[DataMember] public string readable;
[DataMember] public string original;
}