Haha you are a noob, you may say, there is briefing parameter in description.ext you can set to 0 as well as debriefing parameter. Well, apparently they are both completely useless in MP, but this is about to change! As you know (might have seen) the briefing screen with the map on it appears just before you join the game after server restart or for every new mission. The user then have a choice to CONTINUE or to CANCEL.

I’ve been experimenting with initialisations in Multiplayer and found one peculiar thing. If you introduce any suspension in your script while viewing briefing your game gets suspended indefinitely. Well it would have been indefinite suspension if not for 1 minute timeout after which the server joins itself and the mission starts. This is because debriefing disables game simulation (game pause) just like when you press Esc in SP. The only way to avoid lock up and make sleep to sleep for the correct duration is to use uiSleep instead of sleep.

But this is not the point. I really hope BIS would do something to make server joining more streamline because current system is pretty uncomfortable and unintuitive. When we had DayZ server, every server restart was a pain in the behind, mostly because people joining all at once were getting stuck. I think this is directly related to the briefing functionality. You see, until the briefing page is passed, the mission does not start. On top of that only first player joining the server can trigger server start up sequence.

If this player does not complete briefing, the mission never starts. You can sit on the briefing screen for the whole minute without pressing CONTINUE and the mission will not start. You can even press CANCEL and this will abort the mission which hasn’t even started yet. As you can see this is far from optimal. On the other hand, JIP player that joins the server after mission is running has no issues. So you can lock server, start it yourself then let everyone in after, or you can make sure that briefing is automatically continued.

There is no command or parameter that would make server skip briefing, but there is a workaround – you can press CONTINUE button on behalf of the user with ctrlActivate command. It might be considered a dirty hacky trick by a certain BIS dev, whose name shall not be mentioned, but I guess I just have to purify this dirtiness with an exceptionally sterilised piece of code to go with it :) . And to make it even more awesome I will throw in the very same briefing parameter with which the code can be controlled from description.ext (basically now MP compatible).

I’ve designed the following code to run with dedicated server in mind and as a preInit function (defined in CfgFunctions with preInit = 1;). Why preInit? It is the earliest when you can have your code executed on the client and also I like to work on my own schedule:

if (hasInterface) then { if (!isNumber (missionConfigFile >> "briefing")) exitWith {}; if (getNumber (missionConfigFile >> "briefing") == 1) exitWith {}; 0 = [] spawn { waitUntil { if (getClientState == "BRIEFING READ") exitWith {true}; if (!isNull findDisplay 53) exitWith { ctrlActivate (findDisplay 53 displayCtrl 1); findDisplay 53 closeDisplay 1; true }; false }; }; };

If briefing param is absent from description.ext or equals 1, briefing dialog will be enabled. briefing = 0; will make game to skip briefing. I would be interested to find out how this improves the logings after server restart, so if you happen to use it, drop me a line. Oh and another thing. While I was testing this, recently released DayZ SA broke Steam authentication for all Steam games. I couldn’t even connect to my localhost dedicated server while server .rpt got spammed with:

Server error: Player without identity KK (id xxxxxxxxxx)
Server error: Player without identity KK (id xxxxxxxxxx)
Server error: Player without identity KK (id xxxxxxxxxx)

I suppose it was worth it because now we know that “Player without identity” error is a Steam fault not Arma.


EDIT: Changed the code a little bit after Karel made a point of using isNumber instead of configName to determine if briefing param exists.