1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-04-30 18:37:45 +00:00
kawari/src/world/ipc/npc_spawn.rs
Joshua Goins 0900d0b94e Implement basic character persistence, World <-> Lobby server communication
This is unfortunately lumped into one big commit, and is very hacky and WIP but
does indeed work! Since the Lobby and World server are two separate servers, it
uses it's own custom IPC packets (reusing the same packet structures as regular
game ones.)

The characters you create in the Lobby server are now saved in the World server,
but this is not yet reflected in the Lobby screen.
2025-03-21 19:56:16 -04:00

48 lines
1.5 KiB
Rust

use binrw::binrw;
use super::CommonSpawn;
#[binrw]
#[brw(little)]
#[derive(Debug, Clone, Default)]
pub struct NpcSpawn {
pub common: CommonSpawn,
pub padding: [u8; 10],
}
#[cfg(test)]
mod tests {
use std::{fs::read, io::Cursor, path::PathBuf};
use binrw::BinRead;
use crate::world::ipc::{CharacterMode, ObjectKind};
use super::*;
#[test]
fn read_npcspawn() {
let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
d.push("resources/tests/npc_spawn.bin");
let buffer = read(d).unwrap();
let mut buffer = Cursor::new(&buffer);
let npc_spawn = NpcSpawn::read_le(&mut buffer).unwrap();
assert_eq!(npc_spawn.common.hp_max, 1393);
assert_eq!(npc_spawn.common.hp_curr, 1393);
assert_eq!(npc_spawn.common.mp_curr, 10000);
assert_eq!(npc_spawn.common.mp_max, 10000);
assert_eq!(npc_spawn.common.display_flags, 0);
assert_eq!(npc_spawn.common.pos.x, -64.17707);
assert_eq!(npc_spawn.common.pos.y, -2.0206506);
assert_eq!(npc_spawn.common.pos.z, 15.913875);
assert_eq!(npc_spawn.common.model_chara, 411);
assert_eq!(npc_spawn.common.bnpc_base, 13498);
assert_eq!(npc_spawn.common.bnpc_name, 10261);
assert_eq!(npc_spawn.common.spawn_index, 56);
assert_eq!(npc_spawn.common.mode, CharacterMode::Normal);
assert_eq!(npc_spawn.common.object_kind, ObjectKind::BattleNpc);
assert_eq!(npc_spawn.common.subtype, 2);
}
}