From d770df1024f1c055ad9f7e47858afaae650ff15f Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Mon, 17 Jul 2023 17:33:16 +1000 Subject: [PATCH] Satisfactory: various updates (#420) --- satisfactory.kvp | 122 ++++++++++++++++------- satisfactoryconfig.json | 186 +++++++++++++++++++++++++++++++++--- satisfactorymetaconfig.json | 1 + satisfactoryupdates.json | 24 ++++- 4 files changed, 285 insertions(+), 48 deletions(-) create mode 100644 satisfactorymetaconfig.json diff --git a/satisfactory.kvp b/satisfactory.kvp index baa0d06..b55698c 100644 --- a/satisfactory.kvp +++ b/satisfactory.kvp @@ -1,42 +1,100 @@ -App.AdminMethod=STDIO -App.ApplicationPort1=7777 -App.ApplicationPort2=15000 -App.ApplicationPort3=15777 -App.RemoteAdminPort=0 -App.ApplicationReadyMode=RegexMatch -App.BaseDirectory=./satisfactory/1690800/ -App.WindowsCommandLineArgs=FactoryGame -log -unattended -App.LinuxCommandLineArgs=FactoryGame -log -unattended -App.CommandLineArgs={{$PlatformArgs}} -MultiHome={{$ApplicationIPBinding}} ?listen -Port={{$ApplicationPort1}} -BeaconPort={{$ApplicationPort2}} -ServerQueryPort={{$ApplicationPort3}} {{$FormattedArgs}} -App.CommandLineParameterDelimiter= -App.CommandLineParameterFormat=-{0}="{1}" +Meta.DisplayName=Satisfactory +Meta.Description=Satisfactory Dedicated Server +Meta.OS=Windows, Linux +Meta.AarchSupport=Unknown +Meta.Arch=x86_64 +Meta.Author=Greelan, CubeCoders Limited +Meta.URL=https://www.satisfactorygame.com/ +Meta.DisplayImageSource=steam:526870 +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$ApplicationPort3} +Meta.ConfigManifest=satisfactoryconfig.json +Meta.MetaConfigManifest=satisfactorymetaconfig.json +Meta.ConfigRoot=satisfactory.kvp +Meta.MinAMPVersion=2.3.4.0 +Meta.SpecificDockerImage= +Meta.DockerRequired=False +Meta.ContainerPolicy=Supported +Meta.ContainerPolicyReason= +Meta.ExtraSetupStepsURI= +Meta.Prerequsites=[] +Meta.ExtraContainerPackages=[] +Meta.ConfigReleaseState=NotSpecified +Meta.NoCommercialUsage=False +Meta.ConfigVersion=0.0.0.0 +Meta.ReleaseNotes= +Meta.BreakingReleaseNotes= App.DisplayName=Satisfactory -App.EnvironmentVariables={"LD_LIBRARY_PATH": "{{$FullBaseDir}}linux64:%LD_LIBRARY_PATH%", "SteamAppId": "526870"} -App.ExecutableLinux=1690800/Engine/Binaries/Linux/UE4Server-Linux-Shipping +App.RootDir=./satisfactory/ +App.BaseDirectory=./satisfactory/1690800/ +App.SteamWorkshopDownloadLocation= App.ExecutableWin=1690800\Engine\Binaries\Win64\UE4Server-Win64-Shipping.exe +App.ExecutableLinux=1690800/Engine/Binaries/Linux/UE4Server-Linux-Shipping +App.WorkingDir=1690800 +App.LinuxCommandLineArgs= +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} FactoryGame -MultiHome={{$ApplicationIPBinding}} -Port={{$ApplicationPort1}} -BeaconPort={{$ApplicationPort2}} -ServerQueryPort={{$ApplicationPort3}} {{$FormattedArgs}} -log -unattended +App.UseLinuxIOREDIR=False +App.AppSettings={} +App.EnvironmentVariables={"LD_LIBRARY_PATH":"{{$FullBaseDir}}linux64:%LD_LIBRARY_PATH%","SteamAppId":"526870"} +App.CommandLineParameterFormat=-{0}={1} +App.CommandLineParameterDelimiter= App.ExitMethod=OS_CLOSE App.ExitTimeout=10 -App.HasReadableConsole=true -App.HasWritableConsole=true -App.RapidStartup=false -App.RootDir=./satisfactory/ -App.UpdateSource=Multi +App.ExitString=stop +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":15777,"Offset":0,"Range":1,"Ref":"ApplicationPort3","Name":"Server Query Port","Description":"Port used to connect to server in-game","ChildPorts":null},{"Protocol":"UDP","Port":15000,"Offset":0,"Range":1,"Ref":"ApplicationPort2","Name":"Beacon Port","Description":"","ChildPorts":null},{"Protocol":"UDP","Port":7777,"Offset":0,"Range":1,"Ref":"ApplicationPort1","Name":"Game Port","Description":"Port for main game traffic","ChildPorts":null}] +App.AdminPortRef=0 +App.PrimaryApplicationPortRef=ApplicationPort3 +App.UniversalSleepApplicationUDPPortRef=ApplicationPort1 +App.UniversalSleepSteamQueryPortRef=ApplicationPort3 +App.MaxUsers=4 +App.UseRandomAdminPassword=False +App.PersistRandomPassword=True +App.RemoteAdminPassword= +App.AdminMethod=STDIO +App.AdminLoginTransform=None +App.LoginTransformPrefix= +App.RCONConnectDelaySeconds=5 +App.RCONConnectRetrySeconds=5 +App.RCONHeartbeatMinutes=0 +App.RCONHeartbeatCommand=ping +App.TelnetLoginFormat={0} App.UpdateSources=@IncludeJson[satisfactoryupdates.json] -App.WorkingDir=1690800 +App.PreStartStages=[] +App.ForceUpdate=False +App.ForceUpdateReason= +App.Compatibility=None +App.SteamUpdateAnonymousLogin=True +App.SteamForceLoginPrompt=False +App.RapidStartup=False +App.MonitorChildProcess=False +App.DumpFullChildProcessTree=False +App.MonitorChildProcessWaitMs=100 +App.MonitorChildProcessName= +App.SupportsUniversalSleep=False +App.WakeupMode=Any +App.ApplicationReadyMode=RegexMatch +App.TemplateMatchRegex={{(\$?[\w]+)}} Console.FilterMatchRegex=^\[.+?\]\[.+?\] Console.FilterMatchReplacement= -Console.AppReadyRegex=^LogWorld: Bringing up level for play took: [\d\.]+$|^LogInit: Display: Starting Game\.$ Console.ThrowawayMessageRegex=^(WARNING|ERROR): Shader.+$ -Console.UserChatRegex= +Console.AppReadyRegex=^LogWorld: Bringing up level for play took: [\d\.]+|LogInit: Display: Starting Game\.$ Console.UserJoinRegex=^User (?.+?) \((?-?d+)\) connected from \[::ffff:(?.+?)\]$ Console.UserLeaveRegex=^User (?.+?) \((?-?d+)\) disconnected\. Reason: (.+?)$ -Meta.Author=CubeCoders Limited -Meta.ConfigRoot=satisfactory.kvp -Meta.ConfigManifest=satisfactoryconfig.json -Meta.Description= -Meta.DisplayImageSource=steam:526870 -Meta.DisplayName=Satisfactory -Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.ApplicationPort3} -Meta.OS=3 -Meta.URL=https://store.steampowered.com/app/526870/Satisfactory/ -Meta.MinAMPVersion=2.3.4.0 +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=True +Limits.SleepOnStart=False +Limits.SleepDelayMinutes=5 +Limits.DozeDelay=2 +Limits.AutoRetryCount=5 +Limits.SleepStartThresholdSeconds=25 diff --git a/satisfactoryconfig.json b/satisfactoryconfig.json index 6f0430d..41be43b 100644 --- a/satisfactoryconfig.json +++ b/satisfactoryconfig.json @@ -1,17 +1,173 @@ [ - { - "DisplayName": "Server Release Stream", - "Description": "Which release stream should be used to Update the server", - "Category": "SteamCMD and Updates", - "FieldName": "releasestream", - "ParamFieldName": "releasestream", - "IncludeInCommandLine": false, - "InputType": "enum", - "EnumValues": { - "public": "Early Access", - "experimental": "Experimental" - + { + "DisplayName":"Player Limit", + "Category":"Server Settings", + "Description":"Sets the maximum number of players that may connect to the server at one time", + "Keywords":"maximum,players,limit,maxplayers", + "FieldName":"$MaxUsers", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"ini:Game:[/Script/Engine.GameSession]:MaxPlayers", + "IncludeInCommandLine":true, + "DefaultValue":"4", + "Placeholder":"4", + "Suffix":"players", + "EnumValues":{} }, - "DefaultValue": "public" - } -] \ No newline at end of file + { + "DisplayName":"Initial Connection Timeout", + "Category":"Server Settings", + "Description":"Sets the amount of time to wait for a new network connection to be established before destroying the connection. May assist with connection issues for client systems with older hardware or slower networks", + "Keywords":"initial,connect,connection,timeout,initialconnecttimeout", + "FieldName":"InitialConnectTimeout", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/OnlineSubsystemUtils.IpNetDriver]:InitialConnectTimeout", + "IncludeInCommandLine":true, + "DefaultValue":"30", + "Placeholder":"30", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Established Connection Timeout", + "Category":"Server Settings", + "Description":"Sets the amount of time to wait before considering an established connection timed out. Typically shorter than the Initial Connection Timeout. May assist with connection issues for client systems with older hardware or slower networks", + "Keywords":"established,connection,timeout,connectiontimeout", + "FieldName":"ConnectionTimeout", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/OnlineSubsystemUtils.IpNetDriver]:ConnectionTimeout", + "IncludeInCommandLine":true, + "DefaultValue":"20", + "Placeholder":"20", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Maximum Tick Rate", + "Category":"Server Settings", + "Description":"Sets the maximum tick rate for the server", + "Keywords":"maximum,tick,rate,netmaxtickrate,lanmaxtickrate", + "FieldName":"MaxTickRate", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/OnlineSubsystemUtils.IpNetDriver]:NetServerMaxTickRate", + "IncludeInCommandLine":true, + "DefaultValue":"30", + "Placeholder":"30", + "Suffix":"ticks per second", + "EnumValues":{} + }, + { + "DisplayName":"Maximum Tick Rate", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"MaxTickRate", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/OnlineSubsystemUtils.IpNetDriver]:LanServerMaxTickRate", + "IncludeInCommandLine":true, + "EnumValues":{} + }, + { + "DisplayName":"Maximum Tick Rate", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"MaxTickRate", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/SocketSubsystemEpic.EpicNetDriver]:NetServerMaxTickRate", + "IncludeInCommandLine":true, + "EnumValues":{} + }, + { + "DisplayName":"Maximum Tick Rate", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"MaxTickRate", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/SocketSubsystemEpic.EpicNetDriver]:LanServerMaxTickRate", + "IncludeInCommandLine":true, + "EnumValues":{} + }, + { + "DisplayName":"Maximum Tick Rate", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"MaxTickRate", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/Engine.Engine]:NetClientTicksPerSecond", + "IncludeInCommandLine":true, + "EnumValues":{} + }, + { + "DisplayName":"Server IP Binding", + "Category":"Server Settings", + "Description":"If required, you can change the binding of the server by editing App.ApplicationIPBinding in GenericModule.kvp for the instance. Stop the instance (not just the server) first", + "Keywords":"ip,binding,multihome", + "FieldName":"MultiHome", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"MultiHome", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Maximum Autosaves", + "Category":"Server Settings", + "Description":"Sets the maximum number of autosaves created before rotation by the server", + "Keywords":"maximum,autosaves,rotation,mnumrotatingautosaves", + "FieldName":"mNumRotatingAutosaves", + "InputType":"number", + "MinValue":"1", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[/Script/FactoryGame.FGSaveSession]:mNumRotatingAutosaves", + "IncludeInCommandLine":true, + "DefaultValue":"3", + "Placeholder":"3", + "Suffix":"autosaves", + "EnumValues":{} + }, + { + "DisplayName":"Enable Crash Reports Upload (Linux Only)", + "Category":"Server Settings", + "Description":"If enabled, crash reports will be automatically uploaded to the Satisfactory developers", + "Keywords":"crash,reports,upload,bimplicitsend", + "FieldName":"bImplicitSend", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"ini:Engine:[CrashReportClient]:bImplicitSend", + "IncludeInCommandLine":true, + "DefaultValue":"True", + "EnumValues":{ + "False":"False", + "True":"True" + } + }, + { + "DisplayName":"Server Release Stream", + "Category":"SteamCMD and Updates", + "Description":"Sets the server release stream to install. Note: Update the server after changing this setting", + "Keywords":"release,stream,beta,version", + "FieldName":"releasestream", + "InputType":"enum", + "ParamFieldName":"releasestream", + "IncludeInCommandLine":false, + "DefaultValue":"public", + "EnumValues":{ + "public":"Public/Early Access (default)", + "experimental":"Experimental" + } + } +] diff --git a/satisfactorymetaconfig.json b/satisfactorymetaconfig.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/satisfactorymetaconfig.json @@ -0,0 +1 @@ +[] diff --git a/satisfactoryupdates.json b/satisfactoryupdates.json index 8530444..c3bd768 100644 --- a/satisfactoryupdates.json +++ b/satisfactoryupdates.json @@ -33,5 +33,27 @@ "OverwriteExistingFiles":true, "UpdateSourceConditionSetting":"releasestream", "UpdateSourceConditionValue":"experimental" + }, + { + "UpdateStageName":"Saves Directory Creation", + "UpdateSourcePlatform":"Linux", + "UpdateSource":"Executable", + "UpdateSourceData":"/bin/bash", + "UpdateSourceArgs":"-c 'mkdir -p ~/.config/Epic/FactoryGame/Saved/SaveGames ; mkdir -p \"{{$FullBaseDir}}FactoryGame/Saved\" ; ln -sf ~/.config/Epic/FactoryGame/Saved/SaveGames \"{{$FullBaseDir}}FactoryGame/Saved/\"'" + }, + { + "UpdateStageName":"Saves Directory Creation", + "UpdateSourcePlatform":"Windows", + "UpdateSource":"Executable", + "UpdateSourceData":"cmd.exe", + "UpdateSourceArgs":"/C mkdir \"%LocalAppData%\\FactoryGame\\Saved\\SaveGames\" & mkdir \"{{$FullBaseDir}}FactoryGame\\Saved\" & mklink /J \"{{$FullBaseDir}}FactoryGame\\Saved\\SaveGames\" \"%LocalAppData%\\FactoryGame\\Saved\\SaveGames\"" + }, + { + "UpdateStageName":"Create Readme File", + "UpdateSourcePlatform":"All", + "UpdateSource":"CreateFile", + "UpdateSourceArgs":"{{$FullBaseDir}}FactoryGame/Saved/SaveGames/README.txt", + "UpdateSourceData":"WARNING: This directory may include the save data of multiple Satisfactory servers\nrun on this system.\n\nIf viewing this directory from AMP’s ADS File Manager/SFTP, you will see the\nsave data of all Satisfactory servers run on this system, other than those run by\nAMP in Docker.\n\nYou will see the same save data if viewing this directory from AMP’s File Manager/SFTP\nfor a particular Satisfactory instance that is NOT run in Docker.\n\nIf viewing this directory from AMP’s File Manager/SFTP for a particular Satisfactory\ninstance that IS run in Docker, you will only see the save data of that instance.\n\nYou can also use the ADS File Manager/SFTP to view the save data of a Satisfactory\ninstance that is run in Docker by navigating to the following directory in the\ninstance’s datastore: .virtualhome/.config/Epic/FactoryGame/Saved/SaveGames.\n\nThe save data for a specific instance is linked to its port (as part of the\nServerSettings file name) and its session name (as part of the autosave file names\nin the server subdirectory).\n\nSave data will not be automatically deleted when a non-Docker Satisfactory server is\nremoved, so you may need to delete the ServerSettings file and/or autosave files\nif later creating a new Satisfactory server with the same port and/or session name.\n\nTake care when managing files in this directory or its subdirectory!", + "OverwriteExistingFiles":true } -] \ No newline at end of file +]