diff --git a/wreckfest.kvp b/wreckfest.kvp new file mode 100644 index 0000000..40b64e1 --- /dev/null +++ b/wreckfest.kvp @@ -0,0 +1,80 @@ +Meta.DisplayName=Wreckfest +Meta.Description=Wreckfest Dedicated Server +Meta.OS=Windows, Linux +Meta.Arch=x86_64 +Meta.Author=Greelan +Meta.URL=https://order.wreckfestgame.com/ +Meta.DisplayImageSource=steam:228380 +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$QueryPort} +Meta.ConfigManifest=wreckfestconfig.json +Meta.MetaConfigManifest=wreckfestmetaconfig.json +Meta.ConfigRoot=wreckfest.kvp +Meta.MinAMPVersion=2.3.3.4 +Meta.SpecificDockerImage=cubecoders/ampbase:wine +Meta.DockerRequired=False +Meta.ContainerPolicy=Recommended +Meta.Prerequsites=[] +App.DisplayName=Wreckfest +App.RootDir=./wreckfest/ +App.BaseDirectory=./wreckfest/361580/ +App.ExecutableWin=361580\Wreckfest_x64.exe +App.ExecutableLinux=/usr/bin/xvfb-run +App.WorkingDir=361580 +App.LinuxCommandLineArgs=-a wine "./Wreckfest_x64.exe" +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} -s server_config=server_config.cfg --save-dir={{$FullBaseDir}}saved -server_set game_port={{$GamePort}} steam_port={{$SteamPort}} query_port={{$QueryPort}} {{$FormattedArgs}} +App.AppSettings={} +App.EnvironmentVariables={"LD_LIBRARY_PATH":"./linux64:%LD_LIBRARY_PATH%","SteamAppId":"228380"} +App.CommandLineParameterFormat={0}={1} +App.CommandLineParameterDelimiter= +App.ExitMethod=OS_CLOSE +App.ExitTimeout=30 +App.ExitString=exit +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":33540,"Ref":"GamePort","Name":"Game Port","Description":"Port for main game traffic"},{"Protocol":"Both","Port":27015,"Ref":"SteamPort","Name":"Steam Port","Description":"Port for extended server info"},{"Protocol":"UDP","Port":27016,"Ref":"QueryPort","Name":"Query Port","Description":"Port for server query"}] +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepApplicationUDPPortRef=GamePort +App.UniversalSleepSteamQueryPortRef=QueryPort +App.MaxUsers=24 +App.UseRandomAdminPassword=False +App.RemoteAdminPassword= +App.AdminMethod=STDIO +App.AdminLoginTransform=None +App.RCONConnectDelaySeconds=5 +App.RCONConnectRetrySeconds=5 +App.TelnetLoginFormat={0} +App.UpdateSources=[{"UpdateStageName":"SteamCMD Download","UpdateSourcePlatform":"All","UpdateSource":"SteamCMD","UpdateSourceData":"361580","ForceDownloadPlatform":"Windows"},{"UpdateStageName":"Create Save Directory","UpdateSourcePlatform":"All","UpdateSource":"CreateDirectory","UpdateSourceArgs":"./wreckfest/361580/saved","OverwriteExistingFiles":false},{"UpdateStageName":"Create SteamAppID File","UpdateSourcePlatform":"All","UpdateSource":"CreateFile","UpdateSourceData":"228380","UpdateSourceArgs":"./wreckfest/361580/steam_appid.txt","OverwriteExistingFiles":false},{"UpdateStageName":"Copy Server Config","UpdateSourcePlatform":"All","UpdateSource":"CopyFilePath","UpdateSourceData":"./wreckfest/361580/server_config.cfg","UpdateSourceArgs":"./wreckfest/361580/initial_server_config.cfg","OverwriteExistingFiles":false}] +App.Compatibility=None +App.SteamUpdateAnonymousLogin=True +App.SteamForceLoginPrompt=False +App.RapidStartup=False +App.MonitorChildProcess=True +App.MonitorChildProcessWaitMs=2000 +App.MonitorChildProcessName=wine64 +App.SupportsUniversalSleep=False +App.WakeupMode=Any +App.ApplicationReadyMode=Immediate +App.TemplateMatchRegex={{(\$?[\w]+)}} +Console.FilterMatchRegex= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=^((WARNING|ERROR): Shader.+|\d+:err:ole:.*|Could not find Wine Gecko.*)$ +Console.AppReadyRegex=^[\d:]+ Server connected to Steam\.$ +Console.UserJoinRegex=^[\d:]+ Player (?.+?) \((?.+?)\) connected\.$ +Console.UserLeaveRegex=^[\d:]+ Player (?.+?) \((?.+?)\) disconnected\.$ +Console.UserChatRegex=^[\d:]+ (?.+?): (?.+)$ +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 \ No newline at end of file diff --git a/wreckfestconfig.json b/wreckfestconfig.json new file mode 100644 index 0000000..79469d1 --- /dev/null +++ b/wreckfestconfig.json @@ -0,0 +1,583 @@ +[ + { + "DisplayName":"Game Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$GamePort", + "InputType":"number", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"game_port", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Steam Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$SteamPort", + "InputType":"number", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"steam_port", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Query Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$QueryPort", + "InputType":"number", + "IsFlagArgument":false, + "Hidden":true, + "ParamFieldName":"query_port", + "IncludeInCommandLine":false, + "EnumValues":{} + }, + { + "DisplayName":"Server Name", + "Category":"Server Settings", + "Description":"", + "Keywords":"server,name", + "FieldName":"server_name", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"server_name", + "IncludeInCommandLine":false, + "DefaultValue":"Wreckfest Server - Powered by AMP", + "EnumValues":{} + }, + { + "DisplayName":"Server Password", + "Category":"Server Settings", + "Description":"Password required to connect to the server. You should change this after first installing the server", + "Keywords":"server,password", + "FieldName":"password", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"password", + "IncludeInCommandLine":false, + "DefaultValue":"wreckfest", + "EnumValues":{} + }, + { + "DisplayName":"Welcome Message", + "Category":"Server Settings", + "Description":"Player welcome message", + "Keywords":"welcome,message", + "FieldName":"welcome_message", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"welcome_message", + "IncludeInCommandLine":false, + "DefaultValue":"Welcome to Wreckfest. Hosted using AMP by CubeCoders", + "EnumValues":{} + }, + { + "DisplayName":"Player Limit", + "Category":"Server Settings", + "Description":"Maximum number of players that may connect to the server at one time", + "Keywords":"players,limit", + "FieldName":"$MaxUsers", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"max_players", + "IncludeInCommandLine":false, + "DefaultValue":"24", + "Suffix":"players", + "EnumValues":{} + }, + { + "DisplayName":"Exclude Quick Match Users", + "Category":"Server Settings", + "Description":"When enabled, users entering Quick Match cannot join the server", + "Keywords":"quick,match,exclude", + "FieldName":"exclude_from_quickplay", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"exclude_from_quickplay", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Clear User Privileges On Launch", + "Category":"Server Settings", + "Description":"When enabled, clears previous user privileges when launching the server", + "Keywords":"user,privileges", + "FieldName":"clear_users", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"clear_users", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"No Owner Privileges For First User", + "Category":"Server Settings", + "Description":"When enabled, owner privileges are not given to the first user who joins", + "Keywords":"first,owner,privileges", + "FieldName":"owner_disabled", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"owner_disabled", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Admin Controls Countdown", + "Category":"Server Settings", + "Description":"When enabled, admin starts the countdown by setting themselves ready. Otherwise the countdown is automatic", + "Keywords":"admin,control,countdown", + "FieldName":"admin_control", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"admin_control", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Countdown Duration", + "Category":"Server Settings", + "Description":"Duration of the countdown", + "Keywords":"countdown,duration", + "FieldName":"lobby_countdown", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"lobby_countdown", + "IncludeInCommandLine":false, + "DefaultValue":"30", + "Placeholder":"30 - 127", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Required Players for Automatic Countdown", + "Category":"Server Settings", + "Description":"Percentage of players required to be ready to initiate automatic countdown, if enabled", + "Keywords":"players,countdown", + "FieldName":"ready_players_required", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"ready_players_required", + "IncludeInCommandLine":false, + "DefaultValue":"50", + "EnumValues":{} + }, + { + "DisplayName":"Admins", + "Category":"Server Settings", + "Description":"Comma separated list of [Steam64 IDs](https://steamidfinder.com/) of players automatically granted admin privileges", + "Keywords":"admin,privileges,automatic", + "FieldName":"admin_steam_ids", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"admin_steam_ids", + "IncludeInCommandLine":false, + "DefaultValue":"", + "Placeholder":"76561198035765683,68475837697026445", + "EnumValues":{} + }, + { + "DisplayName":"Moderators", + "Category":"Server Settings", + "Description":"Comma separated list of [Steam64 IDs](https://steamidfinder.com/) of players automatically granted moderator privileges", + "Keywords":"moderator,privileges,automatic", + "FieldName":"op_steam_ids", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"op_steam_ids", + "IncludeInCommandLine":false, + "DefaultValue":"", + "Placeholder":"76561198035765683,68475837697026445", + "EnumValues":{} + }, + { + "DisplayName":"Session Mode", + "Category":"Server Settings", + "Description":"Sets the session mode for server side point counting across multiple events", + "Keywords":"session,mode", + "FieldName":"session_mode", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"session_mode", + "IncludeInCommandLine":false, + "DefaultValue":"normal", + "EnumValues":{ + "normal":"Normal (single event, no cup mode)", + "qualify-sprint":"Qualifying sprint (finishing positions determine - needs \"Qualifying session\" grid order)", + "qualify-lap":"Qualifying lap (lap times determine - needs \"Qualifying session\" grid order)", + "30p-aggr":"Winner 30 (then 27, 25, 23, 20, followed by 1 point less per position)", + "25p-aggr":"Winner 25 (then 18, 15, 12, 10, 8, 6, 4, 2, 1, followed by no points)", + "25p-mod":"Winner 25 (then 20, 16, 11, followed by 1 point less per position up to position 15)", + "24p-lin":"Winner 24 (then 1 point less per position)", + "16p-lin":"Winner 16 (then 1 point less per position for next 15 positions)", + "10p-double":"Winner 20 (then 2 points less per position for next 10 positions)", + "10p-lin":"Winner 10 (then 1 point less per position for next 9 positions)", + "35p-folk":"Winner 35 (then 30, 25, 20, 18, 16, followed by one 1 point less per position up to position 21)", + "f1-1991":"Winner 10 (then 6, 4, 3, 2, 1, followed by no points)", + "f1-2003":"Winner 10 (then 8, 6, 5, 4, 3, 2, 1, followed by no points)", + "f1-2010":"Winner 25 (then 18, 15, 12, 10, 8, 6, 4, 2, 1, followed by no points)", + "player_count_1":"Winner [player count] (then 1 less point per position)" + } + }, + { + "DisplayName":"Grid Order", + "Category":"Server Settings", + "Description":"Sets the method for sorting the grid order", + "Keywords":"grid,order", + "FieldName":"grid_order", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"grid_order", + "IncludeInCommandLine":false, + "DefaultValue":"perf_normal", + "EnumValues":{ + "random":"Random", + "perf_normal":"Performance points (fastest at front)", + "perf_reverse":"Performance points (fastest at back)", + "qualifying":"Qualifying session", + "cup_normal":"Cup points (highest at front)", + "cup_reverse":"Cup points (highest at back)" + } + }, + { + "DisplayName":"Enable Player Voting", + "Category":"Server Settings", + "Description":"When enabled, players will vote for the next event after previous event has ended (requires event rotation. Can be triggered by command \"startvote\" when players in unlocked lobby", + "Keywords":"event,voting", + "FieldName":"enable_track_vote", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"enable_track_vote", + "IncludeInCommandLine":false, + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Don't Kick Idling Players", + "Category":"Server Settings", + "Description":"When enabled, idling players will not be kicked while event is in progress", + "Keywords":"kick,idle,idling", + "FieldName":"disable_idle_kick", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"disable_idle_kick", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Track", + "Category":"Server Settings", + "Description":"Set track. List available track names with command \"tracks\"", + "Keywords":"track", + "FieldName":"track", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"track", + "IncludeInCommandLine":false, + "DefaultValue":"speedway2_demolition_arena", + "Placeholder":"speedway2_demolition_arena", + "EnumValues":{} + }, + { + "DisplayName":"Game Mode", + "Category":"Server Settings", + "Description":"", + "Keywords":"game,mode", + "FieldName":"gamemode", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"gamemode", + "IncludeInCommandLine":false, + "DefaultValue":"derby deathmatch", + "EnumValues":{ + "racing":"Racing", + "derby":"Derby", + "derby deathmatch":"Derby Deathmatch", + "team derby":"Team Derby", + "team race":"Team Race", + "elimination race":"Elimination Race" + } + }, + { + "DisplayName":"Bot Quantity", + "Category":"Server Settings", + "Description":"Pre-populate server with the set number of AI bots", + "Keywords":"bots", + "FieldName":"bots", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"bots", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "Placeholder":"0 - 24", + "Suffix":"bots", + "EnumValues":{} + }, + { + "DisplayName":"AI Difficulty", + "Category":"Server Settings", + "Description":"Sets difficulty setting of AI bots", + "Keywords":"AI,difficulty", + "FieldName":"ai_difficulty", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"ai_difficulty", + "IncludeInCommandLine":false, + "DefaultValue":"amateur", + "EnumValues":{ + "novice":"Novice", + "amateur":"Amateur", + "expert":"Expert" + } + }, + { + "DisplayName":"Team Number", + "Category":"Server Settings", + "Description":"Number of teams in team racing and team deathmatch game modes", + "Keywords":"team,number", + "FieldName":"num_teams", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"num_teams", + "IncludeInCommandLine":false, + "DefaultValue":"2", + "EnumValues":{ + "2":"2", + "3":"3", + "4":"4" + } + }, + { + "DisplayName":"Lap Number", + "Category":"Server Settings", + "Description":"Number of laps in race game modes", + "Keywords":"laps", + "FieldName":"laps", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"laps", + "IncludeInCommandLine":false, + "DefaultValue":"3", + "Placeholder":"1 - 60", + "Suffix":"laps", + "EnumValues":{} + }, + { + "DisplayName":"Deathmatch Time Limit", + "Category":"Server Settings", + "Description":"", + "Keywords":"deathmatch,time,limit", + "FieldName":"time_limit", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"time_limit", + "IncludeInCommandLine":false, + "DefaultValue":"5", + "Suffix":"minutes", + "EnumValues":{} + }, + { + "DisplayName":"Elimination Interval Time", + "Category":"Server Settings", + "Description":"Elimination interval time for elimination race", + "Keywords":"elimination,interval,time", + "FieldName":"elimination_interval", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"elimination_interval", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "0":"Each Lap", + "20":"20", + "30":"30", + "45":"45", + "60":"60", + "90":"90", + "120":"120" + } + }, + { + "DisplayName":"Vehicle Damage Level", + "Category":"Server Settings", + "Description":"", + "Keywords":"vehicle,damage", + "FieldName":"vehicle_damage", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"vehicle_damage", + "IncludeInCommandLine":false, + "DefaultValue":"normal", + "EnumValues":{ + "normal":"Normal", + "intense":"Intense", + "realistic":"Realistic", + "extreme":"Extreme" + } + }, + { + "DisplayName":"Maximum Vehicle Class", + "Category":"Server Settings", + "Description":"Allow only vehicles up to the class set", + "Keywords":"vehicle,class", + "FieldName":"car_class_restriction", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"car_class_restriction", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{ + "":"No Restriction", + "a":"Class A", + "b":"Class B", + "c":"Class C" + } + }, + { + "DisplayName":"Specific Car Allowed", + "Category":"Server Settings", + "Description":"If set, allow only the specific car listed. Leave blank for no restriction. List available cars with command \"cars\"", + "Keywords":"car,allowed", + "FieldName":"car_restriction", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"car_restriction", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Disallow Special Vehicles", + "Category":"Server Settings", + "Description":"", + "Keywords":"disallow,special,vehicles", + "FieldName":"special_vehicles_disabled", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"special_vehicles_disabled", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Disallow Car Reset", + "Category":"Server Settings", + "Description":"", + "Keywords":"disallow,car,reset", + "FieldName":"car_reset_disabled", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"car_reset_disabled", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Car Reset Delay", + "Category":"Server Settings", + "Description":"Set the car reset delay (0 - 20)", + "Keywords":"car,reset,delay", + "FieldName":"car_reset_delay", + "InputType":"number", + "IsFlagArgument":false, + "ParamFieldName":"car_reset_delay", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "Placeholder":"0 - 20", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Disable Speed Limiter", + "Category":"Server Settings", + "Description":"If set, disable speed limiter for players that drive the wrong way", + "Keywords":"disallow,speed,limiter", + "FieldName":"wrong_way_limiter_disabled", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"wrong_way_limiter_disabled", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Weather", + "Category":"Server Settings", + "Description":"Set event weather. Leave blank for random weather. List available weather names with command \"weathers\"", + "Keywords":"weather", + "FieldName":"weather", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"weather", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Server Update Frequency", + "Category":"Server Settings", + "Description":"", + "Keywords":"update,frequency", + "FieldName":"frequency", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"frequency", + "IncludeInCommandLine":false, + "DefaultValue":"high", + "EnumValues":{ + "low":"Low", + "high":"High" + } + }, + { + "DisplayName":"Enabled Mods", + "Category":"Server Settings", + "Description":"Comma separated list of folder names of enabled mods on the server. Mod folders need to be copied to server mods folder", + "Keywords":"mods", + "FieldName":"mods", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"mods", + "IncludeInCommandLine":false, + "DefaultValue":"", + "Placeholder":"example,my_mod", + "EnumValues":{} + } +] \ No newline at end of file diff --git a/wreckfestmetaconfig.json b/wreckfestmetaconfig.json new file mode 100644 index 0000000..3458b29 --- /dev/null +++ b/wreckfestmetaconfig.json @@ -0,0 +1,8 @@ +[ + { + "ConfigFile":"server_config.cfg", + "AutoMap":true, + "ConfigType":"kvp", + "ConfigFormatRegex":"^#?(?[^\\s]+?)=(?.*?)$" + } +]