properly show techs and new FOs start with foie 1

This commit is contained in:
jake 2020-01-25 13:29:01 -08:00
parent a74941441b
commit 28a30cb06f
3 changed files with 33 additions and 27 deletions

View File

@ -127,7 +127,7 @@ pub struct CharacterAppearance {
#[derive(Clone, Debug, PartialEq, Eq, Hash)] #[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum Techniques { pub enum Technique {
Foie, Foie,
Gifoie, Gifoie,
Rafoie, Rafoie,
@ -150,11 +150,11 @@ pub enum Techniques {
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct TechLevel(u8); pub struct TechLevel(pub u8);
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct CharacterTechniques { pub struct CharacterTechniques {
techs: HashMap<Techniques, TechLevel> techs: HashMap<Technique, TechLevel>
} }
impl CharacterTechniques { impl CharacterTechniques {
@ -164,38 +164,38 @@ impl CharacterTechniques {
} }
} }
fn set_tech(&mut self, tech: Techniques, level: TechLevel) { pub fn set_tech(&mut self, tech: Technique, level: TechLevel) {
self.techs.insert(tech, level); self.techs.insert(tech, level);
} }
// from_bytes // from_bytes
fn as_bytes(&self) -> [u8; 20] { pub fn as_bytes(&self) -> [u8; 20] {
self.techs.iter() self.techs.iter()
.fold([0xFF; 20], |mut techlist, (tech, level)| { .fold([0xFF; 20], |mut techlist, (tech, level)| {
let index = match tech { let index = match tech {
Techniques::Foie => 0, Technique::Foie => 0,
Techniques::Gifoie => 1, Technique::Gifoie => 1,
Techniques::Rafoie => 2, Technique::Rafoie => 2,
Techniques::Zonde => 3, Technique::Barta => 3,
Techniques::Gizonde => 4, Technique::Gibarta => 4,
Techniques::Razonde => 5, Technique::Rabarta => 5,
Techniques::Barta => 6, Technique::Zonde => 6,
Techniques::Gibarta => 7, Technique::Gizonde => 7,
Techniques::Rabarta => 8, Technique::Razonde => 8,
Techniques::Grants => 9, Technique::Grants => 9,
Techniques::Megid => 10, Technique::Deband => 10,
Techniques::Shifta => 11, Technique::Jellen => 11,
Techniques::Deband => 12, Technique::Zalure => 12,
Techniques::Jellen => 13, Technique::Shifta => 13,
Techniques::Zalure => 14, Technique::Ryuker => 14,
Techniques::Resta => 15, Technique::Resta => 15,
Techniques::Anti => 16, Technique::Anti => 16,
Techniques::Reverser => 17, Technique::Reverser => 17,
Techniques::Ryuker => 18, Technique::Megid => 18,
}; };
techlist[index] = level.0; techlist[index] = level.0 - 1;
techlist techlist
}) })
} }

View File

@ -18,7 +18,7 @@ use libpso::{utf8_to_array, utf8_to_utf16_array};
use crate::entity::gateway::EntityGateway; use crate::entity::gateway::EntityGateway;
use crate::entity::account::{UserAccount, USERFLAG_NEWCHAR, USERFLAG_DRESSINGROOM}; use crate::entity::account::{UserAccount, USERFLAG_NEWCHAR, USERFLAG_DRESSINGROOM};
use crate::entity::item::{ItemDetail, ItemLocation, Weapon, Armor, Shield, Tool}; use crate::entity::item::{ItemDetail, ItemLocation, Weapon, Armor, Shield, Tool};
use crate::entity::character::{Character, CharacterClass}; use crate::entity::character::{Character, CharacterClass, Technique, TechLevel};
use crate::login::login::get_login_status; use crate::login::login::get_login_status;
@ -187,12 +187,17 @@ pub struct CharacterServerState<EG: EntityGateway> {
fn new_character<EG: EntityGateway>(entity_gateway: &mut EG, user: &UserAccount, preview: &CharacterPreview) { fn new_character<EG: EntityGateway>(entity_gateway: &mut EG, user: &UserAccount, preview: &CharacterPreview) {
let mut char = entity_gateway.new_character_by_user(&user); let mut char = entity_gateway.new_character_by_user(&user);
new_character_from_preview(&mut char, preview); new_character_from_preview(&mut char, preview);
match char.char_class {
CharacterClass::FOmar | CharacterClass::FOmarl| CharacterClass::FOnewm | CharacterClass::FOnewearl => char.techs.set_tech(Technique::Foie, TechLevel(1)),
_ => {}
}
entity_gateway.set_character(&char); entity_gateway.set_character(&char);
let new_weapon = match char.char_class { let new_weapon = match char.char_class {
CharacterClass::HUmar | CharacterClass::HUnewearl | CharacterClass::HUcast | CharacterClass::HUcaseal => item::weapon::WeaponType::Saber, CharacterClass::HUmar | CharacterClass::HUnewearl | CharacterClass::HUcast | CharacterClass::HUcaseal => item::weapon::WeaponType::Saber,
CharacterClass::RAmar | CharacterClass::RAmarl | CharacterClass::RAcast | CharacterClass::RAcaseal => item::weapon::WeaponType::Handgun, CharacterClass::RAmar | CharacterClass::RAmarl | CharacterClass::RAcast | CharacterClass::RAcaseal => item::weapon::WeaponType::Handgun,
CharacterClass::FOmar| CharacterClass::FOmarl| CharacterClass::FOnewm | CharacterClass::FOnewearl => item::weapon::WeaponType::Cane, CharacterClass::FOmar | CharacterClass::FOmarl| CharacterClass::FOnewm | CharacterClass::FOnewearl => item::weapon::WeaponType::Cane,
}; };
entity_gateway.new_item( entity_gateway.new_item(

View File

@ -67,6 +67,7 @@ impl<'a> CharacterBytesBuilder<'a> {
hair_b: character.appearance.hair_b, hair_b: character.appearance.hair_b,
prop_x: character.appearance.prop_x, prop_x: character.appearance.prop_x,
prop_y: character.appearance.prop_y, prop_y: character.appearance.prop_y,
techniques: character.techs.as_bytes(),
..character::Character::default() ..character::Character::default()
} }
} }