param data packets
This commit is contained in:
parent
1cd790a3e6
commit
88a42695a1
@ -7,6 +7,7 @@ use std::io::{Read, Seek, SeekFrom};
|
|||||||
|
|
||||||
pub const PATCH_FILE_CHUNK_SIZE: u16 = 0x8000; // 32kb
|
pub const PATCH_FILE_CHUNK_SIZE: u16 = 0x8000; // 32kb
|
||||||
pub const GUILD_CARD_CHUNK_SIZE: usize = 0x6800;
|
pub const GUILD_CARD_CHUNK_SIZE: usize = 0x6800;
|
||||||
|
pub const PARAM_DATA_CHUNK_SIZE: usize = 0x6800;
|
||||||
|
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
type u8_str = u8;
|
type u8_str = u8;
|
||||||
@ -327,6 +328,74 @@ impl std::fmt::Debug for GuildcardDataChunk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[pso_packet(0x4EB)]
|
||||||
|
pub struct ParamDataRequest {
|
||||||
|
flag: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct ParamFile {
|
||||||
|
pub size: u32,
|
||||||
|
pub checksum: u32,
|
||||||
|
pub offset: u32,
|
||||||
|
pub filename: [u8; 0x40],
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct ParamDataHeader {
|
||||||
|
pub files: Vec<ParamFile>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PSOPacket for ParamDataHeader {
|
||||||
|
fn from_bytes(_data: &[u8]) -> Result<ParamDataHeader, PacketParseError> {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn as_bytes(&self) -> Vec<u8> {
|
||||||
|
let mut buf: Vec<u8> = Vec::new();
|
||||||
|
|
||||||
|
buf.extend_from_slice(&u32::to_le_bytes(self.files.len() as u32));
|
||||||
|
for f in &self.files {
|
||||||
|
buf.extend_from_slice(&u32::to_le_bytes(f.size));
|
||||||
|
buf.extend_from_slice(&u32::to_le_bytes(f.checksum));
|
||||||
|
buf.extend_from_slice(&u32::to_le_bytes(f.offset));
|
||||||
|
buf.extend_from_slice(&f.filename[..]);
|
||||||
|
}
|
||||||
|
while buf.len() % 4 != 0 {
|
||||||
|
buf.push(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
let pkt_len = (buf.len() + 4) as u16;
|
||||||
|
let mut prebuf: Vec<u8> = Vec::new();
|
||||||
|
prebuf.extend_from_slice(&u16::to_le_bytes(pkt_len));
|
||||||
|
prebuf.extend_from_slice(&u16::to_le_bytes(0x1EB));
|
||||||
|
prebuf.append(&mut buf);
|
||||||
|
prebuf
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Debug for ParamDataHeader {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
|
write!(f, "packet ParamDataHeader{{\n").unwrap();
|
||||||
|
write!(f, " files: [..]\n").unwrap();
|
||||||
|
write!(f, "}}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pso_packet(0x3EB)]
|
||||||
|
pub struct ParamDataChunkRequest {
|
||||||
|
flag: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pso_packet(0x2EB)]
|
||||||
|
pub struct ParamDataChunk {
|
||||||
|
pub flag: u32,
|
||||||
|
pub chunk: u32,
|
||||||
|
pub data: [u8; 0x6800], // TODO: why wont the const work here? (blame macros?)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user