wicked-waifus-rs/game-server/src/logic/role/mod.rs
2024-09-11 19:37:46 +03:00

89 lines
2.3 KiB
Rust

use std::collections::HashMap;
use common::time_util;
use shorekeeper_data::role_info_data;
use shorekeeper_protocol::{ArrayIntInt, RoleData, RoleInfo};
mod formation;
pub use formation::RoleFormation;
pub struct Role {
pub role_id: i32,
pub name: String,
pub level: i32,
pub exp: i32,
pub breakthrough: i32,
pub skill_map: HashMap<i32, i32>,
pub star: i32,
pub favor: i32,
pub create_time: u32,
}
impl Role {
pub const MAIN_CHARACTER_MALE_ID: i32 = 1501;
pub const MAIN_CHARACTER_FEMALE_ID: i32 = 1502;
pub fn new(role_id: i32) -> Self {
let data = role_info_data::iter().find(|d| d.id == role_id).unwrap();
Self {
role_id,
name: String::with_capacity(0),
level: data.max_level,
exp: 0,
breakthrough: 0,
skill_map: HashMap::new(), // TODO!
star: 0,
favor: 0,
create_time: time_util::unix_timestamp() as u32,
}
}
pub fn to_protobuf(&self) -> RoleInfo {
RoleInfo {
role_id: self.role_id,
name: self.name.clone(),
level: self.level,
exp: self.exp,
breakthrough: self.breakthrough,
create_time: self.create_time,
skills: self
.skill_map
.iter()
.map(|(k, v)| ArrayIntInt { key: *k, value: *v })
.collect(),
star: self.star,
favor: self.favor,
..Default::default()
}
}
pub fn load_from_save(data: RoleData) -> Self {
Self {
role_id: data.role_id,
name: data.name,
level: data.level,
exp: data.exp,
breakthrough: data.breakthrough,
skill_map: data.skill_map,
star: data.star,
favor: data.favor,
create_time: data.create_time,
}
}
pub fn build_save_data(&self) -> RoleData {
RoleData {
role_id: self.role_id,
name: self.name.clone(),
level: self.level,
exp: self.exp,
breakthrough: self.breakthrough,
skill_map: self.skill_map.clone(),
star: self.star,
favor: self.favor,
create_time: self.create_time,
..Default::default()
}
}
}