72 lines
2 KiB
Rust
72 lines
2 KiB
Rust
use shorekeeper_protocol::{
|
|
player_attr, BasicInfoNotify, PlayerAttr, PlayerAttrKey, PlayerAttrType, PlayerBasicData,
|
|
};
|
|
|
|
pub struct PlayerBasicInfo {
|
|
pub id: i32,
|
|
pub name: String,
|
|
pub sex: i32,
|
|
pub level: i32,
|
|
pub exp: i32,
|
|
pub head_photo: i32,
|
|
pub head_frame: i32,
|
|
}
|
|
|
|
impl PlayerBasicInfo {
|
|
pub fn build_notify(&self) -> BasicInfoNotify {
|
|
BasicInfoNotify {
|
|
id: self.id,
|
|
attributes: vec![
|
|
build_str_attr(PlayerAttrKey::Name, self.name.as_str()),
|
|
build_int_attr(PlayerAttrKey::Level, self.level),
|
|
build_int_attr(PlayerAttrKey::Exp, self.exp),
|
|
build_int_attr(PlayerAttrKey::Sex, self.sex),
|
|
build_int_attr(PlayerAttrKey::HeadPhoto, self.head_photo),
|
|
build_int_attr(PlayerAttrKey::HeadFrame, self.head_frame),
|
|
],
|
|
..Default::default()
|
|
}
|
|
}
|
|
|
|
pub fn load_from_save(data: PlayerBasicData) -> Self {
|
|
Self {
|
|
id: data.id,
|
|
name: data.name,
|
|
sex: data.sex,
|
|
level: data.level,
|
|
exp: data.exp,
|
|
head_photo: data.head_photo,
|
|
head_frame: data.head_frame,
|
|
}
|
|
}
|
|
|
|
pub fn build_save_data(&self) -> PlayerBasicData {
|
|
PlayerBasicData {
|
|
id: self.id,
|
|
name: self.name.clone(),
|
|
sex: self.sex,
|
|
level: self.level,
|
|
exp: self.exp,
|
|
head_photo: self.head_photo,
|
|
head_frame: self.head_frame,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[inline]
|
|
fn build_int_attr(key: PlayerAttrKey, value: i32) -> PlayerAttr {
|
|
PlayerAttr {
|
|
key: key.into(),
|
|
value_type: PlayerAttrType::Int32.into(),
|
|
value: Some(player_attr::Value::Int32Value(value)),
|
|
}
|
|
}
|
|
|
|
#[inline]
|
|
fn build_str_attr(key: PlayerAttrKey, value: &str) -> PlayerAttr {
|
|
PlayerAttr {
|
|
key: key.into(),
|
|
value_type: PlayerAttrType::String.into(),
|
|
value: Some(player_attr::Value::StringValue(value.to_string())),
|
|
}
|
|
}
|