mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-04-04 14:56:04 +00:00
wip improved return system thingy
This commit is contained in:
@@ -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?
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)]
|
||||
|
||||
Reference in New Issue
Block a user