From 79f3ac73b695613e044fea797deb797bfb685a2f Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 14 Apr 2025 16:18:03 -0400 Subject: [PATCH] Move player stat sending function to ZoneConnection --- src/bin/kawari-world.rs | 35 +-------------------------------- src/login/database.rs | 8 ++++---- src/world/chat_handler.rs | 2 +- src/world/connection.rs | 41 +++++++++++++++++++++++++++++++++++---- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/bin/kawari-world.rs b/src/bin/kawari-world.rs index 2053739..650fb4c 100644 --- a/src/bin/kawari-world.rs +++ b/src/bin/kawari-world.rs @@ -336,40 +336,7 @@ async fn client_loop( .await; // Stats - { - let attributes; - { - let mut game_data = game_data.lock().unwrap(); - - attributes = game_data.get_racial_base_attributes( - chara_details.chara_make.customize.subrace, - ); - } - - let ipc = ServerZoneIpcSegment { - op_code: ServerZoneIpcType::PlayerStats, - timestamp: timestamp_secs(), - data: ServerZoneIpcData::PlayerStats(PlayerStats { - strength: attributes.strength, - dexterity: attributes.dexterity, - vitality: attributes.vitality, - intelligence: attributes.intelligence, - mind: attributes.mind, - hp: connection.player_data.max_hp, - mp: connection.player_data.max_mp as u32, - ..Default::default() - }), - ..Default::default() - }; - - connection - .send_segment(PacketSegment { - source_actor: connection.player_data.actor_id, - target_actor: connection.player_data.actor_id, - segment_type: SegmentType::Ipc { data: ipc }, - }) - .await; - } + connection.send_stats(&chara_details).await; // Player Setup { diff --git a/src/login/database.rs b/src/login/database.rs index f68b46b..6c25e75 100644 --- a/src/login/database.rs +++ b/src/login/database.rs @@ -151,7 +151,7 @@ impl LoginDatabase { .prepare("SELECT user_id FROM sessions WHERE sid = ?1") .ok() .unwrap(); - user_id = stmt.query_row((sid,), |row| Ok(row.get(0)?)).unwrap(); + user_id = stmt.query_row((sid,), |row| row.get(0)).unwrap(); } // service accounts @@ -185,7 +185,7 @@ impl LoginDatabase { .ok() .unwrap(); let selected_row: Result = - stmt.query_row((username,), |row| Ok(row.get(0)?)); + stmt.query_row((username,), |row| row.get(0)); selected_row.is_ok() } @@ -197,7 +197,7 @@ impl LoginDatabase { .prepare("SELECT user_id FROM sessions WHERE sid = ?1") .ok() .unwrap(); - stmt.query_row((sid,), |row| Ok(row.get(0)?)).unwrap() + stmt.query_row((sid,), |row| row.get(0)).unwrap() } pub fn get_username(&self, user_id: u32) -> String { @@ -207,6 +207,6 @@ impl LoginDatabase { .prepare("SELECT username FROM users WHERE id = ?1") .ok() .unwrap(); - stmt.query_row((user_id,), |row| Ok(row.get(0)?)).unwrap() + stmt.query_row((user_id,), |row| row.get(0)).unwrap() } } diff --git a/src/world/chat_handler.rs b/src/world/chat_handler.rs index 7258968..9f144e8 100644 --- a/src/world/chat_handler.rs +++ b/src/world/chat_handler.rs @@ -4,7 +4,7 @@ use crate::{ opcodes::ServerZoneIpcType, packet::{PacketSegment, SegmentType}, world::{ - Actor, Event, + Event, ipc::{ ActorControl, ActorControlCategory, BattleNpcSubKind, CommonSpawn, DisplayFlag, EventStart, NpcSpawn, ObjectKind, OnlineStatus, PlayerSpawn, PlayerSubKind, diff --git a/src/world/connection.rs b/src/world/connection.rs index ed8e55b..fc4ad63 100644 --- a/src/world/connection.rs +++ b/src/world/connection.rs @@ -18,13 +18,13 @@ use crate::{ }; use super::{ - Actor, Event, Inventory, Item, LuaPlayer, StatusEffects, WorldDatabase, Zone, + Actor, CharacterData, Event, Inventory, Item, LuaPlayer, StatusEffects, WorldDatabase, Zone, inventory::Container, ipc::{ ActorControlSelf, ActorMove, ActorSetPos, ClientZoneIpcSegment, CommonSpawn, ContainerInfo, - ContainerType, DisplayFlag, Equip, InitZone, ItemInfo, NpcSpawn, ObjectKind, PlayerSubKind, - ServerZoneIpcData, ServerZoneIpcSegment, StatusEffect, StatusEffectList, UpdateClassInfo, - WeatherChange, + ContainerType, DisplayFlag, Equip, InitZone, ItemInfo, NpcSpawn, ObjectKind, PlayerStats, + PlayerSubKind, ServerZoneIpcData, ServerZoneIpcSegment, StatusEffect, StatusEffectList, + UpdateClassInfo, WeatherChange, }, }; @@ -833,4 +833,37 @@ impl ZoneConnection { ..Default::default() } } + + pub async fn send_stats(&mut self, chara_details: &CharacterData) { + let attributes; + { + let mut game_data = self.gamedata.lock().unwrap(); + + attributes = + game_data.get_racial_base_attributes(chara_details.chara_make.customize.subrace); + } + + let ipc = ServerZoneIpcSegment { + op_code: ServerZoneIpcType::PlayerStats, + timestamp: timestamp_secs(), + data: ServerZoneIpcData::PlayerStats(PlayerStats { + strength: attributes.strength, + dexterity: attributes.dexterity, + vitality: attributes.vitality, + intelligence: attributes.intelligence, + mind: attributes.mind, + hp: self.player_data.max_hp, + mp: self.player_data.max_mp as u32, + ..Default::default() + }), + ..Default::default() + }; + + self.send_segment(PacketSegment { + source_actor: self.player_data.actor_id, + target_actor: self.player_data.actor_id, + segment_type: SegmentType::Ipc { data: ipc }, + }) + .await; + } }