ship packets
This commit is contained in:
parent
84fbe227d6
commit
1cb94e565c
@ -1,2 +1,3 @@
|
||||
pub mod login;
|
||||
pub mod patch;
|
||||
pub mod ship;
|
||||
|
77
src/packet/ship.rs
Normal file
77
src/packet/ship.rs
Normal file
@ -0,0 +1,77 @@
|
||||
use psopacket::pso_packet;
|
||||
use crate::{PSOPacket, PacketParseError, PSOPacketData};
|
||||
use crate::utf8_to_utf16_array;
|
||||
|
||||
use std::io::Read;
|
||||
|
||||
const BLOCK_MENU_ID: u32 = 1;
|
||||
|
||||
#[pso_packet(0x03)]
|
||||
pub struct ShipWelcome {
|
||||
#[utf8]
|
||||
copyright: [u8; 0x60],
|
||||
server_key: [u8; 48],
|
||||
client_key: [u8; 48],
|
||||
}
|
||||
|
||||
impl ShipWelcome {
|
||||
pub fn new(server_key: [u8; 48], client_key: [u8; 48]) -> ShipWelcome {
|
||||
let mut copyright = [0u8; 0x60];
|
||||
copyright[..0x4B].clone_from_slice(b"Phantasy Star Online Blue Burst Game Server. Copyright 1999-2004 SONICTEAM.");
|
||||
ShipWelcome {
|
||||
copyright: copyright,
|
||||
server_key: server_key,
|
||||
client_key: client_key,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub struct BlockEntry {
|
||||
menu: u32,
|
||||
item: u32,
|
||||
flags: u16,
|
||||
name: [u16; 0x11],
|
||||
}
|
||||
|
||||
impl PSOPacketData for BlockEntry {
|
||||
fn from_bytes<R: Read>(_cursor: &mut R) -> Result<Self, PacketParseError> {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
fn as_bytes(&self) -> Vec<u8> {
|
||||
let mut bytes = Vec::new();
|
||||
bytes.extend_from_slice(&u32::to_le_bytes(self.menu));
|
||||
bytes.extend_from_slice(&u32::to_le_bytes(self.item));
|
||||
bytes.extend_from_slice(&u16::to_le_bytes(self.flags));
|
||||
bytes.extend_from_slice(&unsafe { std::mem::transmute::<[u16; 0x11], [u8; 0x11*2]>(self.name) });
|
||||
bytes
|
||||
}
|
||||
}
|
||||
|
||||
#[pso_packet(0xA1)]
|
||||
pub struct ShipBlockList {
|
||||
shipblock: BlockEntry,
|
||||
blocks: Vec<BlockEntry>
|
||||
}
|
||||
|
||||
impl ShipBlockList {
|
||||
pub fn new(num_blocks: usize) -> ShipBlockList {
|
||||
ShipBlockList {
|
||||
shipblock: BlockEntry {
|
||||
menu: BLOCK_MENU_ID,
|
||||
item: 0,
|
||||
flags: 0,
|
||||
name: utf8_to_utf16_array!("Shipname", 0x11)
|
||||
},
|
||||
blocks: (0..num_blocks).map(|i| BlockEntry {
|
||||
menu: BLOCK_MENU_ID,
|
||||
item: i as u32 + 1,
|
||||
flags: 0,
|
||||
name: utf8_to_utf16_array!(format!("Block {}", i+1), 0x11)
|
||||
}).collect()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user