modular mode hellyeah

This commit is contained in:
endernon 2025-01-01 18:07:46 +00:00
parent 366f5b5a64
commit 13e4eb76a9
2 changed files with 76 additions and 53 deletions

View file

@ -81,19 +81,16 @@ fn main() {
// create necessary variables // create necessary variables
let ver = TransformVersion::Version1; let ver = TransformVersion::Version1;
// StartData and TypeData are always present
encode_startdata(&mut out, ver);
encode_typedata(&mut out, ver, loaded_config.item_type);
// ENCODE: ALotOfStuff // ENCODE: ALotOfStuff
// Also print any mapped errors // Also print any mapped errors
if let Err(e) = cook( if let Err(e) = cook(
&mut out,
&debug_mode, &debug_mode,
ver,
loaded_config, loaded_config,
loaded_idkeys, loaded_idkeys,
loaded_shinystats, loaded_shinystats,
&mut out,
ver,
) { ) {
println!("{}", e); println!("{}", e);
}; };
@ -113,30 +110,31 @@ fn main() {
} }
} }
} }
fn cook( fn cook(out: &mut Vec<u8>, debug_mode: &bool, ver: TransformVersion, json_config: Jsonconfig, idsmap: HashMap<String, u8>, json_shiny: Vec<Shinystruct>,
debug_mode: &bool,
json_config: Jsonconfig,
idsmap: HashMap<String, u8>,
json_shiny: Vec<Shinystruct>,
out: &mut Vec<u8>,
ver: TransformVersion,
) -> Result<(), Errorfr> { ) -> Result<(), Errorfr> {
let mut func_params_outer = FuncParams {
fr_out: &mut out,
fr_debug_mode: &debug_mode,
fr_ver: ver,
};
// StartData and TypeData are always present
encode_startdata(out, ver);
encode_typedata(out, ver, json_config.item_type);
// ENCODE: NameData // ENCODE: NameData
if let Some(real_name) = json_config.name { if let Some(real_name) = json_config.name {
NameData(real_name.trim().to_string()) encode_namedata(out, ver, &real_name)
.encode(ver, out)
.unwrap();
} }
// json identification data handling for type GEAR (0) // json identification data handling for type GEAR (0)
// only occurs if identifications block is present // only occurs if identifications block is present
if let Some(real_ids) = json_config.ids { if let Some(real_ids) = json_config.ids {
encode_ids(out, real_ids, ver, idsmap) encode_ids(out, real_ids, ver, idsmap)
} }
// json powder data handling // json powder data handling
if let Some(real_powders) = json_config.powders { if let Some(real_powders) = json_config.powders {
encode_powder(out, debug_mode, real_powders, ver) encode_powder(out, debug_mode, real_powders, ver)
@ -144,39 +142,12 @@ fn cook(
if let Some(rerollcount) = json_config.rerolls { if let Some(rerollcount) = json_config.rerolls {
if rerollcount != 0 { // rerolldata
// ENCODE: RerollData if applicable encode_reroll(out, debug_mode, ver, rerollcount)
RerollData(rerollcount).encode(ver, out).unwrap();
if *debug_mode {
dbg!(rerollcount);
};
};
}; };
let mut realshinykey: u8;
if let Some(shiny) = json_config.shiny { if let Some(shiny) = json_config.shiny {
let _shinykey = &shiny.key; encode_shiny(out, debug_mode, ver, shiny, json_shiny)
let shinyvalue = shiny.value;
realshinykey = 1;
for i in json_shiny {
if i.key == shiny.key {
realshinykey = i.id;
if *debug_mode {
dbg!(&shiny.key);
}
}
}
if *debug_mode {
dbg!(&realshinykey);
dbg!(&shinyvalue);
}
// ENCODE: ShinyData (if applicable)
ShinyData {
id: realshinykey,
val: shinyvalue,
}
.encode(ver, out)
.unwrap();
} }
Ok(()) Ok(())
@ -223,7 +194,9 @@ fn dl_json_fr(dlvalue: &String, executable_path: &str) {
} }
fn encode_startdata(out: &mut Vec<u8>, ver: TransformVersion) { fn encode_startdata(out: &mut Vec<u8>, ver: TransformVersion) {
// ENCODE: StartData // ENCODE: StartData
StartData(ver).encode(ver, out).unwrap(); StartData(ver)
.encode(ver, out)
.unwrap();
} }
fn encode_typedata(out: &mut Vec<u8>, ver: TransformVersion, item_type_deser: ItemTypeDeser) { fn encode_typedata(out: &mut Vec<u8>, ver: TransformVersion, item_type_deser: ItemTypeDeser) {
// ENCODE: TypeData // ENCODE: TypeData
@ -231,6 +204,12 @@ fn encode_typedata(out: &mut Vec<u8>, ver: TransformVersion, item_type_deser: It
.encode(ver, out) .encode(ver, out)
.unwrap(); .unwrap();
} }
fn encode_namedata(out: &mut Vec<u8>, ver: TransformVersion, real_name: &String) {
// ENCODE: NameData
NameData(real_name.trim().to_string())
.encode(ver, out)
.unwrap();
}
fn encode_powder(out: &mut Vec<u8>, debug_mode: &bool, real_powders: Vec<Powder>, ver: TransformVersion) { fn encode_powder(out: &mut Vec<u8>, debug_mode: &bool, real_powders: Vec<Powder>, ver: TransformVersion) {
let mut powdervec = Vec::new(); let mut powdervec = Vec::new();
for eachpowder in real_powders { for eachpowder in real_powders {
@ -268,6 +247,15 @@ fn encode_powder(out: &mut Vec<u8>, debug_mode: &bool, real_powders: Vec<Powder>
.encode(ver, out) .encode(ver, out)
.unwrap(); .unwrap();
} }
fn encode_reroll(out: &mut Vec<u8>, debug_mode: &bool, ver: TransformVersion, rerollcount: u8) {
if rerollcount != 0 {
// ENCODE: RerollData if applicable
RerollData(rerollcount).encode(ver, out).unwrap();
if *debug_mode {
dbg!(rerollcount);
}
}
}
fn encode_ids(out: &mut Vec<u8>, real_ids: Vec<Identificationer>, ver: TransformVersion, idsmap: HashMap<String, u8>) { fn encode_ids(out: &mut Vec<u8>, real_ids: Vec<Identificationer>, ver: TransformVersion, idsmap: HashMap<String, u8>) {
let mut idvec = Vec::new(); let mut idvec = Vec::new();
for eachid in real_ids { for eachid in real_ids {
@ -299,7 +287,34 @@ fn encode_ids(out: &mut Vec<u8>, real_ids: Vec<Identificationer>, ver: Transform
.encode(ver, out) .encode(ver, out)
.unwrap(); .unwrap();
} }
fn encode_shiny(out: &mut Vec<u8>, debug_mode: &bool, ver: TransformVersion, shiny: Shinyjson, json_shiny: Vec<Shinystruct>) {
let mut realshinykey: u8;
let _shinykey = &shiny.key;
let shinyvalue = shiny.value;
realshinykey = 1;
for i in json_shiny {
if i.key == shiny.key {
realshinykey = i.id;
if *debug_mode {
dbg!(&shiny.key);
}
}
}
if *debug_mode {
dbg!(&realshinykey);
dbg!(&shinyvalue);
}
// ENCODE: ShinyData (if applicable)
ShinyData {
id: realshinykey,
val: shinyvalue,
}
.encode(ver, out)
.unwrap();
}
fn encode_enddata(out: &mut Vec<u8>, ver: TransformVersion) { fn encode_enddata(out: &mut Vec<u8>, ver: TransformVersion) {
// ENCODE: EndData // ENCODE: EndData
EndData.encode(ver, out).unwrap(); EndData
.encode(ver, out)
.unwrap();
} }

View file

@ -1,6 +1,6 @@
use idmangler_lib::types::ItemType; use idmangler_lib::types::{ItemType, TransformVersion};
use serde::Deserialize; use serde::Deserialize;
// structs // structs for the json parsing
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct Powder { pub struct Powder {
pub r#type: char, pub r#type: char,
@ -34,6 +34,13 @@ pub struct Shinyjson {
pub value: i64, pub value: i64,
} }
pub struct FuncParams<'a> {
pub fr_out: &'a mut Vec<u8>,
pub fr_debug_mode: &'a bool,
pub fr_ver: TransformVersion
}
// I had to clone this and add Deserialize because the original idmangler_lib::types::ItemType does not // I had to clone this and add Deserialize because the original idmangler_lib::types::ItemType does not
#[repr(u8)] #[repr(u8)]
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, Debug, Deserialize)] #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, Debug, Deserialize)]
@ -56,6 +63,7 @@ impl From<ItemTypeDeser> for ItemType {
} }
} }
// stuff for the bit for downloading data jsons for ease of use
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, Debug, Deserialize)] #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, Debug, Deserialize)]
pub enum DownloadJsons { pub enum DownloadJsons {
None, None,