Add Arma 3 (generic) (#203)

This commit is contained in:
Greelan 2023-03-07 05:50:50 +11:00 committed by GitHub
parent c62be0ac90
commit 89fb007715
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 1451 additions and 0 deletions

91
arma3.kvp Normal file
View File

@ -0,0 +1,91 @@
Meta.DisplayName=Arma 3
Meta.Description=Arma 3 Dedicated Server
Meta.OS=Windows, Linux
Meta.Arch=x86_64
Meta.Author=Greelan
Meta.URL=https://arma3.com/
Meta.DisplayImageSource=steam:107410
Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$QueryPort}
Meta.ConfigManifest=arma3config.json
Meta.MetaConfigManifest=arma3metaconfig.json
Meta.ConfigRoot=arma3.kvp
Meta.MinAMPVersion=2.4.2.0
Meta.SpecificDockerImage=
Meta.DockerRequired=False
Meta.ContainerPolicy=Supported
Meta.ContainerPolicyReason=
Meta.ExtraSetupStepsURI=https://discourse.cubecoders.com/t/arma-3-generic-guide/3475
Meta.Prerequsites=[]
Meta.ExtraContainerPackages=[]
Meta.ConfigReleaseState=NotSpecified
Meta.NoCommercialUsage=False
App.DisplayName=Arma 3
App.RootDir=./arma3/
App.BaseDirectory=./arma3/233780/
App.ExecutableWin=233780\ArmA3Server_x64.exe
App.ExecutableLinux=233780/arma3server_x64
App.WorkingDir=233780
App.LinuxCommandLineArgs=
App.WindowsCommandLineArgs=
App.CommandLineArgs={{$PlatformArgs}} -name=AMPServer "-profiles={{$FullBaseDir}}A3Master" "-bepath={{$FullBaseDir}}battleye" -port={{$GamePort}} -config=server.cfg -cfg=basic.cfg -world=empty -ip={{$ApplicationIPBinding}} {{autoInit}}{{$FormattedArgs}} {{parfile}}{{CustomServerArgs}}
App.UseLinuxIOREDIR=False
App.AppSettings={}
App.EnvironmentVariables={"LD_LIBRARY_PATH":"{{$FullBaseDir}}linux64:%LD_LIBRARY_PATH%","SteamAppId":"107410"}
App.CommandLineParameterFormat="-{0}={1}"
App.CommandLineParameterDelimiter=
App.ExitMethod=String
App.ExitTimeout=30
App.ExitString=#shutdown
App.ExitFile=app_exit.lck
App.HasWriteableConsole=True
App.HasReadableConsole=True
App.SupportsLiveSettingsChanges=False
App.LiveSettingChangeCommandFormat=set {0} "{1}"
App.ApplicationIPBinding=0.0.0.0
App.Ports=[{"Protocol":"UDP","Port":2302,"Ref":"GamePort","Name":"Game Port","Description":"Port for game traffic"},{"Protocol":"UDP","Port":2303,"Ref":"QueryPort","Name":"Query Port","Description":"Port for Steam query traffic"},{"Protocol":"UDP","Port":2304,"Ref":"SteamPort","Name":"Steam Port","Description":"Port for Steam traffic"},{"Protocol":"UDP","Port":2305,"Ref":"ReservedPort","Name":"Reserved Port","Description":"Port reserved for VON traffic"},{"Protocol":"UDP","Port":2306,"Ref":"BattlEyePort","Name":"BattlEye Port","Description":"Port for BattlEye traffic"},{"Protocol":"UDP","Port":2307,"Ref":"RCONPort","Name":"RCON Port","Description":"Port for RCON traffic"}]
App.AdminPortRef=RCONPort
App.PrimaryApplicationPortRef=GamePort
App.UniversalSleepApplicationUDPPortRef=GamePort
App.UniversalSleepSteamQueryPortRef=QueryPort
App.MaxUsers=64
App.UseRandomAdminPassword=True
App.PersistRandomPassword=True
App.RemoteAdminPassword=
App.AdminMethod=BattlEyeRCON
App.AdminLoginTransform=None
App.RCONConnectDelaySeconds=5
App.RCONConnectRetrySeconds=5
App.RCONHeartbeatMinutes=0.5
App.RCONHeartbeatCommand=ping
App.TelnetLoginFormat={0}
App.UpdateSources=@IncludeJson[arma3updates.json]
App.PreStartStages=[{"UpdateStageName":"Delete Active File","UpdateSourcePlatform":"Linux","UpdateSource":"Executable","UpdateSourceData":"/bin/bash","UpdateSourceArgs":"-c 'rm -f {{$FullBaseDir}}battleye/beserver_x64_active_*.cfg'"},{"UpdateStageName":"Delete Active File","UpdateSourcePlatform":"Windows","UpdateSource":"Executable","UpdateSourceData":"cmd.exe","UpdateSourceArgs":"/C del /Q /F {{$FullBaseDir}}battleye\\beserver_x64_active_*.cfg"}]
App.Compatibility=None
App.SteamUpdateAnonymousLogin=False
App.SteamForceLoginPrompt=True
App.RapidStartup=False
App.MonitorChildProcess=False
App.MonitorChildProcessWaitMs=100
App.MonitorChildProcessName=
App.SupportsUniversalSleep=False
App.WakeupMode=Any
App.ApplicationReadyMode=RegexMatch
App.TemplateMatchRegex={{(\$?[\w]+)}}
Console.FilterMatchRegex=
Console.FilterMatchReplacement=
Console.ThrowawayMessageRegex=^((WARNING|ERROR): Shader.+|Unknown command)$
Console.AppReadyRegex=^RCon admin #\d+ \([\d\.:]+\) logged in$
Console.UserJoinRegex=^[\d:]+ BattlEye Server: Player #(?<sessionid>.+?) (?<username>.+( \(\d+\))?) \((?<endpoint>.+?):(?:\d+)\) connected$
Console.UserLeaveRegex=^[\d:]+ BattlEye Server: Player #(?<sessionid>.+?) (?<username>.+( \(\d+\))?) disconnected$
Console.UserChatRegex=^$
Console.UpdateAvailableRegex=
Console.MetricsRegex=
Console.SuppressLogAtStart=False
Console.ActivateLogRegex=
Console.UserActions={}
Limits.SleepMode=True
Limits.SleepOnStart=False
Limits.SleepDelayMinutes=5
Limits.DozeDelay=2
Limits.AutoRetryCount=5
Limits.SleepStartThresholdSeconds=25

