item module init, base weapon structs
This commit is contained in:
parent
93d98a3517
commit
e0e0ad8ec7
30
src/item/mod.rs
Normal file
30
src/item/mod.rs
Normal file
@ -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
Normal file
138
src/item/weapon.rs
Normal file
@ -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
|
||||
}
|
||||
|
||||
|
||||
}*/
|
@ -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…
x
Reference in New Issue
Block a user