How to multiplayer?

Hi! Did anyone here succeed to get multiplayer over internet and with a server to work? If yes how did you do that? The tanks_networking example is not working for me unfortunately, and I think it is only local. Can Kha even do that right now or do I need to use an extra library for that?

1 Like

I would like to see it explained some more in Armory. Not many kha.network examples out there. When I ran my Node on Mac it outputted a stream of messages on the terminal but the tanks remained frozen in the Krom / or Web browser window.

I’m no Node expert but I got a little time to look at Node.js 8.11.3 LTS (closer match to Armory). Downloading it includes commands node and npm if you don’t already have them. There seems to be a vulnerability fuss about Nodejs which may be important. See June 2018 Security Releases for the full scoop.

Btw Armory 0.4 b27 builds with v8.9.4 of Nodejs. Latests version is 10.6.

~/Blender_27/Armory/blender.app/armsdk/nodejs/node-osx --version
v8.9.4


When running the Tank networking server demo instructions. My output looked more like this:

$ node kha.js
10.000709134037606 seconds.
20.001510488044005 seconds.
30.021727333019953 seconds.
40.0220520280418 seconds.
50.02448838803684 seconds.
60.02577554504387 seconds.
70.0261825179914 seconds.

The key missing piece here is Starting server at 6789. The server isn’t actually listening for connections. And attempting to run node server.js as an alternative is broken for the most part.

So to work around this you will need to enable a Direct Connection by adding a line (in step 2) to your projects khafile.js file. Since this file is auto generated or cleared when hitting the Armory Exporter → Build button you will need to follow these steps:

  1. Create a new text file in Blenders Text Editor hit + and rename it as server patch.

  2. In the text window add the following line:
    project.addDefine('direct_connection');

  3. Then link to this new file under Armory Project → Modules → Khafile: server patch.

  4. Save everything

  5. Clean → Build → npm install

Now when you Clean and Build the server again it will generate a new khafile.js with the direct_connection defined at the bottom of:

armory_tutorials-18.05a/tanks_networking/khafile.js

The output now looks like this:

$ node kha.js
Session.hx:336: Starting server at 6789.
1 client connected.
10.002117928990629 seconds.
2 clients connected.
Starting game.
Session.hx:372: Starting client 0
Session.hx:372: Starting client 1

The above allows the Tank clients to join and leave the server but your mileage may vary, as for me on the same machine the clients don’t seem to be running in sync or only one tank is in control. The animations are very sped up. This is as far as I got without looking at the code. If I get more time to spare I’ll dig a little deeper. Hope this helps some.

Thanks! But I can’t even start the server, when I should start “Kha.js” this window pops up:
help
(Zeile=Line, Zeichen=character, erwartet=expected)
I also tried it with your extra instructions with the same result. I already opened a Github issue for this almost two weeks ago but no replies yet :frowning:.

Are you running kha.js inside nodejs? I don’t know Windows well but it appears that you are loading the javascript in windows script.

If I had to guess

npm.exe install
node.exe kha.js

my bad if it’s something more serious

Thanks, that fixed it, I was again too silly to read the instructions properly. When I then got it to work it was way too fast as you said, but when I try it today with updated Armory I get this message in Firefox/Chrome

Unbenannt

My Firewall is letting the Browsers through, so is this a new bug in Armory? Or did the setup process change?

as simple as it sounds it looks like the node server isn’t up at that moment to greet your web clients?

node.exe kha.js

If you updated Armory from git I don’t know if it broke the plugin inside blender. As a sanity check if you re-download the combo Blender with Armory binary it will ensure a clean build. Note git takes a while to run, the sdk will download everything for every platform’s executable (Windows,Mac,Linux…) pushing your disk space over a 1GB!