wip improved return system thingy

This commit is contained in:
Luuk van Oijen
2023-11-22 11:14:11 +01:00
parent 6ed714b863
commit 03ea9513b9
3 changed files with 19 additions and 6 deletions

View File

@@ -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?

View File

@@ -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<f32>>(Variadic::from_iter(mapped_args)) {
Ok(res) => { trace!("fn ret: {:?}", ret); ret = res.unwrap_or(-1f32); }
match func.call::<_, Option<Value>>(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");
}
}

View File

@@ -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)]