load_scripts/
load_scripts.rs

1use std::{
2    fs::File,
3    io::{BufWriter, Write},
4};
5
6use infinite_rs::{ModuleFile, Result, tag::types::common_types::FieldData};
7use infinite_rs_derive::TagStructure;
8
9const DEPLOY_PATH: &str =
10    "C:/XboxGames/Halo Infinite/Content/deploy/any/globals/globals-rtx-new.module";
11const SAVE_PATH: &str = "./scripts";
12const SCRIPT_GROUP: &str = "hsc*";
13
14#[derive(Default, Debug, TagStructure)]
15#[data(size(0x2D8))]
16struct HsSourceFileTag {
17    #[data(offset(0x294))]
18    server: FieldData,
19    #[data(offset(0x2AC))]
20    client: FieldData,
21}
22
23fn main() -> Result<()> {
24    let mut module = ModuleFile::from_path(DEPLOY_PATH)?;
25    for idx in 0..module.files.len() {
26        if module.files[idx].tag_group == SCRIPT_GROUP {
27            let tag = module.read_tag(idx as u32)?;
28            if let Some(tag) = tag {
29                let mut source = HsSourceFileTag::default();
30                tag.read_metadata(&mut source)?;
31
32                let server_buf = source.server.data;
33                let client_buf = source.client.data;
34
35                let server_file = File::create(format!("{SAVE_PATH}/{}_server.luac", tag.tag_id))?;
36                let mut bw = BufWriter::new(server_file);
37                bw.write_all(&server_buf)?;
38
39                let client_file = File::create(format!("{SAVE_PATH}/{}_client.luac", tag.tag_id))?;
40                let mut bw = BufWriter::new(client_file);
41                bw.write_all(&client_buf)?;
42            }
43        }
44    }
45    Ok(())
46}