Jump to content
Dwarden

Dedicated Client / Headless Client feedback (dev branch)

Recommended Posts

My headless client is running on the same maschine as the server and kicked me out all the time.

Now i added the Internet Ip from the server in the server.cfg too, looks like this

headlessClients[]={"127.0.0.1","5.175.245.45"};

I can connect to the server now without kick.

Using this startline

on linux

./arma3server -client -connect=5.175.245.45:2302 -nosound -nofilepatching -cpuCount=2

on windows

arma3server.exe -client -connect=5.175.245.45:2302 -nosound -nofilepatching -cpuCount=2

Edited by Logo

Share this post


Link to post
Share on other sites

so silly me, i totally forgot we added new server parameter to autostart mission (no need for HC anymore), the limitation to persistent=1; still do apply

-autoinit

Share this post


Link to post
Share on other sites

Thx Logo, I'll try your solution...

so silly me, i totally forgot we added new server parameter to autostart mission (no need for HC anymore), the limitation to persistent=1; still do apply

-autoinit

sorry but these means ? could you be clearer ?

Edited by killjoer3f

Share this post


Link to post
Share on other sites
Thx Logo, I'll try your solution...

sorry but these means ? could you be clearer ?

those are for auto-starting mission on the server w/o need of 1st player to do so

Share this post


Link to post
Share on other sites

Did the stuff from RC2 make it into stable? This is the error we get when the hc tries to join, same error on 2 different PC's.

Used -enableSteamLogs -debug_steamapi on both hc and server.

Server logs:

STEAM: STC: Requesting validation ticket for player: headlessclient - SteamID:18446744073709551615, Local result: Invalid ticket
STEAM: STC: Local ticket check for player: headlessclient - SteamID:18446744073709551615 failed. Code: 1
Server error: Player without identity headlessclient (id 1243704363)
STEAM: STC: Client: headlessclient - SteamID:18446744073709551615 - Kicked off because of invalid ticket. LocalResultCode: Invalid ticket, RemoteResultCode: Ticket invalid

Headless log:

14:37:45 STEAM: STEAMWORKS: [s_API WARN] CancelAuthTicket called on invalid ticket 
14:37:45 STEAM: STEAMWORKS: [s_API WARN] CancelAuthTicket called on invalid ticket  

We're using a client game folder, not the dedi package. The errors are the same whether steam is open and logged in or closed.

Edited by bhaz

Share this post


Link to post
Share on other sites
ok for everyone using TADST/having issues with the HC being kicked (The info that fixed it for us) the localClient array became a headlessclients array ,make sure you change your serverconfiguration accordingly.

Perfect, thanks. :cool:

Share this post


Link to post
Share on other sites

Does anyone have a working HC implementation?

For some reason setOwner does transfer the AI to the HC but the AI then becomes completely stupid. They act weird, laggy and don't follow waypoints.

Also ASM shows the AI indeed transfered from server to HC but the load stays on the server and doesn't transfer to the HC.

Any tips?

Share this post


Link to post
Share on other sites

Just some info for the Headless clients.

We have found that its best to use both :-

headlessClients[]={127.0.0.1};

and

localClient[]={127.0.0.1};

In the server.cfg if you're using the same box for headless and server as we are.

When we only used headlessClients[]={127.0.0.1};

The bandwidth given the HC was insufficient and resulted in very crappy and weird AI behaviour.

Hope this helps someone (if it did... GET BL1P A BEER :beeeers: )

Share this post


Link to post
Share on other sites

HC can be kicked or banned by admin from MAP -> PLAYERS menu. When kicked, HC returns back to the game however it duplicates, triplicates etc:

before the kick: entities "headlessclient_f"; //[HC1]

after 1st kick and reconnect: entities "headlessclient_f"; [HC1,HC1]

after 2nd kick and reconnect: entities "headlessclient_f"; [HC1,HC1,HC1]

etc...

Share this post


Link to post
Share on other sites

Am I correct in thinking that when using a headless client its the HCs profile which governs the difficulty settings and therefore the AI skill settings and not the servers profile ?

Share this post


Link to post
Share on other sites
Am I correct in thinking that when using a headless client its the HCs profile which governs the difficulty settings and therefore the AI skill settings and not the servers profile ?

