add a few message packets
This commit is contained in:
parent
9f3e165633
commit
012d98cb6e
@ -18,25 +18,89 @@ pub struct PlayerWalking {
|
||||
z: f32,
|
||||
}
|
||||
|
||||
#[pso_message(0x42)]
|
||||
pub struct PlayerRunning {
|
||||
x: f32,
|
||||
z: f32,
|
||||
}
|
||||
|
||||
#[pso_message(0x3E)]
|
||||
pub struct PlayerStopped {
|
||||
unknown1: u32,
|
||||
unknown2: u32,
|
||||
x: f32,
|
||||
y: f32,
|
||||
z: f32,
|
||||
}
|
||||
|
||||
#[pso_message(0x1F)]
|
||||
pub struct PlayerChangedMap {
|
||||
unknown1: u32,
|
||||
unknown2: u32,
|
||||
x: f32,
|
||||
y: f32,
|
||||
z: f32,
|
||||
}
|
||||
|
||||
#[pso_message(0x1F)]
|
||||
pub struct PlayerChangedMap2 {
|
||||
unknown1: u32,
|
||||
}
|
||||
|
||||
|
||||
#[pso_message(0x3F)]
|
||||
pub struct PlayerLoadedIn {
|
||||
unknown1: u32,
|
||||
unknown2: u32,
|
||||
x: f32,
|
||||
y: f32,
|
||||
z: f32,
|
||||
}
|
||||
|
||||
|
||||
#[pso_message(0x23)]
|
||||
pub struct PlayerDoneChangingMap {
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum GameMessage {
|
||||
PlayerWalking(PlayerWalking),
|
||||
PlayerRunning(PlayerRunning),
|
||||
PlayerStopped(PlayerStopped),
|
||||
PlayerLoadedIn(PlayerLoadedIn),
|
||||
PlayerChangedMap(PlayerChangedMap),
|
||||
PlayerChangedMap2(PlayerChangedMap2),
|
||||
PlayerDoneChangingMap(PlayerDoneChangingMap),
|
||||
}
|
||||
|
||||
impl PSOPacketData for GameMessage {
|
||||
fn from_bytes<R: std::io::Read + std::io::Seek>(mut cur: &mut R) -> Result<Self, PacketParseError> {
|
||||
let mut byte = [0u8; 1];
|
||||
let mut len = [0u8; 1];
|
||||
cur.read(&mut byte);
|
||||
cur.seek(SeekFrom::Current(-1)); // Cursor doesn't implement Peek?
|
||||
cur.read(&mut len);
|
||||
cur.seek(SeekFrom::Current(-2)); // Cursor doesn't implement Peek?
|
||||
match byte[0] {
|
||||
PlayerWalking::CMD => Ok(GameMessage::PlayerWalking(PlayerWalking::from_bytes(&mut cur)?)),
|
||||
PlayerRunning::CMD => Ok(GameMessage::PlayerRunning(PlayerRunning::from_bytes(&mut cur)?)),
|
||||
PlayerStopped::CMD => Ok(GameMessage::PlayerStopped(PlayerStopped::from_bytes(&mut cur)?)),
|
||||
PlayerLoadedIn::CMD => Ok(GameMessage::PlayerLoadedIn(PlayerLoadedIn::from_bytes(&mut cur)?)),
|
||||
PlayerChangedMap::CMD if len[0] == 6 => Ok(GameMessage::PlayerChangedMap(PlayerChangedMap::from_bytes(&mut cur)?)),
|
||||
PlayerChangedMap2::CMD if len[0] == 2 => Ok(GameMessage::PlayerChangedMap2(PlayerChangedMap2::from_bytes(&mut cur)?)),
|
||||
PlayerDoneChangingMap::CMD => Ok(GameMessage::PlayerDoneChangingMap(PlayerDoneChangingMap::from_bytes(&mut cur)?)),
|
||||
_ => Err(PacketParseError::WrongPacketCommand),
|
||||
}
|
||||
}
|
||||
fn as_bytes(&self) -> Vec<u8> {
|
||||
match self {
|
||||
GameMessage::PlayerWalking(data) => data.as_bytes(),
|
||||
GameMessage::PlayerRunning(data) => data.as_bytes(),
|
||||
GameMessage::PlayerStopped(data) => data.as_bytes(),
|
||||
GameMessage::PlayerLoadedIn(data) => data.as_bytes(),
|
||||
GameMessage::PlayerChangedMap(data) => data.as_bytes(),
|
||||
GameMessage::PlayerChangedMap2(data) => data.as_bytes(),
|
||||
GameMessage::PlayerDoneChangingMap(data) => data.as_bytes(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user