17
arma3basic.cfg Normal file
View File

@ -0,0 +1,17 @@
// basic.cfg
// This file is to fine-tune network performance.
// Full information on relevant settings is available at https://community.bistudio.com/wiki/Arma_3:_Basic_Server_Config_File
//MinBandwidth = 131072; // Bandwidth the server is guaranteed to have (in bps). This value helps server to estimate bandwidth available. Increasing it to too optimistic values can increase lag and CPU load, as too many messages will be sent but discarded. Default: 131072
//MaxBandwidth = 10000000000; // Bandwidth the server is guaranteed to never have. This value helps the server to estimate bandwidth available.
//MaxMsgSend = 128; // Maximum number of messages that can be sent in one simulation cycle. Increasing this value can decrease lag on high upload bandwidth servers. Default: 128
//MaxSizeGuaranteed = 512; // Maximum size of guaranteed packet in bytes (without headers). Small messages are packed to larger frames. Guaranteed messages are used for non-repetitive events like shooting. Default: 512
//MaxSizeNonguaranteed = 256; // Maximum size of non-guaranteed packet in bytes (without headers). Non-guaranteed messages are used for repetitive updates like soldier or vehicle position. Increasing this value may improve bandwidth requirement, but it may increase lag. Default: 256
//MinErrorToSend = 0.001; // Minimal error to send updates across network. Using a smaller value can make units observed by binoculars or sniper rifle to move smoother. Default: 0.001
//MinErrorToSendNear = 0.01; // Minimal error to send updates across network for near units. Using larger value can reduce traffic sent for near units. Used to control client to server traffic as well. Default: 0.01
//MaxCustomFileSize = 0; // (bytes) Users with custom face or custom sound larger than this size are kicked when trying to connect.

1144
arma3config.json Normal file

File diff suppressed because it is too large Load Diff

23
arma3metaconfig.json Normal file
View File

@ -0,0 +1,23 @@
[
{
"ConfigFile":"server.cfg",
"AutoMap":true,
"ConfigType":"template",
"ConfigFileTemplate":"./arma3/233780/AMP_server.cfg"
},
{
"ConfigFile":"battleye/beserver_x64.cfg",
"ConfigType":"kvp",
"ConfigFormat":"{0} {1}",
"Subsections":[
{
"Heading":"$root",
"SettingMappings":{
"RConPassword":"$RemoteAdminPassword",
"RConPort":"$RCONPort",
"RConIP":"$ApplicationIPBinding"
}
}
]
}
]

