Networking 戈多网络帮助:“;RPC';更新的TAPOS';不允许来自:1。模式为0,主模式为1。”;

Networking 戈多网络帮助:“;RPC';更新的TAPOS';不允许来自:1。模式为0,主模式为1。”;,networking,godot,Networking,Godot,无论我如何尝试,我都无法解决此错误:“RPC'updateDataPos'不允许来自:1。模式为0,主机为1。” 我连接了两个对等点,一个是服务器(id 1),另一个是唯一的网络id 谢谢你的帮助 lobble.gd Play.gd get_tree().get_root().rpc_id(global.player_info[“net_id”],“updatedaptapos”,r_pos_x,r_pos_y) 这将在镜像global.player\u info[“net\u id”]的场景树

无论我如何尝试,我都无法解决此错误:“RPC'updateDataPos'不允许来自:1。模式为0,主机为1。”

我连接了两个对等点,一个是服务器(id 1),另一个是唯一的网络id

谢谢你的帮助

lobble.gd

Play.gd

get_tree().get_root().rpc_id(global.player_info[“net_id”],“updatedaptapos”,r_pos_x,r_pos_y)


这将在镜像
global.player\u info[“net\u id”]
的场景树根节点上调用远程过程
updatedaptapos
。您需要在
Play.gd
的节点实例上调用
rpc_id()
,即连接到该节点的
Play.gd

是否可以包含您正在执行的操作的详细信息?如果看不到任何代码,很难帮助您。我支持@rcorre。从错误代码中,您的rp被禁用。您是否缺少
updatedaptapos
上的关键字?没有更多的代码很难判断。我添加了相关的代码。Thanks@user3553070感谢您添加相关代码。我将添加一个答案。谢谢,但是我如何才能实现这一点,因为我已经阅读了
get_tree().get_root().add_child(multigame)
,这意味着
Play.gd
的节点实例附加到rootIf
mulitgame
是节点Play.gd实例,您将需要调用updatedaptapos,如:
multigame.rpc\id(global.player_info[“net_id”],“updatedaptapos”,r_pos_x,r_pos_y)
谢谢!错误消失了,但现在更新功能没有发生,错误是:RPC找不到路径:1。我想我可以添加一个新问题…@user3553070确保多游戏或任何节点存在,并且在接收RPC的游戏客户端的所有实例上,都位于场景视图的同一位置。Godot通过节点查找RPCePath.如果
/root/multigame
是此客户端的路径,而下一个客户端的路径是
/root/multiplayer/game
,则它将找不到正确的节点。是的,添加新问题是一个好主意。同时发布一个最小问题,复制代码量。有时,仅此一项就可以帮助您解决问题,并帮助他人帮助您。记住在阅读你的问题的人没有你的背景。你应该描述背景,就像读者没有线索一样。
...
    get_tree().connect("network_peer_connected", self, "_player_connected")
    get_tree().connect("network_peer_disconnected", self,   "_player_disconnected")
    get_tree().connect("connected_to_server", self, "_connected_ok")
    get_tree().connect("connection_failed", self, "_connected_fail")
    get_tree().connect("server_disconnected", self, "_server_disconnected")
...
    glob.player_info["net_id"] = id
    if not get_tree().is_network_server():
        var multigame = preload("res://scenes//Play.scn").instance()
        var uid = get_tree().get_network_unique_id()
        get_tree().get_root().add_child(multigame)  
    else:
        var multigame2 = preload("res://scenes//Play.scn").instance()
        multigame2.set_name(str(1))
        multigame2.set_network_master(1)
        multigame2.connect("game_finished",self,"_end_game",[],CONNECT_DEFERRED) 
        get_tree().get_root().add_child(multigame2) 
...
...
    if global.multiplayer_game and is_network_master() and global.client_connected and global.player_info["net_id"] != 1 and get_tree().is_network_server():
        get_tree().get_root().rpc_id(global.player_info["net_id"], "updateDataPos", r_pos_x, r_pos_y)
...
remote func updateDataPos(rposx, rposy):
    r_pos_x = rposx
    r_pos_y = rposy
...