Skip to content

Commit 3cf2392

Browse files
committed
Fix get_rpc_config() missing return configurations
1 parent 4a44078 commit 3cf2392

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

doc/classes/Node.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,8 +540,10 @@
540540
</method>
541541
<method name="get_rpc_config" qualifiers="const">
542542
<return type="Variant" />
543+
<param index="0" name="script_rpc_get" type="bool" default="true" />
543544
<description>
544545
Returns a [Dictionary] mapping method names to their RPC configuration defined for this node using [method rpc_config].
546+
If [param script_rpc_get] is [code]true[/code], return [Dictionary] will also contain functions RPC configuration of attached GDScript.
545547
</description>
546548
</method>
547549
<method name="get_scene_instance_load_placeholder" qualifiers="const">

scene/main/node.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -849,8 +849,21 @@ void Node::rpc_config(const StringName &p_method, const Variant &p_config) {
849849
}
850850
}
851851

852-
Variant Node::get_rpc_config() const {
853-
return data.rpc_config;
852+
Variant Node::get_rpc_config(bool script_rpc_get) const {
853+
const Dictionary node_config = data.rpc_config;
854+
if (script_rpc_get && get_script_instance()) { // return attached GDScript RPC configs too
855+
const Dictionary script_config = get_script_instance()->get_rpc_config();
856+
const Array script_names = script_config.keys();
857+
Dictionary merged_config = node_config;
858+
for (int i = 0; i < script_names.size(); i++) {
859+
const auto name = script_names[i];
860+
ERR_FAIL_COND_V_MSG(merged_config.has(name) == true, node_config, "Detected GDScript function RPC name collision. Only Node RPC configuration will be returned.");
861+
merged_config[name] = script_config[name];
862+
}
863+
return merged_config;
864+
} else {
865+
return node_config;
866+
}
854867
}
855868

856869
/***** RPC FUNCTIONS ********/
@@ -3980,7 +3993,7 @@ void Node::_bind_methods() {
39803993

39813994
ClassDB::bind_method(D_METHOD("get_multiplayer"), &Node::get_multiplayer);
39823995
ClassDB::bind_method(D_METHOD("rpc_config", "method", "config"), &Node::rpc_config);
3983-
ClassDB::bind_method(D_METHOD("get_rpc_config"), &Node::get_rpc_config);
3996+
ClassDB::bind_method(D_METHOD("get_rpc_config", "script_rpc_get"), &Node::get_rpc_config, DEFVAL(true));
39843997

39853998
ClassDB::bind_method(D_METHOD("set_editor_description", "editor_description"), &Node::set_editor_description);
39863999
ClassDB::bind_method(D_METHOD("get_editor_description"), &Node::get_editor_description);

scene/main/node.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,7 @@ class Node : public Object {
784784
bool is_multiplayer_authority() const;
785785

786786
void rpc_config(const StringName &p_method, const Variant &p_config); // config a local method for RPC
787-
Variant get_rpc_config() const;
787+
Variant get_rpc_config(bool script_rpc_get = false) const;
788788

789789
template <typename... VarArgs>
790790
Error rpc(const StringName &p_method, VarArgs... p_args);

0 commit comments

Comments
 (0)