feat: Add support for 4.4.5x

This commit is contained in:
amizing25
2026-07-17 06:03:18 +07:00
parent 99e1e09707
commit 592ad690d9
15 changed files with 40091 additions and 160368 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Supported Version: 3.3.5x # Supported Version: 4.4.5x
Run the game by clicking run.bat file. Run the game by clicking run.bat file.
+26574 -25631
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,6 +1,6 @@
use super::*; use super::*;
pub static BASE_AVATAR_IDS: [u32; 85] = [ pub static BASE_AVATAR_IDS: [u32; 87] = [
8001, 1001, // 8001, 1001, //
// //
1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108,
@@ -8,7 +8,7 @@ pub static BASE_AVATAR_IDS: [u32; 85] = [
1213, 1214, 1215, 1217, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1312, 1315, 1310, 1213, 1214, 1215, 1217, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1312, 1315, 1310,
1314, 1218, 1221, 1220, 1222, 1223, 1317, 1313, 1225, 1402, 1401, 1404, 1403, 1405, 1407, 1406, 1314, 1218, 1221, 1220, 1222, 1223, 1317, 1313, 1225, 1402, 1401, 1404, 1403, 1405, 1407, 1406,
1409, 1014, 1015, 1408, 1410, 1412, 1413, 1414, 1415, 1321, 1501, 1502, 1504, 1505, 1506, 1507, 1409, 1014, 1015, 1408, 1410, 1412, 1413, 1414, 1415, 1321, 1501, 1502, 1504, 1505, 1506, 1507,
1508, 1509, 1510 1508, 1509, 1510, 1512, 1513,
]; ];
pub async fn on_get_avatar_data_cs_req( pub async fn on_get_avatar_data_cs_req(
+2 -2
View File
@@ -105,7 +105,7 @@ pub async fn on_send_msg_cs_req(
.and_then(|x| x.extend_type.as_ref()) .and_then(|x| x.extend_type.as_ref())
.and_then(|x| match x { .and_then(|x| match x {
ExtendType::MessageText(s) => Some(s.as_str()), ExtendType::MessageText(s) => Some(s.as_str()),
_ => None, _ => Option::<&str>::None,
}) })
.unwrap_or(""); .unwrap_or("");
@@ -325,7 +325,7 @@ fn create_send_message(
) -> RevcMsgScNotify { ) -> RevcMsgScNotify {
RevcMsgScNotify { RevcMsgScNotify {
chat_type, chat_type,
dkdlooaaake: to, pffpfkoglpo: to,
recv_message_data: Some(ChatMessageData { recv_message_data: Some(ChatMessageData {
create_time: cur_timestamp_ms(), create_time: cur_timestamp_ms(),
ckhpffenobe: Some(Eknabklpeel { ckhpffenobe: Some(Eknabklpeel {
+3 -3
View File
@@ -135,10 +135,10 @@ pub async fn on_get_big_data_all_recommend_cs_req(
} }
} }
pub async fn on_active_eidolon_cs_req( pub async fn on_rank_up_avatar_cs_req(
session: &mut PlayerSession, session: &mut PlayerSession,
req: &ActiveEidolonCsReq, req: &RankUpAvatarCsReq,
_: &mut ActiveEidolonScRsp, _: &mut RankUpAvatarScRsp,
) -> Option<()> { ) -> Option<()> {
let player = session.json_data.get_mut()?; let player = session.json_data.get_mut()?;
let avatar = player.avatars.get_mut(&req.avatar_id)?; let avatar = player.avatars.get_mut(&req.avatar_id)?;
+2 -2
View File
@@ -5,9 +5,9 @@ pub async fn on_get_mission_status_cs_req(
body: &GetMissionStatusCsReq, body: &GetMissionStatusCsReq,
res: &mut GetMissionStatusScRsp, res: &mut GetMissionStatusScRsp,
) { ) {
res.finished_main_mission_id_list = body.main_mission_id_list.clone(); res.finished_main_mission_id_list = body.sub_mission_id_list.clone();
res.sub_mission_status_list = body res.sub_mission_status_list = body
.sub_mission_id_list .main_mission_id_list
.iter() .iter()
.map(|id| Mission { .map(|id| Mission {
id: *id, id: *id,
+6 -27
View File
@@ -29,30 +29,6 @@ pub use mission::*;
pub use player::*; pub use player::*;
pub use scene::*; pub use scene::*;
#[allow(unused_imports)]
use proto::{
CmdActivityType::*, CmdAdventureType::*, CmdAetherDivideType::*, CmdAlleyType::*,
CmdArchiveType::*, CmdAvatarType::*, CmdBattleCollegeType::*, CmdBattlePassType::*,
CmdBattleType::*, CmdBoxingClubType::*, CmdChallengeType::*, CmdChatType::*,
CmdChessRogueType::*, CmdClockParkType::*, CmdContentPackageType::*, CmdDailyActiveType::*,
CmdDrinkMakerType::*, CmdExpeditionType::*, CmdFantasticStoryActivityType::*,
CmdFeverTimeActivityType::*, CmdFightActivityType::*, CmdFightMatch3Type::*, 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::*, CmdPlayerSyncType::*, CmdPlayerType::*,
CmdPunkLordType::*, CmdQuestType::*, CmdRaidCollectionType::*, CmdRaidType::*,
CmdRechargeGiftType::*, CmdRecommendType::*, CmdRedDotType::*, CmdReplayType::*,
CmdRndOptionType::*, CmdRogueCommonType::*, CmdRogueEndlessType::*, CmdRogueModifierType::*,
CmdRogueTournType::*, CmdRogueType::*, CmdRollShopType::*, CmdSceneType::*,
CmdServerPrefsType::*, CmdShopType::*, CmdSpaceZooType::*, CmdStarFightType::*,
CmdStoryLineType::*, CmdStrongChallengeActivityType::*, CmdTalkEventType::*,
CmdTelevisionActivityType::*, CmdTextJoinType::*, CmdTrainVisitorType::*,
CmdTreasureDungeonType::*, CmdTutorialType::*, CmdWaypointType::*, CmdWolfBroType::*,
};
macro_rules! dummy { macro_rules! dummy {
($($cmd:ident),* $(,)*) => { ($($cmd:ident),* $(,)*) => {
paste! { paste! {
@@ -60,7 +36,7 @@ macro_rules! dummy {
pub const fn should_send_dummy_rsp(cmd_id: u16) -> bool { pub const fn should_send_dummy_rsp(cmd_id: u16) -> bool {
match cmd_id { match cmd_id {
$( $(
x if x == [<Cmd $cmd CsReq>] as u16 => true, x if x == <proto::[<$cmd CsReq>] as proto::CmdID>::CMD_ID => true,
)* )*
_ => false, _ => false,
} }
@@ -69,7 +45,9 @@ macro_rules! dummy {
pub async fn send_dummy_response(&mut self, req_id: u16) -> Result<()> { pub async fn send_dummy_response(&mut self, req_id: u16) -> Result<()> {
let cmd_type = match req_id { let cmd_type = match req_id {
$( $(
x if x == [<Cmd $cmd CsReq>] as u16 => [<Cmd $cmd ScRsp>] as u16, x if x == <proto::[<$cmd CsReq>] as proto::CmdID>::CMD_ID => {
<proto::[<$cmd ScRsp>] as proto::CmdID>::CMD_ID
},
)* )*
_ => return Err(anyhow::anyhow!("Invalid request id {req_id:?}")), _ => return Err(anyhow::anyhow!("Invalid request id {req_id:?}")),
}; };
@@ -140,5 +118,6 @@ dummy! {
GetPreAvatarActivityList, GetPreAvatarActivityList,
// GetUnreleasedBlockInfo, // GetUnreleasedBlockInfo,
GetFriendAssistList, GetFriendAssistList,
GetAssistList GetAssistList,
B51RacingGetData
} }
+5 -3
View File
@@ -34,9 +34,11 @@ pub async fn on_player_login_finish_cs_req(
.send(ContentPackageSyncDataScNotify { .send(ContentPackageSyncDataScNotify {
data: Some(ContentPackageData { data: Some(ContentPackageData {
content_package_list: [ content_package_list: [
200001, 200002, 200003, 200004, 200005, 200006, 200007, 200008, 150017, 150015, 200001, 200002, 200003, 200004, 200005, 200006, 200007, 200008, 200009, 200010,
150021, 150018, 130011, 130012, 130013, 150025, 140006, 150026, 130014, 150034, 200011, 200012, 150017, 150015, 150021, 150018, 130011, 130012, 130013, 150025,
150029, 150035, 150041, 150039, 150045, 140006, 150026, 130014, 150034, 150029, 150035, 150041, 150039, 150045, 150057,
150042, 150067, 150064, 150063, 150024, 171002, 150068, 150070, 150071, 150073,
150074, 150075, 150076, 150077, 150078, 150079,
] ]
.into_iter() .into_iter()
.map(|v| ContentPackageInfo { .map(|v| ContentPackageInfo {
+9 -5
View File
@@ -72,6 +72,10 @@ pub async fn on_get_scene_map_info_cs_req(
}, },
], ],
floor_id: floor_id, floor_id: floor_id,
scene_identifier: Some(SceneIdentifier {
floor_id,
..Default::default()
}),
..Default::default() ..Default::default()
}; };
@@ -87,7 +91,7 @@ pub async fn on_get_scene_map_info_cs_req(
if let Some((_, floor_config)) = floor_configs { if let Some((_, floor_config)) = floor_configs {
for (group_id, group) in floor_config.scenes.iter() { for (group_id, group) in floor_config.scenes.iter() {
map_info.maze_group_list.push(MazeGroup { map_info.group_list.push(MapInfoGroup {
group_id: *group_id, group_id: *group_id,
..Default::default() ..Default::default()
}); });
@@ -97,11 +101,11 @@ pub async fn on_get_scene_map_info_cs_req(
} }
for prop in &group.props { for prop in &group.props {
map_info.maze_prop_list.push(MazePropState { map_info.map_info_prop_list.push(MazePropState {
group_id: prop.group_id, group_id: prop.group_id,
state: prop.prop_state, state: prop.prop_state,
config_id: prop.inst_id, config_id: prop.inst_id,
extra_info: None, extra_info: Option::<PropExtraInfo>::None,
}); });
// map_info.maze_group_list.push(MazeGroup { // map_info.maze_group_list.push(MazeGroup {
// group_id: prop.group_id, // group_id: prop.group_id,
@@ -113,7 +117,7 @@ pub async fn on_get_scene_map_info_cs_req(
} }
map_info.lighten_section_list = floor_config.sections.clone(); map_info.lighten_section_list = floor_config.sections.clone();
map_info.floor_saved_data = floor_config.saved_values.clone(); map_info.floor_saved_value_map = floor_config.saved_values.clone();
// #TODO! // #TODO!
// map_info // map_info
// .chest_unlock_progress_list // .chest_unlock_progress_list
@@ -124,7 +128,7 @@ pub async fn on_get_scene_map_info_cs_req(
// }); // });
} }
res.scene_map_info.push(map_info) res.scene_map_info_list.push(map_info)
} }
} }
+8 -31
View File
@@ -3,29 +3,6 @@ use paste::paste;
use tracing::Instrument; use tracing::Instrument;
use proto::*; use proto::*;
#[allow(unused_imports)]
use proto::{
CmdActivityType::*, CmdAdventureType::*, CmdAetherDivideType::*, CmdAlleyType::*,
CmdArchiveType::*, CmdAvatarType::*, CmdBattleCollegeType::*, CmdBattlePassType::*,
CmdBattleType::*, CmdBoxingClubType::*, CmdChallengeType::*, CmdChatType::*,
CmdChessRogueType::*, CmdClockParkType::*, CmdContentPackageType::*, CmdDailyActiveType::*,
CmdDrinkMakerType::*, CmdExpeditionType::*, CmdFantasticStoryActivityType::*,
CmdFeverTimeActivityType::*, CmdFightActivityType::*, CmdFightMatch3Type::*, 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::*, CmdPlayerSyncType::*, CmdPlayerType::*,
CmdPunkLordType::*, CmdQuestType::*, CmdRaidCollectionType::*, CmdRaidType::*,
CmdRecommendType::*, CmdRedDotType::*, CmdReplayType::*, CmdRndOptionType::*,
CmdRogueCommonType::*, CmdRogueEndlessType::*, CmdRogueModifierType::*, CmdRogueTournType::*,
CmdRogueType::*, CmdRollShopType::*, CmdSceneType::*, CmdServerPrefsType::*, CmdShopType::*,
CmdSpaceZooType::*, CmdStarFightType::*, CmdStoryLineType::*,
CmdStrongChallengeActivityType::*, CmdTalkEventType::*, CmdTelevisionActivityType::*,
CmdTextJoinType::*, CmdTrainVisitorType::*, CmdTreasureDungeonType::*, CmdTutorialType::*,
CmdWaypointType::*, CmdWolfBroType::*,
};
use super::PlayerSession; use super::PlayerSession;
use super::handlers::*; use super::handlers::*;
@@ -138,27 +115,27 @@ macro_rules! trait_handler {
} }
)* )*
async fn on_message(session: &mut PlayerSession, cmd_type: u16, payload: Vec<u8>) -> Result<()> { async fn on_message(session: &mut PlayerSession, cmd_id: u16, payload: Vec<u8>) -> Result<()> {
use ::prost::Message; use ::prost::Message;
if PlayerSession::should_send_dummy_rsp(cmd_type) { if PlayerSession::should_send_dummy_rsp(cmd_id) {
session.send_dummy_response(cmd_type).await?; session.send_dummy_response(cmd_id).await?;
return Ok(()); return Ok(());
} }
match cmd_type { match cmd_id {
$( $(
cmd_type if cmd_type == paste! { [<Cmd$name CsReq>] as u16 } => { cmd_id if cmd_id == paste! { <proto::[<$name CsReq>] as proto::CmdID>::CMD_ID } => {
let body = paste! { proto::[<$name CsReq>]::decode(&mut &payload[..])? }; let body = paste! { proto::[<$name CsReq>]::decode(&mut &payload[..])? };
paste! { paste! {
Self::[<on_$name:snake _cs_req>](session, &body) Self::[<on_$name:snake _cs_req>](session, &body)
.instrument(tracing::info_span!(stringify!([<on_$name:snake>]), cmd_type = cmd_type)) .instrument(tracing::info_span!(stringify!([<on_$name:snake>]), cmd_id = cmd_id))
.await .await
} }
} }
)* )*
_ => { _ => {
tracing::warn!("Unknown command type: {cmd_type}"); tracing::warn!("Unknown command ID: {cmd_id}");
Ok(()) Ok(())
}, },
} }
@@ -190,7 +167,7 @@ trait_handler! {
TakeOffEquipment; TakeOffEquipment;
DressRelicAvatar; DressRelicAvatar;
TakeOffRelic; TakeOffRelic;
ActiveEidolon; RankUpAvatar;
// Chat (dummy!) // Chat (dummy!)
SendMsg; SendMsg;
+9 -9
View File
@@ -1,23 +1,23 @@
{ {
"lineups": { "lineups": {
"0": 1507, "0": 1513,
"1": 1308, "1": 1308,
"2": 1403, "2": 1403,
"3": 1409 "3": 1409
}, },
"position": { "position": {
"x": -26968, "x": 674182,
"y": 78953, "y": 75562,
"z": 14457, "z": -16482,
"rot_y": 11858 "rot_y": 204639
}, },
"scene": { "scene": {
"plane_id": 20411, "plane_id": 20511,
"floor_id": 20411001, "floor_id": 20511001,
"entry_id": 2041101 "entry_id": 2051101
}, },
"main_character": "FemaleElation", "main_character": "FemaleElation",
"march_type": "MarchHunt", "march_type": "MarchHunt",
"enable_sw_global": true, "enable_sw_global": true,
"enable_castorice_global": true "enable_castorice_global": true
} }
+4067 -38003
View File
File diff suppressed because it is too large Load Diff
+9373 -96601
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+29 -47
View File
@@ -1,59 +1,35 @@
{ {
"CNBETAWin3.6.52X": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12150127_00d6d096d968_cd76a04beb7ba6",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12178965_e246796e0bb6_05bcce36cd648b",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12150614_5279f6d8029a_bdecff99d2d817",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12164593_8e3fba5163df_b2b6fc46de4c06"
},
"CNBETAWin4.2.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14851990_9aa8ee8de0fa_ec7d1e42f851f1",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14890490_fcc969a5461f_1f9258ee9068a5",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14852119_8789f55c1c30_0c0cf5d3c9089b",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_14887825_65010135064b_71536d98b8abbf"
},
"OSPRODWin3.6.0": {
"asset_bundle_url": "",
"ex_resource_url": "",
"lua_url": "",
"ifix_url": ""
},
"OSBETAWin3.8.51X": {
"asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_13490885_bf25e1553b38_e9adc23a6b6710",
"ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_13532881_eb1de9bedabd_c74ab2513059ad",
"lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_13493894_ec7d6d879305_8b2cfd39d6e545",
"ifix_url": "https://autopatchos.starrails.com/ifix/BetaLive/output_13491130_ecfa51828143_4bd221b76c0d9a"
},
"CNBETAWin3.5.55": { "CNBETAWin3.5.55": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11797411_74704086c081_d40a71b41ba492", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_11797411_74704086c081_d40a71b41ba492",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11823033_c9e8c870bcc7_b78f37c36487d0", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_11823033_c9e8c870bcc7_b78f37c36487d0",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11798340_8c6543a1d6c5_2d60cd9b1584b8", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_11798340_8c6543a1d6c5_2d60cd9b1584b8",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
}, },
"CNBETAWin3.7.51X": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12579793_48327ff319b5_1b794dd1071e3a",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12611332_5f583f2f54ae_c04979f13c950d",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12579929_9566349ee5fb_c6341faaf9b027",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAWin3.8.51": {
"asset_bundle_url": "",
"ex_resource_url": "",
"lua_url": "",
"ifix_url": ""
},
"CNBETAWin3.6.51": { "CNBETAWin3.6.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12066992_f083970b907e_999074cab6dce6",
"ex_resource_url": "https://autopatchcn-bhsr.neonteam.dev/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9", "ex_resource_url": "https://autopatchcn-bhsr.neonteam.dev/design_data/BetaLive/output_12114942_e99cbde25134_e63a6b835f17f9",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12103115_ee78155e9867_3626f0948d93e2",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12118783_55113408814f_c874267d04c04a"
}, },
"OSBETAWin4.0.51": { "CNBETAWin3.6.52": {
"asset_bundle_url": "", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12150127_00d6d096d968_cd76a04beb7ba6",
"ex_resource_url": "", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12178965_e246796e0bb6_05bcce36cd648b",
"lua_url": "", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12150614_5279f6d8029a_bdecff99d2d817",
"ifix_url": "" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_12164593_8e3fba5163df_b2b6fc46de4c06"
}, },
"OSBETAWin4.0.51X": { "CNBETAWin3.7.51": {
"asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_12579793_48327ff319b5_1b794dd1071e3a",
"ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_12611332_5f583f2f54ae_c04979f13c950d",
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_12579929_9566349ee5fb_c6341faaf9b027",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_0_40d2ce0253_c61ba99f70b885"
},
"OSBETAWin3.8.51": {
"asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_13490885_bf25e1553b38_e9adc23a6b6710",
"ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_13532881_eb1de9bedabd_c74ab2513059ad",
"lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_13493894_ec7d6d879305_8b2cfd39d6e545",
"ifix_url": "https://autopatchos.starrails.com/ifix/BetaLive/output_13491130_ecfa51828143_4bd221b76c0d9a"
},
"OSBETAWin4.0.51": {
"asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_14026982_55a517a26691_89300298bf2b2e", "asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_14026982_55a517a26691_89300298bf2b2e",
"ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_14036546_28a134460a9a_5805431f75f0ff", "ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_14036546_28a134460a9a_5805431f75f0ff",
"lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_14028456_7088b08fd431_59194837d90977", "lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_14028456_7088b08fd431_59194837d90977",
@@ -65,10 +41,16 @@
"lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14358961_e055a63b3c34_b199a0234548b5", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14358961_e055a63b3c34_b199a0234548b5",
"ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_14374543_04d971175704_ab00cb3f54bb00" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_14374543_04d971175704_ab00cb3f54bb00"
}, },
"CNBETAWin3.7.51": { "CNBETAWin4.2.51": {
"asset_bundle_url": "", "asset_bundle_url": "https://autopatchcn.bhsr.com/asb/BetaLive/output_14851990_9aa8ee8de0fa_ec7d1e42f851f1",
"ex_resource_url": "", "ex_resource_url": "https://autopatchcn.bhsr.com/design_data/BetaLive/output_14890490_fcc969a5461f_1f9258ee9068a5",
"lua_url": "", "lua_url": "https://autopatchcn.bhsr.com/lua/BetaLive/output_14852119_8789f55c1c30_0c0cf5d3c9089b",
"ifix_url": "" "ifix_url": "https://autopatchcn.bhsr.com/ifix/BetaLive/output_14887825_65010135064b_71536d98b8abbf"
},
"OSBETAWin4.4.51": {
"asset_bundle_url": "https://autopatchos.starrails.com/asb/BetaLive/output_15711835_1986f76c287e_9c3d058458edf0",
"ex_resource_url": "https://autopatchos.starrails.com/design_data/BetaLive/output_15753142_3bb8238470fc_a7cec92c089da7",
"lua_url": "https://autopatchos.starrails.com/lua/BetaLive/output_15712109_65eeab393c89_0c116c2699518d",
"ifix_url": "https://autopatchos.starrails.com/ifix/BetaLive/output_0_40d2ce0253_6d871f8bca6eb4"
} }
} }