diff --git a/primal-carnage-extinction.kvp b/primal-carnage-extinction.kvp new file mode 100644 index 0000000..6b6c139 --- /dev/null +++ b/primal-carnage-extinction.kvp @@ -0,0 +1,100 @@ +Meta.DisplayName=Primal Carnage: Extinction +Meta.Description=Primal Carnage: Extinction Dedicated Server +Meta.OS=Windows, Linux +Meta.AarchSupport=Unknown +Meta.Arch=x86_64 +Meta.Author=Greelan +Meta.URL=https://www.primalcarnage.com +Meta.DisplayImageSource=steam:321360 +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$QueryPort} +Meta.ConfigManifest=primal-carnage-extinctionconfig.json +Meta.MetaConfigManifest=primal-carnage-extinctionmetaconfig.json +Meta.ConfigRoot=primal-carnage-extinction.kvp +Meta.MinAMPVersion=2.4.4.0 +Meta.SpecificDockerImage=cubecoders/ampbase:wine8 +Meta.DockerRequired=False +Meta.ContainerPolicy=SupportedOnWindows, RecommendedOnLinux +Meta.ContainerPolicyReason=The server requires Wine 8 to run on Linux. Using a container avoids the need to install this dependency on the host. +Meta.ExtraSetupStepsURI= +Meta.Prerequsites=[] +Meta.ExtraContainerPackages=[] +Meta.ConfigReleaseState=NotSpecified +Meta.NoCommercialUsage=False +Meta.ConfigVersion=0.0.0.0 +Meta.ReleaseNotes= +Meta.BreakingReleaseNotes= +App.DisplayName=Primal Carnage: Extinction +App.RootDir=./primal-carnage-extinction/ +App.BaseDirectory=./primal-carnage-extinction/336400/ +App.SteamWorkshopDownloadLocation= +App.ExecutableWin=336400\Binaries\Win64\PrimalCarnageServer.exe +App.ExecutableLinux=/usr/bin/wine +App.WorkingDir=336400 +App.LinuxCommandLineArgs="./Binaries/Win64/PrimalCarnageServer.exe" +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} {{ServerMap}}?game={{GameMode}}?bIsDedicated=true?{{$FormattedArgs}}{{CustomServerArgs}} Port={{$GamePort}} PeerPort={{$PeerPort}} QueryPort={{$QueryPort}} MultiHome={{$ApplicationIPBinding}} -seekfreeloadingserver -stdout -FullStdOutLogOutput +App.UseLinuxIOREDIR=False +App.AppSettings={} +App.EnvironmentVariables={"SteamAppId":"321360","WINEPREFIX":"{{$FullRootDir}}.wine","WINEARCH":"win64","WINEDEBUG":"-all"} +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":7777,"Ref":"GamePort","Name":"Game Port","Description":"Port for game traffic"},{"Protocol":"UDP","Port":7778,"Ref":"PeerPort","Name":"Peer Port","Description":"Port for Steam traffic"},{"Protocol":"Both","Port":13000,"Ref":"StatsPort","Name":"Stats Port","Description":"Port for stats traffic"},{"Protocol":"UDP","Port":27015,"Ref":"QueryPort","Name":"Query Port","Description":"Port for Steam query traffic"}] +App.AdminPortRef=0 +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepApplicationUDPPortRef=GamePort +App.UniversalSleepSteamQueryPortRef=QueryPort +App.MaxUsers=16 +App.UseRandomAdminPassword=True +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[primal-carnage-extinctionupdates.json] +App.PreStartStages=[] +App.ForceUpdate=False +App.ForceUpdateReason= +App.Compatibility=None +App.SteamUpdateAnonymousLogin=True +App.SteamForceLoginPrompt=False +App.RapidStartup=False +App.MonitorChildProcess=True +App.DumpFullChildProcessTree=False +App.MonitorChildProcessWaitMs=100 +App.MonitorChildProcessName=PrimalCarnageServer.exe +App.SupportsUniversalSleep=False +App.WakeupMode=Any +App.ApplicationReadyMode=Immediate +App.TemplateMatchRegex={{(\$?[\w]+)}} +Console.FilterMatchRegex= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=^((WARNING|ERROR): Shader.+|Could not find Wine Gecko.*)$ +Console.AppReadyRegex=^$ +Console.UserJoinRegex=^$ +Console.UserLeaveRegex=^$ +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/primal-carnage-extinctionconfig.json b/primal-carnage-extinctionconfig.json new file mode 100644 index 0000000..7d0e7d3 --- /dev/null +++ b/primal-carnage-extinctionconfig.json @@ -0,0 +1,384 @@ +[ + { + "DisplayName":"Game Port", + "Category":"PCE Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$GamePort", + "InputType":"number", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"URL.Port", + "EnumValues":{} + }, + { + "DisplayName":"Peer Port", + "Category":"PCE Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$PeerPort", + "InputType":"number", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"URL.PeerPort", + "EnumValues":{} + }, + { + "DisplayName":"Stats Port", + "Category":"PCE Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$StatsPort", + "InputType":"number", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"StatNotifyProviders.StatNotifyProvider_UDP.ListenPort", + "EnumValues":{} + }, + { + "DisplayName":"Query Port", + "Category":"PCE Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$QueryPort", + "InputType":"number", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"OnlineSubsystemSteamworks.OnlineSubsystemSteamworks.QueryPort", + "EnumValues":{} + }, + { + "DisplayName":"Server Name", + "Category":"PCE Server Settings", + "Description":"Sets the name of the server as shown in the server browser", + "Keywords":"name,servername", + "FieldName":"ServerName", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"Engine.GameReplicationInfo.ServerName", + "IncludeInCommandLine":false, + "DefaultValue":"AMP Powered Primal Carnage: Extinction Server", + "EnumValues":{} + }, + { + "DisplayName":"Server Password", + "Category":"PCE Server Settings", + "Description":"Sets the password for players to join the server. Default is no password", + "Keywords":"server,password,gamepassword", + "FieldName":"GamePassword", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"GamePassword", + "IncludeInCommandLine":true, + "SkipIfEmpty":true, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Server Map Rotation List", + "Category":"PCE Server Settings", + "Description":"A map rotation list can be specified for each game mode in PrimalCarnageGame/Config/PCServer-PrimalCarnageGame.ini", + "Keywords":"map,rotation,list,maprotation", + "FieldName":"MapRotation", + "InputType":"hidden", + "IsFlagArgument":false, + "ParamFieldName":"MapRotation", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Initial Server Map", + "Category":"PCE Server Settings", + "Description":"Sets the initial map for the server. Available game modes for each map are indicated. To use a map not listed in the dropdown, select Custom and set the \"Custom Map Name\"", + "Keywords":"map", + "FieldName":"ServerMap", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"ServerMap", + "IncludeInCommandLine":false, + "DefaultValue":"PC-Docks", + "EnumValues":{ + "PC-Airbase":"PC-Airbase (Team Deathmatch, Free Roam)", + "PC-Borealis":"PC-Borealis (Team Deathmatch, Free Roam)", + "PC-Contingency":"PC-Contingency (Team Deathmatch, Free Roam)", + "PC-DeadTide":"PC-DeadTide (Team Deathmatch, Free Roam)", + "PC-Desertionpoint":"PC-Desertionpoint (Team Deathmatch, Free Roam)", + "PC-Docks":"PC-Docks (Team Deathmatch, Free Roam, Hunt, Capture The Egg)", + "PC-ForestChasm":"PC-ForestChasm (Team Deathmatch, Free Roam, Hunt, Capture The Egg)", + "PC-ForestChasmSnow":"PC-ForestChasmSnow (Team Deathmatch, Free Roam)", + "PC-ForgottenOutpost":"PC-ForgottenOutpost (Team Deathmatch, Free Roam, Capture The Egg)", + "PC-Marsh":"PC-Marsh (Team Deathmatch, Free Roam)", + "PC-Pandoria":"PC-Pandoria (Free Roam)", + "PC-SandstormValley":"PC-SandstormValley (Team Deathmatch, Free Roam)", + "PC-Snowbound":"PC-Snowbound (Team Deathmatch, Free Roam, Hunt)", + "PC-TheFalls":"PC-TheFalls (Team Deathmatch, Free Roam, Hunt, Capture The Egg)", + "PC-Transfer":"PC-Transfer (Team Deathmatch, Free Roam, Hunt)", + "PC-UtilityBase":"PC-UtilityBase (Team Deathmatch, Free Roam, Hunt, Capture The Egg)", + "PC-UtilityBaseSnow":"PC-UtilityBaseSnow (Team Deathmatch, Free Roam)", + "PC-Verdant":"PC-Verdant (Team Deathmatch, Free Roam, Hunt)", + "PC-Volcano":"PC-Volcano (Team Deathmatch, Free Roam)", + "PC-Waterlogged":"PC-Waterlogged (Team Deathmatch, Free Roam)", + "GTTC-Docks":"GTTC-Docks (Get To The Chopper, Free Roam)", + "GTTC-Downpour":"GTTC-Downpour (Get To The Chopper, Free Roam)", + "GTTC-PhantomCave":"GTTC-PhantomCave (Get To The Chopper)", + "GTTC-Ruthless":"GTTC-Ruthless (Get To The Chopper, Free Roam)", + "GTTC-RuthlessSnow":"GTTC-RuthlessSnow (Get To The Chopper, Free Roam)", + "GTTC-TheFalls":"GTTC-TheFalls (Get To The Chopper, Free Roam)", + "FR-ForgottenWorld":"FR-ForgottenWorld (Free Roam)", + "FR-Island":"FR-Island (Free Roam)", + "FR-Seasons":"FR-Seasons (Free Roam)", + "FR-Valley":"FR-Valley (Free Roam)", + "AI-Geothermal":"AI-Geothermal (Survival)", + "AI-Renaissance":"AI-Renaissance (Survival)", + "AI-VisitorCenter":"AI-VisitorCenter (Survival)", + "AI-WhiteForest":"AI-WhiteForest (Survival)", + "{{CustomMap}}":"Custom" + } + }, + { + "DisplayName":"Custom Map Name", + "Category":"PCE Server Settings", + "Description":"Sets a custom map for the server. Custom type must be selected under \"Server Map\"", + "Keywords":"custom,map", + "FieldName":"CustomMap", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"CustomMap", + "IncludeInCommandLine":false, + "DefaultValue":"", + "Placeholder":"", + "EnumValues":{} + }, + { + "DisplayName":"Game Mode", + "Category":"Ground Branch Server", + "Description":"Sets the game mode to be used with the selected map", + "Keywords":"game,mode,gamemode", + "FieldName":"GameMode", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"GameMode", + "IncludeInCommandLine":false, + "DefaultValue":"PrimalCarnageGame.PCTeamDeathMatchGame", + "EnumValues":{ + "PrimalCarnageGame.PCTeamDeathMatchGame":"Team Deathmatch (default)", + "PrimalCarnageGame.PCGetToTheChopperGame":"Get To The Chopper (GTTC)", + "PrimalCarnageGame.PCFreeRoamGame":"Free Roam", + "PrimalCarnageGame.PCSurvivalGame":"Survival", + "PrimalCarnageGame.PCHuntGame":"Hunt", + "PrimalCarnageGame.PCCaptureTheEggGame":"Capture The Egg" + } + }, + { + "DisplayName":"Server IP Binding", + "Category":"PCE 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":"Player Limit", + "Category":"PCE 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":"MaxPlayers", + "IncludeInCommandLine":true, + "DefaultValue":"16", + "Placeholder":"16", + "Suffix":"players", + "EnumValues":{} + }, + { + "DisplayName":"Player Limit", + "Category":"PCE Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$MaxUsers", + "InputType":"number", + "Hidden":true, + "IsFlagArgument":false, + "ParamFieldName":"Engine.GameInfo.MaxPlayers", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Spectator Limit", + "Category":"PCE Server Settings", + "Description":"Sets the maximum number of spectators that may connect to the server at one time", + "Keywords":"maximum,spectators,limit,maxspectators", + "FieldName":"MaxSpectators", + "InputType":"number", + "MinValue":"0", + "IsFlagArgument":false, + "ParamFieldName":"Engine.GameInfo.MaxSpectators", + "IncludeInCommandLine":false, + "DefaultValue":"2", + "Placeholder":"2", + "Suffix":"spectators", + "EnumValues":{} + }, + { + "DisplayName":"Enable Valve Anti-cheat", + "Category":"PCE Server Settings", + "Description":"If set, Valve Anti-cheat (VAC) will be enabled", + "Keywords":"valve,anti,cheat,vac,busevac", + "FieldName":"bUseVAC", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"OnlineSubsystemSteamworks.OnlineSubsystemSteamworks.bUseVAC", + "IncludeInCommandLine":false, + "DefaultValue":"true", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Additional Command Line Options", + "Category":"PCE Server Settings", + "Description":"Specifies additional command line options (if any) that are not otherwise set by AMP. ONE LINE ONLY! Format: ?= (with no spaces between settings). Use with care", + "Keywords":"custom,server,options", + "FieldName":"CustomServerArgs", + "InputType":"Textarea", + "IsFlagArgument":false, + "ParamFieldName":"CustomServerArgs", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Match Win Condition", + "Category":"PCE Gameplay Settings", + "Description":"Sets the match win condition", + "Keywords":"match,win,condition,matchwincondition", + "FieldName":"MatchWinCondition", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"MatchWinCondition", + "IncludeInCommandLine":true, + "DefaultValue":"bestof", + "EnumValues":{ + "bestof":"Best Of", + "":"" + } + }, + { + "DisplayName":"Match Time Limit", + "Category":"PCE Gameplay Settings", + "Description":"Sets the match time limit. 0 = disabled", + "Keywords":"match,time,limit,matchtimelimit", + "FieldName":"MatchTimeLimit", + "InputType":"number", + "MinValue":"0", + "IsFlagArgument":false, + "ParamFieldName":"MatchTimeLimit", + "IncludeInCommandLine":true, + "DefaultValue":"0", + "Placeholder":"0", + "Suffix":"minutes", + "EnumValues":{} + }, + { + "DisplayName":"Match Score Target", + "Category":"PCE Gameplay Settings", + "Description":"Sets the match score target. 0 = disabled", + "Keywords":"match,score,target,matchscoretarget", + "FieldName":"MatchScoreTarget", + "InputType":"number", + "MinValue":"0", + "IsFlagArgument":false, + "ParamFieldName":"MatchScoreTarget", + "IncludeInCommandLine":true, + "DefaultValue":"0", + "Placeholder":"0", + "EnumValues":{} + }, + { + "DisplayName":"Round Time Limit", + "Category":"PCE Gameplay Settings", + "Description":"Sets the round time limit. 0 = disabled", + "Keywords":"round,time,limit,roundtimelimit", + "FieldName":"RoundTimeLimit", + "InputType":"number", + "MinValue":"0", + "IsFlagArgument":false, + "ParamFieldName":"RoundTimeLimit", + "IncludeInCommandLine":true, + "DefaultValue":"780", + "Placeholder":"780", + "Suffix":"minutes", + "EnumValues":{} + }, + { + "DisplayName":"Round Score Target", + "Category":"PCE Gameplay Settings", + "Description":"Sets the round score target. 0 = disabled", + "Keywords":"round,score,target,roundscoretarget", + "FieldName":"RoundScoreTarget", + "InputType":"number", + "MinValue":"0", + "IsFlagArgument":false, + "ParamFieldName":"RoundScoreTarget", + "IncludeInCommandLine":true, + "DefaultValue":"50", + "Placeholder":"50", + "EnumValues":{} + }, + { + "DisplayName":"Enable Damage", + "Category":"PCE Gameplay Settings", + "Description":"If set, damage will be enabled", + "Keywords":"enable,damage,benabledamage", + "FieldName":"bEnableDamage", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"bEnableDamage", + "IncludeInCommandLine":true, + "DefaultValue":"false", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Enable Killing", + "Category":"PCE Gameplay Settings", + "Description":"If set, killing will be enabled", + "Keywords":"enable,killing,benablekilling", + "FieldName":"bEnableKilling", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"bEnableKilling", + "IncludeInCommandLine":true, + "DefaultValue":"false", + "EnumValues":{ + "False":"false", + "True":"true" + } + }, + { + "DisplayName":"Balance Teams", + "Category":"PCE Gameplay Settings", + "Description":"If set, teams will be automatically balanced", + "Keywords":"balance,teams,bbalanceteams", + "FieldName":"bBalanceTeams", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"bBalanceTeams", + "IncludeInCommandLine":true, + "DefaultValue":"true", + "EnumValues":{ + "False":"false", + "True":"true" + } + } +] diff --git a/primal-carnage-extinctionmetaconfig.json b/primal-carnage-extinctionmetaconfig.json new file mode 100644 index 0000000..a5c1ca9 --- /dev/null +++ b/primal-carnage-extinctionmetaconfig.json @@ -0,0 +1,30 @@ +[ + { + "ConfigFile":"./PrimalCarnageGame/Config/DefaultGame.ini", + "AutoMap":true, + "ConfigType":"ini", + "ConfigFormat":"{0}={1}", + "ConfigFormatRegex":"^(?.+?)=(?.*?)$" + }, + { + "ConfigFile":"./PrimalCarnageGame/Config/DefaultEngine.ini", + "AutoMap":true, + "ConfigType":"ini", + "ConfigFormat":"{0}={1}", + "ConfigFormatRegex":"^(?.+?)=(?.*?)$" + }, + { + "ConfigFile":"./PrimalCarnageGame/Config/PCServer-PrimalCarnageGame.ini", + "AutoMap":true, + "ConfigType":"ini", + "ConfigFormat":"{0}={1}", + "ConfigFormatRegex":"^(?.+?)=(?.*?)$" + }, + { + "ConfigFile":"./PrimalCarnageGame/Config/PCServer-PrimalCarnageEngine.ini", + "AutoMap":true, + "ConfigType":"ini", + "ConfigFormat":"{0}={1}", + "ConfigFormatRegex":"^(?.+?)=(?.*?)$" + } +] diff --git a/primal-carnage-extinctionupdates.json b/primal-carnage-extinctionupdates.json new file mode 100644 index 0000000..3079770 --- /dev/null +++ b/primal-carnage-extinctionupdates.json @@ -0,0 +1,17 @@ +[ + { + "UpdateStageName":"Primal Carnage: Extinction SteamCMD Download", + "UpdateSourcePlatform":"All", + "UpdateSource":"SteamCMD", + "UpdateSourceData":"336400", + "UpdateSourceArgs":"321360", + "ForceDownloadPlatform":"Windows" + }, + { + "UpdateStageName":"Initialise Wine", + "UpdateSourcePlatform":"Linux", + "UpdateSource":"Executable", + "UpdateSourceData":"/bin/bash", + "UpdateSourceArgs":"-c 'WINEPREFIX=\"{{$FullRootDir}}.wine\" WINEARCH=win64 /usr/bin/wineboot --init --update'" + } +]