Compare commits

...

6 commits

Author SHA1 Message Date
6cbbcacad2 Update USM encryption keys 2025-06-06 11:24:34 +03:00
a38dd87527 Update resource version for 2.0 PROD 2025-06-06 03:19:26 +03:00
50db4dea2d Implement DoubleElite (routine cleanup) 2025-06-05 19:13:09 +03:00
a6114e54bd Fix ELocalPlayType issue 2025-06-05 14:40:48 +03:00
d3aafaddfc Refactor battles, implement collectible rewards in Fight/LongFight scenes 2025-06-04 23:28:12 +03:00
ab822779a3 2.0 PROD
Co-authored-by: traffic95 <traffic95@xeondev.com>
Reviewed-on: #1
2025-06-03 16:39:47 +00:00
725 changed files with 15134 additions and 4149 deletions

337
Cargo.lock generated
View file

@ -107,6 +107,31 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "axum-extra"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45bf463831f5131b7d3c756525b305d40f1185b688565648a92e1392ca35713d"
dependencies = [
"axum",
"axum-core",
"bytes",
"form_urlencoded",
"futures-util",
"http",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
"rustversion",
"serde",
"serde_html_form",
"serde_path_to_error",
"tower",
"tower-layer",
"tower-service",
]
[[package]] [[package]]
name = "backtrace" name = "backtrace"
version = "0.3.74" version = "0.3.74"
@ -221,8 +246,8 @@ dependencies = [
"serde", "serde",
"serde_json5", "serde_json5",
"thiserror", "thiserror",
"vivian-codegen",
"xxhash-rust", "xxhash-rust",
"yixuan-codegen",
] ]
[[package]] [[package]]
@ -958,6 +983,7 @@ version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
dependencies = [ dependencies = [
"cc",
"pkg-config", "pkg-config",
"vcpkg", "vcpkg",
] ]
@ -1672,6 +1698,19 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "serde_html_form"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d2de91cf02bbc07cde38891769ccd5d4f073d22a40683aa4bc7a95781aaa2c4"
dependencies = [
"form_urlencoded",
"indexmap",
"itoa",
"ryu",
"serde",
]
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.140" version = "1.0.140"
@ -2474,139 +2513,6 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
[[package]]
name = "vivian-codegen"
version = "0.0.1"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "vivian-dbgate-server"
version = "0.0.1"
dependencies = [
"common",
"const_format",
"rand",
"serde",
"serde_json5",
"sqlx",
"thiserror",
"tokio",
"tracing",
"ureq",
"vivian-proto",
"vivian-service",
]
[[package]]
name = "vivian-dispatch-server"
version = "0.1.0"
dependencies = [
"axum",
"common",
"const_format",
"serde",
"serde_json5",
"thiserror",
"tokio",
"vivian-encryption",
]
[[package]]
name = "vivian-encryption"
version = "0.0.1"
dependencies = [
"base64-simd",
"rand",
"rand_mt",
"rsa",
"serde",
"thiserror",
]
[[package]]
name = "vivian-game-server"
version = "0.0.1"
dependencies = [
"common",
"config",
"const_format",
"paste",
"rand",
"scc",
"serde",
"serde_json5",
"thiserror",
"tokio",
"tracing",
"vivian-codegen",
"vivian-logic",
"vivian-proto",
"vivian-service",
]
[[package]]
name = "vivian-gate-server"
version = "0.0.1"
dependencies = [
"common",
"const_format",
"paste",
"rand",
"scc",
"serde",
"thiserror",
"tokio",
"tracing",
"vivian-encryption",
"vivian-proto",
"vivian-service",
]
[[package]]
name = "vivian-logic"
version = "0.0.1"
dependencies = [
"common",
"config",
"hex",
"num_enum",
"paste",
"thiserror",
"tracing",
"vivian-proto",
]
[[package]]
name = "vivian-proto"
version = "0.0.1"
dependencies = [
"prettyplease",
"prost",
"prost-build",
"prost-types",
"proto-derive",
"serde",
"syn",
]
[[package]]
name = "vivian-service"
version = "0.0.1"
dependencies = [
"common",
"scc",
"serde",
"thiserror",
"tokio",
"tokio-util",
"tracing",
"vivian-proto",
]
[[package]] [[package]]
name = "vsimd" name = "vsimd"
version = "0.8.0" version = "0.8.0"
@ -2859,6 +2765,169 @@ version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
[[package]]
name = "yixuan-codegen"
version = "0.0.1"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "yixuan-dbgate-server"
version = "0.0.1"
dependencies = [
"common",
"const_format",
"rand",
"serde",
"serde_json5",
"sqlx",
"thiserror",
"tokio",
"tracing",
"ureq",
"yixuan-proto",
"yixuan-service",
]
[[package]]
name = "yixuan-dispatch-server"
version = "0.1.0"
dependencies = [
"axum",
"common",
"const_format",
"serde",
"serde_json5",
"thiserror",
"tokio",
"tracing",
"yixuan-encryption",
]
[[package]]
name = "yixuan-encryption"
version = "0.0.1"
dependencies = [
"base64-simd",
"rand",
"rand_mt",
"rsa",
"serde",
"thiserror",
]
[[package]]
name = "yixuan-game-server"
version = "0.0.1"
dependencies = [
"common",
"config",
"const_format",
"itertools",
"paste",
"rand",
"scc",
"serde",
"serde_json5",
"thiserror",
"tokio",
"tracing",
"yixuan-codegen",
"yixuan-logic",
"yixuan-models",
"yixuan-proto",
"yixuan-service",
]
[[package]]
name = "yixuan-gate-server"
version = "0.0.1"
dependencies = [
"common",
"const_format",
"paste",
"rand",
"scc",
"serde",
"thiserror",
"tokio",
"tracing",
"yixuan-encryption",
"yixuan-proto",
"yixuan-service",
]
[[package]]
name = "yixuan-logic"
version = "0.0.1"
dependencies = [
"common",
"config",
"num_enum",
"paste",
"serde",
"thiserror",
"tracing",
"yixuan-codegen",
"yixuan-proto",
]
[[package]]
name = "yixuan-models"
version = "0.0.1"
dependencies = [
"config",
"tracing",
"yixuan-codegen",
"yixuan-logic",
"yixuan-proto",
]
[[package]]
name = "yixuan-muip-server"
version = "0.0.1"
dependencies = [
"axum",
"axum-extra",
"common",
"const_format",
"serde",
"thiserror",
"tokio",
"tracing",
"yixuan-proto",
"yixuan-service",
]
[[package]]
name = "yixuan-proto"
version = "0.0.1"
dependencies = [
"prettyplease",
"prost",
"prost-build",
"prost-types",
"proto-derive",
"syn",
]
[[package]]
name = "yixuan-service"
version = "0.0.1"
dependencies = [
"common",
"scc",
"serde",
"thiserror",
"tokio",
"tokio-util",
"tracing",
"yixuan-proto",
]
[[package]] [[package]]
name = "yoke" name = "yoke"
version = "0.7.5" version = "0.7.5"

