Compare commits
No commits in common. "564a1ce165ac71e75124d95e1191c60c6f176203" and "315cfded37d7c4921cacf4122c1c1dc40198176c" have entirely different histories.
564a1ce165
...
315cfded37
@ -1,6 +1,5 @@
|
|||||||
#![allow(unused_must_use)]
|
#![allow(unused_must_use)]
|
||||||
use std::io::{SeekFrom};
|
use std::io::{SeekFrom};
|
||||||
use std::convert::TryInto;
|
|
||||||
|
|
||||||
use psopacket::{pso_message, PSOPacketData};
|
use psopacket::{pso_message, PSOPacketData};
|
||||||
use crate::{PSOPacketData, PacketParseError};
|
use crate::{PSOPacketData, PacketParseError};
|
||||||
@ -685,122 +684,11 @@ 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)]
|
#[pso_message(0xA6)]
|
||||||
pub struct TradeRequest {
|
pub struct TradeRequest {
|
||||||
pub trade: TradeRequestCommand,
|
unknown1: u32,
|
||||||
|
unknown2: u32,
|
||||||
|
unknown3: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
//#[pso_message(0xA8)]
|
//#[pso_message(0xA8)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user