tech table load config
This commit is contained in:
		
							parent
							
								
									2981b163c2
								
							
						
					
					
						commit
						afbd63ff6a
					
				| @ -3,6 +3,7 @@ use std::collections::HashMap; | ||||
| 
 | ||||
| use libpso::character::character; | ||||
| use libpso::packet::ship::{UpdateConfig, WriteInfoboard}; | ||||
| use crate::entity::item::tech::Technique; | ||||
| 
 | ||||
| #[derive(Copy, Clone, Hash, PartialEq, Eq)] | ||||
| pub enum CharacterClass { | ||||
| @ -127,29 +128,6 @@ pub struct CharacterAppearance { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Clone, Debug, PartialEq, Eq, Hash)] | ||||
| pub enum Technique { | ||||
|     Foie, | ||||
|     Gifoie, | ||||
|     Rafoie, | ||||
|     Zonde, | ||||
|     Gizonde, | ||||
|     Razonde, | ||||
|     Barta, | ||||
|     Gibarta, | ||||
|     Rabarta, | ||||
|     Grants, | ||||
|     Megid, | ||||
|     Shifta, | ||||
|     Deband, | ||||
|     Jellen, | ||||
|     Zalure, | ||||
|     Resta, | ||||
|     Anti, | ||||
|     Reverser, | ||||
|     Ryuker, | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug)] | ||||
| pub struct TechLevel(pub u8); | ||||
| 
 | ||||
|  | ||||
| @ -2,6 +2,7 @@ pub mod weapon; | ||||
| pub mod armor; 
 | ||||
| pub mod shield; | ||||
| pub mod tool; | ||||
| pub mod tech; | ||||
| pub mod unit; | ||||
| pub mod mag; | ||||
| 
 | ||||
| @ -55,6 +56,7 @@ pub enum ItemDetail { | ||||
|     Shield(shield::Shield), | ||||
|     Unit(unit::Unit), | ||||
|     Tool(Tool), | ||||
|     TechniqueDisk(tech::TechniqueDisk) | ||||
| } | ||||
| 
 | ||||