View file

@ -9,8 +9,9 @@ version = "0.0.1"
tokio = { version = "1.44.2", features = ["full"] } tokio = { version = "1.44.2", features = ["full"] }
tokio-util = "0.7.15" tokio-util = "0.7.15"
axum = "0.8.3" axum = "0.8.3"
axum-extra = { version = "0.10.1", features = ["query"] }
ureq = { version = "3.0.11", features = ["json"] } ureq = { version = "3.0.11", features = ["json"] }
sqlx = { version = "0.8.5", features = ["postgres", "runtime-tokio-rustls"] } sqlx = { version = "0.8.5", features = ["any", "postgres", "mysql", "sqlite", "runtime-tokio-rustls"] }
const_format = "0.2.34" const_format = "0.2.34"
thiserror = "2.0" thiserror = "2.0"
@ -50,8 +51,9 @@ quote = "1.0"
common = { path = "lib/common" } common = { path = "lib/common" }
config = { path = "lib/config" } config = { path = "lib/config" }
vivian-codegen = { path = "lib/codegen" } yixuan-codegen = { path = "lib/codegen" }
vivian-proto = { path = "lib/proto" } yixuan-proto = { path = "lib/proto" }
vivian-logic = { path = "lib/logic" } yixuan-logic = { path = "lib/logic" }
vivian-encryption = { path = "lib/encryption" } yixuan-models = { path = "lib/models" }
vivian-service = { path = "lib/service" } yixuan-encryption = { path = "lib/encryption" }
yixuan-service = { path = "lib/service" }

