diff --git a/src/server/mod.rs b/src/server/mod.rs index fd07635..5b2cfbe 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -425,6 +425,7 @@ impl Server { let mut allowed = true; for v in res { match v { + Argument::Integer(i) => if i == 1 { allowed = false; }, Argument::Number(n) => if n == 1f32 { allowed = false; }, Argument::Boolean(b) => if b { allowed = false; }, _ => {}, // TODO: Handle this somehow? diff --git a/src/server/plugins/backend_lua.rs b/src/server/plugins/backend_lua.rs index d85e993..9da096a 100644 --- a/src/server/plugins/backend_lua.rs +++ b/src/server/plugins/backend_lua.rs @@ -139,10 +139,11 @@ impl Backend for BackendLua { ScriptEvent::OnPluginLoaded => ("onInit", vec![]), ScriptEvent::OnShutdown => ("onShutdown", vec![]), ScriptEvent::OnPlayerAuthenticated { name, role, is_guest, identifiers } => ("onPlayerAuth", vec![Argument::String(name), Argument::String(role), Argument::Boolean(is_guest), Argument::Table(identifiers.to_map())]), - ScriptEvent::OnPlayerDisconnect { pid, name } => ("onPlayerDisconnect", vec![Argument::Number(pid as f32), Argument::String(name)]), + ScriptEvent::OnPlayerDisconnect { pid, name } => ("onPlayerDisconnect", vec![Argument::Integer(pid as i64), Argument::String(name)]), + ScriptEvent::OnChatMessage { pid, name, message } => ("onChatMessage", vec![Argument::Integer(pid as i64), Argument::String(name), Argument::String(message)]), }; - let mut ret = -1f32; + let mut ret = Value::Number(-1f64); // TODO: Error handling { let ctx: Context = self.lua.globals().get("MP").expect("MP is missing!"); @@ -153,11 +154,11 @@ impl Backend for BackendLua { let mapped_args = args.into_iter().map(|arg| { arg_to_value(&self.lua, arg) }).filter(|v| v.is_some()); - match func.call::<_, Option>(Variadic::from_iter(mapped_args)) { - Ok(res) => { trace!("fn ret: {:?}", ret); ret = res.unwrap_or(-1f32); } + match func.call::<_, Option>(Variadic::from_iter(mapped_args)) { + Ok(res) => { trace!("fn ret: {:?}", ret); ret = res.unwrap_or(Value::Number(-1f64)); } Err(e) => { error!("[LUA] {}", e); - ret = -1f32; + ret = Value::Number(-1f64); }, } } @@ -165,7 +166,16 @@ impl Backend for BackendLua { } debug!("sending result..."); - if let Some(resp) = resp { resp.send(Argument::Number(ret)).expect("Failed to send!"); } + if let Some(resp) = resp { + let arg = match ret { + Value::Boolean(b) => Argument::Boolean(b), + Value::Integer(i) => Argument::Integer(i), + Value::Number(f) => Argument::Number(f as f32), + Value::String(s) => Argument::String(s.to_string_lossy().to_string()), + _ => Argument::Number(-1f32), + }; + resp.send(arg).expect("Failed to send!"); + } debug!("call_event_handler done"); } } diff --git a/src/server/plugins/mod.rs b/src/server/plugins/mod.rs index bec89e6..70a29d3 100644 --- a/src/server/plugins/mod.rs +++ b/src/server/plugins/mod.rs @@ -50,6 +50,8 @@ pub enum ScriptEvent { OnPlayerAuthenticated { name: String, role: String, is_guest: bool, identifiers: PlayerIdentifiers }, OnPlayerDisconnect { pid: u8, name: String }, + + OnChatMessage { pid: u8, name: String, message: String }, } #[derive(Debug)]