mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 04:06:14 +00:00
Merge pull request #87858 from AThousandShips/callable_rpc
Fix `rpc` call from name based `Callable`s
This commit is contained in:
commit
22dcfa14e3
@ -92,10 +92,31 @@ Error Callable::rpcp(int p_id, const Variant **p_arguments, int p_argcount, Call
|
||||
r_call_error.expected = 0;
|
||||
return ERR_UNCONFIGURED;
|
||||
} else if (!is_custom()) {
|
||||
r_call_error.error = CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_call_error.argument = 0;
|
||||
r_call_error.expected = 0;
|
||||
return ERR_UNCONFIGURED;
|
||||
Object *obj = ObjectDB::get_instance(ObjectID(object));
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (!obj || !obj->is_class("Node")) {
|
||||
r_call_error.error = CallError::CALL_ERROR_INSTANCE_IS_NULL;
|
||||
r_call_error.argument = 0;
|
||||
r_call_error.expected = 0;
|
||||
return ERR_UNCONFIGURED;
|
||||
}
|
||||
#endif
|
||||
|
||||
int argcount = p_argcount + 2;
|
||||
const Variant **argptrs = (const Variant **)alloca(sizeof(Variant *) * argcount);
|
||||
const Variant args[2] = { p_id, method };
|
||||
|
||||
argptrs[0] = &args[0];
|
||||
argptrs[1] = &args[1];
|
||||
for (int i = 0; i < p_argcount; ++i) {
|
||||
argptrs[i + 2] = p_arguments[i];
|
||||
}
|
||||
|
||||
CallError tmp;
|
||||
Error err = (Error)obj->callp(SNAME("rpc_id"), argptrs, argcount, tmp).operator int64_t();
|
||||
|
||||
r_call_error.error = Callable::CallError::CALL_OK;
|
||||
return err;
|
||||
} else {
|
||||
return custom->rpc(p_id, p_arguments, p_argcount, r_call_error);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user