bunch of item additions
This commit is contained in:
parent
477db05b24
commit
355de1a8a9
46
src/item/armor.rs
Normal file
46
src/item/armor.rs
Normal file
@ -0,0 +1,46 @@
|
||||
use std::convert::{TryFrom, Into};
|
||||
use std::io::{Read, Seek};
|
||||
use crate::{PSOPacketData, PacketParseError};
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum ArmorType {
|
||||
Frame,
|
||||
Armor,
|
||||
}
|
||||
|
||||
impl ArmorType {
|
||||
pub fn value(&self) -> [u8; 3] {
|
||||
match self {
|
||||
ArmorType::Frame => [0x01, 0x01, 0x00],
|
||||
ArmorType::Armor => [0x01, 0x01, 0x00],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO: TryFrom<&str>
|
||||
// TODO Into<String>
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub struct Armor {
|
||||
pub armor: ArmorType,
|
||||
pub dfp: u8,
|
||||
pub evp: u8,
|
||||
pub slots: u8,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
impl Armor {
|
||||
pub fn as_bytes(&self) -> [u8; 16] {
|
||||
let mut result = [0; 16];
|
||||
result[0..3].copy_from_slice(&self.armor.value());
|
||||
// TODO: other attrs
|
||||
|
||||
result
|
||||
}
|
||||
}
|
@ -1,4 +1,7 @@
|
||||
pub mod weapon;
|
||||
pub mod tool;
|
||||
pub mod armor;
|
||||
pub mod shield;
|
||||
|
||||
use std::io::{Read, Seek};
|
||||
use crate::{PSOPacketData, PacketParseError};
|
||||
@ -8,11 +11,11 @@ use crate::{PSOPacketData, PacketParseError};
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub enum Item {
|
||||
Weapon(weapon::Weapon),
|
||||
//Armor(Armor),
|
||||
//Shield(Shield),
|
||||
Armor(armor::Armor),
|
||||
Shield(shield::Shield),
|
||||
//Unit(Unit),
|
||||
//Mag(Mag),
|
||||
//Tool(Tool),
|
||||
Tool(tool::Tool),
|
||||
}
|
||||
|
||||
|
||||
@ -23,8 +26,17 @@ impl Item {
|
||||
pub fn as_bytes(&self) -> [u8; 16] {
|
||||
match self {
|
||||
Item::Weapon(wep) => wep.as_bytes(),
|
||||
Item::Armor(armor) => armor.as_bytes(),
|
||||
Item::Shield(shield) => shield.as_bytes(),
|
||||
Item::Tool(tool) => tool.as_bytes(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_stackable(&self) -> bool {
|
||||
match self {
|
||||
Item::Tool(_) => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
45
src/item/shield.rs
Normal file
45
src/item/shield.rs
Normal file
@ -0,0 +1,45 @@
|
||||
use std::convert::{TryFrom, Into};
|
||||
use std::io::{Read, Seek};
|
||||
use crate::{PSOPacketData, PacketParseError};
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum ShieldType {
|
||||
Barrier,
|
||||
Shield,
|
||||
}
|
||||
|
||||
impl ShieldType {
|
||||
pub fn value(&self) -> [u8; 3] {
|
||||
match self {
|
||||
ShieldType::Barrier => [0x01, 0x02, 0x00],
|
||||
ShieldType::Shield => [0x01, 0x02, 0x01],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO: TryFrom<&str>
|
||||
// TODO Into<String>
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub struct Shield {
|
||||
pub shield: ShieldType,
|
||||
pub dfp: u8,
|
||||
pub evp: u8,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
impl Shield {
|
||||
pub fn as_bytes(&self) -> [u8; 16] {
|
||||
let mut result = [0; 16];
|
||||
result[0..3].copy_from_slice(&self.shield.value());
|
||||
// TODO: other attrs
|
||||
|
||||
result
|
||||
}
|
||||
}
|
64
src/item/tool.rs
Normal file
64
src/item/tool.rs
Normal file
@ -0,0 +1,64 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum ToolType {
|
||||
Monomate,
|
||||
Dimate,
|
||||
Trimate,
|
||||
Monofluid,
|
||||
Difluid,
|
||||
Trifluid,
|
||||
|
||||
ScapeDoll,
|
||||
}
|
||||
|
||||
|
||||
impl ToolType {
|
||||
pub fn is_stackable(&self) -> bool {
|
||||
match self {
|
||||
ToolType::Monomate => true,
|
||||
ToolType::Dimate => true,
|
||||
ToolType::Trimate => true,
|
||||
ToolType::Monofluid => true,
|
||||
ToolType::Difluid => true,
|
||||
ToolType::Trifluid => true,
|
||||
ToolType::ScapeDoll => false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn value(&self) -> [u8; 3] {
|
||||
match self {
|
||||
ToolType::Monomate => [0x03, 0x00, 0x00],
|
||||
ToolType::Monofluid => [0x03, 0x01, 0x00],
|
||||
_ => panic!()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub struct Tool {
|
||||
pub tool: ToolType,
|
||||
pub count: usize,
|
||||
}
|
||||
|
||||
impl Tool {
|
||||
pub fn new(tool: ToolType, count: usize) -> Tool {
|
||||
Tool {
|
||||
tool: tool,
|
||||
count: count,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_bytes(&self) -> [u8; 16] {
|
||||
let mut result = [0; 16];
|
||||
result[0..3].copy_from_slice(&self.tool.value());
|
||||
result[5] = self.count as u8;
|
||||
|
||||
result
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ use std::io::{Read, Seek};
|
||||
use crate::{PSOPacketData, PacketParseError};
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum Attribute {
|
||||
Native,
|
||||
ABeast,
|
||||
@ -13,14 +13,14 @@ pub enum Attribute {
|
||||
Hit
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub struct WeaponAttribute {
|
||||
attr: Attribute,
|
||||
value: u8,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum WeaponSpecial {
|
||||
Draw,
|
||||
Drain,
|
||||
@ -68,7 +68,7 @@ pub enum WeaponTypeError {
|
||||
UnknownWeapon(String)
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum WeaponType {
|
||||
Saber,
|
||||
Handgun,
|
||||
@ -76,7 +76,7 @@ pub enum WeaponType {
|
||||
}
|
||||
|
||||
impl WeaponType {
|
||||
fn value(&self) -> [u8; 3] {
|
||||
pub fn value(&self) -> [u8; 3] {
|
||||
match self {
|
||||
WeaponType::Saber => [0x00, 0x01, 0x00],
|
||||
WeaponType::Handgun => [0x00, 0x06, 0x00],
|
||||
@ -108,7 +108,7 @@ impl Into<String> for WeaponType {
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub struct Weapon {
|
||||
pub weapon: WeaponType,
|
||||
pub special: Option<WeaponSpecial>,
|
||||
@ -118,7 +118,7 @@ pub struct Weapon {
|
||||
|
||||
|
||||
impl Weapon {
|
||||
pub fn new(&self, wep: WeaponType) -> Weapon {
|
||||
pub fn new(wep: WeaponType) -> Weapon {
|
||||
Weapon {
|
||||
weapon: wep,
|
||||
special: None,
|
||||
@ -131,33 +131,9 @@ impl Weapon {
|
||||
let mut result = [0u8; 16];
|
||||
result[0..3].copy_from_slice(&self.weapon.value());
|
||||
result[3] = self.grind;
|
||||
//result.extend_from_slice(&self.weapon.value());
|
||||
//result.push(self.grind);
|
||||
|
||||
//result.extend_from_slice(&[0,0,0,0]);
|
||||
//result.extend_from_slice(&[0,0,0,0]);
|
||||
//result.extend_from_slice(&[0,0,0,0]);
|
||||
|
||||
// TODO: percents
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*impl PSOPacketData for Weapon{
|
||||
fn from_bytes<R: Read + Seek>(cursor: &mut R) -> Result<Self, PacketParseError> {
|
||||
unimplemented!()
|
||||
}
|
||||
fn as_bytes(&self) -> Vec<u8> {
|
||||
let mut result = Vec::new();
|
||||
result.extend_from_slice(&self.weapon.value());
|
||||
result.push(self.grind);
|
||||
|
||||
result.extend_from_slice(&[0,0,0,0]);
|
||||
result.extend_from_slice(&[0,0,0,0]);
|
||||
result.extend_from_slice(&[0,0,0,0]);
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
|
||||
}*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user