From 3361229bb92c597f60240e93f971f18f5ec4b97e Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Mon, 28 Nov 2022 09:09:19 +1100 Subject: [PATCH] Add Icarus (#237) --- icarus.kvp | 79 +++++++++ icarusconfig.json | 356 +++++++++++++++++++++++++++++++++++++++ icarusmetaconfig.json | 8 + icarusserversettings.ini | 11 ++ 4 files changed, 454 insertions(+) create mode 100644 icarus.kvp create mode 100644 icarusconfig.json create mode 100644 icarusmetaconfig.json create mode 100644 icarusserversettings.ini diff --git a/icarus.kvp b/icarus.kvp new file mode 100644 index 0000000..b0baf02 --- /dev/null +++ b/icarus.kvp @@ -0,0 +1,79 @@ +Meta.DisplayName=Icarus +Meta.Description=Icarus Dedicated Server +Meta.OS=Windows +Meta.Arch=x86_64 +Meta.Author=Greelan +Meta.URL=https://surviveicarus.com/ +Meta.DisplayImageSource=steam:1149460 +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$QueryPort} +Meta.ConfigManifest=icarusconfig.json +Meta.MetaConfigManifest=icarusmetaconfig.json +Meta.ConfigRoot=icarus.kvp +Meta.MinAMPVersion=2.4.0.10 +Meta.SpecificDockerImage= +Meta.ContainerPolicy=NotSupported +Meta.ContainerPolicyReason=Icarus requires Winetricks when using Docker, which is currently not supported in AMP. +Meta.Prerequsites=[] +Meta.ConfigReleaseState=NotSpecified +App.DisplayName=Icarus +App.RootDir=./icarus/ +App.BaseDirectory=./icarus/2089300/ +App.ExecutableWin=2089300/Icarus/Binaries/Win64/IcarusServer-Win64-Shipping.exe +App.ExecutableLinux= +App.WorkingDir=2089300 +App.LinuxCommandLineArgs= +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} Icarus -Port={{$GamePort}} -QueryPort={{$QueryPort}} {{StartupMode}}{{$FormattedArgs}} -stdout -FullStdOutLogOutput +App.AppSettings={} +App.EnvironmentVariables={"LD_LIBRARY_PATH":"{{$FullBaseDir}}linux64:%LD_LIBRARY_PATH%","SteamAppId":"1149460"} +App.CommandLineParameterFormat=-{0}="{1}" +App.CommandLineParameterDelimiter= +App.ExitMethod=OS_CLOSE +App.ExitTimeout=30 +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":17777,"Ref":"GamePort","Name":"Game Port","Description":"Port for game traffic"},{"Protocol":"UDP","Port":27015,"Ref":"QueryPort","Name":"Query Port","Description":"Port for Steam query traffic"}] +App.AdminPortRef=0 +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepApplicationUDPPort=GamePort +App.UniversalSleepSteamQueryPort=QueryPort +App.MaxUsers=8 +App.UseRandomAdminPassword=False +App.RemoteAdminPassword=Password123 +App.AdminMethod=STDIO +App.AdminLoginTransform=None +App.RCONConnectDelaySeconds=5 +App.RCONConnectRetrySeconds=5 +App.UpdateSources=[{"UpdateStageName":"SteamCMD Download","UpdateSourcePlatform":"All","UpdateSource":"SteamCMD","UpdateSourceData":"2089300","ForceDownloadPlatform":"Windows"},{"UpdateStageName":"Create Config Directory","UpdateSourcePlatform":"All","UpdateSource":"CreateDirectory","UpdateSourceArgs":"{{$FullBaseDir}}Icarus/Saved/Config/WindowsServer","OverwriteExistingFiles":false},{"UpdateStageName":"Config File Download","UpdateSourcePlatform":"All","UpdateSource":"FetchURL","UpdateSourceData":"https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/icarusserversettings.ini","UpdateSourceArgs":"ServerSettings.ini","UpdateSourceTarget":"{{$FullBaseDir}}Icarus/Saved/Config/WindowsServer/","OverwriteExistingFiles":false}] +App.Compatibility=None +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= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=^((WARNING|ERROR): Shader.+|\d+:err:ole:.*|Could not find Wine Gecko.*)$ +Console.AppReadyRegex=^\[[\d\.]+-[\d\.:]+\]\[[\d ]+\]LogInit: Display: Game Engine Initialized\.$ +Console.UserJoinRegex=^\[[\d\.]+-[\d\.:]+\]\[[\d ]+\]LogConnectedPlayers: Display: AddConnectedPlayer - UserId: (?.+?) \| PlayerName: (?.+)$ +Console.UserLeaveRegex=^\[[\d\.]+-[\d\.:]+\]\[[\d ]+\]LogOnline: STEAM: (?.+?) has been removed\.$ +Console.UserChatRegex=^$ +Console.UpdateAvailableRegex=^\[\d\d:\d\d:\d\d\] \[INFO\] A new server update is available! v[\d\.]+.$ +Console.SuppressLogAtStart=False +Console.ActivateLogRegex= +Console.UserActions={} +Limits.SleepMode=False +Limits.SleepOnStart=False +Limits.SleepDelayMinutes=5 +Limits.DozeDelay=2 +Limits.AutoRetryCount=5 diff --git a/icarusconfig.json b/icarusconfig.json new file mode 100644 index 0000000..565872d --- /dev/null +++ b/icarusconfig.json @@ -0,0 +1,356 @@ +[ + { + "DisplayName":"Load Prospect", + "Category":"Icarus Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"LoadProspect", + "InputType":"text", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.LoadProspect", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Create Prospect", + "Category":"Icarus Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"CreateProspect", + "InputType":"text", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.CreateProspect", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Resume Prospect", + "Category":"Icarus Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"ResumeProspect", + "InputType":"text", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.ResumeProspect", + "IncludeInCommandLine":false, + "DefaultValue":"False", + "EnumValues":{} + }, + { + "DisplayName":"Session Name", + "Category":"Icarus Server Settings", + "Description":"Sets the session name for the server to be displayed in the server browser. Limit of 64 characters", + "Keywords":"session,name", + "FieldName":"SessionName", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"SteamServerName", + "IncludeInCommandLine":true, + "SkipIfEmpty":true, + "DefaultValue":"AMP Powered Icarus Server", + "EnumValues":{} + }, + { + "DisplayName":"Session Name", + "Category":"Icarus Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"SessionName", + "InputType":"text", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.SessionName", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Server Password", + "Category":"Icarus Server Settings", + "Description":"Sets the password to join the server. Default is no password", + "Keywords":"server,password", + "FieldName":"JoinPassword", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"JoinPassword", + "IncludeInCommandLine":true, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Server Password", + "Category":"Icarus Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"JoinPassword", + "InputType":"text", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.JoinPassword", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"RCON Password", + "Category":"Icarus Server Settings", + "Description":"Sets the admin RCON password. Default is a random, strong password", + "Keywords":"rcon,admin,password", + "FieldName":"AdminPassword", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"AdminPassword", + "IncludeInCommandLine":true, + "DefaultValue":"{{newguid()}}", + "EnumValues":{} + }, + { + "DisplayName":"RCON Password", + "Category":"Icarus Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"AdminPassword", + "InputType":"text", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.AdminPassword", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Player Limit", + "Category":"Icarus Server Settings", + "Description":"Maximum number of players that may connect to the server", + "Keywords":"players,limit", + "FieldName":"$MaxUsers", + "InputType":"number", + "MinValue":"1", + "MaxValue":"8", + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.MaxPlayers", + "IncludeInCommandLine":false, + "DefaultValue":"8", + "Suffix":"players", + "EnumValues":{} + }, + { + "DisplayName":"Server IP Binding", + "Category":"Icarus Server Settings", + "Description":"Sets the binding of the server. Default is blank (all IPs). Change to internal interface IP only if the server has issues", + "Keywords":"ip,binding,localip,address,multihome", + "FieldName":"MultiHome", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"MultiHome", + "IncludeInCommandLine":true, + "SkipIfEmpty":true, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Startup Mode", + "Category":"Icarus Server Settings", + "Description":"Sets the server startup mode. For \"Load existing prospect\", the Prospect Save Name must be set and the file must exist. For \"Create and launch new prospect\", the Prospect Type must be set; if no Prospect Save Name is set, a random save name will be created for regular prospects", + "Keywords":"startup,mode,load,create,resume", + "FieldName":"StartupMode", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"StartupMode", + "IncludeInCommandLine":false, + "DefaultValue":"-CreateProspect=\"{{ProspectType}} {{Difficulty}} {{Hardcore}} {{ProspectSaveName}}\" ", + "EnumValues":{ + "":"Wait in lobby", + "-CreateProspect=\"{{ProspectType}} {{Difficulty}} {{Hardcore}} {{ProspectSaveName}}\" ":"Create and launch new prospect (default)", + "-LoadProspect={{ProspectSaveName}} ":"Load existing prospect", + "-ResumeProspect ":"Resume last prospect" + } + }, + { + "DisplayName":"Prospect Save Name", + "Category":"Icarus Server Settings", + "Description":"Sets the save name of the specific prospect to be loaded or created", + "Keywords":"prospect,save,name", + "FieldName":"ProspectSaveName", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"ProspectSaveName", + "IncludeInCommandLine":false, + "DefaultValue":"DefaultProspect01", + "EnumValues":{} + }, + { + "DisplayName":"Prospect Type", + "Category":"Icarus Server Settings", + "Description":"Sets the prospect type to create a prospect with", + "Keywords":"prospect,type", + "FieldName":"ProspectType", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"ProspectType", + "IncludeInCommandLine":false, + "DefaultValue":"Tier1_Forest_Recon_0", + "EnumValues":{ + "STYX_C_Construction":"Construction: Alcazar", + "STYX_A_Construction":"Construction: Highrise", + "Tier1_Forest_Construction":"Construction: Homestead", + "Tier2_Glacier_Construction_0":"Construction: Influx", + "Tier3_RiverLands_Construction":"Construction: Life Line", + "Tier2_Canyon_Construction_0":"Construction: Pyramid", + "Tier4_Desert_Construction_0":"Construction: Sandbox", + "Tier3_RiverLands_Delivery":"Delivery: Fire Walk", + "STYX_D_Delivery":"Delivery: Rendezvous", + "Tier4_Arctic_Expedition_0":"Expedition: Avalanche", + "Tier2_Canyon_Expedition_0":"Expedition: Dry Run", + "Tier4_Desert_Expedition_0":"Expedition: El Camino", + "Tier2_Glacier_Expedition_0":"Expedition: Icestorm", + "STYX_B_Expedition":"Expedition: Maelstrom", + "STYX_A_Expedition":"Expedition: Omphalos", + "STYX_C_Expedition":"Expedition: Ricochet", + "STYX_E_Expedition":"Expedition: Vertigo", + "Tier3_RiverLands_Expedition_0":"Expedition: Waterfall", + "STYX_D_Expedition":"Expedition: Zephyr", + "STYX_B_Exploration":"Exploration: Adagio", + "Tier1_Forest_Exploration_0":"Exploration: Argos", + "STYX_D_Exploration":"Exploration: Cavalcade", + "STYX_E_Exploration":"Exploration: Dust", + "Tier3_RiverLands_Exploration_0":"Exploration: Edelweiss", + "STYX_A_Exploration":"Exploration: Headlong", + "Tier2_Glacier_Exploration_0":"Exploration: High Wire", + "STYX_C_Exploration":"Exploration: Kismet", + "Tier4_Desert_Exploration_0":"Exploration: Promised Land", + "Tier2_Canyon_Exploration_0":"Exploration: Sandblast", + "Tier5_Omni_Exploration_0":"Exploration: Spirit Walk", + "Tier4_Arctic_Exploration_0":"Exploration: Tundra", + "STYX_C_Extermination2":"Extermination: Augmentation", + "STYX_C_Extermination":"Extermination: Ballistic", + "Tier4_Arctic_Extermination_0":"Extermination: Clean Up", + "Tier4_Desert_Extermination_0":"Extermination: Dust Up", + "STYX_B_Extermination":"Extermination: Halcyon", + "STYX_A_Extermination":"Extermination: Husk", + "Tier1_Forest_Extermination_0":"Extermination: Kill List", + "Tier4_Desert_Extermination_2":"Extermination: Loose Ends", + "STYX_D_Extermination":"Extermination: Lupine", + "Tier3_RiverLands_Extermination_0":"Extermination: Wet Work", + "Tier2_Glacier_Extraction_0":"Extraction: Deep Vein", + "Tier3_RiverLands_Extraction":"Extraction: Meridian", + "Tier4_Arctic_Extraction_0":"Extraction: Payday", + "Tier1_Farming":"Hydroponics: Agriculture", + "Outpost002_Forest":"Outpost: Arcwood", + "Outpost005_Forest":"Outpost: Holdfast", + "Outpost003_Arctic":"Outpost: Iceholm", + "Outpost006_Olympus":"Outpost: Olympus", + "OpenWorld_Styx":"Outpost: Styx", + "Tier1_Forest_Recon_0":"Recon: Beachhead (default)", + "Tier2_Glacier_Recovery_0":"Recovery: Broken Arrow", + "Tier4_Desert_Recovery":"Recovery: Concealment", + "Tier2_Canyon_Recovery_0":"Recovery: Field Test", + "Tier1_Forest_Defence":"Recovery: Forsaken", + "Tier4_Arctic_Recovery_0":"Recovery: Snowcrash", + "Tier5_Omni_Recovery":"Recovery: Voyager", + "STYX_D_Research_2":"Research: Abyss", + "Tier2_Canyon_Research_0":"Research: Bioshock", + "Tier4_Desert_Research_2":"Research: Carapace", + "Tier5_Omni_Research_2":"Research: Cryogenic", + "STYX_E_Research":"Research: Flatline", + "STYX_D_Research":"Research: Gossamer", + "Tier4_Desert_Research_0":"Research: Nightwatch", + "Tier2_Glacier_Research_0":"Research: Resurgence", + "Tier1_Forest_Research_0":"Research: Strange Harvest", + "Tier5_Omni_Research":"Research: Unearthed", + "Tier3_RiverLands_Research_0":"Research: Uplift", + "Tier2_Canyon_Scan_0":"Scan: Death Ray", + "Tier3_RiverLands_Scan_0":"Scan: Incursion", + "Tier1_Forest_Scan_0":"Scan: Livewire", + "Tier2_Glacier_Scan_0":"Scan: Searchlight", + "Tier4_Desert_Scan_0":"Scan: Seven Pillars", + "Tier4_Arctic_Scan_0":"Scan: Snowblind", + "Tier4_Arctic_Stockpile":"Stockpile: Advanced Order", + "Tier1_Forest_Stockpile":"Stockpile: Agriculture", + "Tier3_RiverLands_Stockpile_2":"Stockpile: Big Shot", + "STYX_B_Stockpile":"Stockpile: Opulence", + "Tier2_Canyon_Stockpile2":"Stockpile: Preservation", + "Tier3_RiverLands_Stockpile_0":"Stockpile: Ramp Up", + "Tier2_Canyon_Stockpile":"Stockpile: Solid Metal", + "Tier1_Forest_WS_Stockpile":"Stockpile: Spelunking", + "Tier3_RiverLands_Survey_0":"Survey: Clustered", + "STYX_E_Survey":"Survey: Crescendo", + "Tier1_Forest_Survey_0":"Survey: Headstone", + "Tier2_Glacier_Survey_0":"Survey: Ice Line", + "Tier4_Desert_Survey":"Survey: Migrating Sands", + "Tier5_Omni_Olympus":"Survey: Nightfall", + "Tier2_Canyon_LongSurvey_0":"Survey: Sandy Bridges", + "Tier2_Canyon_Survey_0":"Survey: Spirit Level", + "Tier4_Arctic_Survey_0":"Survey: Station To Station", + "Tier1_Forest_Range":"Training: Potshot" + } + }, + { + "DisplayName":"Difficulty Level", + "Category":"Icarus Server Settings", + "Description":"Sets the difficulty level to create a prospect with", + "Keywords":"difficulty,level", + "FieldName":"Difficulty", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"Difficulty", + "IncludeInCommandLine":false, + "DefaultValue":"2", + "EnumValues":{ + "1":"Easy", + "2":"Medium / Normal (default)", + "3":"Hard", + "4":"Extreme" + } + }, + { + "DisplayName":"Enable Hardcore", + "Category":"Icarus Server Settings", + "Description":"If set, harcore mode will be enabled when creating a prospect (respawns will be disabled)", + "Keywords":"hardcore", + "FieldName":"Hardcore", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"Hardcore", + "IncludeInCommandLine":false, + "DefaultValue":"False", + "EnumValues":{ + "False":"False", + "True":"True" + } + }, + { + "DisplayName":"No Join Shutdown Interval", + "Category":"Icarus Server Settings", + "Description":"Sets the period after which the server will exit a prospect and return to the lobby, if no player has joined. -1 = run indefinitely, 0 = return to lobby immediately, >0 = interval for shutdown. Note that data loss/corruption may occur if the server is shut down in AMP before returning to the lobby", + "Keywords":"shutdown,not,joined,interval", + "FieldName":"ShutdownIfNotJoinedFor", + "InputType":"number", + "MinValue":"-1", + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.ShutdownIfNotJoinedFor", + "IncludeInCommandLine":false, + "DefaultValue":"300", + "Placeholder":"300", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Empty Shutdown Interval", + "Category":"Icarus Server Settings", + "Description":"Sets the period after which the server will exit a prospect and return to the lobby, if the server becomes empty. -1 = run indefinitely, 0 = return to lobby immediately, >0 = interval for shutdown. Note that data loss/corruption may occur if the server is shut down in AMP before returning to the lobby", + "Keywords":"shutdown,not,joined,interval", + "FieldName":"ShutdownIfEmptyFor", + "InputType":"number", + "MinValue":"-1", + "IsFlagArgument":false, + "ParamFieldName":"/Script/Icarus.DedicatedServerSettings.ShutdownIfEmptyFor", + "IncludeInCommandLine":false, + "DefaultValue":"300", + "Placeholder":"300", + "Suffix":"seconds", + "EnumValues":{} + } +] diff --git a/icarusmetaconfig.json b/icarusmetaconfig.json new file mode 100644 index 0000000..a6a5317 --- /dev/null +++ b/icarusmetaconfig.json @@ -0,0 +1,8 @@ +[ + { + "ConfigFile":"Icarus/Saved/Config/WindowsServer/ServerSettings.ini", + "AutoMap":true, + "ConfigType":"ini", + "ConfigFormatRegex":"^(?.+?)=(?.*?)$" + } +] diff --git a/icarusserversettings.ini b/icarusserversettings.ini new file mode 100644 index 0000000..85ce7ee --- /dev/null +++ b/icarusserversettings.ini @@ -0,0 +1,11 @@ +[/Script/Icarus.DedicatedServerSettings] +SessionName=AMP Powered Icarus Server +JoinPassword= +MaxPlayers=8 +AdminPassword=Password123 +ShutdownIfNotJoinedFor=300 +ShutdownIfEmptyFor=300 +LoadProspect= +CreateProspect= +ResumeProspect=False +LastProspectName=