diff --git a/arma-reforger.kvp b/arma-reforger.kvp new file mode 100644 index 0000000..b23c113 --- /dev/null +++ b/arma-reforger.kvp @@ -0,0 +1,91 @@ +Meta.DisplayName=Arma Reforger +Meta.Description=Arma Reforger Dedicated Server +Meta.OS=Windows, Linux +Meta.Arch=x86_64 +Meta.Author=JetFox, Greelan +Meta.URL=https://reforger.armaplatform.com +Meta.DisplayImageSource=steam:1874880 +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$QueryPort} +Meta.ConfigManifest=arma-reforgerconfig.json +Meta.MetaConfigManifest=arma-reforgermetaconfig.json +Meta.ConfigRoot=arma-reforger.kvp +Meta.MinAMPVersion=2.4.2.0 +Meta.SpecificDockerImage= +Meta.DockerRequired=False +Meta.ContainerPolicy=Supported +Meta.ContainerPolicyReason= +Meta.ExtraSetupStepsURI= +Meta.Prerequsites=[] +Meta.ExtraContainerPackages=[] +Meta.ConfigReleaseState=NotSpecified +Meta.NoCommercialUsage=False +App.DisplayName=Arma Reforger +App.RootDir=./arma-reforger/ +App.BaseDirectory=./arma-reforger/1874900/ +App.ExecutableWin=1874900\ArmaReforgerServer.exe +App.ExecutableLinux=1874900/ArmaReforgerServer +App.WorkingDir=1874900 +App.LinuxCommandLineArgs= +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} -gproj "{{$FullBaseDir}}addons/data/ArmaReforger.gproj" -profile "{{$FullBaseDir}}AReforgerMaster" -bepath "{{$FullBaseDir}}battleye" -port={{$GamePort}} -config "{{$FullBaseDir}}Configs/server.json" -a2sIpAddress {{$ApplicationIPBinding}} -listScenarios -noThrow {{$FormattedArgs}} {{logStats}} {{CustomServerArgs}} +App.UseLinuxIOREDIR=False +App.AppSettings={} +App.EnvironmentVariables={"LD_LIBRARY_PATH":"{{$FullBaseDir}}linux64:%LD_LIBRARY_PATH%","SteamAppId":"1874880"} +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":2001,"Ref":"GamePort","Name":"Game Port","Description":"Port for game traffic"},{"Protocol":"UDP","Port":17777,"Ref":"QueryPort","Name":"Query Port","Description":"Port for Steam query traffic"},{"Protocol":"UDP","Port":2002,"Ref":"RCONPort","Name":"RCON Port","Description":"Port for RCON traffic"}] +App.AdminPortRef=RCONPort +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepApplicationUDPPortRef=GamePort +App.UniversalSleepSteamQueryPortRef=QueryPort +App.MaxUsers=127 +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[arma-reforgerupdates.json] +App.PreStartStages=[] +App.Compatibility=LinuxBufferedConsole, WindowsBufferedConsole +App.SteamUpdateAnonymousLogin=True +App.SteamForceLoginPrompt=False +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=(\[0m|\[33m) +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=^((WARNING|ERROR): Shader.+|Unknown command)$ +Console.AppReadyRegex=^[\d:\s]*ENGINE\s+: Game successfully created\.$ +Console.UserJoinRegex=^[\d:\s]*NETWORK\s+: ### Connecting player: connectionID=(?.+), Name=(?.*)$ +Console.UserLeaveRegex=^[\d:\s]*NETWORK\s+: Player disconnected: connectionID=(?.+)$ +Console.UserChatRegex=^$ +Console.UpdateAvailableRegex=^\[\d\d:\d\d:\d\d\] \[INFO\] A new server update is available! v[\d\.]+.$ +Console.MetricsRegex= +Console.SuppressLogAtStart=False +Console.ActivateLogRegex= +Console.UserActions={} +Limits.SleepMode=False +Limits.SleepOnStart=False +Limits.SleepDelayMinutes=5 +Limits.DozeDelay=2 +Limits.AutoRetryCount=5 +Limits.SleepStartThresholdSeconds=25 diff --git a/arma-reforgerconfig.json b/arma-reforgerconfig.json new file mode 100644 index 0000000..1bde1b4 --- /dev/null +++ b/arma-reforgerconfig.json @@ -0,0 +1,377 @@ +[ + { + "DisplayName":"Game Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$GamePort", + "InputType":"number", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"$.gameHostBindPort", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Register Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$GamePort", + "InputType":"number", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"$.gameHostRegisterPort", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Query Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$QueryPort", + "InputType":"number", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"$.steamQueryPort", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Enable Steam Query", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"a2sQueryEnabled", + "InputType":"text", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"$.a2sQueryEnabled", + "IncludeInCommandLine":false, + "DefaultValue":"true", + "EnumValues":{} + }, + { + "DisplayName":"Register IP Binding", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$ExternalIP", + "InputType":"text", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"$.gameHostRegisterBindAddress", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Enable BattlEye", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"battlEye", + "InputType":"text", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"$.game.gameProperties.battlEye", + "IncludeInCommandLine":false, + "DefaultValue":"true", + "EnumValues":{} + }, + { + "DisplayName":"Server Name", + "Category":"Server Settings", + "Description":"Sets the server name visible in the game browser (up to 100 characters)", + "Keywords":"server,name", + "FieldName":"name", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"$.game.name", + "IncludeInCommandLine":false, + "DefaultValue":"Arma Reforger Server - Powered by AMP", + "EnumValues":{} + }, + { + "DisplayName":"Server Region", + "Category":"Server Settings", + "Description":"Sets the server's region. Requires a valid [ISO 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) such as EU, US, AU, JP", + "Keywords":"region,location", + "FieldName":"region", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"$.region", + "IncludeInCommandLine":false, + "DefaultValue":"EU", + "EnumValues":{}, + }, + { + "DisplayName":"Server Map", + "Category":"Server Settings", + "Description":"Sets the server map. Specify the scenario conf file path as listed in the logs/console", + "Keywords":"map,scenario,scenarioid", + "FieldName":"scenarioId", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"$.game.scenarioId", + "IncludeInCommandLine":false, + "DefaultValue":"{ECC61978EDCC2B5A}Missions/23_Campaign.conf", + "Placeholder":"{ECC61978EDCC2B5A}Missions/23_Campaign.conf", + "EnumValues":{} + }, + { + "DisplayName":"Server/RCON IP Binding", + "Category":"Server Settings", + "Description":"If required, you can change the binding of the server and BattlEye RCON by editing App.ApplicationIPBinding in GenericModule.kvp for the instance. Stop the instance (not just the server) first", + "Keywords":"ip,binding,gamehostbindaddress,rconip", + "FieldName":"$ApplicationIPBinding", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"$.gameHostBindAddress", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Make Server Public", + "Category":"Server Settings", + "Description":"If enabled, the server will be visible in the in-game browser", + "Keywords":"serverlist,public,visible", + "FieldName":"visible", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"$.game.visible", + "IncludeInCommandLine":false, + "DefaultValue":"true", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Server Password", + "Category":"Server Settings", + "Description":"Sets the password required to connect to the server. Default is no password", + "Keywords":"server,password", + "FieldName":"password", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"$.game.password", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Admin Password", + "Category":"Server Settings", + "Description":"Sets the password required for admin access to the server. Default is no password", + "Keywords":"admin,password,adminpassword", + "FieldName":"adminPassword", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"$.adminPassword", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"RCON Password", + "Category":"Server Settings", + "Description":"See the Security and Privacy menu for configurable options for the server's RCON", + "Keywords":"rcon,password", + "FieldName":"RCONPassword", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"RCONPassword", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Server Player Limit", + "Category":"Server Settings", + "Description":"Sets the maximum number of players that may connect to the server at one time", + "Keywords":"players,limit,maximum,playercountlimit", + "FieldName":"$MaxUsers", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"$.game.playerCountLimit", + "IncludeInCommandLine":false, + "DefaultValue":"127", + "Placeholder":"127", + "Suffix":"players", + "EnumValues":{} + }, + { + "DisplayName":"Mission Player Limit", + "Category":"Server Settings", + "Description":"Sets the maximum number of players that a mission will allow", + "Keywords":"players,limit,maximum,mission,m_iplayercount", + "FieldName":"m_iPlayerCount", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"$.game.gameProperties.missionHeader.m_iPlayerCount", + "IncludeInCommandLine":false, + "DefaultValue":"127", + "Placeholder":"127", + "Suffix":"players", + "EnumValues":{} + }, + { + "DisplayName":"Server FPS Limit", + "Category":"Server Settings", + "Description":"Sets the server FPS. Recommended to be in the range of 60 to 120 so that the server does not use all available resources", + "Keywords":"fps,limit,maxfps", + "FieldName":"maxFPS", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"maxFPS", + "IncludeInCommandLine":true, + "DefaultValue":"60", + "Suffix":"fps", + "EnumValues":{} + }, + { + "DisplayName":"Maximum View Distance", + "Category":"Server Settings", + "Description":"Sets the server's maximum view distance (between 500 to 10000). Default is 1600", + "Keywords":"maximum,view,distance,servermaxviewdistance", + "FieldName":"serverMaxViewDistance", + "InputType":"number", + "MinValue":"500", + "MaxValue":"10000", + "IsFlagArgument":false, + "ParamFieldName":"$.game.gameProperties.serverMaxViewDistance", + "IncludeInCommandLine":false, + "DefaultValue":"1600", + "Placeholder":"500 - 10000", + "EnumValues":{} + }, + { + "DisplayName":"Network View Distance", + "Category":"Server Settings", + "Description":"Sets the server's maximum network streaming range of replicated entities (between 500 to 5000). Default is 500", + "Keywords":"network,stream,view,distance,networkviewdistance", + "FieldName":"networkViewDistance", + "InputType":"number", + "MinValue":"500", + "MaxValue":"5000", + "IsFlagArgument":false, + "ParamFieldName":"$.game.gameProperties.networkViewDistance", + "IncludeInCommandLine":false, + "DefaultValue":"500", + "Placeholder":"500 - 5000", + "EnumValues":{} + }, + { + "DisplayName":"Minimum Grass Distance", + "Category":"Server Settings", + "Description":"Sets the server's minimum grass distance (between 50 to 150). 0 = no minimum distance is forced on clients (default)", + "Keywords":"minimum,grass,distance,servermingrassdistance", + "FieldName":"serverMinGrassDistance", + "InputType":"number", + "MinValue":"0", + "MaxValue":"150", + "IsFlagArgument":false, + "ParamFieldName":"$.game.gameProperties.serverMinGrassDistance", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "Placeholder":"0 or 50 - 150", + "Suffix":"metres", + "EnumValues":{} + }, + { + "DisplayName":"Quick Start Joinable", + "Category":"Server Settings", + "Description":"If enabled, the session can be selected through the auto join feature", + "Keywords":"join,auto,autojoinable", + "FieldName":"autoJoinable", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"$.game.autoJoinable", + "IncludeInCommandLine":false, + "DefaultValue":"true", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Disable Third Person", + "Category":"Server Settings", + "Description":"If enabled, clients will be forced to use the first-person view. NOTE: This must be disabled for auto join", + "Keywords":"third,person,disablethirdperson", + "FieldName":"disableThirdPerson", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"$.game.gameProperties.disableThirdPerson", + "IncludeInCommandLine":false, + "DefaultValue":"false", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Enable Fast Validation", + "Category":"Server Settings", + "Description":"If enabled, matching validation of map entities and components loaded on a client when it joins will be done with minimum information. Always enable for a public server!", + "Keywords":"validation,checksum,fastvalidation", + "FieldName":"fastValidation", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"$.game.gameProperties.fastValidation", + "IncludeInCommandLine":false, + "DefaultValue":"true", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Log Statistics", + "Category":"Server Settings", + "Description":"If enabled, the server logs performance statistics every second or such other period set under \"Statistics Logging Interval\"", + "Keywords":"log,statistics,logstats", + "FieldName":"logStats", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"logStats", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{ + "False":"", + "True":"-logStats {{logStatsInterval}}" + } + }, + { + "DisplayName":"Statistics Logging Inverval", + "Category":"Server Settings", + "Description":"Sets the interval for logging of performance statistics, if \"Log Statistics\" is enabled. Default is 1000 (1 second)", + "Keywords":"log,statistics,logstats", + "FieldName":"logStatsInterval", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"logStatsInterval", + "IncludeInCommandLine":false, + "DefaultValue":"1000", + "Placeholder":"1000", + "Suffix":"milliseconds", + "EnumValues":{} + }, + { + "DisplayName":"Additional Server Startup Parameters", + "Category":"Server Settings", + "Description":"Specifies additional startup parameters that are not otherwise set by AMP. Use with care", + "Keywords":"custom,server,arguments,parameters", + "FieldName":"CustomServerArgs", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"CustomServerArgs", + "IncludeInCommandLine":false, + "DefaultValue":"", + "Placeholder":"-debug", + "EnumValues":{} + } +] \ No newline at end of file diff --git a/arma-reforgermetaconfig.json b/arma-reforgermetaconfig.json new file mode 100644 index 0000000..1324392 --- /dev/null +++ b/arma-reforgermetaconfig.json @@ -0,0 +1,24 @@ +[ + { + "ConfigFile":"Configs/server.json", + "AutoMap":true, + "ConfigType":"json" + }, + { + "ConfigFile":"battleye/BEServer_x64.cfg", + "ConfigType":"kvp", + "ConfigFormat":"{0} {1}", + "Subsections":[ + { + "Heading":"$root", + "SettingMappings":{ + "GameID":"armar", + "MasterPort":"2001", + "RConPassword":"$RemoteAdminPassword", + "RConPort":"$RCONPort", + "RConIP":"$ApplicationIPBinding" + } + } + ] + } +] \ No newline at end of file diff --git a/arma-reforgerserver.json b/arma-reforgerserver.json new file mode 100644 index 0000000..f7b2e69 --- /dev/null +++ b/arma-reforgerserver.json @@ -0,0 +1,37 @@ +{ + "dedicatedServerId":"", + "region":"EU", + "gameHostBindAddress":"", + "gameHostBindPort":2001, + "gameHostRegisterBindAddress":"", + "gameHostRegisterPort":2001, + "adminPassword":"", + "a2sQueryEnabled":true, + "steamQueryPort":17777, + "game":{ + "name":"Arma Reforger Server - Powered by AMP", + "password":"", + "scenarioId":"{ECC61978EDCC2B5A}Missions/23_Campaign.conf", + "playerCountLimit":127, + "autoJoinable":true, + "visible":true, + "supportedGameClientTypes":[ + "PLATFORM_PC", + "PLATFORM_XBL" + ], + "gameProperties":{ + "serverMaxViewDistance":1600, + "serverMinGrassDistance":0, + "networkViewDistance":500, + "disableThirdPerson":false, + "fastValidation":true, + "battlEye":true, + "missionHeader":{ + "m_iPlayerCount":127, + "m_eEditableGameFlags":6, + "m_eDefaultGameFlags":6 + } + }, + "mods":[] + } +} \ No newline at end of file diff --git a/arma-reforgerupdates.json b/arma-reforgerupdates.json new file mode 100644 index 0000000..2097bdd --- /dev/null +++ b/arma-reforgerupdates.json @@ -0,0 +1,25 @@ +[ + { + "UpdateStageName":"SteamCMD Download", + "UpdateSourcePlatform":"All", + "UpdateSource":"SteamCMD", + "UpdateSourceData":"1874900", + "UpdateSourceArgs":"1874880" + }, + { + "UpdateStageName":"Create Configs Directory", + "UpdateSourcePlatform":"All", + "UpdateSource":"CreateDirectory", + "UpdateSourceArgs":"{{$FullBaseDir}}Configs", + "OverwriteExistingFiles":false + }, + { + "UpdateStageName":"Server Config File Download", + "UpdateSourcePlatform":"All", + "UpdateSource":"FetchURL", + "UpdateSourceData":"https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/arma-reforgerserver.json", + "UpdateSourceArgs":"server.json", + "UpdateSourceTarget":"{{$FullBaseDir}}Configs/", + "OverwriteExistingFiles":false + } +] \ No newline at end of file