0 votes

I made a "Network.gd" GDscript and made two functions, startServer and joinServer, that were basically copied and pasted from this page

func startServer():
    var peer = NetworkedMultiplayerENet.new()
    peer.create_server(SERVER_PORT, MAX_PLAYERS)
    print(get_tree()) #added that for debug purposes
    #get_tree().set_network_peer(peer) commented out since it stops the game

I am trying to use these from my MainMenu script with

var Network = load("res://Network.gd").new()

and

Network.startServer()

the resulting print is [Object:null] and if the line after would trigger an error: Attempt to call function 'set_network_peer' in base 'null instance' on a null instance.
The script does not cause the game to stop if the code is put directly into the MainMenu.gd, but I'd guess I'd need to use these functions or other functions in other scenes so I would rather be able to have them all in a single file and load them up as needed.

I'm quite new to Godot and I couldn't find any questions/answers close enough for me to figure out how to do/fix this, so I appreciate any help.

I'm using Godot stable 3.1.1 on Windows 10

asked May 30 in Engine by Elkien3 (12 points)

what about making it autoload then?
add Network.gd to autoload and use it everywhere when need.

1 Answer

+1 vote

Method get_tree() is defined in Node but not Object
you need extends Node in your code

or you can let other node sent a get_tree() in

like

#in network.gd
var getTree

#in main.gd
var Network = load("res://Network.gd").new()

func _ready():
   Network.getTree = get_tree()
   pass

and use getTree in network.gd

answered May 30 by Asasma_Sei (18 points)

I didn't include the entire network.gd, but it did have extends Node at the start of the file.
MainMenu.gd had extends Node2D not sure if thats important

The second method worked though, thank you for the help.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.