|
|
@ -32,14 +32,10 @@ pub struct WeaponShopItem { |
|
|
|
|
|
|
|
impl PartialEq for WeaponShopItem {
|
|
|
|
fn eq(&self, other: &Self) -> bool {
|
|
|
|
if self.weapon == other.weapon &&
|
|
|
|
self.weapon == other.weapon &&
|
|
|
|
self.special == other.special &&
|
|
|
|
self.grind == other.grind &&
|
|
|
|
self.attributes == other.attributes {
|
|
|
|
true
|
|
|
|
} else {
|
|
|
|
false
|
|
|
|
}
|
|
|
|
self.attributes == other.attributes
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
@ -247,7 +243,7 @@ fn load_weapon_table(difficulty: Difficulty, section_id: SectionID) -> WeaponTab |
|
|
|
|
|
|
|
let mut table: HashMap<String, Vec<WeaponTableTier>> = toml::from_str(s.as_str()).unwrap();
|
|
|
|
|
|
|
|
WeaponTable(table.remove("weapon_tier".into()).unwrap())
|
|
|
|
WeaponTable(table.remove("weapon_tier").unwrap())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn load_special_table() -> SpecialTable {
|
|
|
@ -258,7 +254,7 @@ fn load_special_table() -> SpecialTable { |
|
|
|
|
|
|
|
let mut table: HashMap<String, Vec<SpecialTier>> = toml::from_str(s.as_str()).unwrap();
|
|
|
|
|
|
|
|
SpecialTable(table.remove("specials".into()).unwrap())
|
|
|
|
SpecialTable(table.remove("specials").unwrap())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn load_grind_table() -> GrindTable {
|
|
|
@ -269,7 +265,7 @@ fn load_grind_table() -> GrindTable { |
|
|
|
|
|
|
|
let mut table: HashMap<String, Vec<GrindTier>> = toml::from_str(s.as_str()).unwrap();
|
|
|
|
|
|
|
|
GrindTable(table.remove("grind".into()).unwrap())
|
|
|
|
GrindTable(table.remove("grind").unwrap())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn load_alt_grind_table() -> GrindTable {
|
|
|
@ -280,7 +276,7 @@ fn load_alt_grind_table() -> GrindTable { |
|
|
|
|
|
|
|
let mut table: HashMap<String, Vec<GrindTier>> = toml::from_str(s.as_str()).unwrap();
|
|
|
|
|
|
|
|
GrindTable(table.remove("grind".into()).unwrap())
|
|
|
|
GrindTable(table.remove("grind").unwrap())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn load_attribute1_table() -> AttributeTable {
|
|
|
@ -291,7 +287,7 @@ fn load_attribute1_table() -> AttributeTable { |
|
|
|
|
|
|
|
let mut table: HashMap<String, Vec<AttributeTier>> = toml::from_str(s.as_str()).unwrap();
|
|
|
|
|
|
|
|
AttributeTable(table.remove("attributes".into()).unwrap())
|
|
|
|
AttributeTable(table.remove("attributes").unwrap())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn load_attribute2_table() -> AttributeTable {
|
|
|
@ -302,7 +298,7 @@ fn load_attribute2_table() -> AttributeTable { |
|
|
|
|
|
|
|
let mut table: HashMap<String, Vec<AttributeTier>> = toml::from_str(s.as_str()).unwrap();
|
|
|
|
|
|
|
|
AttributeTable(table.remove("attributes".into()).unwrap())
|
|
|
|
AttributeTable(table.remove("attributes").unwrap())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn number_of_weapons_to_generate(character_level: usize) -> usize {
|
|
|
@ -381,8 +377,7 @@ impl<R: Rng + SeedableRng> WeaponShop<R> { |
|
|
|
|
|
|
|
fn generate_alt_grind(&mut self, level: usize) -> usize {
|
|
|
|
let tier = self.alt_grind.0.iter()
|
|
|
|
.filter(|t| t.level <= level)
|
|
|
|
.nth(0)
|
|
|
|
.find(|t| t.level <= level)
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
self.rng.gen_range(tier.min, tier.max+1)
|
|
|
@ -443,48 +438,46 @@ impl<R: Rng + SeedableRng> WeaponShop<R> { |
|
|
|
}
|
|
|
|
|
|
|
|
fn is_alt_grind(&self, weapon: &WeaponType) -> bool {
|
|
|
|
match (self.section_id, weapon) {
|
|
|
|
(SectionID::Viridia, WeaponType::Shot) => true,
|
|
|
|
(SectionID::Viridia, WeaponType::Spread) => true,
|
|
|
|
(SectionID::Viridia, WeaponType::Cannon) => true,
|
|
|
|
(SectionID::Viridia, WeaponType::Launcher) => true,
|
|
|
|
(SectionID::Viridia, WeaponType::Arms) => true,
|
|
|
|
(SectionID::Greenill, WeaponType::Rifle) => true,
|
|
|
|
(SectionID::Greenill, WeaponType::Sniper) => true,
|
|
|
|
(SectionID::Greenill, WeaponType::Blaster) => true,
|
|
|
|
(SectionID::Greenill, WeaponType::Beam) => true,
|
|
|
|
(SectionID::Greenill, WeaponType::Laser) => true,
|
|
|
|
(SectionID::Skyly, WeaponType::Sword) => true,
|
|
|
|
(SectionID::Skyly, WeaponType::Gigush) => true,
|
|
|
|
(SectionID::Skyly, WeaponType::Breaker) => true,
|
|
|
|
(SectionID::Skyly, WeaponType::Claymore) => true,
|
|
|
|
(SectionID::Skyly, WeaponType::Calibur) => true,
|
|
|
|
(SectionID::Bluefull, WeaponType::Partisan) => true,
|
|
|
|
(SectionID::Bluefull, WeaponType::Halbert) => true,
|
|
|
|
(SectionID::Bluefull, WeaponType::Glaive) => true,
|
|
|
|
(SectionID::Bluefull, WeaponType::Berdys) => true,
|
|
|
|
(SectionID::Bluefull, WeaponType::Gungnir) => true,
|
|
|
|
(SectionID::Purplenum, WeaponType::Mechgun) => true,
|
|
|
|
(SectionID::Purplenum, WeaponType::Assault) => true,
|
|
|
|
(SectionID::Purplenum, WeaponType::Repeater) => true,
|
|
|
|
(SectionID::Purplenum, WeaponType::Gatling) => true,
|
|
|
|
(SectionID::Purplenum, WeaponType::Vulcan) => true,
|
|
|
|
(SectionID::Pinkal, WeaponType::Cane) => true,
|
|
|
|
(SectionID::Pinkal, WeaponType::Stick) => true,
|
|
|
|
(SectionID::Pinkal, WeaponType::Mace) => true,
|
|
|
|
(SectionID::Pinkal, WeaponType::Club) => true,
|
|
|
|
(SectionID::Oran, WeaponType::Dagger) => true,
|
|
|
|
(SectionID::Oran, WeaponType::Knife) => true,
|
|
|
|
(SectionID::Oran, WeaponType::Blade) => true,
|
|
|
|
(SectionID::Oran, WeaponType::Edge) => true,
|
|
|
|
(SectionID::Oran, WeaponType::Ripper) => true,
|
|
|
|
(SectionID::Whitill, WeaponType::Slicer) => true,
|
|
|
|
(SectionID::Whitill, WeaponType::Spinner) => true,
|
|
|
|
(SectionID::Whitill, WeaponType::Cutter) => true,
|
|
|
|
(SectionID::Whitill, WeaponType::Sawcer) => true,
|
|
|
|
(SectionID::Whitill, WeaponType::Diska) => true,
|
|
|
|
_ => false,
|
|
|
|
}
|
|
|
|
matches!((self.section_id, weapon),
|
|
|
|
(SectionID::Viridia, WeaponType::Shot) |
|
|
|
|
(SectionID::Viridia, WeaponType::Spread) |
|
|
|
|
(SectionID::Viridia, WeaponType::Cannon) |
|
|
|
|
(SectionID::Viridia, WeaponType::Launcher) |
|
|
|
|
(SectionID::Viridia, WeaponType::Arms) |
|
|
|
|
(SectionID::Greenill, WeaponType::Rifle) |
|
|
|
|
(SectionID::Greenill, WeaponType::Sniper) |
|
|
|
|
(SectionID::Greenill, WeaponType::Blaster) |
|
|
|
|
(SectionID::Greenill, WeaponType::Beam) |
|
|
|
|
(SectionID::Greenill, WeaponType::Laser) |
|
|
|
|
(SectionID::Skyly, WeaponType::Sword) |
|
|
|
|
(SectionID::Skyly, WeaponType::Gigush) |
|
|
|
|
(SectionID::Skyly, WeaponType::Breaker) |
|
|
|
|
(SectionID::Skyly, WeaponType::Claymore) |
|
|
|
|
(SectionID::Skyly, WeaponType::Calibur) |
|
|
|
|
(SectionID::Bluefull, WeaponType::Partisan) |
|
|
|
|
(SectionID::Bluefull, WeaponType::Halbert) |
|
|
|
|
(SectionID::Bluefull, WeaponType::Glaive) |
|
|
|
|
(SectionID::Bluefull, WeaponType::Berdys) |
|
|
|
|
(SectionID::Bluefull, WeaponType::Gungnir) |
|
|
|
|
(SectionID::Purplenum, WeaponType::Mechgun) |
|
|
|
|
(SectionID::Purplenum, WeaponType::Assault) |
|
|
|
|
(SectionID::Purplenum, WeaponType::Repeater) |
|
|
|
|
(SectionID::Purplenum, WeaponType::Gatling) |
|
|
|
|
(SectionID::Purplenum, WeaponType::Vulcan) |
|
|
|
|
(SectionID::Pinkal, WeaponType::Cane) |
|
|
|
|
(SectionID::Pinkal, WeaponType::Stick) |
|
|
|
|
(SectionID::Pinkal, WeaponType::Mace) |
|
|
|
|
(SectionID::Pinkal, WeaponType::Club) |
|
|
|
|
(SectionID::Oran, WeaponType::Dagger) |
|
|
|
|
(SectionID::Oran, WeaponType::Knife) |
|
|
|
|
(SectionID::Oran, WeaponType::Blade) |
|
|
|
|
(SectionID::Oran, WeaponType::Edge) |
|
|
|
|
(SectionID::Oran, WeaponType::Ripper) |
|
|
|
|
(SectionID::Whitill, WeaponType::Slicer) |
|
|
|
|
(SectionID::Whitill, WeaponType::Spinner) |
|
|
|
|
(SectionID::Whitill, WeaponType::Cutter) |
|
|
|
|
(SectionID::Whitill, WeaponType::Sawcer) |
|
|
|
|
(SectionID::Whitill, WeaponType::Diska))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn generate_weapon(&mut self, level: usize) -> WeaponShopItem {
|
|
|
|