Compare commits

...

29 commits

Author SHA1 Message Date
1b9fc31867 Support 2.0.0 PROD, rename the project 2025-06-03 19:37:20 +03:00
32b81a738d Implemented BigBossBattle (NotoriousHunt) 2025-06-02 19:41:31 +02:00
7634da311c Handle ModMainCityTimeCsReq, implement ClearMainCityQuestCollection GM command and add it to GMDemo autoexec 2025-06-01 17:35:04 +03:00
a55a9c43db Implement UnlockHollowQuest with parameter 0 for unlocking all quests, add player changes acknowledgement after running a GM command 2025-06-01 14:25:38 +03:00
f46b6b61f0 Core skill level is now displayed in UI and calculated in battle correctly 2025-05-31 22:27:58 +02:00
10d6ccc4d7 Implemented avatar awakes (toggle-able agent buffs, currently only Ellen has one) 2025-05-31 19:25:56 +02:00
6ff7dd3ff0 Make GM commands able to be executed at runtime properly, networking and eventgraph code adjustment 2025-05-31 17:22:44 +03:00
8b03b7c099 Add ability to change database driver (postgres, mysql, sqlite) 2025-05-31 02:15:54 +02:00
60935238bd dispatch_server: Added multiple version support (.4, .5 and .12 for now), fixed error response 2025-05-30 23:03:35 +02:00
8718a417fb Implement AddEquip GM Command (the command to add custom drive discs) 2025-05-29 20:05:33 +03:00
3c66353745 muip: serve retarded html form pointing at self if there are no query params 2025-05-29 19:25:26 +03:00
6ba8c79bf2 docs: mention MUIP server in the 'Setup' section of README 2025-05-29 17:22:44 +03:00
069e8b7ef2 Implement MUIP server with GMTalk API 2025-05-29 17:19:46 +03:00
e703a725af fix: auto-resize for receive buffer in NetworkEntity. Increase initial disc amount to 500 2025-05-29 13:23:15 +03:00
0834fe0653 Implemented drive discs (equip, unequip, equip all, generate some on first login) 2025-05-29 01:05:25 +02:00
b0f0aa0292 Implement scripted GM command execution on first login and remove first_login.toml 2025-05-28 22:13:19 +03:00
dfe96f7a85 Implement BusinessCard and PlayerAccessory (new player outfits) 2025-05-28 18:14:32 +02:00
b839a1e6ba fix trigger/finish newbie group (fixes quest progression) 2025-05-28 17:22:05 +03:00
a9a7df4647 Implement persistent settings in SwitchData and handle SavePlayerSystemSettingCsReq 2025-05-28 01:24:21 +03:00
dfe530c49a Implemented 2d map 2025-05-27 21:40:08 +02:00
0a9582fc29 Implemented teleports and 3d map 2025-05-27 17:04:35 +02:00
1753612e98 CNBetaWin2.0.5 support 2025-05-26 17:03:33 +02:00
0073265212 restructure game-server modules 2025-05-26 00:56:12 +03:00
09e37f3b05 game-server: decouple player models and logic 2025-05-26 00:36:52 +03:00
e7574c88cf RunEventGraph: don't send error retcode if event is not running, don't save OnInteract event graphs to scene snapshot 2025-05-25 20:09:26 +03:00
2c1d19221a Added support for new Sheer/Adrenaline related properties 2025-05-25 18:27:33 +02:00
0f91278679 Merge branch 'master' of https://git.xeondev.com/vivian-rs/vivian-rs into 2.0_beta 2025-05-24 15:57:45 +02:00
2da6b3cda8 Added CNBeta2.0.4 usm_enc_keys 2025-05-24 12:56:03 +02:00
7a45e2d5c8 CNBeta2.0.4 support 2025-05-24 01:47:19 +02:00
717 changed files with 12871 additions and 4092 deletions

337
Cargo.lock generated
View file

@ -107,6 +107,31 @@ dependencies = [
"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]]
name = "backtrace"
version = "0.3.74"
@ -221,8 +246,8 @@ dependencies = [
"serde",
"serde_json5",
"thiserror",
"vivian-codegen",
"xxhash-rust",
"yixuan-codegen",
]
[[package]]
@ -958,6 +983,7 @@ version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
dependencies = [
"cc",
"pkg-config",
"vcpkg",
]
@ -1672,6 +1698,19 @@ dependencies = [
"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]]
name = "serde_json"
version = "1.0.140"
@ -2474,139 +2513,6 @@ version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "vsimd"
version = "0.8.0"
@ -2859,6 +2765,169 @@ version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "yoke"
version = "0.7.5"

View file

@ -9,8 +9,9 @@ version = "0.0.1"
tokio = { version = "1.44.2", features = ["full"] }
tokio-util = "0.7.15"
axum = "0.8.3"
axum-extra = { version = "0.10.1", features = ["query"] }
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"
thiserror = "2.0"
@ -50,8 +51,9 @@ quote = "1.0"
common = { path = "lib/common" }
config = { path = "lib/config" }
vivian-codegen = { path = "lib/codegen" }
vivian-proto = { path = "lib/proto" }
vivian-logic = { path = "lib/logic" }
vivian-encryption = { path = "lib/encryption" }
vivian-service = { path = "lib/service" }
yixuan-codegen = { path = "lib/codegen" }
yixuan-proto = { path = "lib/proto" }
yixuan-logic = { path = "lib/logic" }
yixuan-models = { path = "lib/models" }
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.
vivian-rs
yixuan-rs
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.

View file

@ -1,16 +1,17 @@
# Vivian-rs
# Yixuan-rs
##### Experimental server emulator for the game Zenless Zone Zero
![title](assets/img/title.png)
## Features
- Microservices Architecture
- Quest System
- VR Training, Notorious Hunt
- Story Commissions in HDD
- "TV Mode" aka Monitor Array
- VR Training
- Gacha (with configurable banner schedule)
- NPC Interactions
- Miscellaneous items (Skins, W-Engines, Wallpapers)
#### NOTE: vivian-rs is currently under active development
- Miscellaneous items (Skins, W-Engines, Drive Discs, Proxy Accessories, Wallpapers)
#### NOTE: yixuan-rs is currently under active development
## Getting started
### Requirements
@ -24,15 +25,16 @@
### Setup
#### a) building from sources
```sh
git clone https://git.xeondev.com/vivian-rs/vivian-rs.git
cd vivian-rs
cargo run --bin vivian-dispatch-server
cargo run --bin vivian-gate-server
cargo run --bin vivian-dbgate-server
cargo run --bin vivian-game-server
git clone https://git.xeondev.com/yixuan-rs/yixuan-rs.git
cd yixuan-rs
cargo run --bin yixuan-dispatch-server
cargo run --bin yixuan-gate-server
cargo run --bin yixuan-dbgate-server
cargo run --bin yixuan-game-server
cargo run --bin yixuan-muip-server
```
#### 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)`.
### 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`
### 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
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)
### 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