| impl ItemDetail { | ||||
| @ -72,6 +74,7 @@ impl ItemDetail { | ||||
|             ItemDetail::Shield(shield) => shield.as_bytes(), | ||||
|             ItemDetail::Unit(unit) => unit.as_bytes(), | ||||
|             ItemDetail::Tool(tool) => tool.as_bytes(), | ||||
|             ItemDetail::TechniqueDisk(tech) => tech.as_bytes(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -20,7 +20,8 @@ use crate::entity::account::{UserAccount, USERFLAG_NEWCHAR, USERFLAG_DRESSINGROO | ||||
| use crate::entity::item::{ItemDetail, ItemLocation, Tool}; | ||||
| use crate::entity::item::weapon::Weapon; | ||||
| use crate::entity::item::armor::Armor; | ||||
| use crate::entity::character::{Character, CharacterClass, Technique, TechLevel}; | ||||
| use crate::entity::item::tech::Technique; | ||||
| use crate::entity::character::{Character, CharacterClass, TechLevel}; | ||||
| 
 | ||||
| use crate::login::login::get_login_status; | ||||
| 
 | ||||
|  | ||||
| @ -4,8 +4,8 @@ use serde::{Serialize, Deserialize}; | ||||
| use rand::{Rng, SeedableRng}; | ||||
| use rand::distributions::{WeightedIndex, Distribution}; | ||||
| 
 | ||||
| use crate::entity::item::{ItemDetail, Tool as ToolDetail}; | ||||
| use crate::entity::item::tool::{StackedTool, ToolType}; | ||||
| use crate::entity::item::ItemDetail; | ||||
| use crate::entity::item::tech::{Technique, TechniqueDisk}; | ||||
| use crate::ship::room::{Difficulty, Episode}; | ||||
| use crate::ship::map::MapVariantType; | ||||
| use crate::entity::character::SectionID; | ||||
| @ -13,23 +13,81 @@ use crate::ship::drops::load_data_file; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Debug, Serialize, Deserialize)] | ||||
| struct TechniqueRateStat { | ||||
|     rate: u32, | ||||
|     min: i32, | ||||
|     max: i32, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Debug, Serialize, Deserialize)] | ||||
| struct TechniqueRate { | ||||
|     #[serde(rename = "Foie")] | ||||
|     foie: TechniqueRateStat, | ||||
|     #[serde(rename = "Gifoie")] | ||||
|     gifoie: TechniqueRateStat, | ||||
|     #[serde(rename = "Rafoie")] | ||||
|     rafoie: TechniqueRateStat, | ||||
|     #[serde(rename = "Zonde")] | ||||
|     zonde: TechniqueRateStat, | ||||
|     #[serde(rename = "Gizonde")] | ||||
|     gizonde: TechniqueRateStat, | ||||
|     #[serde(rename = "Razonde")] | ||||
|     razonde: TechniqueRateStat, | ||||
|     #[serde(rename = "Barta")] | ||||
|     barta: TechniqueRateStat, | ||||
|     #[serde(rename = "Gibarta")] | ||||
|     gibarta: TechniqueRateStat, | ||||
|     #[serde(rename = "Rabarta")] | ||||
|     rabarta: TechniqueRateStat, | ||||
|     #[serde(rename = "Grants")] | ||||
|     grants: TechniqueRateStat, | ||||
|     #[serde(rename = "Deband")] | ||||
|     deband: TechniqueRateStat, | ||||
|     #[serde(rename = "Jellen")] | ||||
|     jellen: TechniqueRateStat, | ||||
|     #[serde(rename = "Zalure")] | ||||
|     zalure: TechniqueRateStat, | ||||
|     #[serde(rename = "Shifta")] | ||||
|     shifta: TechniqueRateStat, | ||||
|     #[serde(rename = "Ryuker")] | ||||
|     ryuker: TechniqueRateStat, | ||||
|     #[serde(rename = "Resta")] | ||||
|     resta: TechniqueRateStat, | ||||
|     #[serde(rename = "Anti")] | ||||
|     anti: TechniqueRateStat, | ||||
|     #[serde(rename = "Reverser")] | ||||
|     reverser: TechniqueRateStat, | ||||
|     #[serde(rename = "Megid")] | ||||
|     megid: TechniqueRateStat, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #[derive(Debug, Serialize, Deserialize)] | ||||
| struct TechniqueRates { | ||||
|     area1: TechniqueRate, | ||||
|     area2: TechniqueRate, | ||||
|     area3: TechniqueRate, | ||||
|     area4: TechniqueRate, | ||||
|     area5: TechniqueRate, | ||||
|     area6: TechniqueRate, | ||||
|     area7: TechniqueRate, | ||||
|     area8: TechniqueRate, | ||||
|     area9: TechniqueRate, | ||||
|     area10: TechniqueRate, | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| pub struct TechniqueTable { | ||||
| 
 | ||||
|     rates: TechniqueRates | ||||
| } | ||||
| 
 | ||||
| impl TechniqueTable { | ||||
|     pub fn new(episode: Episode, difficulty: Difficulty, section_id: SectionID) -> TechniqueTable { | ||||
|         TechniqueTable { | ||||
|             rates: load_data_file(episode, difficulty, section_id, "tech_rate.toml") | ||||
|         } | ||||
|     } | ||||
|         
 | ||||
|  | ||||
| @ -97,7 +97,8 @@ impl ToolTable { | ||||
|         let tool_rates = self.rates.get_by_area(map_area).iter(); | ||||
|         let tool_weights = WeightedIndex::new(tool_rates.clone().map(|(_, weights)| weights)).unwrap(); | ||||
|         
 | ||||
|         match tool_rates.map(|(ttype, _)| ttype).nth(tool_weights.sample(rng)).unwrap() { | ||||
|         let tool = tool_rates.map(|(ttype, _)| ttype).nth(tool_weights.sample(rng)).unwrap(); | ||||
|         match tool { | ||||
|             ToolRateType::Monomate => ToolType::Monomate, | ||||
|             ToolRateType::Dimate => ToolType::Dimate, | ||||
|             ToolRateType::Trimate => ToolType::Trimate, | ||||
| @ -124,9 +125,8 @@ impl ToolTable { | ||||
|             ToolRateType::ScapeDoll => ToolType::ScapeDoll, | ||||
|             ToolRateType::PhotonDrop => ToolType::PhotonDrop, | ||||
|             ToolRateType::Technique => todo!(), | ||||
|             //ToolRateType::Technique => self.tech_table.get_drop(area, rng),
 | ||||
|             //ToolRateType::Technique => self.tech_table.get_drop(map_area, rng),
 | ||||
|         } | ||||
|         //let attribute_weights = WeightedIndex::new(&[rates.none, rates.native, rates.abeast, rates.machine, rates.dark, rates.hit]).unwrap();
 | ||||
|     } | ||||
| 
 | ||||
|     pub fn get_drop<R: Rng>(&self, map_area: &MapVariantType, rng: &mut R) -> Option<ItemDetail> { | ||||
|  | ||||
| @ -115,6 +115,7 @@ impl Hash for StackedItemKey { | ||||
|             ItemDetail::Shield(s) => s.shield.value().hash(hasher), | ||||
|             ItemDetail::Unit(u) => u.unit.value().hash(hasher), | ||||
|             ItemDetail::Tool(t) => t.tool.value().hash(hasher), | ||||
|             ItemDetail::TechniqueDisk(t) => t.tech.hash(hasher), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user