Browse Source

item module init, base weapon structs

pull/3/head
jake 5 years ago
parent
commit
e0e0ad8ec7
  1. 30
      src/item/mod.rs
  2. 138
      src/item/weapon.rs
  3. 1
      src/lib.rs

30
src/item/mod.rs

@ -0,0 +1,30 @@
pub mod weapon;
use std::io::{Read, Seek};
use crate::{PSOPacketData, PacketParseError};
#[derive(Debug, Copy, Clone)]
pub enum Item {
Weapon(weapon::Weapon),
//Armor(Armor),
//Shield(Shield),
//Unit(Unit),
//Mag(Mag),
//Tool(Tool),
}
impl Item {
fn from_bytes<R: Read + Seek>(cursor: &mut R) -> Result<Self, PacketParseError> {
unimplemented!()
}
pub fn as_bytes(&self) -> [u8; 16] {
match self {
Item::Weapon(wep) => wep.as_bytes(),
}
}
}

138
src/item/weapon.rs

@ -0,0 +1,138 @@
use std::io::{Read, Seek};
use crate::{PSOPacketData, PacketParseError};
#[derive(Debug, Copy, Clone)]
pub enum Attribute {
Native,
ABeast,
Machine,
Dark,
Hit
}
#[derive(Debug, Copy, Clone)]
pub struct WeaponAttribute {
attr: Attribute,
value: u8,
}
#[derive(Debug, Copy, Clone)]
pub enum WeaponSpecial {
Draw,
Drain,
Fill,
Gush,
Heart,
Mind,
Soul,
Geist,
Masters,
Lords,
Kings,
Charge,
Spirit,
Berserk,
Ice,
Frost,
Freeze,
Blizzard,
Bind,
Hold,
Seize,
Arrest,
Heat,
Fire,
Flame,
Burning,
Shock,
Thunder,
Storm,
Tempest,
Dim,
Shadow,
Dark,
Hell,
Panic,
Riot,
Havoc,
Chaos,
Devils,
Demons,
}
#[derive(Debug, Copy, Clone)]
pub enum WeaponType {
Saber,
Handgun,
Cane,
}
impl WeaponType {
fn value(&self) -> [u8; 3] {
match self {
WeaponType::Saber => [0x00, 0x01, 0x00],
WeaponType::Handgun => [0x00, 0x06, 0x00],
WeaponType::Cane => [0x00, 0x0A, 0x00],
}
}
}
#[derive(Debug, Copy, Clone)]
pub struct Weapon {
pub weapon: WeaponType,
pub special: Option<WeaponSpecial>,
pub grind: u8,
pub attrs: [Option<WeaponAttribute>; 3],
}
impl Weapon {
pub fn new(&self, wep: WeaponType) -> Weapon {
Weapon {
weapon: wep,
special: None,
grind: 0,
attrs: [None; 3]
}
}
pub fn as_bytes(&self) -> [u8; 16] {
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]);
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
}
}*/

1
src/lib.rs

@ -6,6 +6,7 @@ pub mod crypto;
pub mod packet;
pub mod character;
pub mod util;
pub mod item;
use std::io::{Read, Seek};
#[derive(Debug, PartialEq)]

Loading…
Cancel
Save