KCP gameserver with packet dispatch, scene streaming, combat, gacha and the shop, plus a small HTTP server for the login flow and the wish history page. Game data under assets is pulled out of the client instead of being typed by hand. The excel tables come from the packed bin container and the spawn points from the compiled scene scripts.
49 lines
2.1 KiB
Markdown
49 lines
2.1 KiB
Markdown
# yuanshen
|
|
|
|
A private server for Genshin Impact 0.9.10 (CBT3), written from scratch in C#.
|
|
|
|
I started this to figure out how the client actually talks to its server, and it grew from
|
|
"can I get past the login screen" into something you can walk around in. You can log in, run
|
|
around Mondstadt, kill hilichurls, buy things and pull on a banner. Plenty is still missing.
|
|
|
|
## What's in here
|
|
|
|
* `Yuanshen.Gameserver` is the KCP server. Packet dispatch, scenes, combat, gacha, shop, GM commands.
|
|
* `Yuanshen.SDK` is a small HTTP server on 8899 for the login flow, plus a wish history page.
|
|
* `Yuanshen.Proto` holds the generated protobuf types and the CmdType table.
|
|
* `Yuanshen.Common` has excel loading and the shared console stuff.
|
|
* `Yuanshen.Kcp` is a vendored copy of KcpSharp. See THIRD-PARTY-NOTICES.md.
|
|
|
|
## Getting it running
|
|
|
|
.NET 10 and a PostgreSQL somewhere. Both servers read their connection string from
|
|
`appsettings.json` and default to postgres/postgres on localhost. That is a local dev default,
|
|
not a leaked password, but change it if your setup is different.
|
|
|
|
```
|
|
dotnet build Yuanshen.sln
|
|
```
|
|
|
|
Start the SDK first, then the gameserver, then a patched client. The gameserver console takes
|
|
GM commands directly, `/help` lists them.
|
|
|
|
## About the game data
|
|
|
|
Everything under `Yuanshen.Gameserver/assets` came out of the client rather than being typed
|
|
by hand. The excel tables live in a packed bin container that turns out to be a single byte
|
|
XOR, with the key derived from the version string, and the monster spawn points come out of
|
|
the compiled Lua scene scripts.
|
|
|
|
One thing you'll notice: items show up as ids and weapon types instead of names. The client
|
|
only ships text map hashes, and there is no text map in the build, so there is nothing to
|
|
resolve names against yet.
|
|
|
|
## State of things
|
|
|
|
Working: login, world streaming, movement, monsters and combat, gacha with pity and the
|
|
50/50, shop, wish history.
|
|
|
|
Not done: quests, dungeons, co-op, chests and world drops.
|
|
|
|
This is a reverse engineering project for learning. It is not affiliated with miHoYo and it
|
|
is not trying to be a playable replacement for the real game.
|