From a99b0e7c17f1b694041186fd6f4cda03a247a0c9 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 27 Mar 2025 19:24:36 -0400 Subject: [PATCH] Pass PlayerData to onBeginLogin function --- resources/scripts/test.lua | 4 ++-- src/bin/kawari-world.rs | 20 +++++++++++++------- src/world/connection.rs | 7 +++++++ 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/resources/scripts/test.lua b/resources/scripts/test.lua index 3ca23ee..21f3e33 100644 --- a/resources/scripts/test.lua +++ b/resources/scripts/test.lua @@ -1,3 +1,3 @@ -function onBeginLogin() - print("Hello, world!") +function onBeginLogin(player) + print("Player " .. player.content_id .. " is connecting!") end diff --git a/src/bin/kawari-world.rs b/src/bin/kawari-world.rs index 58c8aa6..35ebd48 100644 --- a/src/bin/kawari-world.rs +++ b/src/bin/kawari-world.rs @@ -24,7 +24,7 @@ use kawari::world::{ }, }; use kawari::world::{PlayerData, WorldDatabase}; -use mlua::Lua; +use mlua::{Function, Lua}; use physis::common::{Language, Platform}; use physis::gamedata::GameData; use tokio::io::AsyncReadExt; @@ -331,12 +331,18 @@ async fn main() { } let lua = lua.lock().unwrap(); - lua.load( - r#" - onBeginLogin() - "#, - ) - .exec() + lua.scope(|scope| { + let player_data = scope + .create_userdata_ref(&connection.player_data) + .unwrap(); + + let func: Function = + lua.globals().get("onBeginLogin").unwrap(); + + func.call::<()>(player_data).unwrap(); + + Ok(()) + }) .unwrap(); } ClientZoneIpcData::FinishLoading { .. } => { diff --git a/src/world/connection.rs b/src/world/connection.rs index 5580ac4..5dc8ceb 100644 --- a/src/world/connection.rs +++ b/src/world/connection.rs @@ -1,3 +1,4 @@ +use mlua::{UserData, UserDataFields}; use tokio::net::TcpStream; use crate::{ @@ -24,6 +25,12 @@ pub struct PlayerData { pub account_id: u32, } +impl UserData for PlayerData { + fn add_fields>(fields: &mut F) { + fields.add_field_method_get("content_id", |_, this| Ok(this.content_id)); + } +} + /// Represents a single connection between an instance of the client and the world server pub struct ZoneConnection { pub socket: TcpStream,