This commit is contained in:
amizing25 2024-05-10 22:15:58 +07:00
parent 1e0cfa6f12
commit 5ae73b4d8c
19 changed files with 36919 additions and 26049 deletions

View File

@ -1,17 +1,19 @@
# Supported Version: 2.1.51, 2.1.52, 2.1.53, 2.1.54, 2.1.55 # Supported Version: 2.2.51
Run the game by clicking run.bat file. Run the game by clicking run.bat file.
Tool website: [https://freesr-tools.pages.dev](https://freesr-tools.pages.dev) Tool website: [https://freesr-tools.pages.dev](https://freesr-tools.pages.dev)
Start battle by entering any calyx in the map, DON'T ATTACK THE ENEMIES, IT WON'T WORK (maybe) Start battle by entering any calyx in the map, DON'T ATTACK THE ENEMIES, IT WON'T WORK (maybe)
Some scenes might not loaded properly. If you stuck at loading screen, remove persistent file. Some scenes might not loaded properly. If you stuck at loading screen, remove `persistent` file.
# RobinSR # RobinSR
Original: [https://git.xeondev.com/reversedrooms/RobinSR/](https://git.xeondev.com/reversedrooms/RobinSR/) Original:
[https://git.xeondev.com/reversedrooms/RobinSR](https://git.xeondev.com/reversedrooms/RobinSR)
[https://git.xeondev.com/reversedrooms/JadeSR](https://git.xeondev.com/reversedrooms/JadeSR)
A Server emulator for the game [`Honkai: Star Rail`](https://hsr.hoyoverse.com/en-us/) A Server emulator for the game [`Honkai: Star Rail`](https://hsr.hoyoverse.com/en-us/)
![screenshot](https://git.xeondev.com/reversedrooms/RobinSR/raw/branch/master/screenshot.png) ![screenshot](https://raw.githubusercontent.com/amizing25/robinsr/main/screenshot.png)
## Installation ## Installation
@ -65,19 +67,5 @@ run the following in a terminal:
``` ```
## Connecting ## Connecting
[Get 2.2 beta client](https://bhrpg-prod.oss-accelerate.aliyuncs.com/client/beta/20240322124944_scfGE0xJXlWtoJ1r/StarRail_2.1.51.zip), [Get 2.2 beta client](https://bhrpg-prod.oss-accelerate.aliyuncs.com/client/beta/20240322124944_scfGE0xJXlWtoJ1r/StarRail_2.1.51.zip)
replace [mhypbase.dll](https://git.xeondev.com/reversedrooms/RobinSR/raw/branch/master/mhypbase.dll) file in your game folder, it will redirect game traffic (and also disable in-game censorship) Replace [mhypbase.dll](https://git.xeondev.com/reversedrooms/RobinSR/raw/branch/master/mhypbase.dll) file in your game folder, it will redirect game traffic (and also disable in-game censorship)
## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss
what you would like to change, and why.
## Bug Reports
If you find a bug, please open an issue with as much detail as possible. If you
can, please include steps to reproduce the bug.
Bad issues such as "This doesn't work" will be closed immediately, be _sure_ to
provide exact detailed steps to reproduce your bug. If it's hard to reproduce, try
to explain it and write a reproducer as best as you can.

File diff suppressed because it is too large Load Diff

View File

@ -2,11 +2,11 @@ use crate::net::tools::JsonData;
use super::*; use super::*;
static UNLOCKED_AVATARS: [u32; 54] = [ static UNLOCKED_AVATARS: [u32; 56] = [
8001, 8002, 8003, 8004, 8005, 8006, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101, 8001, 8002, 8003, 8004, 8005, 8006, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101,
1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1201, 1202, 1203, 1204, 1205, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1201, 1202, 1203, 1204, 1205,
1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1301, 1302, 1303, 1304, 1305, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1301, 1302, 1303, 1304, 1305,
1306, 1307, 1308, 1309, 1312, 1315, 1306, 1307, 1308, 1309, 1312, 1315, 1310, 1314,
]; ];
pub async fn on_get_avatar_data_cs_req( pub async fn on_get_avatar_data_cs_req(

View File

@ -13,8 +13,9 @@ pub async fn on_start_cocoon_stage_cs_req(
let mut battle_info = SceneBattleInfo { let mut battle_info = SceneBattleInfo {
stage_id: player.battle_config.stage_id, stage_id: player.battle_config.stage_id,
logic_random_seed: rand::thread_rng().gen::<u32>(), logic_random_seed: rand::thread_rng().gen::<u32>(),
// battle_id: 1, battle_id: 1,
kimmjioaodn: player.battle_config.cycle_count, // cleheggdkal: player.battle_config.cycle_count, // wave
ohfkoaahoib: player.battle_config.cycle_count, // wave
..Default::default() ..Default::default()
}; };
@ -91,21 +92,21 @@ pub async fn on_start_cocoon_stage_cs_req(
// pf score object // pf score object
if player.battle_config.battle_type == BattleType::PF { if player.battle_config.battle_type == BattleType::PF {
let mut battle_target = Hbinjjdphdo::default(); let mut battle_target = Cnngaoldopi::default();
battle_target.bgnpebhgelb.push(BattleTarget { battle_target.fdfcmhbhnmc.push(BattleTarget {
id: 10001, id: 10001,
progress: 0, progress: 0,
..Default::default() ..Default::default()
}); });
battle_info.ichnbmifjdi.insert(1, battle_target); battle_info.jelkfckaonl.insert(1, battle_target);
for i in 2..=4 { for i in 2..=4 {
battle_info.ichnbmifjdi.insert(i, Hbinjjdphdo::default()); battle_info.jelkfckaonl.insert(i, Cnngaoldopi::default());
} }
battle_info.ichnbmifjdi.insert( battle_info.jelkfckaonl.insert(
5, 5,
Hbinjjdphdo { Cnngaoldopi {
bgnpebhgelb: vec![ fdfcmhbhnmc: vec![
BattleTarget { BattleTarget {
id: 2001, id: 2001,
progress: 0, progress: 0,
@ -121,11 +122,21 @@ pub async fn on_start_cocoon_stage_cs_req(
); );
} }
// Apocalyptic Shadow
if player.battle_config.battle_type == BattleType::AS {
let mut battle_target = Cnngaoldopi::default();
battle_target.fdfcmhbhnmc.push(BattleTarget {
id: 10002,
progress: 0,
..Default::default()
});
}
// SU // SU
if player.battle_config.battle_type == BattleType::SU { if player.battle_config.battle_type == BattleType::SU {
battle_info.mpobegkcikn.push(Npjnkmmjfdf { battle_info.ldkhpbclcbd.push(Mnnlfkgifmc {
chgdaadjepi: player.battle_config.path_resonance_id, ejilnblflii: player.battle_config.path_resonance_id,
status: Some(Agpocmnmmdi { status: Some(Fmaobdmmcjb {
sp: Some(AmountInfo { sp: Some(AmountInfo {
cur_amount: 10_000, cur_amount: 10_000,
max_amount: 10_000, max_amount: 10_000,
@ -167,14 +178,18 @@ pub async fn on_pve_battle_result_cs_req(
} }
// scene cast skill cs req // scene cast skill cs req
pub async fn on_mpemgbdkigg(session: &mut PlayerSession, request: &Mpemgbdkigg) -> Result<()> { pub async fn on_scene_cast_skill_cs_req(
session: &mut PlayerSession,
request: &SceneCastSkillCsReq,
) -> Result<()> {
let player = tools::JsonData::load().await; let player = tools::JsonData::load().await;
let mut battle_info = SceneBattleInfo { let mut battle_info = SceneBattleInfo {
stage_id: player.battle_config.stage_id, stage_id: player.battle_config.stage_id,
logic_random_seed: rand::thread_rng().gen::<u32>(), logic_random_seed: rand::thread_rng().gen::<u32>(),
// battle_id: 1, battle_id: 1,
kimmjioaodn: player.battle_config.cycle_count, // cleheggdkal: player.battle_config.cycle_count, // wave
ohfkoaahoib: player.battle_config.cycle_count, // wave
..Default::default() ..Default::default()
}; };
@ -251,21 +266,21 @@ pub async fn on_mpemgbdkigg(session: &mut PlayerSession, request: &Mpemgbdkigg)
// pf score object // pf score object
if player.battle_config.battle_type == BattleType::PF { if player.battle_config.battle_type == BattleType::PF {
let mut battle_target = Hbinjjdphdo::default(); let mut battle_target = Cnngaoldopi::default();
battle_target.bgnpebhgelb.push(BattleTarget { battle_target.fdfcmhbhnmc.push(BattleTarget {
id: 10001, id: 10001,
progress: 0, progress: 0,
..Default::default() ..Default::default()
}); });
battle_info.ichnbmifjdi.insert(1, battle_target); battle_info.jelkfckaonl.insert(1, battle_target);
for i in 2..=4 { for i in 2..=4 {
battle_info.ichnbmifjdi.insert(i, Hbinjjdphdo::default()); battle_info.jelkfckaonl.insert(i, Cnngaoldopi::default());
} }
battle_info.ichnbmifjdi.insert( battle_info.jelkfckaonl.insert(
5, 5,
Hbinjjdphdo { Cnngaoldopi {
bgnpebhgelb: vec![ fdfcmhbhnmc: vec![
BattleTarget { BattleTarget {
id: 2001, id: 2001,
progress: 0, progress: 0,
@ -281,11 +296,21 @@ pub async fn on_mpemgbdkigg(session: &mut PlayerSession, request: &Mpemgbdkigg)
); );
} }
// Apocalyptic Shadow
if player.battle_config.battle_type == BattleType::AS {
let mut battle_target = Cnngaoldopi::default();
battle_target.fdfcmhbhnmc.push(BattleTarget {
id: 10002,
progress: 0,
..Default::default()
});
}
// SU // SU
if player.battle_config.battle_type == BattleType::SU { if player.battle_config.battle_type == BattleType::SU {
battle_info.mpobegkcikn.push(Npjnkmmjfdf { battle_info.ldkhpbclcbd.push(Mnnlfkgifmc {
chgdaadjepi: player.battle_config.path_resonance_id, ejilnblflii: player.battle_config.path_resonance_id,
status: Some(Agpocmnmmdi { status: Some(Fmaobdmmcjb {
sp: Some(AmountInfo { sp: Some(AmountInfo {
cur_amount: 10_000, cur_amount: 10_000,
max_amount: 10_000, max_amount: 10_000,
@ -298,15 +323,15 @@ pub async fn on_mpemgbdkigg(session: &mut PlayerSession, request: &Mpemgbdkigg)
// monsters // monsters
battle_info.monster_wave_list = Monster::to_scene_monster_waves(&player.battle_config.monsters); battle_info.monster_wave_list = Monster::to_scene_monster_waves(&player.battle_config.monsters);
let mut resp = Ifiohnjlehh { let mut resp = SceneCastSkillScRsp {
elgjckaejld: request.elgjckaejld, jkdaceoekll: request.jkdaceoekll,
retcode: 0, retcode: 0,
pbgpinglheg: vec![], diehcelekfj: vec![],
..Default::default() ..Default::default()
}; };
let targets = request let targets = request
.jpieajikioh .igkjjpeealc
.iter() .iter()
.filter(|id| **id > 30_000 || **id < 1_000) .filter(|id| **id > 30_000 || **id < 1_000)
.collect::<Vec<_>>(); .collect::<Vec<_>>();

View File

@ -8,31 +8,31 @@ use crate::{
use super::*; use super::*;
pub async fn on_nhfajfplkep(session: &mut PlayerSession, _: &Nhfajfplkep) -> Result<()> { pub async fn on_jhfffmnkcbf(session: &mut PlayerSession, _: &Jhfffmnkcbf) -> Result<()> {
session session
.send( .send(
CMD_GET_FRIEND_LIST_INFO_SC_RSP, CMD_GET_FRIEND_LIST_INFO_SC_RSP,
Pbfkjlnnnim { Fmonbbgkfpp {
amgpdgdnlgd: vec![Leldmbjfheh { nffnphfnbph: vec![Pbbkojapeaj {
gpgdedmpjla: PlayingState::None.into(), jkmlmffobmi: PlayingState::None.into(),
cfmiklhjmle: Some(Alcoeanikil::default()), eejlmfccjnm: Some(Bhkoekppbaf::default()),
hiljemhhhnk: String::from("RobinSR"), ddnklblgmaa: String::from("RobinSR"),
kmclngophda: Some(Hcdpijbnijp { mkabddponma: Some(Mionicmdpaa {
uid: 727, uid: 727,
mbdjcknimop: 3, platform: 3,
igmaomgegaj: 1, mjbmlkimpnn: 1,
gjlfhjlijon: 201008, dgojjmfnomj: 201008,
jpajpffgnbi: 220005, kpiphlhfiib: 220005,
level: 70, level: 70,
nickname: String::from("Server"), nickname: String::from("Server"),
plmbeaaegak: vec![AssistSimpleInfo { oemkmkkhkde: vec![AssistSimpleInfo {
avatar_id: 1008, avatar_id: 1008,
level: 70, level: 70,
..Default::default() ..Default::default()
}], }],
..Default::default() ..Default::default()
}), }),
gjdiplfecfa: true, niekopdjolm: true,
}], }],
..Default::default() ..Default::default()
}, },
@ -40,20 +40,36 @@ pub async fn on_nhfajfplkep(session: &mut PlayerSession, _: &Nhfajfplkep) -> Res
.await .await
} }
pub async fn on_komknbijgpi(session: &mut PlayerSession, _: &Komknbijgpi) -> Result<()> { pub async fn on_pignjacjgdl(session: &mut PlayerSession, _: &Pignjacjgdl) -> Result<()> {
session session
.send( .send(
CMD_GET_PRIVATE_CHAT_HISTORY_SC_RSP, CMD_GET_PRIVATE_CHAT_HISTORY_SC_RSP,
Ooibcglpnac { Hachagdjilp {
pgofeopnpbm: vec![Bpifmdladdn { fepangjbmpa: vec![
bdjoneohhpj: MsgType::CustomText.into(), Gnbekokccfc {
phhhfhobhmk: cur_timestamp_ms(), mgmicgabebd: MsgType::CustomText.into(),
fbelgjfhbkh: ":motorized_wheelchair:".to_string(), hkkkjdbgiao: cur_timestamp_ms(),
nokipdbhglc: 727, anjfbjikchf: "'sync'".to_string(),
..Default::default() befmkobhohp: 727,
}], ..Default::default()
fjbkleaflam: 727, },
oligkfnjkma: 1337, Gnbekokccfc {
mgmicgabebd: MsgType::CustomText.into(),
hkkkjdbgiao: cur_timestamp_ms(),
anjfbjikchf: "'mc {mc_id}' mc_id can be set from 8001 to 8006".to_string(),
befmkobhohp: 727,
..Default::default()
},
Gnbekokccfc {
mgmicgabebd: MsgType::CustomText.into(),
hkkkjdbgiao: cur_timestamp_ms(),
anjfbjikchf: "available command:".to_string(),
befmkobhohp: 727,
..Default::default()
},
],
cibgdjekbja: 727, // from
ienomggikon: 1337, // to
..Default::default() ..Default::default()
}, },
) )
@ -61,22 +77,24 @@ pub async fn on_komknbijgpi(session: &mut PlayerSession, _: &Komknbijgpi) -> Res
} }
// RecvMsgCsReq // RecvMsgCsReq
pub async fn on_bgfjcbbfiek(session: &mut PlayerSession, body: &Bgfjcbbfiek) -> Result<()> { pub async fn on_dgaiigecbee(session: &mut PlayerSession, body: &Dgaiigecbee) -> Result<()> {
let mut json = JsonData::load().await; let mut json = JsonData::load().await;
if let Some((cmd, args)) = parse_command(&body.moiplammfad) {
if let Some((cmd, args)) = parse_command(&body.ajlhdpcjand) {
match cmd { match cmd {
"sync" => { "sync" => {
sync_player(session, json).await?; sync_player(session, json).await?;
session session
.send( .send(
CMD_REVC_MSG_SC_NOTIFY, CMD_REVC_MSG_SC_NOTIFY,
Kifdjbodlcc { Klonpheafip {
pofomobijdg: body.pofomobijdg, ggadmjhlomj: body.ggadmjhlomj.clone(),
kjdhmhgjdmc: body.kjdhmhgjdmc, kokadficdfb: body.kokadficdfb,
moiplammfad: String::from("Inventory Synced"), ajlhdpcjand: String::from("Inventory Synced"),
bdjoneohhpj: body.bdjoneohhpj, mgmicgabebd: body.mgmicgabebd,
aljhmlmnmhp: 727, ghojifhngmc: 727, // from
djefnoaonkc: 1337, cmmildghfnl: 1337, // to
nmfepfoojic: body.nmfepfoojic,
}, },
) )
.await?; .await?;
@ -113,13 +131,14 @@ pub async fn on_bgfjcbbfiek(session: &mut PlayerSession, body: &Bgfjcbbfiek) ->
session session
.send( .send(
CMD_REVC_MSG_SC_NOTIFY, CMD_REVC_MSG_SC_NOTIFY,
Kifdjbodlcc { Klonpheafip {
pofomobijdg: body.pofomobijdg, ggadmjhlomj: body.ggadmjhlomj.clone(),
kjdhmhgjdmc: body.kjdhmhgjdmc, kokadficdfb: body.kokadficdfb,
moiplammfad: format!("Set MC to: {mc:#?}"), ajlhdpcjand: format!("Set MC to: {mc:#?}"),
bdjoneohhpj: body.bdjoneohhpj, mgmicgabebd: body.mgmicgabebd,
aljhmlmnmhp: 727, ghojifhngmc: 727,
djefnoaonkc: 1337, cmmildghfnl: 1337,
nmfepfoojic: body.nmfepfoojic,
}, },
) )
.await?; .await?;
@ -131,7 +150,7 @@ pub async fn on_bgfjcbbfiek(session: &mut PlayerSession, body: &Bgfjcbbfiek) ->
session session
.send( .send(
CMD_SEND_MSG_SC_RSP, CMD_SEND_MSG_SC_RSP,
Jhickbdnnii { Ckcjblcacof {
retcode: 0, retcode: 0,
end_time: 0, end_time: 0,
}, },
@ -153,9 +172,9 @@ async fn sync_player(session: &mut PlayerSession, json: JsonData) -> Result<()>
session session
.send( .send(
CMD_PLAYER_SYNC_SC_NOTIFY, CMD_PLAYER_SYNC_SC_NOTIFY,
Eckkajafean { Pkbehgpoein {
lminpcphbfp: (2000..3500).collect(), ipnkigfoikl: (2000..3500).collect(),
oglioehgbal: (1..2000).collect(), idgakomjiio: (1..2000).collect(),
..Default::default() ..Default::default()
}, },
) )
@ -164,8 +183,8 @@ async fn sync_player(session: &mut PlayerSession, json: JsonData) -> Result<()>
session session
.send( .send(
CMD_PLAYER_SYNC_SC_NOTIFY, CMD_PLAYER_SYNC_SC_NOTIFY,
Eckkajafean { Pkbehgpoein {
fihplpphfme: Some(Abcekhjbnmp { enfnppagfpp: Some(Gkjoiapbbne {
avatar_list: json avatar_list: json
.avatars .avatars
.values() .values()
@ -180,7 +199,7 @@ async fn sync_player(session: &mut PlayerSession, json: JsonData) -> Result<()>
session session
.send( .send(
CMD_PLAYER_SYNC_SC_NOTIFY, CMD_PLAYER_SYNC_SC_NOTIFY,
Eckkajafean { Pkbehgpoein {
relic_list: json.relics.iter().map(|v| v.to_relic_proto()).collect(), relic_list: json.relics.iter().map(|v| v.to_relic_proto()).collect(),
equipment_list: json equipment_list: json
.lightcones .lightcones
@ -195,8 +214,8 @@ async fn sync_player(session: &mut PlayerSession, json: JsonData) -> Result<()>
session session
.send( .send(
CMD_PLAYER_SYNC_SC_NOTIFY, CMD_PLAYER_SYNC_SC_NOTIFY,
Eckkajafean { Pkbehgpoein {
fihplpphfme: Some(Abcekhjbnmp { enfnppagfpp: Some(Gkjoiapbbne {
avatar_list: json avatar_list: json
.avatars .avatars
.values() .values()

View File

@ -32,35 +32,41 @@ pub async fn on_get_archive_data_cs_req(
.send( .send(
CMD_GET_ARCHIVE_DATA_SC_RSP, CMD_GET_ARCHIVE_DATA_SC_RSP,
GetArchiveDataScRsp { GetArchiveDataScRsp {
archive_data: Some(ArchiveData::default()), bkcflgbcjmi: Some(ArchiveData::default()),
retcode: 0, retcode: 0,
}, },
) )
.await .await
} }
pub async fn on_oakankcfbec(session: &mut PlayerSession, _: &Oakankcfbec) -> Result<()> { pub async fn on_gfmigicacfn(session: &mut PlayerSession, _: &Gfmigicacfn) -> Result<()> {
// ? // ?
session session
.send(CMD_DRESS_RELIC_AVATAR_SC_RSP, Dummy::default()) .send(CMD_DRESS_RELIC_AVATAR_SC_RSP, Dummy::default())
.await .await
} }
pub async fn on_cnpajjnhfpa(session: &mut PlayerSession, _: &Cnpajjnhfpa) -> Result<()> { pub async fn on_nbmofdgfejk(session: &mut PlayerSession, _: &Nbmofdgfejk) -> Result<()> {
// ? // ?
session session
.send(CMD_TAKE_OFF_RELIC_SC_RSP, Dummy::default()) .send(CMD_TAKE_OFF_RELIC_SC_RSP, Dummy::default())
.await .await
} }
pub async fn on_copkgioejac(session: &mut PlayerSession, _: &Copkgioejac) -> Result<()> { pub async fn on_dress_avatar_cs_req(
session: &mut PlayerSession,
_: &DressAvatarCsReq,
) -> Result<()> {
// ? // ?
session session
.send(CMD_DRESS_AVATAR_SC_RSP, Dummy::default()) .send(CMD_DRESS_AVATAR_SC_RSP, Dummy::default())
.await .await
} }
pub async fn on_aafgmacgenl(session: &mut PlayerSession, _: &Aafgmacgenl) -> Result<()> { pub async fn on_take_off_equipment_cs_req(
session: &mut PlayerSession,
_: &TakeOffEquipmentCsReq,
) -> Result<()> {
// ? // ?
session session
.send(CMD_TAKE_OFF_EQUIPMENT_SC_RSP, Dummy::default()) .send(CMD_TAKE_OFF_EQUIPMENT_SC_RSP, Dummy::default())

View File

@ -10,8 +10,8 @@ pub async fn on_get_all_lineup_data_cs_req(
let lineup = LineupInfo { let lineup = LineupInfo {
extra_lineup_type: ExtraLineupType::LineupNone.into(), extra_lineup_type: ExtraLineupType::LineupNone.into(),
name: "Squad 1".to_string(), name: "Squad 1".to_string(),
njjbfegnhjc: 5, mp: 5,
bpkggopoppf: 5, mp_max: 5,
avatar_list: AvatarJson::to_lineup_avatars(&player), avatar_list: AvatarJson::to_lineup_avatars(&player),
..Default::default() ..Default::default()
}; };
@ -35,8 +35,8 @@ pub async fn on_get_cur_lineup_data_cs_req(
let mut lineup = LineupInfo { let mut lineup = LineupInfo {
extra_lineup_type: ExtraLineupType::LineupNone.into(), extra_lineup_type: ExtraLineupType::LineupNone.into(),
name: "Squad 1".to_string(), name: "Squad 1".to_string(),
njjbfegnhjc: 5, mp: 5,
bpkggopoppf: 5, mp_max: 5,
..Default::default() ..Default::default()
}; };
@ -112,7 +112,7 @@ pub async fn on_replace_lineup_cs_req(
let lineups = &mut player.lineups; let lineups = &mut player.lineups;
for (slot, avatar_id) in &mut *lineups { for (slot, avatar_id) in &mut *lineups {
if let Some(lineup) = req.jkifflmenfn.get(*slot as usize) { if let Some(lineup) = req.replace_slot_list.get(*slot as usize) {
*avatar_id = if lineup.id > 8000 { *avatar_id = if lineup.id > 8000 {
player.main_character as u32 player.main_character as u32
} else { } else {
@ -150,25 +150,25 @@ async fn refresh_lineup(sess: &mut PlayerSession, player: &JsonData) -> Result<(
extra_lineup_type: ExtraLineupType::LineupNone.into(), extra_lineup_type: ExtraLineupType::LineupNone.into(),
name: "Squad 1".to_string(), name: "Squad 1".to_string(),
avatar_list: AvatarJson::to_lineup_avatars(player), avatar_list: AvatarJson::to_lineup_avatars(player),
njjbfegnhjc: 5, mp_max: 5,
bpkggopoppf: 5, mp: 5,
..Default::default() ..Default::default()
}; };
sess.send( sess.send(
CMD_SCENE_GROUP_REFRESH_SC_NOTIFY, CMD_SCENE_GROUP_REFRESH_SC_NOTIFY,
Ljihfeagpcl { Kecnjlcjefm {
kpfomkdmoce: vec![Jnofbbanolk { kpjckjjpjhj: vec![Makfkmagkli {
group_id: 0, group_id: 0,
state: 0, state: 0,
kppckepfpce: 0, kcbpdfengaa: 0,
fiiciciambe: player hdaiklkffjh: player
.lineups .lineups
.iter() .iter()
.map(|(idx, v)| Gffbkjofnad { .map(|(idx, v)| Kbikoelgpde {
fimallpbobk: 0, kjjeiknincl: 0,
mggfjbdchjh: 0, cojmgafmcjm: 0,
glalelmdamm: Some(SceneEntityInfo { gonncekbppg: Some(SceneEntityInfo {
actor: Some(SceneActorInfo { actor: Some(SceneActorInfo {
avatar_type: AvatarType::AvatarFormalType.into(), avatar_type: AvatarType::AvatarFormalType.into(),
base_avatar_id: *v, base_avatar_id: *v,

View File

@ -141,20 +141,20 @@ pub async fn on_get_mission_status_cs_req(
retcode: 0, retcode: 0,
finished_main_mission_id_list: FINISHED_MAIN_MISSIONS.to_vec(), finished_main_mission_id_list: FINISHED_MAIN_MISSIONS.to_vec(),
sub_mission_status_list: body sub_mission_status_list: body
.main_mission_id_list .sub_mission_id_list
.iter() .iter()
.map(|id| Mission { .map(|id| Mission {
id: *id, id: *id,
progress: 0, progress: 1,
status: MissionStatus::MissionFinish.into(), status: MissionStatus::MissionFinish.into(),
}) })
.collect(), .collect(),
mission_event_status_list: body mission_event_status_list: body
.mission_event_id_list .main_mission_id_list
.iter() .iter()
.map(|id| Mission { .map(|id| Mission {
id: *id, id: *id,
progress: 0, progress: 1,
status: MissionStatus::MissionFinish.into(), status: MissionStatus::MissionFinish.into(),
}) })
.collect(), .collect(),

View File

@ -28,15 +28,32 @@ pub use tutorial::*;
pub use inventory::*; pub use inventory::*;
pub use chat::*; pub use chat::*;
#[allow(unused_imports)]
use proto::{ use proto::{
Aaihejacdpk::*, Achkcddkkkj::*, Bancodieeof::*, CmdActivityType::*, CmdBattleType::*, CmdActivityType::*, CmdAdventureType::*, CmdAetherDivideType::*, CmdAlleyType::*,
CmdPlayerType::*, Cmpepmnekko::*, Cpbdjpocnai::*, Ddhbjcelmjp::*, CmdArchiveType::*, CmdAvatarType::*, CmdBattleCollegeType::*, CmdBattlePassType::*,
Eegmjpcijbc::*, Emhbkpkpjpa::*, Fdkapmfjgjl::*, Gaifgoihffa::*, Galijhmhgcg::*, Gdjpnkniijf::*, CmdBattleType::*, CmdBoxingClubType::*, CmdChallengeType::*, CmdChatType::*,
Hfjpennlffa::*, Hmnbojnkleh::*, Ieoildlcdkb::*, Kfmpmaojchm::*, Lopidcokdih::*, Lpegmiilfjm::*, CmdChessRogueType::*, CmdClockParkType::*, CmdContentPackageType::*, CmdDailyActiveType::*,
Mbnnmfkffbo::*, Mkeclbphcol::*, Niinikapdpg::*, Pfokmnnfiap::*, Pjmghcfmmge::*, Pnjfenbhbhg::*, CmdDrinkMakerType::*, CmdEvolveBuildType::*, CmdExpeditionType::*,
Pnnbhogkeeh::*, CmdFantasticStoryActivityType::*, CmdFeverTimeActivityType::*, CmdFightActivityType::*,
CmdFightMathc3Type::*, CmdFightType::*, CmdFriendType::*, CmdGachaType::*, CmdHeartdialType::*,
CmdHeliobusType::*, CmdItemType::*, CmdJukeboxType::*, CmdLineupType::*, CmdLobbyType::*,
CmdMailType::*, CmdMapRotationType::*, CmdMatchThreeModuleType::*, CmdMatchType::*,
CmdMessageType::*, CmdMiscModuleType::*, CmdMissionType::*, CmdMonopolyType::*,
CmdMultiplayerType::*, CmdMultipleDropType::*, CmdMuseumType::*, CmdOfferingType::*,
CmdPamMissionType::*, CmdPhoneType::*, CmdPlayerBoardType::*, CmdPlayerReturnType::*,
CmdPlayerSync::*, CmdPlayerType::*, CmdPlotType::*, CmdPunkLordType::*, CmdQuestType::*,
CmdRaidCollectionType::*, CmdRaidType::*, CmdRedDotType::*, CmdReplayType::*,
CmdRndOptionType::*, CmdRogueCommonType::*, CmdRogueEndless::*, CmdRogueModifierType::*,
CmdRogueTournType::*, CmdRogueType::*, CmdRollShopType::*, CmdSceneType::*,
CmdServerPrefsType::*, CmdShopType::*, CmdSpaceZooType::*, CmdStarFightType::*,
CmdStoryLineType::*, CmdStrongChallengeActivityType::*, CmdTalkRewardType::*,
CmdTelevisionActivityType::*, CmdTextJoinType::*, CmdTrainVisitorType::*,
CmdTravelBrochureType::*, CmdTreasureDungeonType::*, CmdTutorialType::*, CmdWaypointType::*,
CmdWolfBroType::*,
}; };
macro_rules! dummy { macro_rules! dummy {
($($cmd:ident),* $(,)*) => { ($($cmd:ident),* $(,)*) => {
paste! { paste! {
@ -102,7 +119,7 @@ dummy! {
GetCurChallenge, GetCurChallenge,
GetRogueInfo, GetRogueInfo,
GetExpeditionData, GetExpeditionData,
GetRogueDialogueEventData, // GetRogueDialogueEventData,
GetJukeboxData, GetJukeboxData,
SyncClientResVersion, SyncClientResVersion,
DailyFirstMeetPam, DailyFirstMeetPam,

View File

@ -58,7 +58,10 @@ pub async fn on_get_cur_scene_info_cs_req(
} }
// enterscene // enterscene
pub async fn on_lckgkdehclb(session: &mut PlayerSession, request: &Lckgkdehclb) -> Result<()> { pub async fn on_enter_scene_cs_req(
session: &mut PlayerSession,
request: &EnterSceneCsReq,
) -> Result<()> {
let mut player = JsonData::load().await; let mut player = JsonData::load().await;
// send packet first // send packet first
@ -71,7 +74,7 @@ pub async fn on_lckgkdehclb(session: &mut PlayerSession, request: &Lckgkdehclb)
&mut player, &mut player,
request.entry_id, request.entry_id,
true, true,
Some(request.maplanefddc), Some(request.dehbihbbbgo),
) )
.await?; .await?;
@ -79,23 +82,26 @@ pub async fn on_lckgkdehclb(session: &mut PlayerSession, request: &Lckgkdehclb)
} }
// getscenemapinfocsreq // getscenemapinfocsreq
pub async fn on_fkjoeabiioe(sesison: &mut PlayerSession, request: &Fkjoeabiioe) -> Result<()> { pub async fn on_get_scene_map_info_cs_req(
let mut map_infos = Vec::<Fjniajephmj>::new(); sesison: &mut PlayerSession,
request: &GetSceneMapInfoCsReq,
) -> Result<()> {
let mut map_infos = Vec::<SceneMapInfo>::new();
for entry_id in &request.dmkkkfnkofh { for entry_id in &request.entry_id_list {
let mut map_info = Fjniajephmj { let mut map_info = SceneMapInfo {
retcode: 0, retcode: 0,
dcbdhkkkpgd: vec![ chest_info_list: vec![
Gbiimoglajl { ChestInfo {
gommoeicmjg: Kihbdaniehp::MapInfoChestTypeNormal.into(), fmangokfagc: MapInfoChestType::Normal.into(),
..Default::default() ..Default::default()
}, },
Gbiimoglajl { ChestInfo {
gommoeicmjg: Kihbdaniehp::MapInfoChestTypePuzzle.into(), fmangokfagc: MapInfoChestType::Puzzle.into(),
..Default::default() ..Default::default()
}, },
Gbiimoglajl { ChestInfo {
gommoeicmjg: Kihbdaniehp::MapInfoChestTypeChallenge.into(), fmangokfagc: MapInfoChestType::Challenge.into(),
..Default::default() ..Default::default()
}, },
], ],
@ -104,7 +110,7 @@ pub async fn on_fkjoeabiioe(sesison: &mut PlayerSession, request: &Fkjoeabiioe)
}; };
for i in 0..100 { for i in 0..100 {
map_info.phicefeaigb.push(i) map_info.lighten_section_list.push(i)
} }
let group_config = GAME_RESOURCES.map_entrance.get(entry_id).and_then(|v| { let group_config = GAME_RESOURCES.map_entrance.get(entry_id).and_then(|v| {
@ -115,47 +121,43 @@ pub async fn on_fkjoeabiioe(sesison: &mut PlayerSession, request: &Fkjoeabiioe)
if let Some(level) = group_config { if let Some(level) = group_config {
// add teleports // add teleports
for teleport in &level.teleports { for teleport in &level.teleports {
map_info.ojlnmnehgai.push(*teleport.0) map_info.unlock_teleport_list.push(*teleport.0)
} }
for (group_id, group) in &level.group_items { for (group_id, group) in &level.group_items {
map_info.pmolfbcbfpe.push(Gecjjlmabhp { map_info.maze_group_list.push(MazeGroup {
group_id: *group_id, group_id: *group_id,
..Default::default() ..Default::default()
}); });
// prop // prop
for prop in &group.props { for prop in &group.props {
map_info.cgkfbhoadpc.push(Kangcibfhee { map_info.maze_prop_list.push(MazePropState {
group_id: prop.group_id, group_id: prop.group_id,
state: if prop.prop_state_list.contains(&PropState::CheckPointEnable) { state: if prop.prop_state_list.contains(&PropState::CheckPointEnable) {
PropState::CheckPointEnable as u32 PropState::CheckPointEnable as u32
} else { } else {
prop.state.clone() as u32 prop.state.clone() as u32
}, },
ifjocipnpgd: prop.id, config_id: prop.id,
}); });
} }
} }
} }
// Debug
// tokio::fs::write(format!("./text-{}.txt", entry_id), format!("{:#?}", map_info)).await?;
map_infos.push(map_info) map_infos.push(map_info)
} }
sesison sesison
.send( .send(
CMD_GET_SCENE_MAP_INFO_SC_RSP, CMD_GET_SCENE_MAP_INFO_SC_RSP,
Cegeebldbke { GetSceneMapInfoScRsp {
retcode: 0, retcode: 0,
mhefdgcamjl: map_infos, map_info_list: map_infos,
..Default::default() ..Default::default()
}, },
) )
.await?; .await
Ok(())
} }
lazy_static! { lazy_static! {
@ -186,13 +188,13 @@ pub async fn on_scene_entity_move_cs_req(
} }
if let Some(motion) = &entity.motion { if let Some(motion) = &entity.motion {
if let Some(pos) = &motion.aomilajjmii { if let Some(pos) = &motion.pos {
player.position.x = pos.baimdminomk; player.position.x = pos.x;
player.position.y = pos.bemlopmcgch; player.position.y = pos.y;
player.position.z = pos.bagloppgnpb; player.position.z = pos.z;
} }
if let Some(rot) = &motion.eiaoiankefd { if let Some(rot) = &motion.rot {
player.position.rot_y = rot.bemlopmcgch; player.position.rot_y = rot.y;
} }
} }
} }
@ -214,7 +216,7 @@ pub async fn on_get_entered_scene_cs_req(
.filter(|(_, v)| { .filter(|(_, v)| {
!v.finish_main_mission_list.is_empty() || !v.finish_sub_mission_list.is_empty() !v.finish_main_mission_list.is_empty() || !v.finish_sub_mission_list.is_empty()
}) })
.map(|(_, v)| Lpllljogfeh { .map(|(_, v)| Hhglkmjngeg {
floor_id: v.floor_id, floor_id: v.floor_id,
plane_id: v.plane_id, plane_id: v.plane_id,
}) })
@ -223,19 +225,14 @@ pub async fn on_get_entered_scene_cs_req(
session session
.send( .send(
CMD_GET_ENTERED_SCENE_SC_RSP, CMD_GET_ENTERED_SCENE_SC_RSP,
Mkgidalegbd { Fchnfpafjce {
lejonbbgdnn: scenes, npbjclegekf: scenes,
retcode: 0, retcode: 0,
}, },
) )
.await .await
} }
// getunlockteleportcsreq
pub async fn on_kkbapmgmmcb(_session: &mut PlayerSession, _request: &Kkbapmgmmcb) -> Result<()> {
Ok(())
}
async fn load_scene( async fn load_scene(
session: &mut PlayerSession, session: &mut PlayerSession,
json: &mut JsonData, json: &mut JsonData,
@ -278,24 +275,26 @@ async fn load_scene(
floor_id: enterance.floor_id, floor_id: enterance.floor_id,
plane_id: enterance.plane_id, plane_id: enterance.plane_id,
entry_id, entry_id,
game_mode_type: plane.plane_type as u32, pjbjelcgkof: plane.plane_type as u32,
pbfgagecpcd: plane.world_id, nnfgkelcban: 1,
lgflfajffjl: 1,
game_mode_type: 1,
..Default::default() ..Default::default()
}; };
let lineup_info = AvatarJson::to_lineup_info(&json.lineups); let lineup_info = AvatarJson::to_lineup_info(&json.lineups);
let player_pos = MotionInfo { let player_pos = MotionInfo {
// rot // rot
eiaoiankefd: Some(Vector { rot: Some(Vector {
baimdminomk: 0, x: 0,
bemlopmcgch: position.rot_y, y: position.rot_y,
bagloppgnpb: 0, z: 0,
}), }),
// pos // pos
aomilajjmii: Some(Vector { pos: Some(Vector {
baimdminomk: position.x, x: position.x,
bemlopmcgch: position.y, y: position.y,
bagloppgnpb: position.z, z: position.z,
}), }),
}; };
@ -305,7 +304,7 @@ async fn load_scene(
let mut monster_entity_id = 30_000; let mut monster_entity_id = 30_000;
for (group_id, group) in &group_config.group_items { for (group_id, group) in &group_config.group_items {
let mut group_info = Dhkacjhaoid { let mut group_info = SceneGroupInfo {
state: 0, state: 0,
group_id: *group_id, group_id: *group_id,
..Default::default() ..Default::default()
@ -365,7 +364,7 @@ async fn load_scene(
entity_id: npc_entity_id, entity_id: npc_entity_id,
motion: Some(npc_position.to_motion()), motion: Some(npc_position.to_motion()),
npc: Some(SceneNpcInfo { npc: Some(SceneNpcInfo {
egeneneoadj: npc.npcid, npc_id: npc.npcid,
..Default::default() ..Default::default()
}), }),
..Default::default() ..Default::default()
@ -403,11 +402,11 @@ async fn load_scene(
group_info.entity_list.push(info); group_info.entity_list.push(info);
} }
scene_info.chhmmbdhjpg.push(group_info); scene_info.scene_group_list.push(group_info);
} }
// load player entity // load player entity
let mut player_group = Dhkacjhaoid { let mut player_group = SceneGroupInfo {
state: 0, state: 0,
group_id: 0, group_id: 0,
..Default::default() ..Default::default()
@ -418,16 +417,16 @@ async fn load_scene(
entity_id: (*slot) + 1, entity_id: (*slot) + 1,
motion: Some(MotionInfo { motion: Some(MotionInfo {
// pos // pos
aomilajjmii: Some(Vector { pos: Some(Vector {
baimdminomk: json.position.x, x: json.position.x,
bemlopmcgch: json.position.y, y: json.position.y,
bagloppgnpb: json.position.z, z: json.position.z,
}), }),
// rot // rot
eiaoiankefd: Some(Vector { rot: Some(Vector {
baimdminomk: 0, x: 0,
bemlopmcgch: json.position.rot_y, y: json.position.rot_y,
bagloppgnpb: 0, z: 0,
}), }),
}), }),
actor: Some(SceneActorInfo { actor: Some(SceneActorInfo {
@ -439,13 +438,13 @@ async fn load_scene(
..Default::default() ..Default::default()
}) })
} }
scene_info.chhmmbdhjpg.push(player_group); scene_info.scene_group_list.push(player_group);
if _save { if _save {
session session
.send( .send(
CMD_ENTER_SCENE_BY_SERVER_SC_NOTIFY, CMD_ENTER_SCENE_BY_SERVER_SC_NOTIFY,
Jdokmmikidp { EnterSceneByServerScNotify {
scene: Some(scene_info.clone()), scene: Some(scene_info.clone()),
lineup: Some(lineup_info), lineup: Some(lineup_info),
..Default::default() ..Default::default()

File diff suppressed because it is too large Load Diff

View File

@ -51,8 +51,8 @@ impl AvatarJson {
} else { } else {
0 0
}, },
ojneijnggfo: 1712924677, first_met_timestamp: 1712924677,
amafpakcckf: relics equip_relic_list: relics
.iter() .iter()
.map(|v| v.to_equipment_relic_proto()) .map(|v| v.to_equipment_relic_proto())
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
@ -153,8 +153,8 @@ impl AvatarJson {
let mut lineup_info = LineupInfo { let mut lineup_info = LineupInfo {
extra_lineup_type: ExtraLineupType::LineupNone.into(), extra_lineup_type: ExtraLineupType::LineupNone.into(),
name: "Squad 1".to_string(), name: "Squad 1".to_string(),
njjbfegnhjc: 5, mp: 5,
bpkggopoppf: 5, mp_max: 5,
..Default::default() ..Default::default()
}; };
@ -197,7 +197,7 @@ impl Lightcone {
pub fn to_equipment_proto(&self) -> Equipment { pub fn to_equipment_proto(&self) -> Equipment {
Equipment { Equipment {
base_avatar_id: self.equip_avatar, base_avatar_id: self.equip_avatar,
imhlbinfhlh: self.equip_avatar, cmmegdchmlb: self.equip_avatar,
exp: 0, exp: 0,
is_protected: false, is_protected: false,
level: self.level, level: self.level,
@ -249,7 +249,7 @@ impl Relic {
pub fn to_relic_proto(&self) -> proto::Relic { pub fn to_relic_proto(&self) -> proto::Relic {
proto::Relic { proto::Relic {
base_avatar_id: self.equip_avatar, base_avatar_id: self.equip_avatar,
imhlbinfhlh: self.equip_avatar, cmmegdchmlb: self.equip_avatar,
exp: 0, exp: 0,
is_protected: false, is_protected: false,
level: self.level, level: self.level,
@ -291,9 +291,9 @@ impl Relic {
pub fn to_equipment_relic_proto(&self) -> EquipRelic { pub fn to_equipment_relic_proto(&self) -> EquipRelic {
EquipRelic { EquipRelic {
ipnhjoomhdm: self.relic_id % 10, iaglgkpdloe: self.relic_id % 10,
// ? // ?
llepdadmfdo: 1 + self.internal_uid, ekjochfepap: 1 + self.internal_uid,
} }
} }
} }
@ -309,11 +309,11 @@ pub struct Monster {
} }
impl Monster { impl Monster {
fn to_scene_monster_info(&self) -> SceneMonsterParam { fn to_scene_monster_info(&self) -> SceneMonsterData {
SceneMonsterParam { SceneMonsterData {
monster_id: self.monster_id, monster_id: self.monster_id,
max_hp: self.max_hp, max_hp: self.max_hp,
aiapcboelmg: self.max_hp, jjhfeikbakk: self.max_hp,
} }
} }
@ -324,9 +324,9 @@ impl Monster {
} }
SceneMonsterWave { SceneMonsterWave {
iilhbcalikm: wave_index, // wave indexx?? imapolkmefn: wave_index, // wave indexx??
ejahmdkklbn: Some(Holldlkceof { acpannfhach: Some(Kjfnknacfin {
// monster param // monster param
level: monsters.iter().map(|v| v.level).max().unwrap_or(95), level: monsters.iter().map(|v| v.level).max().unwrap_or(95),
..Default::default() ..Default::default()
@ -387,6 +387,7 @@ pub enum BattleType {
Moc = 1, Moc = 1,
PF = 2, PF = 2,
SU = 3, SU = 3,
AS = 4,
} }
impl Default for BattleType { impl Default for BattleType {
@ -462,16 +463,16 @@ impl Position {
pub fn to_motion(&self) -> MotionInfo { pub fn to_motion(&self) -> MotionInfo {
MotionInfo { MotionInfo {
// rot // rot
eiaoiankefd: Some(Vector { rot: Some(Vector {
baimdminomk: 0, x: 0,
bemlopmcgch: self.rot_y, y: self.rot_y,
bagloppgnpb: 0, z: 0,
}), }),
// pos // pos
aomilajjmii: Some(Vector { pos: Some(Vector {
baimdminomk: self.x, x: self.x,
bemlopmcgch: self.y, y: self.y,
bagloppgnpb: self.z, z: self.z,
}), }),
} }
} }

Binary file not shown.

View File

@ -1,20 +1,20 @@
{ {
"lineups": { "lineups": {
"0": 1315, "0": 1310,
"1": 1309, "1": 1308,
"2": 1303, "2": 1314,
"3": 1217 "3": 1308
}, },
"position": { "position": {
"x": 34639, "x": -3588,
"y": 192819, "y": 56256,
"z": 435863, "z": -87629,
"rot_y": 26508 "rot_y": 318488
}, },
"scene": { "scene": {
"plane_id": 20313, "plane_id": 20321,
"floor_id": 20313001, "floor_id": 20321001,
"entry_id": 2031301 "entry_id": 2032101
}, },
"main_character": "FemaleHarmony" "main_character": "FemaleHarmony"
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
use crate::config::versions; use crate::config::versions;
use axum::extract::Query; use axum::extract::Query;
use prost::Message; use prost::Message;
use proto::{Dispatch, Gateserver, RegionInfo}; use proto::{Gateserver, GlobalDispatchData, ServerData};
use serde::Deserialize; use serde::Deserialize;
pub const QUERY_DISPATCH_ENDPOINT: &str = "/query_dispatch"; pub const QUERY_DISPATCH_ENDPOINT: &str = "/query_dispatch";
@ -9,12 +9,12 @@ pub const QUERY_GATEWAY_ENDPOINT: &str = "/query_gateway";
#[tracing::instrument] #[tracing::instrument]
pub async fn query_dispatch() -> String { pub async fn query_dispatch() -> String {
let rsp = Dispatch { let rsp = GlobalDispatchData {
retcode: 0, retcode: 0,
region_list: vec![RegionInfo { server_list: vec![ServerData {
name: String::from("RobinSR"), name: String::from("RobinSR"),
title: String::from("RobinSR"), title: String::from("RobinSR"),
env_type: String::from("9"), env_type: String::from("11"),
dispatch_url: String::from("http://127.0.0.1:21000/query_gateway"), dispatch_url: String::from("http://127.0.0.1:21000/query_gateway"),
..Default::default() ..Default::default()
}], }],
@ -44,20 +44,13 @@ pub async fn query_gateway(parameters: Query<QueryGatewayParameters>) -> String
lua_url: config.lua_url.clone(), lua_url: config.lua_url.clone(),
lua_version: config.lua_version.clone(), lua_version: config.lua_version.clone(),
ifix_version: String::from("0"), ifix_version: String::from("0"),
jblkncaoiao: true, pdpbjhfgnjk: true,
hjdjakjkdbi: true, bipcmeeljhj: true,
ldknmcpffim: true, hecpclndaac: true,
feehapamfci: true, nlfkefmfige: true,
eebfeohfpph: true, oigmgpfnloj: true,
dfmjjcfhfea: true, pnnionnkbnn: true,
najikcgjgan: true,
giddjofkndm: true,
fbnbbembcgn: false,
dedgfjhbnok: false,
use_tcp: true, use_tcp: true,
linlaijbboh: false,
ahmbfbkhmgh: false,
nmdccehcdcc: false,
..Default::default() ..Default::default()
} }
} else { } else {

View File

@ -1,65 +1,14 @@
{ {
"OSBETAWin2.1.51": { "CNBETAWin2.2.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6744505_89b2f5dc973e", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_7037158_b67f5a6a68fb",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6759713_b4e0e740f0da", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_7033392_aaca9c1b456b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6755976_3c46d7c46e2c", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_7050564_f05a0f949b10",
"lua_version": "6755976" "lua_version": "7050564"
}, },
"CNBETAWin2.1.51": { "OSBETAWin2.2.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6744505_89b2f5dc973e", "asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_7037158_b67f5a6a68fb",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6759713_b4e0e740f0da", "ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_7033392_aaca9c1b456b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6755976_3c46d7c46e2c", "lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_7050564_f05a0f949b10",
"lua_version": "6755976" "lua_version": "7050564"
},
"OSBETAWin2.1.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6785106_15237df2ef89",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6787319_5f3f1dae4769",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6785460_26c4b6c61a8b",
"lua_version": "6785460"
},
"CNBETAWin2.1.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6785106_15237df2ef89",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6787319_5f3f1dae4769",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6785460_26c4b6c61a8b",
"lua_version": "6785460"
},
"OSBETAWin2.1.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6828321_72f2df86102b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6834225_44836493b261",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6828764_f749b48347fd",
"lua_version": "6828764"
},
"CNBETAWin2.1.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6828321_72f2df86102b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6834225_44836493b261",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6828764_f749b48347fd",
"lua_version": "6828764"
},
"OSBETAWin2.1.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6875067_4783dbc33bcd",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6894513_13602cb3df26",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6875272_2cb77cca61ea",
"lua_version": "6875272"
},
"CNBETAWin2.1.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6875067_4783dbc33bcd",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6894513_13602cb3df26",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6875272_2cb77cca61ea",
"lua_version": "6875272"
},
"CNBETAWin2.1.55": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6918564_f65307ddaa2b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6928643_3ce1c3e895fa",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6931760_dcbf48d15383",
"lua_version": "6931760"
},
"OSBETAWin2.1.55": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6918564_f65307ddaa2b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6928643_3ce1c3e895fa",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6931760_dcbf48d15383",
"lua_version": "6931760"
} }
} }

View File

@ -1,65 +1,14 @@
{ {
"OSBETAWin2.1.51": { "CNBETAWin2.2.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6744505_89b2f5dc973e", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_7037158_b67f5a6a68fb",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6759713_b4e0e740f0da", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_7033392_aaca9c1b456b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6755976_3c46d7c46e2c", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_7050564_f05a0f949b10",
"lua_version": "6755976" "lua_version": "7050564"
}, },
"CNBETAWin2.1.51": { "OSBETAWin2.2.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6744505_89b2f5dc973e", "asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_7037158_b67f5a6a68fb",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6759713_b4e0e740f0da", "ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_7033392_aaca9c1b456b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6755976_3c46d7c46e2c", "lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_7050564_f05a0f949b10",
"lua_version": "6755976" "lua_version": "7050564"
},
"OSBETAWin2.1.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6785106_15237df2ef89",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6787319_5f3f1dae4769",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6785460_26c4b6c61a8b",
"lua_version": "6785460"
},
"CNBETAWin2.1.52": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6785106_15237df2ef89",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6787319_5f3f1dae4769",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6785460_26c4b6c61a8b",
"lua_version": "6785460"
},
"OSBETAWin2.1.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6828321_72f2df86102b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6834225_44836493b261",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6828764_f749b48347fd",
"lua_version": "6828764"
},
"CNBETAWin2.1.53": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6828321_72f2df86102b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6834225_44836493b261",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6828764_f749b48347fd",
"lua_version": "6828764"
},
"OSBETAWin2.1.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6875067_4783dbc33bcd",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6894513_13602cb3df26",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6875272_2cb77cca61ea",
"lua_version": "6875272"
},
"CNBETAWin2.1.54": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6875067_4783dbc33bcd",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6894513_13602cb3df26",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6875272_2cb77cca61ea",
"lua_version": "6875272"
},
"CNBETAWin2.1.55": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6918564_f65307ddaa2b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6928643_3ce1c3e895fa",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6931760_dcbf48d15383",
"lua_version": "6931760"
},
"OSBETAWin2.1.55": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_6918564_f65307ddaa2b",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_6928643_3ce1c3e895fa",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_6931760_dcbf48d15383",
"lua_version": "6931760"
} }
} }