JaneDoe-ZS/nap_gameserver/src/handlers/player.rs
xeon 84397a847e Implement proper Avatar and Buddy UnitID (Base/Robot), refactor template id
TemplateID::new now returns Result<T, TemplateNotFoundError>
Cleanup code in some of new handlers
2024-08-06 21:42:03 +03:00

98 lines
2.5 KiB
Rust

use data::tables::AvatarBaseID;
use crate::logic::game::{GameInstance, LogicError};
use crate::logic::procedure::ProcedureAction;
use super::core::NetError;
use super::*;
pub async fn on_get_player_basic_info(
_session: &NetSession,
player: &mut Player,
_req: GetPlayerBasicInfoCsReq,
) -> NetResult<GetPlayerBasicInfoScRsp> {
Ok(GetPlayerBasicInfoScRsp {
retcode: Retcode::RetSucc.into(),
basic_info: Some(player.basic_data_model.player_basic_info()),
})
}
pub async fn on_create_role(
session: &NetSession,
player: &mut Player,
req: CreateRoleCsReq,
) -> NetResult<CreateRoleScRsp> {
let avatar_id = AvatarBaseID::new(req.avatar_id).map_err(LogicError::from)?;
let GameInstance::Fresh(fresh_game) = &mut player.game_instance else {
return Err(NetError::from(Retcode::RetFail));
};
fresh_game
.procedure_mgr
.on_action(ProcedureAction::SelectRole)
.map_err(LogicError::from)?;
player.set_frontend_avatar(avatar_id)?;
session
.notify(PlayerSyncScNotify {
basic_info: Some(player.basic_data_model.player_basic_info()),
..Default::default()
})
.await?;
Ok(CreateRoleScRsp {
retcode: Retcode::RetSucc.into(),
})
}
pub async fn on_get_player_transaction(
_session: &NetSession,
_player: &mut Player,
_req: GetPlayerTransactionCsReq,
) -> NetResult<GetPlayerTransactionScRsp> {
Ok(GetPlayerTransactionScRsp {
retcode: Retcode::RetSucc.into(),
transaction: format!("{}-{}", 1337, 100),
})
}
pub async fn on_mod_nickname(
session: &NetSession,
_player: &mut Player,
_req: ModNicknameCsReq,
) -> NetResult<ModNicknameScRsp> {
_player.basic_data_model.nick_name = Some(_req.nick_name.to_string());
session
.notify(PlayerSyncScNotify {
basic_info: Some(_player.basic_data_model.player_basic_info()),
..Default::default()
})
.await?;
Ok(ModNicknameScRsp {
retcode: Retcode::RetSucc.into(),
..Default::default()
})
}
pub async fn on_keep_alive(
_session: &NetSession,
_player: &mut Player,
_ntf: KeepAliveNotify,
) -> NetResult<()> {
Ok(())
}
pub async fn on_player_logout(
session: &NetSession,
_player: &mut Player,
_ntf: PlayerLogoutNotify,
) -> NetResult<()> {
tracing::info!(
"player logout requested (uid: {})",
session.player_uid().unwrap()
);
Err(NetError::Logout)
}