Compare commits

..

No commits in common. "948b7b560d8c5a0927f4467dfc6d860727d78249" and "27cb92568b1494bbc93a6e8b80891a22254b5295" have entirely different histories.

8 changed files with 111 additions and 124 deletions

5
.idea/.gitignore vendored
View file

@ -1,5 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/

View file

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="EMPTY_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/common/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/dispatch/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/gameserver/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/proto/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/sdkserver/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/xtask/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/JadeSR-fork.iml" filepath="$PROJECT_DIR$/.idea/JadeSR-fork.iml" />
</modules>
</component>
</project>

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View file

@ -1,8 +1,7 @@
# JadeSR
(i want to protect this from search indexing please don't mention the animegame or company)
(i want to protect this from search indexing please don't mention the animegame or company
### A Server emulator for the game `Hon Aki: Railway Game`
### except, it's a fork with some more features. Namely...
1) RUNPS.bat (this builds the ps)
### except, it's a fork with some more features
## Installation
@ -14,12 +13,6 @@
#### Building
##### Using xtasks (use this if stupid)
```sh
cargo xtask run
```
##### Manually
```sh
@ -30,6 +23,12 @@ cargo build --bin dispatch
cargo build --bin sdkserver
```
##### Using xtasks (use this if stupid)
```sh
cargo xtask run
```
##### To run it with automatic recompilation when any Rust files are changed
```sh

View file

@ -21,8 +21,8 @@ paste.workspace = true
rbase64.workspace = true
sysinfo.workspace = true
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
tokio-util.workspace = true

View file

@ -1,76 +1,90 @@
use anyhow::Result;
use proto::*;
use super::*;
use crate::game::globals;
use serde_json::json;
use serde_json::Value;
use std::fs;
use crate::{net::PlayerSession, util};
pub async fn on_start_cocoon_stage_cs_req(
session: &PlayerSession,
body: &StartCocoonStageCsReq,
) -> Result<()> {
let player_info = session.player_info();
pub async fn on_get_bag_cs_req(session: &PlayerSession, _: &GetBagCsReq) -> Result<()> {
let json_data = fs::read_to_string("PATH HERE").expect("Failed to read inventory.json");
let json_value: Value = serde_json::from_str(&json_data).expect("Failed to parse JSON data");
let rsp = StartCocoonStageScRsp {
retcode: 0,
prop_entity_id: body.prop_entity_id,
cocoon_id: body.cocoon_id,
wave: body.wave,
battle_info: Some(SceneBattleInfo {
stage_id: 201012311,
logic_random_seed: 4444,
battle_id: 1,
battle_avatar_list: player_info
.lineup
.avatar_list
.iter()
.map(|avatar| BattleAvatar {
index: avatar.slot,
id: avatar.id,
level: 80,
promotion: 6,
rank: 6,
hp: 10000,
avatar_type: 3,
sp: Some(AmountInfo {
cur_amount: 10000,
max_amount: 10000,
}),
..Default::default()
})
.collect(),
monster_wave_list: globals
.monster_wave_list
.iter()
.map(|monster_list| SceneMonsterWave {
monster_list: monster_list
.iter()
.map(|id| SceneMonsterData {
monster_id: *id,
..Default::default()
})
.collect(),
..Default::default()
})
.collect(),
..Default::default()
}),
};
// Extract ranks
let r1: u32 = json_value[0]["rank"].as_i64().expect("Failed to get rank for Equipment1") as u32;
let r2: u32 = json_value[1]["rank"].as_i64().expect("Failed to get rank for Equipment2") as u32;
let t1: u32 = json_value[0]["tid"].as_i64().expect("Failed") as u32;
let t2: u32 = json_value[1]["tid"].as_i64().expect("Failed") as u32;
let l1: u32 = json_value[0]["level"].as_i64().expect("Failed") as u32;
let l2: u32 = json_value[0]["level"].as_i64().expect("Failed") as u32;
//let e_rank3: u32 = json_value[2]["rank"].as_i64().expect("Failed to get rank for Equipment3") as u32;
session.send(CMD_START_COCOON_STAGE_SC_RSP, rsp).await
}
pub async fn on_get_cur_battle_info_cs_req(
session: &PlayerSession,
_body: &GetCurBattleInfoCsReq,
) -> Result<()> {
session
.send(
CMD_GET_BAG_SC_RSP,
GetBagScRsp {
kkdobdmaipc: vec![],
fllcfpejibd: vec![],
lgjeabihdpn: vec![],
retcode: 0,
equipment_list: vec![
Equipment {tid: t1, rank: r1, exp: 0, unique_id: 57, promotion: 6, level: l1, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: t2, rank: r2, exp: 0, unique_id: 58, promotion: 6, level: l2, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 59, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 60, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 61, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 62, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 63, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 64, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 65, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 66, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 1, exp: 0, unique_id: 67, promotion: 0, level: 1, base_avatar_id: 0, is_protected: true, ..Default::default()},
//Equipment {tid: 1, rank: 1, exp: 0, unique_id: 59, promotion: 6, level: 1, base_avatar_id: 0, is_protected: true, ..Default::default()}
],
mbedbdbmekj: 0,
relic_list: vec![
Relic {
unique_id: 1488,
base_avatar_id: 1315, // avatar id
tid: 61202,
level: 15, is_protected: true,
main_affix_id: 1,
sub_affix_list: vec![ RelicAffix { affix_id: 7, cnt: 830, step: 20 }], ..Default::default() }
],
odeefdlejgg: vec![],
niemagjlpdl: vec![],
gddpphikjae: vec![],
macfjibhfad: vec![],
clkjaanbfpp: vec![ 101 ],
// .iter()
// .map(|id| {
// // {
// // tid: *id,
// // num: 500
// // }
// })
// .collect(),
biahmcppikj: vec![],
}
CMD_GET_CUR_BATTLE_INFO_SC_RSP,
GetCurBattleInfoScRsp {
battle_info: Some(SceneBattleInfo::default()),
ffbpkghgmjm: Some(Fjojkdhlonn::default()),
..Default::default()
},
)
.await
}
// let rsp = GetBagScRsp {
//
// }
pub async fn on_pve_battle_result_cs_req(
session: &PlayerSession,
body: &PveBattleResultCsReq,
) -> Result<()> {
session
.send(
CMD_P_V_E_BATTLE_RESULT_SC_RSP,
PveBattleResultScRsp {
retcode: 0,
end_status: body.end_status,
battle_id: body.battle_id,
..Default::default()
},
)
.await
}

View file

@ -9,16 +9,25 @@ use std::fs;
use crate::{net::PlayerSession, util};
pub async fn on_get_bag_cs_req(session: &PlayerSession, _: &GetBagCsReq) -> Result<()> {
let json_data = fs::read_to_string("PATH HERE").expect("Failed to read inventory.json");
let json_data = fs::read_to_string("C:/Users/Al-Shebli/Downloads/HSR 2.3 beta/JadeSR-masters/jadesr/gameserver/src/net/handlers/inventory.json").expect("Failed to read inventory.json");
let json_value: Value = serde_json::from_str(&json_data).expect("Failed to parse JSON data");
// Extract ranks
let r1: u32 = json_value[0]["rank"].as_i64().expect("Failed to get rank for Equipment1") as u32;
let r2: u32 = json_value[1]["rank"].as_i64().expect("Failed to get rank for Equipment2") as u32;
let r3: u32 = json_value[2]["rank"].as_i64().expect("Failed to get rank for Equipment2") as u32;
let t1: u32 = json_value[0]["tid"].as_i64().expect("Failed") as u32;
let t2: u32 = json_value[1]["tid"].as_i64().expect("Failed") as u32;
let t3: u32 = json_value[2]["tid"].as_i64().expect("Failed") as u32;
let l1: u32 = json_value[0]["level"].as_i64().expect("Failed") as u32;
let l2: u32 = json_value[0]["level"].as_i64().expect("Failed") as u32;
let l2: u32 = json_value[1]["level"].as_i64().expect("Failed") as u32;
let l3: u32 = json_value[2]["level"].as_i64().expect("Failed") as u32;
let ip1: u32 = json_value[0]["is_protected"].as_i64().expect("Failed") as u32;
let ip2: u32 = json_value[1]["is_protected"].as_i64().expect("Failed") as u32;
let ip3: u32 = json_value[2]["is_protected"].as_i64().expect("Failed") as u32;
let p1: u32 = json_value[0]["promotion"].as_i64().expect("Failed") as u32;
let p2: u32 = json_value[1]["promotion"].as_i64().expect("Failed") as u32;
let p3: u32 = json_value[2]["promotion"].as_i64().expect("Failed") as u32;
//let e_rank3: u32 = json_value[2]["rank"].as_i64().expect("Failed to get rank for Equipment3") as u32;
session
.send(
@ -29,9 +38,9 @@ pub async fn on_get_bag_cs_req(session: &PlayerSession, _: &GetBagCsReq) -> Resu
lgjeabihdpn: vec![],
retcode: 0,
equipment_list: vec![
Equipment {tid: t1, rank: r1, exp: 0, unique_id: 57, promotion: 6, level: l1, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: t2, rank: r2, exp: 0, unique_id: 58, promotion: 6, level: l2, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 59, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: t1, rank: r1, exp: 0, unique_id: 57, promotion: p1, level: l1, base_avatar_id: 0, is_protected: ip1, ..Default::default()},
Equipment {tid: t2, rank: r2, exp: 0, unique_id: 58, promotion: p2, level: l2, base_avatar_id: 0, is_protected: ip2, ..Default::default()},
Equipment {tid: t3, rank: r3, exp: 0, unique_id: 59, promotion: p3, level: l3, base_avatar_id: 0, is_protected: ip3, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 60, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 61, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
Equipment {tid: 23024, rank: 5, exp: 0, unique_id: 62, promotion: 6, level: 80, base_avatar_id: 0, is_protected: true, ..Default::default()},
@ -57,14 +66,14 @@ pub async fn on_get_bag_cs_req(session: &PlayerSession, _: &GetBagCsReq) -> Resu
gddpphikjae: vec![],
macfjibhfad: vec![],
clkjaanbfpp: vec![ 101 ],
// .iter()
// .map(|id| {
// // {
// // tid: *id,
// // num: 500
// // }
// })
// .collect(),
// .iter()
// .map(|id| {
// // {
// // tid: *id,
// // num: 500
// // }
// })
// .collect(),
biahmcppikj: vec![],
}
)