6
arma3modscript.sh Normal file
View File

@ -0,0 +1,6 @@
#!/bin/bash
find ./arma3/233780/steamapps/workshop/content/107410/ -type f -name "*[A-Z]*" -print0 |\
xargs -0 -I {} bash -c "mv \"{}\" \"\`echo {} | sed 's,\(.*\)\/\(.*\),\1\/\L\2,'\`\"" &&\
cd ./arma3/233780 &&\
find ./steamapps/workshop/content/107410 -maxdepth 1 -mindepth 1 -type d -exec ln -sf -t ./ {} +
exit 0

113
arma3server.cfg Normal file
View File

@ -0,0 +1,113 @@
// DO NOT edit server.cfg directly
// AMP_server.cfg controls server.cfg. Edit AMP_server.cfg if you want to add or change certain settings
// NOTE:
// - DO NOT change values in double curly braces, ie {{}}. They are set either via the AMP UI
// or are controlled by AMP itself (in particular, ports)
// - Other settings can be changed or added as needed - see the second section below
// Full information on settings is available at https://community.bistudio.com/wiki/Arma_3:_Server_Config_File
// *******
// SETTINGS CONTROLLED BY AMP - DO NOT TOUCH THESE!!!
// *******
hostname = "{{hostname}}";
password = "{{password}}";
passwordAdmin = "{{passwordAdmin}}";
serverCommandPassword = "{{serverCommandPassword}}";
admins[] = { {{admins}} };
headlessClients[] = { {{headlessClients}} };
localClient[] = { {{localClient}} };
logFile = "server_console.log";
motd[] = { {{motd}} };
motdInterval = {{motdInterval}};
maxPlayers = {{maxPlayers}};
kickDuplicate = {{kickDuplicate}};
verifySignatures = {{verifySignatures}};
allowedFilePatching = {{allowedFilePatching}};
filePatchingExceptions[] = { {{filePatchingExceptions}} };
requiredBuild = {{requiredBuild}};
loopback = {{loopback}};
upnp = {{upnp}};
skipLobby = {{skipLobby}};
voteMissionPlayers = {{voteMissionPlayers}};
voteThreshold = {{voteThreshold}};
forceRotorLibSimulation = {{forceRotorLibSimulation}};
disableVoN = {{disableVoN}};
vonCodec = {{vonCodec}};
vonCodecQuality = {{vonCodecQuality}};
persistent = {{persistent}};
timeStampFormat = "{{timeStampFormat}}";
BattlEye = 1;
allowedLoadFileExtensions[] = { {{allowedLoadFileExtensions}} };
allowedPreprocessFileExtensions[] = { {{allowedPreprocessFileExtensions}} };
allowedHTMLLoadExtensions[] = { {{allowedHTMLLoadExtensions}} };
enablePlayerDiag = {{enablePlayerDiag}};
drawingInMap = {{drawingInMap}};
allowProfileGlasses = {{allowProfileGlasses}};
forcedDifficulty = "{{forcedDifficulty}}";
disconnectTimeout = {{disconnectTimeout}};
maxDesync = {{maxDesync}};
maxPing = {{maxPing}};
maxPacketLoss = {{maxPacketLoss}};
kickClientsOnSlowNetwork[] = { {{kickPing}},{{kickLoss}},{{kickDesync}},{{kickTimeout}} };
kickTimeout[] = { { 0,{{kickManual}} }, { 1,{{kickConnectivity}} }, { 2,{{kickBattlEye}} }, { 3,{{kickHarmless}} } };
votingTimeOut[] = { {{votingTimeOut}} };
roleTimeOut[] = { {{roleTimeOut}} };
briefingTimeOut[] = { {{briefingTimeOut}} };
debriefingTimeOut[] = { {{debriefingTimeOut}} };
lobbyIdleTimeout = {{lobbyIdleTimeout}};
armaUnitsTimeout = {{armaUnitsTimeout}};
onUserConnected = "{{onUserConnected}}";
onUserDisconnected = "{{onUserDisconnected}}";
doubleIdDetected = "{{doubleIdDetected}}";
onUserKicked = "{{onUserKicked}}";
onUnsignedData = "{{onUnsignedData}}";
onHackedData = "{{onHackedData}}";
onDifferentData = "{{onDifferentData}}";
autoSelectMission = {{autoSelectMission}};
randomMissionOrder = {{randomMissionOrder}};
statisticsEnabled = {{statisticsEnabled}};
callExtReportLimit = {{callExtReportLimit}};
zeusCompositionScriptLevel = {{zeusCompositionScriptLevel}};
steamProtocolMaxDataSize = {{steamProtocolMaxDataSize}};
class AdvancedOptions
{
LogObjectNotFound = {{LogObjectNotFound}};
SkipDescriptionParsing = {{SkipDescriptionParsing}};
ignoreMissionLoadErrors = {{ignoreMissionLoadErrors}};
queueSizeLogG = {{queueSizeLogG}};
};
// *******
// USER CONFIGURABLE SETTINGS - CHANGE/ADD ADDITIONAL SETTINGS HERE
// *******
// VOTING
//allowedVoteCmds[] = { { "kick", false, false, 0.75 } };
//allowedVotedAdminCmds[] = { { "mission", true, true } };
// INGAME SETTINGS
//allowedHTMLLoadURIs[] = {};
// MISSIONS CYCLE
//class Missions {}; // An empty Missions class means there will be no mission rotation
// OR
//class Missions // A full list of default missions is at https://community.bistudio.com/wiki/Arma_3:_MP_Mission_Names
//{
// class Mission01
// {
// template = MP_Marksmen_01.Altis;
// difficulty = "Veteran";
// class Params {};
// };
// class Mission02
// {
// template = MP_End_Game_01.Altis;
// difficulty = "Veteran";
// class Params {};
// };
//};
//missionWhitelist[] = {}; // An empty whitelist means there is no restriction on what missions are available
// OTHER OPTIONS
//disableChannels[] = {};

