make perfect set name for now

This commit is contained in:
endernon 2025-01-14 18:09:49 +00:00
parent 76108fa49f
commit 24bab0fb18
6 changed files with 130 additions and 26 deletions

1
.gitignore vendored
View file

@ -23,3 +23,4 @@ product/
releases releases
id_keys.json id_keys.json
shiny_stats.json shiny_stats.json
data

View file

@ -12,21 +12,29 @@ pub enum Errorfr {
ItemJsonCorrupt(serde_json5::Error), ItemJsonCorrupt(serde_json5::Error),
/// idmap is missing /// idmap is missing
#[error("Error 1.3: id_keys.json is missing. \nYou should run \"--download id_keys\" or \"--download All\".")] #[error("Error 2.1: id_keys.json is missing. \nYou should run \"--download id_keys\" or \"--download All\".")]
IDMapJsonMissing, IDMapJsonMissing,
/// idmap is corrupt /// idmap is corrupt
#[error("Error 2.1: id_keys.json is corrupt. \nYou should run \"--download id_keys\" or \"--download All\".")] #[error("Error 2.2: id_keys.json is corrupt. \nYou should run \"--download id_keys\" or \"--download All\".")]
IDMapJsonCorrupt, IDMapJsonCorrupt,
/// shiny data json is missing /// shiny data json is missing
#[error("Error 2.2: shiny_stats.json is missing. \nYou should run \"--download ShinyStats\" or \"--download All\".")] #[error("Error 2.3: shiny_stats.json is missing. \nYou should run \"--download ShinyStats\" or \"--download All\".")]
ShinyJsonMissing, ShinyJsonMissing,
/// shiny data json is corrupt /// shiny data json is corrupt
#[error("Error 2.3: shiny_stats.json is corrupt. \nYou should run \"--download ShinyStats\" or \"--download All\".")] #[error("Error 2.4: shiny_stats.json is corrupt. \nYou should run \"--download ShinyStats\" or \"--download All\".")]
ShinyJsonCorrupt, ShinyJsonCorrupt,
/// gear json is missing
#[error("Error 2.3: gear.json is missing. It's only required for the \"perfect mode\" item gen. \nYou should run \"--download Gear\" or \"--download All\".")]
GearJsonMissing,
/// shiny data json is corrupt
#[error("Error 2.4: gear.json is corrupt. It's only required for the \"perfect mode\" item gen. \nYou should run \"--download Gear\" or \"--download All\".")]
GearJsonCorrupt,
/// could not download the file /// could not download the file
#[error("Error 3.1: Download request failed. Check your network settings.")] #[error("Error 3.1: Download request failed. Check your network settings.")]
JsonDlReqFail, JsonDlReqFail,

50
src/gearjson.rs Normal file
View file

@ -0,0 +1,50 @@
use std::collections::HashMap;
use serde::Deserialize;
// the struct for each item in Hashmap<String, GearJson> gear.json. its a big ass pain
#[derive(Deserialize, PartialEq, Eq, Debug)]
pub struct GearJsonItem {
attackSpeed: Option<String>,
averageDps: Option<i16>,
base: HashMap<String, ItemId>,
dropMeta: Option<dropMeta>,
dropRestriction: Option<String>,
icon: Icon,
identifications: Option<HashMap<String, i16>>,
identified: Option<bool>,
internalName: String,
lore: Option<String>,
powderSlots: Option<u8>,
rarity: String,
restrictions: Option<String>,
r#type: String,
weaponType: Option<String>,
armourMaterial: Option<String>,
armourType: Option<String>
}
#[derive(Deserialize, PartialEq, Eq, Debug)]
pub struct ItemId {
max: i8,
min: i8,
raw: i8
}
#[derive(Deserialize, PartialEq, Eq, Debug)]
pub struct dropMeta {
coordinates: [i64; 3],
name: String,
r#type: String
}
#[derive(Deserialize, PartialEq, Eq, Debug)]
pub struct Icon {
format: String,
value: IconValue
}
#[derive(Deserialize, PartialEq, Eq, Debug)]
pub struct IconValue {
customModelData: i16,
id: String,
name: String
}

View file

@ -1,4 +1,5 @@
use crate::dl_json; use crate::dl_json;
use crate::gearjson;
use crate::errorfr::Errorfr; use crate::errorfr::Errorfr;
use crate::jsonstruct::Shinystruct; use crate::jsonstruct::Shinystruct;
use serde::Deserialize; use serde::Deserialize;
@ -7,22 +8,34 @@ use std::fs;
pub fn load_idkeys(executable_path: &str) -> Result<HashMap<String, u8>, Errorfr> { pub fn load_idkeys(executable_path: &str) -> Result<HashMap<String, u8>, Errorfr> {
// id_keys.json // id_keys.json
serde_json5::from_reader(&mut fs::File::open(executable_path.to_owned() + "/id_keys.json").map_err(|_| Errorfr::IDMapJsonMissing)?) serde_json5::from_reader(&mut fs::File::open(executable_path.to_owned() + "/data/id_keys.json").map_err(|_| Errorfr::IDMapJsonMissing)?)
.map_err(|_| Errorfr::IDMapJsonCorrupt) .map_err(|_| Errorfr::IDMapJsonCorrupt)
} }
pub fn load_shinystats(executable_path: &str) -> Result<Vec<Shinystruct>, Errorfr> { pub fn load_shinystats(executable_path: &str) -> Result<Vec<Shinystruct>, Errorfr> {
// shiny_stats.json // shiny_stats.json
serde_json5::from_reader(&mut fs::File::open(executable_path.to_owned() + "/shiny_stats.json").map_err(|_| Errorfr::ShinyJsonMissing)?) serde_json5::from_reader(&mut fs::File::open(executable_path.to_owned() + "/data/shiny_stats.json").map_err(|_| Errorfr::ShinyJsonMissing)?)
.map_err(|_| Errorfr::ShinyJsonCorrupt) .map_err(|_| Errorfr::ShinyJsonCorrupt)
} }
pub fn load_gear(executable_path: &str) -> Result<HashMap<String, gearjson::GearJsonItem>, Errorfr> {
// shiny_stats.json
let a: Result<HashMap<String, gearjson::GearJsonItem>, Errorfr> = serde_json5::from_reader(&mut fs::File::open(executable_path.to_owned() + "/data/gear.json").map_err(|_| Errorfr::GearJsonMissing)?)
.map_err(|_| Errorfr::GearJsonCorrupt);
a
}
pub fn dl_json_fr(dlvalue: &String, executable_path: &str) { pub fn dl_json_fr(dlvalue: &String, executable_path: &str) {
let jsons = DownloadJsons::from(dlvalue.clone()); let jsons = DownloadJsons::from(dlvalue.clone());
if let Err(e) = fs::create_dir_all(format!("{}{}", executable_path, "/data/")) {
println!("Unable to create path. Path: {} ", e)
}
if jsons == DownloadJsons::All || jsons == DownloadJsons::ShinyStats { if jsons == DownloadJsons::All || jsons == DownloadJsons::ShinyStats {
if let Err(e) = dl_json( if let Err(e) = dl_json(
"https://raw.githubusercontent.com/Wynntils/Static-Storage/main/Data-Storage/shiny_stats.json" "https://raw.githubusercontent.com/Wynntils/Static-Storage/main/Data-Storage/shiny_stats.json"
.parse() .parse()
.unwrap(), .unwrap(),
format!("{}{}", executable_path, "/shiny_stats.json"), format!("{}{}", executable_path, "/data/shiny_stats.json")
) { ) {
// error handling below // error handling below
println!("{} Filename: {}", e, dlvalue) println!("{} Filename: {}", e, dlvalue)
@ -33,7 +46,18 @@ pub fn dl_json_fr(dlvalue: &String, executable_path: &str) {
"https://raw.githubusercontent.com/Wynntils/Static-Storage/main/Reference/id_keys.json" "https://raw.githubusercontent.com/Wynntils/Static-Storage/main/Reference/id_keys.json"
.parse() .parse()
.unwrap(), .unwrap(),
format!("{}{}", executable_path, "/id_keys.json"), format!("{}{}", executable_path, "/data/id_keys.json")
) {
// error handling below
println!("{} Filename: {}", e, dlvalue)
}
}
if jsons == DownloadJsons::All || jsons == DownloadJsons::Gear {
if let Err(e) = dl_json(
"https://raw.githubusercontent.com/Wynntils/Static-Storage/main/Reference/gear.json"
.parse()
.unwrap(),
format!("{}{}", executable_path, "/data/gear.json")
) { ) {
// error handling below // error handling below
println!("{} Filename: {}", e, dlvalue) println!("{} Filename: {}", e, dlvalue)
@ -47,31 +71,37 @@ pub enum DownloadJsons {
None, None,
IdKeys, IdKeys,
ShinyStats, ShinyStats,
Gear,
All, All,
} }
impl From<String> for DownloadJsons { impl From<String> for DownloadJsons {
fn from(value: String) -> Self { fn from(value: String) -> Self {
match value.to_lowercase().as_str().trim() { match value.to_lowercase().as_str().trim() {
"none" => { "none" => {
println!("download NONE"); println!("downloading NONE (Why?)");
DownloadJsons::None DownloadJsons::None
} }
"id_keys" | "idkeys" | "idkeys.json" | "id_keys.json" => { "id_keys" | "idkeys" | "idkeys.json" | "id_keys.json" => {
println!("download ID_KEYS"); println!("downloading ID_KEYS");
DownloadJsons::IdKeys DownloadJsons::IdKeys
} }
"shiny_stats" | "shinystats" | "shiny_stats.json" | "shinystats.json" => { "shiny_stats" | "shinystats" | "shiny_stats.json" | "shinystats.json" => {
println!("download SHINY_STATS"); println!("downloading SHINY_STATS");
DownloadJsons::ShinyStats DownloadJsons::ShinyStats
} }
"gear" | "gear.json" => {
println!("downloading GEAR");
DownloadJsons::Gear
}
"all" | "everything" | "both" => { "all" | "everything" | "both" => {
println!("download BOTH"); println!("downloading ALL jsons");
DownloadJsons::All DownloadJsons::All
} }
_ => { _ => {
println!("Could not understand what Jsons to download, sorry."); println!("downloading NONE (unable to understand prompt)");
DownloadJsons::None DownloadJsons::None
} }
} }
} }
} }

View file

@ -7,7 +7,7 @@ use serde::Deserialize;
use std::fs; use std::fs;
// structs for the json parsing // structs for the json parsing
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct Jsonconfig { pub struct Jsonconfig {
// not a thing to be encoded, this just toggles debug prints. Also settable using --debug // not a thing to be encoded, this just toggles debug prints. Also settable using --debug
#[serde(alias = "Debug", alias = "DEBUG")] #[serde(alias = "Debug", alias = "DEBUG")]
@ -187,7 +187,7 @@ impl TryFrom<&str> for CraftedTypesFr {
} }
} }
} }
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct Durability { pub struct Durability {
pub effect_strength: Option<u8>, pub effect_strength: Option<u8>,
pub dura_cur: i32, pub dura_cur: i32,
@ -198,24 +198,24 @@ pub struct Shinystruct {
pub id: u8, pub id: u8,
pub key: String, pub key: String,
} }
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct Identificationer { pub struct Identificationer {
pub id: String, pub id: String,
pub base: i32, pub base: i32,
pub roll: Option<u8>, pub roll: Option<u8>,
} }
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct IdentificationerCrafted { pub struct IdentificationerCrafted {
pub name: String, pub name: String,
pub max_roll: i32, pub max_roll: i32,
} }
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct PowderFr { pub struct PowderFr {
pub r#type: char, pub r#type: char,
pub amount: Option<u8>, pub amount: Option<u8>,
} }
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct Shinyjson { pub struct Shinyjson {
pub key: String, pub key: String,
pub value: i64, pub value: i64,
@ -229,7 +229,7 @@ pub struct FuncParams<'a> {
pub fr_ver: EncodingVersion, pub fr_ver: EncodingVersion,
} }
#[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[derive(Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct DamageDeser { pub struct DamageDeser {
pub attack_speed: AttackSpeed pub attack_speed: AttackSpeed
} }

View file

@ -1,4 +1,5 @@
#![allow(clippy::single_match)] #![allow(clippy::single_match)]
#![allow(non_camel_case_types, non_snake_case)]
use idmangler_lib::{encoding::string::encode_string, types::EncodingVersion}; use idmangler_lib::{encoding::string::encode_string, types::EncodingVersion};
@ -8,6 +9,8 @@ mod encode;
mod errorfr; mod errorfr;
mod jsondl; mod jsondl;
mod jsonstruct; mod jsonstruct;
mod gearjson;
use crate::errorfr::Errorfr; use crate::errorfr::Errorfr;
use crate::jsondl::*; use crate::jsondl::*;
use crate::jsonstruct::*; use crate::jsonstruct::*;
@ -21,13 +24,21 @@ struct Args {
#[arg(short, long)] #[arg(short, long)]
config: Option<String>, config: Option<String>,
/// Enable debug mode /// Enable debug mode (for now this just prints debug info)
#[arg(long, default_value_t = false)] #[arg(long, default_value_t = false)]
debug: bool, debug: bool,
/// Download jsons (for ease of use) /// Download jsons (for ease of use)
#[arg(short, long)] #[arg(short, long)]
download: Option<String>, download: Option<String>,
/// Function to generate perfect value items
#[arg(long)]
perfect: Option<String>
}
pub enum PerfectStatus {
None,
Some(String)
} }
fn dl_json(url: Url, savename: String) -> Result<(), Errorfr> { fn dl_json(url: Url, savename: String) -> Result<(), Errorfr> {
@ -77,15 +88,19 @@ fn main() {
// create necessary variables // create necessary variables
let ver = EncodingVersion::Version1; let ver = EncodingVersion::Version1;
let loaded_config_borrow = &loaded_config; let mut loaded_config_borrow = loaded_config.clone();
// ENCODE: ALotOfStuff // check if perfect status
if let Some(t1) = args.perfect {
loaded_config_borrow.name = Some(t1)
}
// ENCODE: A Lot Of Stuff
// Also print any mapped errors // Also print any mapped errors
let cooking = cook(&mut out, &debug_mode, ver, loaded_config_borrow, loaded_idkeys, loaded_shinystats); let cooking = cook(&mut out, &debug_mode, ver, &loaded_config_borrow, loaded_idkeys, loaded_shinystats);
if let Err(e) = cooking { if let Err(e) = cooking {
println!("{}", e); // print error if there is an error println!("{}", e); // print error if there is an error
} else { } else {
// final string print if there is no error // final string print if there is no error
println!("{}", cooking.unwrap()) println!("{}", cooking.unwrap())
} }
} }