Yes, the HC's difficulty settings would apply to all AI that are local to it.

Share this post


Link to post
Share on other sites

Anyone run into an issue where Headless Clients connect correctly, but do not populate into the HC slot? Been a while since I monkeyed with it or my missions, but just found out that the HC is no longer automatically dropping into the Civvie HC slot I've got setup. Not sure if it's a mission config issue, or something I'm just out of the loop on with server/HC setup.

Edit: <Figured it out on my own, was using the old Headless Client setup and not the new 'Virtual Entity' deal. Seems to be working once I edited my missions and used the new HC config.>

Edited by Meatball

Share this post


Link to post
Share on other sites
Am I correct in thinking that when using a headless client its the HCs profile which governs the difficulty settings and therefore the AI skill settings and not the servers profile ?

and when you set your difficulty, change the file permissions to read only. On my server, everytime it starts, in domination the DCSlot (name of dominations hc client) was always overwritten and had no difficulty inside.

Edited by Logo

Share this post


Link to post
Share on other sites

Has anyone noticed any performance impacts when you have the server/HC on the same box, both using the same arma3server.exe, even though they're being run as two separate calls? It better to have the server run using arma3server.exe and HC using arma3.exe (assuming you have a full copy of the client for the HC, which I do).

Share this post


Link to post
Share on other sites

@Meatball

We are doing our first tests with the HC using ArmA3server.exe for both the Server and the HC.

We run both Server and HC on High priority with affinity splitting the cores, 1234 for server, 5678 for HC.

In our test mission we split the AI 2/3rds on HC and 1/3rd on Server to a max of 450 total.

The HC runs the dynamically created AI and the server runs the Static amount AO AI.

We do see a performance increase in the servers fps and cps.

But... we see more red chains when the AI are created on the HC as the players move about the map, than we did without the HC.

Its hard to say atm because the last stable update has caused a lot of desync in general for us and the vehicle lag is a joke.

We are now thinking of putting the Static amount AO AI onto the HC and use the server for Dynamic AI

As it seems to cause too many red chains creating and removing AI on the HC.

Hope that helps :)

---------- Post added at 07:32 AM ---------- Previous post was at 06:01 AM ----------

we always get this error in HC rpt