57
arma3updates.json Normal file
View File

@ -0,0 +1,57 @@
[
{
"UpdateStageName":"SteamCMD Download",
"UpdateSourcePlatform":"All",
"UpdateSource":"SteamCMD",
"UpdateSourceData":"233780",
"UpdateSourceArgs":"107410"
},
{
"UpdateStageName":"Server Config Template Download",
"UpdateSourcePlatform":"All",
"UpdateSource":"FetchURL",
"UpdateSourceData":"https://github.com/CubeCoders/AMPTemplates/raw/main/arma3server.cfg",
"UpdateSourceArgs":"AMP_server.cfg",
"UpdateSourceTarget":"{{$FullBaseDir}}",
"OverwriteExistingFiles":false
},
{
"UpdateStageName":"Basic Config File Download",
"UpdateSourcePlatform":"All",
"UpdateSource":"FetchURL",
"UpdateSourceData":"https://github.com/CubeCoders/AMPTemplates/raw/main/arma3basic.cfg",
"UpdateSourceArgs":"basic.cfg",
"UpdateSourceTarget":"{{$FullBaseDir}}",
"OverwriteExistingFiles":false
},
{
"UpdateStageName":"Create Parameters File",
"UpdateSourcePlatform":"All",
"UpdateSource":"CreateFile",
"UpdateSourceArgs":"{{$FullBaseDir}}parameters.txt",
"OverwriteExistingFiles":false
},
{
"UpdateStageName":"Modscript Download",
"UpdateSourcePlatform":"Linux",
"UpdateSource":"FetchURL",
"UpdateSourceData":"https://github.com/CubeCoders/AMPTemplates/raw/main/arma3modscript.sh",
"UpdateSourceArgs":"modscript.sh",
"UpdateSourceTarget":"{{$FullInstanceDir}}",
"OverwriteExistingFiles":true
},
{
"UpdateStageName":"Convert and Symlink Mods",
"UpdateSourcePlatform":"Linux",
"UpdateSource":"Executable",
"UpdateSourceData":"/bin/bash",
"UpdateSourceArgs":"./modscript.sh"
},
{
"UpdateStageName":"Link Mods",
"UpdateSourcePlatform":"Windows",
"UpdateSource":"Executable",
"UpdateSourceData":"cmd.exe",
"UpdateSourceArgs":"/C cd .\\arma3\\233780 && for /D %G in (.\\steamapps\\workshop\\content\\107410\\*) do mklink /J %~nxG %G"
}
]