|
@ -131,6 +131,7 @@ fn generate_param_data(path: &str) -> (ParamDataHeader, Vec<u8>) { |
|
|
}, buffer)
|
|
|
}, buffer)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Clone)]
|
|
|
struct ClientState {
|
|
|
struct ClientState {
|
|
|
param_index: usize,
|
|
|
param_index: usize,
|
|
|
user: Option<UserAccount>,
|
|
|
user: Option<UserAccount>,
|
|
@ -464,8 +465,9 @@ impl<EG: EntityGateway> ServerState for CharacterServerState<EG> { |
|
|
mod test {
|
|
|
mod test {
|
|
|
use super::*;
|
|
|
use super::*;
|
|
|
use crate::entity::account::UserSettings;
|
|
|
use crate::entity::account::UserSettings;
|
|
|
use libpso::character::settings;
|
|
|
|
|
|
|
|
|
use libpso::character::{settings, character};
|
|
|
use std::time::SystemTime;
|
|
|
use std::time::SystemTime;
|
|
|
|
|
|
use crate::entity::gateway::{InMemoryGateway};
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn test_option_send() {
|
|
|
fn test_option_send() {
|
|
@ -521,4 +523,58 @@ mod test { |
|
|
let bytes = send[0].1.as_bytes();
|
|
|
let bytes = send[0].1.as_bytes();
|
|
|
assert!(bytes == [0xC, 0, 0xE8, 0x02, 0,0,0,0, 1,0,0,0]);
|
|
|
assert!(bytes == [0xC, 0, 0xE8, 0x02, 0,0,0,0, 1,0,0,0]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn test_character_create() {
|
|
|
|
|
|
let TestData = InMemoryGateway::new();
|
|
|
|
|
|
let mut fake_user = ClientState::new();
|
|
|
|
|
|
fake_user.user = Some(UserAccount {
|
|
|
|
|
|
id: 3,
|
|
|
|
|
|
username: "hi3".to_string(),
|
|
|
|
|
|
password: bcrypt::hash("qwer", 5).unwrap(),
|
|
|
|
|
|
guildcard: Some(3),
|
|
|
|
|
|
team_id: None,
|
|
|
|
|
|
banned: false,
|
|
|
|
|
|
muted_until: SystemTime::now(),
|
|
|
|
|
|
created_at: SystemTime::now(),
|
|
|
|
|
|
flags: 0,
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
let mut server = CharacterServerState::new(TestData.clone());
|
|
|
|
|
|
server.clients.insert(ClientId(1), fake_user.clone());
|
|
|
|
|
|
let mut send = server.handle(ClientId(1), &RecvCharacterPacket::SetFlag(SetFlag {flags: 1})).unwrap().collect::<Vec<_>>();
|
|
|
|
|
|
assert!(TestData.get_user_by_id(3).unwrap().flags == 1);
|
|
|
|
|
|
send = server.handle(ClientId(1), &RecvCharacterPacket::CharacterPreview(CharacterPreview {slot: 1, character: character::SelectScreenCharacter {
|
|
|
|
|
|
exp: 0,
|
|
|
|
|
|
level: 0,
|
|
|
|
|
|
guildcard: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
|
|
|
|
|
|
_unknown: [0, 0],
|
|
|
|
|
|
name_color: 4294967295,
|
|
|
|
|
|
model: 0,
|
|
|
|
|
|
_unused: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
|
|
|
|
name_color_checksum: 0,
|
|
|
|
|
|
section_id: 4,
|
|
|
|
|
|
ch_class: 2,
|
|
|
|
|
|
v2flags: 0,
|
|
|
|
|
|
version: 3,
|
|
|
|
|
|
v1flags: 49,
|
|
|
|
|
|
costume: 0,
|
|
|
|
|
|
skin: 4,
|
|
|
|
|
|
face: 0,
|
|
|
|
|
|
head: 0,
|
|
|
|
|
|
hair: 0,
|
|
|
|
|
|
hair_r: 0,
|
|
|
|
|
|
hair_g: 0,
|
|
|
|
|
|
hair_b: 0,
|
|
|
|
|
|
prop_x: 0.33333334,
|
|
|
|
|
|
prop_y: 0.0,
|
|
|
|
|
|
name: [9, 69, 116, 101, 115, 116, 32, 110, 97, 109, 101, 0, 0, 0, 0, 0], // "\tEtest name"
|
|
|
|
|
|
play_time: 0,
|
|
|
|
|
|
} })).unwrap().collect::<Vec<_>>();
|
|
|
|
|
|
assert!(send.len() == 2);
|
|
|
|
|
|
|
|
|
|
|
|
let chars = TestData.get_characters_by_user(&fake_user.user.unwrap());
|
|
|
|
|
|
assert!(chars[1].unwrap().character.name == [9, 69, 116, 101, 115, 116, 32, 110, 97, 109, 101, 0, 0, 0, 0, 0]);
|
|
|
|
|
|
assert!(chars[0].is_none());
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|