View file

@ -219,7 +219,7 @@ If you develop a new program, and you want it to be of the greatest possible use
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
vivian-rs yixuan-rs
Copyright (C) 2025 ReversedRooms Copyright (C) 2025 ReversedRooms
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

View file

@ -1,16 +1,17 @@
# Vivian-rs # Yixuan-rs
##### Experimental server emulator for the game Zenless Zone Zero ##### Experimental server emulator for the game Zenless Zone Zero
![title](assets/img/title.png) ![title](assets/img/title.png)
## Features ## Features
- Microservices Architecture - Microservices Architecture
- Quest System - Quest System
- VR Training, Notorious Hunt
- Story Commissions in HDD
- "TV Mode" aka Monitor Array - "TV Mode" aka Monitor Array
- VR Training
- Gacha (with configurable banner schedule) - Gacha (with configurable banner schedule)
- NPC Interactions - NPC Interactions
- Miscellaneous items (Skins, W-Engines, Wallpapers) - Miscellaneous items (Skins, W-Engines, Drive Discs, Proxy Accessories, Wallpapers)
#### NOTE: vivian-rs is currently under active development #### NOTE: yixuan-rs is currently under active development
## Getting started ## Getting started
### Requirements ### Requirements
@ -24,15 +25,16 @@
### Setup ### Setup
#### a) building from sources #### a) building from sources
```sh ```sh
git clone https://git.xeondev.com/vivian-rs/vivian-rs.git git clone https://git.xeondev.com/yixuan-rs/yixuan-rs.git
cd vivian-rs cd yixuan-rs
cargo run --bin vivian-dispatch-server cargo run --bin yixuan-dispatch-server
cargo run --bin vivian-gate-server cargo run --bin yixuan-gate-server
cargo run --bin vivian-dbgate-server cargo run --bin yixuan-dbgate-server
cargo run --bin vivian-game-server cargo run --bin yixuan-game-server
cargo run --bin yixuan-muip-server
``` ```
#### b) using pre-built binaries #### b) using pre-built binaries
Navigate to the [Releases](https://git.xeondev.com/vivian-rs/vivian-rs/releases) page and download the latest release for your platform. Navigate to the [Releases](https://git.xeondev.com/yixuan-rs/yixuan-rs/releases) page and download the latest release for your platform.
Start each service in order from option `a)`. Start each service in order from option `a)`.
### Configuration ### Configuration
@ -43,10 +45,10 @@ The configuration of each server is located under the `config` directory (create
- To change gameplay-related settings, edit one of game-server configuration files, for example: gacha banner schedule is located in: `config/40-game-server/gacha_schedule.toml` - To change gameplay-related settings, edit one of game-server configuration files, for example: gacha banner schedule is located in: `config/40-game-server/gacha_schedule.toml`
### Logging in ### Logging in
Currently supported client version is `OSPRODWin1.7.0`, you can get it from 3rd party sources (e.g. game launcher). Next, you have to apply the necessary [client patch](https://git.xeondev.com/vivian-rs/vivian-patch). It allows you to connect to the local server and replaces encryption keys with custom ones. Currently supported client version is `OSPRODWin2.0.0`, you can get it from 3rd party sources (e.g. game launcher). Next, you have to apply the necessary [client patch](https://git.xeondev.com/yixuan-rs/yixuan-patch). It allows you to connect to the local server and replaces encryption keys with custom ones.
### Obtaining characters without gacha ### Obtaining characters without gacha
While playing on the server, you may want to obtain the characters that are not available in current gacha schedule. In order to do so, you can use in-game debug menu: find the 'Vivian' NPC in the WorkShop location, and interact with it. It'll send you to a debug TV mode scene, where you can select the characters to obtain. (The NPC will spawn as soon as you progress in starting quests!) While playing on the server, you may want to obtain the characters that are not available in current gacha schedule. In order to do so, you can use in-game debug menu: find the 'Yixuan' NPC on the second floor of WorkShop location, and interact with it. It'll send you to a debug TV mode scene, where you can select the characters to obtain.
![debug_menu](assets/img/debug_menu.png) ![debug_menu](assets/img/debug_menu.png)
### Gameplay customization ### Gameplay customization

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more