Merge pull request 'properly define TradeRequest' (#13) from traderequest into master
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #13
This commit is contained in:
commit
564a1ce165
@ -1,5 +1,6 @@
|
||||
#![allow(unused_must_use)]
|
||||
use std::io::{SeekFrom};
|
||||
use std::convert::TryInto;
|
||||
|
||||
use psopacket::{pso_message, PSOPacketData};
|
||||
use crate::{PSOPacketData, PacketParseError};
|
||||
@ -684,11 +685,122 @@ pub struct BoxDropRequest {
|
||||
|
||||
//}
|
||||
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum TradeRequestInitializeCommand {
|
||||
Initialize,
|
||||
Respond,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub enum TradeRequestCommand {
|
||||
Initialize(TradeRequestInitializeCommand, u32),
|
||||
AddItem(u32, u32),
|
||||
RemoveItem(u32, u32),
|
||||
Confirm,
|
||||
FinalConfirm,
|
||||
Unknown,
|
||||
}
|
||||
|
||||
impl PSOPacketData for TradeRequestCommand {
|
||||
fn from_bytes<R: std::io::Read + std::io::Seek>(cursor: &mut R) -> Result<Self, PacketParseError> {
|
||||
let mut bytes = [0u8; 12];
|
||||
let len = cursor.read(&mut bytes).map_err(|_| PacketParseError::ReadError)?;
|
||||
if len != 12 {
|
||||
return Err(PacketParseError::NotEnoughBytes);
|
||||
}
|
||||
|
||||
match bytes[0] {
|
||||
0 => {
|
||||
let meseta = u32::from_le_bytes(bytes[8..12].try_into().map_err(|_| PacketParseError::InvalidValue)?);
|
||||
match bytes[1] {
|
||||
0 => Ok(TradeRequestCommand::Initialize(TradeRequestInitializeCommand::Initialize, meseta)),
|
||||
2 => Ok(TradeRequestCommand::Initialize(TradeRequestInitializeCommand::Respond, meseta)),
|
||||
_ => Err(PacketParseError::InvalidValue)
|
||||
}
|
||||
},
|
||||
1 => {
|
||||
Ok(TradeRequestCommand::AddItem(
|
||||
u32::from_le_bytes(bytes[4..8].try_into().map_err(|_| PacketParseError::InvalidValue)?),
|
||||
u32::from_le_bytes(bytes[8..12].try_into().map_err(|_| PacketParseError::InvalidValue)?),
|
||||
))
|
||||
},
|
||||
2 => {
|
||||
Ok(TradeRequestCommand::RemoveItem(
|
||||
u32::from_le_bytes(bytes[4..8].try_into().map_err(|_| PacketParseError::InvalidValue)?),
|
||||
u32::from_le_bytes(bytes[8..12].try_into().map_err(|_| PacketParseError::InvalidValue)?),
|
||||
))
|
||||
},
|
||||
3 => {
|
||||
Ok(TradeRequestCommand::Confirm)
|
||||
},
|
||||
4 => {
|
||||
Ok(TradeRequestCommand::FinalConfirm)
|
||||
},
|
||||
6 => {
|
||||
Ok(TradeRequestCommand::Unknown)
|
||||
},
|
||||
_ => {
|
||||
Err(PacketParseError::InvalidValue)
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn as_bytes(&self) -> Vec<u8> {
|
||||
match self {
|
||||
TradeRequestCommand::Initialize(cmd, meseta) => {
|
||||
vec![0u8,
|
||||
match cmd {
|
||||
TradeRequestInitializeCommand::Initialize => 0,
|
||||
TradeRequestInitializeCommand::Respond => 2,
|
||||
},
|
||||
0, 0,
|
||||
0, 0, 0, 0]
|
||||
.into_iter()
|
||||
.chain(meseta.to_le_bytes().to_vec().into_iter())
|
||||
.collect()
|
||||
},
|
||||
TradeRequestCommand::AddItem(item_id, amount) => {
|
||||
vec![1u8, 0, 0, 0]
|
||||
.into_iter()
|
||||
.chain(item_id.to_le_bytes().to_vec().into_iter())
|
||||
.chain(amount.to_le_bytes().to_vec().into_iter())
|
||||
.collect()
|
||||
},
|
||||
TradeRequestCommand::RemoveItem(item_id, amount) => {
|
||||
vec![2u8, 0, 0, 0]
|
||||
.into_iter()
|
||||
.chain(item_id.to_le_bytes().to_vec().into_iter())
|
||||
.chain(amount.to_le_bytes().to_vec().into_iter())
|
||||
.collect()
|
||||
},
|
||||
TradeRequestCommand::Confirm => {
|
||||
vec![3u8]
|
||||
.into_iter()
|
||||
.chain(std::iter::repeat(0).take(11))
|
||||
.collect()
|
||||
},
|
||||
TradeRequestCommand::FinalConfirm => {
|
||||
vec![4u8]
|
||||
.into_iter()
|
||||
.chain(std::iter::repeat(0).take(11))
|
||||
.collect()
|
||||
},
|
||||
TradeRequestCommand::Unknown => {
|
||||
vec![6u8]
|
||||
.into_iter()
|
||||
.chain(std::iter::repeat(0).take(11))
|
||||
.collect()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[pso_message(0xA6)]
|
||||
pub struct TradeRequest {
|
||||
unknown1: u32,
|
||||
unknown2: u32,
|
||||
unknown3: u32,
|
||||
pub trade: TradeRequestCommand,
|
||||
}
|
||||
|
||||
//#[pso_message(0xA8)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user