diff --git a/gameserver/src/game/context.rs b/gameserver/src/game/context.rs index e2dfeb1..af64dbd 100644 --- a/gameserver/src/game/context.rs +++ b/gameserver/src/game/context.rs @@ -59,7 +59,7 @@ where pub async fn send_changes(&mut self, session: &NetworkSession) -> Result<&T> { if self.player_info_changes.is_some() { let ptc_player_info_changed = PtcPlayerInfoChangedArg { - player_uid: session.player_uid().0, + player_uid: session.player_uid().raw(), player_info: self.player_info_changes.take().unwrap(), }; diff --git a/gameserver/src/net/handlers/hollow.rs b/gameserver/src/net/handlers/hollow.rs index 7157893..3109f04 100644 --- a/gameserver/src/net/handlers/hollow.rs +++ b/gameserver/src/net/handlers/hollow.rs @@ -37,7 +37,7 @@ pub async fn on_rpc_hollow_move( } let pos = PtcPositionInHollowChangedArg { - player_uid: session.player_uid().0, + player_uid: session.player_uid().raw(), hollow_level: arg.hollow_level, position: destination_pos, }; @@ -58,7 +58,7 @@ pub async fn on_rpc_end_battle( ) -> Result { tracing::info!("RpcEndBattle: {:?}", &arg); - let player_uid = session.player_uid().0; + let player_uid = session.player_uid().raw(); let (sync_event, hollow_finished) = session.context.hollow_grid_manager.battle_finished().await; if !hollow_finished { @@ -219,7 +219,7 @@ pub async fn on_rpc_run_hollow_event_graph( .await?; let ptc_dungeon_quest_finished = PtcDungeonQuestFinishedArg { - player_uid: session.player_uid().0, + player_uid: session.player_uid().raw(), quest_id: 1001000101, success: true, reward_items: phashmap![], @@ -249,7 +249,7 @@ pub async fn on_rpc_run_hollow_event_graph( .await?; let ptc_position_in_hollow_changed = PtcPositionInHollowChangedArg { - player_uid: session.player_uid().0, + player_uid: session.player_uid().raw(), hollow_level: 1, position: session .context @@ -371,13 +371,13 @@ pub async fn on_rpc_start_hollow_quest( &session .context .hollow_grid_manager - .sync_hollow_maps(session.player_uid().0, scene_uid) + .sync_hollow_maps(session.player_uid().raw(), scene_uid) .await, ) .await?; let ptc_position_in_hollow_changed = PtcPositionInHollowChangedArg { - player_uid: session.player_uid().0, + player_uid: session.player_uid().raw(), hollow_level: 1, position: session .context diff --git a/gameserver/src/net/handlers/login.rs b/gameserver/src/net/handlers/login.rs index 259b50e..5a8eb8d 100644 --- a/gameserver/src/net/handlers/login.rs +++ b/gameserver/src/net/handlers/login.rs @@ -1,7 +1,10 @@ use std::time::{SystemTime, UNIX_EPOCH}; use super::*; -use crate::{game::util, net::session::AccountUID}; +use crate::{ + game::util, + net::session::{AccountUID, PlayerUID}, +}; const DEFAULT_ACCOUNT_ID: u64 = 1; @@ -35,9 +38,9 @@ pub async fn on_rpc_create_player( .players .as_ref() .unwrap() - .len() as u64; + .len(); - let player_uid = account_uid.0 * 100 + player_count + 1; + let player_uid = PlayerUID::new(account_uid, player_count + 1); session .ns_prop_mgr .account_info @@ -46,9 +49,9 @@ pub async fn on_rpc_create_player( .players .as_mut() .unwrap() - .push(player_uid); + .push(player_uid.raw()); - Ok(RpcCreatePlayerRet::new(player_uid)) + Ok(RpcCreatePlayerRet::new(player_uid.raw())) } pub async fn on_ptc_get_server_timestamp( diff --git a/gameserver/src/net/handlers/world.rs b/gameserver/src/net/handlers/world.rs index ac24d3e..4be1552 100644 --- a/gameserver/src/net/handlers/world.rs +++ b/gameserver/src/net/handlers/world.rs @@ -254,7 +254,7 @@ pub async fn on_rpc_enter_world( let player_uid = *account.players.as_ref().unwrap().first().unwrap(); // get first id from list session - .set_cur_player(PlayerUID(player_uid), create_player(player_uid)) + .set_cur_player(PlayerUID::from(player_uid), create_player(player_uid)) .await?; let item_manager = &session.context.item_manager; diff --git a/gameserver/src/net/session.rs b/gameserver/src/net/session.rs index 5eb2ef6..f2efdcd 100644 --- a/gameserver/src/net/session.rs +++ b/gameserver/src/net/session.rs @@ -17,7 +17,21 @@ use super::{Packet, RequestBody, ResponseBody}; pub struct AccountUID(pub u64); #[derive(Clone, Copy, Debug)] -pub struct PlayerUID(pub u64); +pub struct PlayerUID(u64); + +impl PlayerUID { + pub const fn new(account_uid: AccountUID, index: usize) -> Self { + Self(account_uid.0 * 100 + index as u64) + } + + pub const fn from(raw: u64) -> Self { + Self(raw) + } + + pub const fn raw(&self) -> u64 { + self.0 + } +} pub struct NetworkSession { client_socket: Arc>,