8:20:31 Error position: <BIS_TotDesatCC ppEffectAdjust [1,1,0,[0,>

8:20:31 Error Undefined variable in expression: bis_totdesatcc

8:20:31 File A3\functions_f\Feedback\fn_feedbackInit.sqf, line 56

8:20:31 Error in expression <tOxygenRemaining player;

BIS_SuffCC ppEffectAdjust [1,1,0,[0.0090>

8:20:31 Error position: <BIS_SuffCC ppEffectAdjust [1,1,0,[0.0090>

8:20:31 Error Undefined variable in expression: bis_suffcc

Share this post


Link to post
Share on other sites

Yeah, I do something similar, using /affinity on a Windows machine to split the HC and server onto separate cores. In the missions I make I generally leave the static AI on the server as well and just have the HC handle dynamic AI. I'll be honest, I haven't really messed with anything in a few months until someone contacted me that they were having a hard time getting a HC working with one of missions. That's when I found out about all the recent changes.

450 is pretty good AI wise, prior to the new updates my server (i5-3570K/16GB RAM) generally started to bog down around 250-300. I haven't tried to really push it with the new setup, but I did notice the red chains/lag with Dynamic AI spawns now that I hadn't seen before.

Share this post


Link to post
Share on other sites

I recommend you guys also use something like Zorrobyte's ZBE_cache to help with AI numbers. I can get 450 AI and still get 25FPS and 25CPS (on Rydigier's HETMAN missions). No lag etc.

Share this post


Link to post
Share on other sites

Will take a look at that thanks Kremator.

we tend to be at 200-300 ai normally but we get 50fps and 45cps at those numbers.

we panic if the server gets to 25fps as we find that too laggy to play.

Server = i7 4770, 32 GB of RAM, and 2x 320 GB SSDs in a RAID-0 config.

O yer got the mission running on 2HCs today so now HC1 runs AO AI and HC2 runs Dynamic AI

Makes the ASM look cool but now we need an ASM with more instances :)

Edited by BL1P

Share this post


Link to post
Share on other sites

Has anyone else Noticed that when AI are on the Headless and you shoot next to them but don't hit them, they do not react to the shot/impact.

Once you put the same AI on the server they will react to the shot/impact.

It seems to us that the reaction parameters of impacts or sounds are not working on the headless.

Maybe some type of locality thing ?

Can anyone confirm this ?

Edited by BL1P

Share this post


Link to post
Share on other sites

I think I found a bug in the linux dedicated server and how it handles Headless Clients with the "kickDuplicate" config parameter. Create a simple mission with 1 playable blufor unit, and one headless client (virtual entity). Now set

kickDuplicate = 1;

in your server's config file. Join the mission, launch the HC and join. When you attempt to start the mission you will be booted back to the server select screen (I'm launching the HC from the same installation as I'm joining from). If you take the exact same configuration file and try it on a Windows dedicated server, this does not happen. As a temporary workaround, setting

kickDuplicate = 0;

seems to do the trick.

edit: it seems to only work the first time, after launching the mission a second time (or a different HC mission) it boots me back to the server select screen. A server restart allows me to give it another go.

edit2: it also only seems to work if I already have the mission file downloaded. If downloading the mission it boots me to the server menu immediately after the download completes.

edit3: I get the same behavior on a Windows dedicated with kickDuplicate=1;, not sure exactly what is going on here as there is no related error messages.

Edited by mons00n

Share this post


Link to post
Share on other sites

In other news I attempted to auto-detect the headless client and have had very little luck =/

I created a custom function and set postInit=1 via:

class HeadlessClient
{
tag = "HeadlessClient";
class HeadlessClient_functions
{
	file = "HC";
	class headlessCheck { postInit = 1; };
};
};

and the file "HC\fn_headlessCheck.sqf" looks like so:

if (!hasInterface && !isServer) then{
HeadlessClientPresent = True;
publicVariable "HeadlessClientPresent";
};

now inside of init.sqf I have:

waitUntil{!(isNil "BIS_fnc_init")};

if(!(isNil "HeadlessClientPresent")) then{
if(!hasInterface && !isServer) then{
	[] spawn _spawnUnits;
};
}
else{
if(isServer) then{
	[] spawn _spawnUnits;
};
};

However, the units always spawn on the server which results in double spawning (1xServer + 1xHC). When you are dropped into the game HeadlessClientPresent is indeed set to True, but when init.sqf is executed it has yet to be defined on all clients/servers except for the HC. According to the wiki's article on initialization order all functions with postInit=1 should be executed before BIS_fnc_init is defined - this may indeed be happening, but why is publicVariable not broadcasting HeadlessClientPresent until after init.sqf is executed?

Or, is this a case of the HC loading the mission after the other clients?

Edited by mons00n

Share this post


Link to post
Share on other sites

This is not specifically related to HC, however it shares similar properties.

There seems to be an issue with the allDeadMen array, when spawning AI on client, or simply handling remote units.

Seems like the server and clients can have different values. Some elements are shared but some are not shared.

For instance, in a brief MP test (50 players ingame (invade annex)) just now:

on server:

dead_count = count allDeadMen; publicVariable "dead_count";

on client:

hint str dead_count; // 46

immediately after, on client:

hint str count allDeadMen // 61

I have a scripted cap of 30 in the allDeadMen array in a MP scenario, but when I spawn AI on client, the array gets bugged and then stops deleting bodies at all.

For instance if I am deleting the allDeadMen array by running running a loop over

while {count alldeadmen > body_limit} do {
         deleteVehicle (allDeadMen select 0);
};

Sometimes select 0 is not deletable or there is a locality issue, and the loop get stuck trying to delete a remote object which cannot be deleted.

Will have to do more testing to know more before submitting anything to the tracker.

Note: The (allDead - allDeadMen) array, which isolates land/air/ship vehicles from man vehicles, has no such issue.

The cleanup script in use:

http://www.armaholic.com/page.php?id=27333

Edited by MDCCLXXVI

Share this post


Link to post
Share on other sites

Same thing with allGroups. allGroups on server != allGroups on HC

Only groups local to machine are detected.

This doesn't mean you can create more than 144 per side though. Game still detects and vetoes that.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×