// SERVER CONFIGURATION FILE - https://community.bistudio.com/wiki/server.cfg

// Startup parameter: -config=server.cfg

// GLOBAL SETTINGS

hostname = "Arma Server Name"; // Name that will appear in Arma’s server list. Replace with a name of your choosing.
password = "arma_server_password"; // Password for joining (connecting to) the server. Replace with one of your choosing and share with the people you want to play with.
passwordAdmin = "your_chosen_ingame_admin_password"; // Password to become server admin. When you're in Arma multiplayer and connected to the server, type '#login the_pass' to use server commands.

// serverCommandPassword = "servercommand_password_placeholder";  Password required by alternate syntax of [[serverCommand]] server-side scripting.
admins[] = {"#################"}; // Your 17-number Steam ID. You can find it using https://steamid.co/

// headlessClients[]={"###.###.###.##"}; // add headlessclient address
// localClient[]={"###.###.###.##"};
// Debugging for spawing custom things - https://community.bistudio.com/wiki/Arma_3_Debug_Console
// enableDebugConsole = 1; // hosts/logged-in admins
enableDebugConsole[] = {"#################"}; // Your 17-number Steam ID. You can find it using https://steamid.co/

//reportingIP = "armedass.master.gamespy.com"; // For ArmA1 publicly list your server on GameSpy. Leave empty for private servers
//reportingIP = "arma2pc.master.gamespy.com"; // For ArmA2 publicly list your server on GameSpy. Leave empty for private servers
//reportingIP = "arma3" //not used at all
logFile = "server_console.log"; // Tells ArmA-server where the logfile should go and what it should be called

// WELCOME MESSAGE

// It can be several lines, separated by comma
// Empty messages "" will not be displayed at all but are only for increasing the interval
motd[] = {
 "Bongiorno a tutti!",
 "You are most welcome!",
 "Enjoy the server with the most important things: Joy and laughter!"
};
motdInterval = 5; // Time interval (in seconds) between each message

// JOINING RULES

maxPlayers = 20; // Maximum amount of players. Civilians and watchers, beholder, bystanders and so on also count as player.
kickDuplicate = 1; // Each ArmA version has its own ID. If kickDuplicate is set to 1, a player will be kicked when he joins a server where another player with the same ID is playing.
verifySignatures = 0; // Turned off to keep things simple as only trusted players who will follow instructions about which mods to load and will have a password to join the server. Verifies .pbos against .bisign files. Valid values: 0 (disabled), 1 (prefer v2 sigs but accept v1 too) and 2 (only v2 sigs are allowed).
equalModRequired = 0; // Outdated. If set to 1, player has to use exactly the same -mod= startup parameter as the server.
allowedFilePatching = 1; // Allow or prevent client using -filePatching to join the server. 0, is disallow, 1 is allow HC, 2 is allow all clients (since Arma 3 1.49+)
filePatchingExceptions[] = {"#################","#################"}; // Whitelisted Steam IDs allowed to join with -filePatching enabled 
loopback = 0;
upnp = 0;
//requiredBuild = 12345    // Require clients joining to have at least build 12345 of game, preventing obsolete clients to connect

// VOTING

voteMissionPlayers = 1; // Tells the server how many people must connect so that it displays the mission selection screen.
voteThreshold = 0.33; // 33% or more players need to vote for something, for example an admin or a new map, to become effective

// INGAME SETTINGS

forceRotorLibSimulation = 2; // disabled (default flight mode - Arma’s best.)
disableVoN = 1; // If set to 1, Voice over Net will not be available. We keep it disabled as we use third party communication apps like Discord.
vonCodec = 1; // If set to 1 then it uses IETF standard OPUS codec, if to 0 then it uses SPEEX codec (since Arma 3 update 1.58+)  
vonCodecQuality = 30; // since 1.62.95417 supports range 1-20 //since 1.63.x will supports range 1-30 //8kHz is 0-10, 16kHz is 11-20, 32kHz(48kHz) is 21-30 
persistent = 0; // If 1, missions still run on even after the last player disconnected. Keep it off so Antistasi only runs when you are playing.
timeStampFormat = "short";   // Set the timestamp format used on each report line in server-side RPT file. Possible values are "none" (default),"short","full".
BattlEye = 0; // Server to use BattlEye anti-cheat system. Turned off as only trusted players with a password can join the server.
drawingInMap = 1;
allowedLoadFileExtensions[] = {"hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi"}; //only allow files with those extensions to be loaded via loadFile command (since Arma 3 build 1.19.124216)
allowedPreprocessFileExtensions[] = {"hpp","sqs","sqf","fsm","cpp","paa","txt","xml","inc","ext","sqm","ods","fxy","lip","csv","kb","bik","bikb","html","htm","biedi"}; //only allow files with those extensions to be loaded via preprocessFile/preprocessFileLineNumber commands (since Arma 3 build 1.19.124323)
allowedHTMLLoadExtensions[] = {"htm","html","xml","txt"}; //only allow files with those extensions to be loaded via HTMLLoad command (since Arma 3 build 1.27.126715)
//allowedHTMLLoadURIs = {}; // Leave commented to let missions/campaigns/addons decide what URIs are supported. Uncomment to define server-level restrictions for URIs

// TIMEOUTS

disconnectTimeout = 5; // Time to wait before disconnecting a user which temporarly lost connection. Range is 5 to 90 seconds.
maxDesync = 150; // Max desync value until server kick the user
maxPing= 200; // Max ping value until server kick the user
maxPacketLoss= 50; // Max packetloss value until server kick the user
kickClientsOnSlowNetwork[] = { 0, 0, 0, 0 }; //Defines if {<MaxPing>, <MaxPacketLoss>, <MaxDesync>, <DisconnectTimeout>} will be logged (0) or kicked (1)
kickTimeout[] = { {0, -1}, {1, 180}, {2, 180}, {3, 180} };
votingTimeOut[] = {60, 90}; // Kicks users from server if they spend too much time in mission voting
roleTimeOut[] = {90, 120}; // Kicks users from server if they spend too much time in role selection 
briefingTimeOut[] = {60, 90}; // Kicks users from server if they spend too much time in briefing (map) screen
debriefingTimeOut[] = {45, 60}; // Kicks users from server if they spend too much time in debriefing screen
lobbyIdleTimeout = 300; // The amount of time the server will wait before force-starting a mission without a logged-in Admin.

// SCRIPTING ISSUES

onUserConnected = ""; 
onUserDisconnected = "";
doubleIdDetected = "";

// SIGNATURE VERIFICATION

onUnsignedData = "kick (_this select 0)"; // unsigned data detected
onHackedData = "kick (_this select 0)"; // tampering of the signature detected
onDifferentData = ""; // data with a valid signature, but different version than the one present on server detected

// MISSIONS CYCLE (see below)

randomMissionOrder = false; // Randomly iterate through Missions list
autoSelectMission = false; // Server auto selects next mission in cycle
missionWhitelist[] = {}; // An empty array means there is no restriction on what missions available. Note for future programmers: Please take care in choosing words that don’t exacerbate racial stereotypes. This parameter, for example, could be called `missionYeslist[] = {};` or `missionAllowlist[] ={};`
// Setting a specific mission to load automatically when server starts:
class Missions
{
    class AntistasiAltisAmazons 
    {
        template = Antistasi-Altis-Amazons.Altis;
        difficulty = "Custom"; // DIFFICULTY custom file in Nodecraft is currently as of 2020 June 7 in: /share/home/server/server.Arma3Profile
        class Params {
          loadSave = 1;
          autoSave = 1;
        };
    };
};