diff --git a/fistful-of-frags.kvp b/fistful-of-frags.kvp new file mode 100644 index 000000000..f709529c5 --- /dev/null +++ b/fistful-of-frags.kvp @@ -0,0 +1,102 @@ +Meta.DisplayName=Fistful of Frags +Meta.Description=Fistful of Frags Dedicated Server +Meta.OS=Windows, Linux +Meta.AarchSupport=NotSupported +Meta.Arch=x86_64 +Meta.Author=Greelan, connorrichlen (richlen99) +Meta.URL=https://fistful-of-frags.com/ +Meta.DisplayImageSource=steam:265630 +Meta.EndpointURIFormat=steam://connect/{0} +Meta.ConfigManifest=fistful-of-fragsconfig.json +Meta.MetaConfigManifest=fistful-of-fragsmetaconfig.json +Meta.ConfigRoot=fistful-of-frags.kvp +Meta.MinAMPVersion=2.6.0.4 +Meta.SpecificDockerImage= +Meta.DockerRequired=False +Meta.DockerBaseReadOnly=False +Meta.ContainerPolicy=Supported +Meta.ContainerPolicyReason= +Meta.ExtraSetupStepsURI= +Meta.Prerequisites=[] +Meta.ExtraContainerPackages=[] +Meta.ConfigReleaseState=NotSpecified +Meta.NoCommercialUsage=False +Meta.AppConfigId=8ad0565c-2fb9-4303-b43d-479c0b915030 +Meta.ConfigVersion=1.0 +Meta.ReleaseNotes= +Meta.BreakingReleaseNotes= +App.DisplayName=Fistful of Frags +App.RootDir=./fof/ +App.BaseDirectory=./fof/295230/ +App.SteamWorkshopDownloadLocation= +App.ExecutableWin=295230\srcds.exe +App.ExecutableLinux=295230/srcds_linux +App.WorkingDir=295230 +App.LinuxCommandLineArgs= +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} -game fof -console -usercon -nobreakpad -port {{$ServerPort}} -ip {{$ApplicationIPBinding}} -maxplayers {{$MaxUsers}} -tickrate {{tickrate}} {{insecure}}{{nohltv}}{{CustomParameters}} {{CustomConVars}} +tv_port {{$SourceTVPort}} +clientport {{$ClientPort}} +sv_logfile 1 {{$FormattedArgs}} +exec server.cfg +map {{map}} +log on +App.UseLinuxIOREDIR=False +App.AppSettings={} +App.EnvironmentVariables={"LD_LIBRARY_PATH":"{{$FullBaseDir}}:{{$FullBaseDir}}bin:%LD_LIBRARY_PATH%","SteamAppId":"265630"} +App.CommandLineParameterFormat=+{0} {1} +App.CommandLineParameterDelimiter= +App.ExitMethod=String +App.ExitTimeout=30 +App.ExitString=quit +App.ExitFile=lock +App.HasWriteableConsole=True +App.HasReadableConsole=True +App.UDPLogger=True +App.SupportsLiveSettingsChanges=False +App.LiveSettingChangeCommandFormat=set {0} "{1}" +App.ForceIPBinding=True +App.SupportsIPv6=False +App.ApplicationIPBinding=0.0.0.0 +App.Ports=@IncludeJson[fistful-of-fragsports.json] +App.AdminPortRef=ServerPort +App.PrimaryApplicationPortRef=ServerPort +App.UniversalSleepApplicationUDPPortRef=0 +App.UniversalSleepSteamQueryPortRef=0 +App.MaxUsers=8 +App.UseRandomAdminPassword=True +App.PersistRandomPassword=True +App.RemoteAdminPassword= +App.AdminMethod=SourceRCON +App.AdminLoginTransform=None +App.LoginTransformPrefix= +App.RCONConnectDelaySeconds=5 +App.RCONConnectRetrySeconds=5 +App.RCONHeartbeatMinutes=0 +App.RCONHeartbeatCommand=ping +App.TelnetLoginFormat={0} +App.UpdateSources=@IncludeJson[fistful-of-fragsupdates.json] +App.PreStartStages=@IncludeJson[fistful-of-fragsstart.json] +App.ForceUpdate=False +App.ForceUpdateReason= +App.Compatibility=None +App.SteamUpdateAnonymousLogin=True +App.SteamForceLoginPrompt=False +App.RapidStartup=False +App.DumpFullChildProcessTree=False +App.MonitorChildProcessName= +App.SupportsUniversalSleep=False +App.WakeupMode=Any +App.ApplicationReadyMode=RCONConnected +Console.FilterMatchRegex= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=^(WARNING|ERROR): Shader.+$ +Console.AppReadyRegex=^$ +Console.UserJoinRegex=^L [\d\/]+ - [\d:]+: "(?.+?)<\d+><{{UserIDRegex}}><>" entered the game$ +Console.UserLeaveRegex=^L [\d\/]+ - [\d:]+: "(?.+?)<\d+><{{UserIDRegex}}><.*>" disconnected \(reason ".*"\)$ +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=2 +Limits.SleepStartThresholdSeconds=25 diff --git a/fistful-of-fragsconfig.json b/fistful-of-fragsconfig.json new file mode 100644 index 000000000..ad70b91a2 --- /dev/null +++ b/fistful-of-fragsconfig.json @@ -0,0 +1,1196 @@ +[ + { + "DisplayName": "RCON Password", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$RemoteAdminPassword", + "InputType": "text", + "Hidden": true, + "ParamFieldName": "rcon_password", + "EnumValues": {} + }, + { + "DisplayName": "Server Name", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the name of the server that appears in the server list", + "Keywords": "server,name,hostname", + "FieldName": "hostname", + "InputType": "text", + "ParamFieldName": "hostname", + "DefaultValue": "AMP Powered Fistful of Frags Server", + "EnumValues": {} + }, + { + "DisplayName": "Server Tags", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Comma-separated list of server tags that give additional information about the server in the server browser", + "Keywords": "tags,sv_tags", + "FieldName": "sv_tags", + "InputType": "text", + "ParamFieldName": "sv_tags", + "DefaultValue": "", + "Placeholder": "increased_maxplayers", + "EnumValues": {} + }, + { + "DisplayName": "Server Steam Group", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the ID of the steam group that the server belongs to. You can find your group's ID on the admin profile page in the steam community", + "Keywords": "steam,group,id,sv_steamgroup", + "FieldName": "sv_steamgroup", + "InputType": "text", + "ParamFieldName": "sv_steamgroup", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "MOTD Countdown", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets how long the MOTD panel lasts before it can be closed by clients", + "Keywords": "motd,fof_sv_motd_countdown", + "FieldName": "fof_sv_motd_countdown", + "InputType": "number", + "MinValue": "0", + "MaxValue": "10", + "ParamFieldName": "fof_sv_motd_countdown", + "DefaultValue": "1", + "Placeholder": "1", + "Suffix": "seconds", + "EnumValues": {} + }, + { + "DisplayName": "LAN Server", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If enabled, the server will operate as a LAN server: no heartbeat, no authentication, and no non-class C addresses", + "Keywords": "lan,local,sv_lan", + "FieldName": "sv_lan", + "InputType": "checkbox", + "ParamFieldName": "sv_lan", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Game Server Login Token (GSLT)", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the [Steam Game Server Login Token](https://steamcommunity.com/dev/managegameservers) for the server, to allow it to be listed in the server browser. Use app ID 265630 when generating the token", + "Keywords": "steam,server,login,token,gslt,sv_setsteamaccount", + "FieldName": "sv_setsteamaccount", + "InputType": "password", + "ParamFieldName": "sv_setsteamaccount", + "IncludeInCommandLine": true, + "SkipIfEmpty": true, + "DefaultValue": "", + "Placeholder": "6544F7E034119F113526E96474F559AH", + "EnumValues": {} + }, + { + "DisplayName": "Server Password", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the password required to connect to the server. Default is no password", + "Keywords": "server,password,sv_password", + "FieldName": "sv_password", + "InputType": "password", + "ParamFieldName": "sv_password", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "Initial Map", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the map to start the server with. If \"Custom\" is selected, Custom Initial Map must also be specified", + "Keywords": "map", + "FieldName": "map", + "InputType": "enum", + "ParamFieldName": "map", + "DefaultValue": "fof_fistful", + "EnumValues": { + "cm_forest": "Course Mode: Forest", + "cm_laststand": "Course Mode: Last Stand", + "cm_mobile_cannon": "Course Mode: Mobile Cannon", + "cm_movement_tutorial": "Course Mode: Movement Tutorial", + "cm_river_challenge": "Course Mode: River Challenge", + "cm_weapon_course": "Course Mode: Weapon Course", + "fofhr_coldblood": "Break Bad: Cold Blood", + "fofhr_monumentvalley": "Break Bad: Monument Valley", + "fofhr_tramonto": "Break Bad: Tramonto", + "fof_cripplecreek": "Cripplecreek", + "fof_depot": "Depot", + "fof_desperados": "Desperados", + "fof_fistful": "Fistful (default)", + "fof_impact": "Impact", + "fof_nest": "Nest", + "fof_nest_12": "Nest (maxplayers 12)", + "fof_overtop": "Overtop", + "fof_revenge": "Revenge", + "fof_robertlee": "Robert E. Lee Steamboat (maxplayers 12)", + "fof_sawmill": "Sawmill", + "fof_sawmill_12": "Sawmill (maxplayers 12)", + "fof_sweetwater": "Sweetwater", + "fof_sweetwater_12": "Sweetwater (maxplayers 12)", + "fof_tortuga": "Tortuga", + "fof_tortuga_12": "Tortuga (maxplayers 12)", + "fof_tramonto": "Tramonto", + "fof_tramonto_12": "Tramonto (maxplayers 12)", + "fof_winterlong": "Winterlong", + "tp_abandonded": "Teamplay: Abandonded", + "tp_assault": "Teamplay: Assault", + "tp_coastal": "Teamplay: Coastal", + "tp_eliminator": "Teamplay: Eliminator", + "tp_forest": "Teamplay: Forest", + "tp_loothill": "Teamplay: Loothill", + "tp_riobravo": "Teamplay: Rio Bravo", + "tp_snowy": "Teamplay: Snowy", + "tp_station": "Teamplay: Station", + "tp_yosemite": "Teamplay: Yosemite", + "vs_desert": "Versus: Desert", + "vs_forest": "Versus: Forest", + "vs_river": "Versus: River", + "gt_creepycreek": "Halloween: Creepy Creek", + "gt_desperados": "Halloween: Desperados", + "gt_nest": "Halloween: Nest", + "gt_overtop": "Halloween: Overtop", + "{{CustomMap}}": "--Custom--" + } + }, + { + "DisplayName": "Custom Initial Map", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets a custom map to use for the Initial Map, if \"Custom\" is selected", + "Keywords": "custom,map", + "FieldName": "CustomMap", + "InputType": "text", + "ParamFieldName": "CustomMap", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "Initial Game Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Set the initial game mode for the server", + "Keywords": "currentmode,game,mode,fof_sv_currentmode", + "FieldName": "fof_sv_currentmode", + "InputType": "enum", + "ParamFieldName": "fof_sv_currentmode", + "DefaultValue": "1", + "EnumValues": { + "1": "Shootout", + "2": "Teamplay/Objectives", + "3": "Break Bad", + "4": "Elimination", + "5": "Versus", + "6": "Co-op" + } + }, + { + "DisplayName": "Server Region", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the server region shown in the server list", + "Keywords": "server,region,sv_region", + "FieldName": "sv_region", + "InputType": "enum", + "ParamFieldName": "sv_region", + "DefaultValue": "-1", + "EnumValues": { + "-1": "No region", + "0": "East Coast US", + "1": "West Coast US", + "2": "South America", + "3": "Europe", + "4": "Asia", + "5": "Australia", + "6": "Middle East", + "7": "Africa", + "255": "World" + } + }, + { + "DisplayName": "Player Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the maximum number of players allowed on the server at one time", + "Keywords": "max,players,limit,maxplayers", + "FieldName": "$MaxUsers", + "InputType": "number", + "MinValue": "1", + "MaxValue": "24", + "ParamFieldName": "sv_maxplayers", + "DefaultValue": "8", + "Placeholder": "8", + "Suffix": "players", + "EnumValues": {} + }, + { + "DisplayName": "Bot Player Count Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets whether to count bots as players for the player count in AMP. This AMP instance must be restarted for changes to this setting to take effect", + "Keywords": "bot,count,players", + "FieldName": "UserIDRegex", + "InputType": "enum", + "ParamFieldName": "UserIDRegex", + "DefaultValue": "(BOT|(?(?!BOT).+?))", + "EnumValues": { + "(BOT|(?(?!BOT).+?))": "Count bots as players (default)", + "(?(?!BOT).+?)": "Don't count bots as players" + } + }, + { + "DisplayName": "Visible Player Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the maximum players reported to prospective clients, regardless of the Player Limit. -1 = do not override", + "Keywords": "visible,max,players,sv_visiblemaxplayers", + "FieldName": "sv_visiblemaxplayers", + "InputType": "number", + "MinValue": "-1", + "MaxValue": "100", + "ParamFieldName": "sv_visiblemaxplayers", + "DefaultValue": "-1", + "Placeholder": "-1", + "Suffix": "players", + "EnumValues": {} + }, + { + "DisplayName": "Allow Spectators", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, spectator mode will be enabled", + "Keywords": "allow,spectators,mp_allowspectators", + "FieldName": "mp_allowspectators", + "InputType": "checkbox", + "ParamFieldName": "mp_allowspectators", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Pure Server Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets whether clients are only allowed to use certain files", + "Keywords": "pure,server,cheat,hack,integrity,sv_pure", + "FieldName": "sv_pure", + "InputType": "enum", + "ParamFieldName": "sv_pure", + "DefaultValue": "-1", + "EnumValues": { + "-1": "Do not restrict client files", + "0": "Apply rules in 'pure_server_minimal.txt' only", + "1": "Apply rules in 'pure_server_full.txt' and then 'pure_server_whitelist.txt'", + "2": "Apply rules in 'pure_server_full.txt'" + } + }, + { + "DisplayName": "Kick Clients On Pure Server", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If enabled, the server will kick clients with mismatching files. Otherwise, it will issue a warning to the clients", + "Keywords": "pure,server,cheat,hack,integrity,sv_pure_kick_clients", + "FieldName": "sv_pure_kick_clients", + "InputType": "checkbox", + "ParamFieldName": "sv_pure_kick_clients", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Force Preload", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, server side preloading will be forced", + "Keywords": "force,preload,sv_forcepreload", + "FieldName": "sv_forcepreload", + "InputType": "checkbox", + "ParamFieldName": "sv_forcepreload", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Cheats", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, cheat convars will be allowed to be used on the server", + "Keywords": "allow,cheat,hack,integrity,sv_cheats", + "FieldName": "sv_cheats", + "InputType": "checkbox", + "ParamFieldName": "sv_cheats", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Disable Valve Anti-Cheat", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, Valve Anti-Cheat (VAC) will be disabled", + "Keywords": "valve,anti,cheat,vac,insecure", + "FieldName": "insecure", + "InputType": "checkbox", + "ParamFieldName": "insecure", + "DefaultValue": "", + "EnumValues": { + "False": "", + "True": "-insecure " + } + }, + { + "DisplayName": "Enable IP Packet Filter", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, enables packet filtering by IP mode. If disabled, everyone will treated as IP-banned, but their IP won't be added to the banlist", + "Keywords": "ip,ban,banning,sv_filterban", + "FieldName": "sv_filterban", + "InputType": "checkbox", + "ParamFieldName": "sv_filterban", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Server Tickrate", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the server tickrate", + "Keywords": "tick,rate,tickrate", + "FieldName": "tickrate", + "InputType": "number", + "MinValue": "1", + "MaxValue": "128", + "ParamFieldName": "tickrate", + "DefaultValue": "64", + "Placeholder": "64", + "Suffix": "tps", + "EnumValues": {} + }, + { + "DisplayName": "Allow Download From Server", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, clients will be allowed to download content from the server (maps, sprays and related)", + "Keywords": "allow,download,content,maps,sv_allowdownload", + "FieldName": "sv_allowdownload", + "InputType": "checkbox", + "ParamFieldName": "sv_allowdownload", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Fast Download URL", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the URL for clients to download custom content from, instead of sourcing the content from the server. This allows for faster downloads", + "Keywords": "fastdl,download,url,sv_downloadurl", + "FieldName": "sv_downloadurl", + "InputType": "text", + "ParamFieldName": "sv_downloadurl", + "DefaultValue": "", + "Placeholder": "http://example.com", + "EnumValues": {} + }, + { + "DisplayName": "Allow Upload To Server", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, clients will be allowed to upload customisation files to the server", + "Keywords": "allow,upload,customisation,files,sv_allowupload", + "FieldName": "sv_allowupload", + "InputType": "checkbox", + "ParamFieldName": "sv_allowupload", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Maximum File Size", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the maximum allowed file size for uploading to the server", + "Keywords": "maximum,upload,file,size,net_maxfilesize", + "FieldName": "net_maxfilesize", + "InputType": "number", + "MinValue": "0", + "MaxValue": "64", + "ParamFieldName": "net_maxfilesize", + "DefaultValue": "16", + "Placeholder": "16", + "Suffix": "MB", + "EnumValues": {} + }, + { + "DisplayName": "Minimum Client Rate", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the minimum allowable bandwidth rate a client may have set when connected to the server. 0 = no minimum", + "Keywords": "minimum,bandwidth,rate,sv_minrate", + "FieldName": "sv_minrate", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "sv_minrate", + "DefaultValue": "3500", + "Placeholder": "3500", + "Suffix": "bytes/second", + "EnumValues": {} + }, + { + "DisplayName": "Maximum Client Rate", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the maximum allowable bandwidth rate a client may have set when connected to the server. 0 = no limit", + "Keywords": "maximum,bandwidth,rate,sv_maxrate", + "FieldName": "sv_maxrate", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "sv_maxrate", + "DefaultValue": "0", + "Placeholder": "0", + "Suffix": "bytes/second", + "EnumValues": {} + }, + { + "DisplayName": "Minimum Server Update Rate", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the minimum number of updates per second of the positions of the server's models (players, guns, etc) that server sends to clients", + "Keywords": "minimum,update,rate,sv_minupdaterate", + "FieldName": "sv_minupdaterate", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "sv_minupdaterate", + "DefaultValue": "10", + "Placeholder": "10", + "EnumValues": {} + }, + { + "DisplayName": "Maximum Server Update Rate", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the maximum number of updates per second of the positions of the server's models (players, guns, etc) that server sends to clients", + "Keywords": "maximum,update,rate,sv_maxupdaterate", + "FieldName": "sv_maxupdaterate", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "sv_maxupdaterate", + "DefaultValue": "66", + "Placeholder": "66", + "EnumValues": {} + }, + { + "DisplayName": "Decal Frequency", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the time between decal sprays", + "Keywords": "decalfrequency", + "FieldName": "decalfrequency", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "decalfrequency", + "DefaultValue": "10", + "Placeholder": "10", + "Suffix": "seconds", + "EnumValues": {} + }, + { + "DisplayName": "Ping Boost", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Selects between optimised network code stack. Setting at 2 usually reduces latency toward 1ms without loss of activity input packets", + "Keywords": "ping,boost,latency,network,pingboost", + "FieldName": "pingboost", + "InputType": "enum", + "ParamFieldName": "pingboost", + "DefaultValue": "", + "EnumValues": { + "": "None", + "-pingboost 1 ": "1", + "-pingboost 2 ": "2", + "-pingboost 3 ": "3" + } + }, + { + "DisplayName": "Enable CPU Stats Collection", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If set, CPU stats will be collected", + "Keywords": "cpu,stats,sv_stats", + "FieldName": "sv_stats", + "InputType": "checkbox", + "ParamFieldName": "sv_stats", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Server/RCON IPv4 IP Binding", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "If required, you can change the IPv4 IP binding of the server and RCON by changing the 'Server IP Address' setting under Security and Privacy. NOTE: AMP requires the server to be bound to a specific IP, rather than 0.0.0.0, for the server to log to AMP's console. The IP must also be reachable by AMP", + "Keywords": "ip,binding", + "FieldName": "ip", + "InputType": "hidden", + "ParamFieldName": "ip", + "EnumValues": {} + }, + { + "DisplayName": "Additional Command Line Parameters", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Specifies additional [command line parameters](https://developer.valvesoftware.com/wiki/Command_line_options#Source_Dedicated_Server) (anything that begins with a -) that are not otherwise set by AMP. Use with care", + "Keywords": "custom,server,arguments,parameters", + "FieldName": "CustomParameters", + "InputType": "text", + "ParamFieldName": "CustomParameters", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "Additional Console Variables", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Specifies additional [console variables](https://fistfuloffrags.blogspot.com/2014/10/cvarlist-autosave-cmd-autosave.html) (anything that begins with a +) that are not otherwise set by AMP. Use with care. Preferably, specify the equivalent under \"Additional Server Settings\"", + "Keywords": "custom,server,arguments,variables,cvars,convars,parameters", + "FieldName": "CustomConVars", + "InputType": "text", + "ParamFieldName": "CustomConVars", + "DefaultValue": "", + "Placeholder": "+sv_gravity \"500\"", + "EnumValues": {} + }, + { + "DisplayName": "Additional Server Settings", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Specifies additional [settings](https://fistfuloffrags.blogspot.com/2014/10/cvarlist-autosave-cmd-autosave.html) to include in 'server.cfg' that are not otherwise set by AMP. One setting per line", + "Keywords": "additional,settings,custom", + "FieldName": "UserSettings", + "InputType": "Textarea", + "IsFlagArgument": false, + "ParamFieldName": "UserSettings", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "Enable Friendly Fire", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, friendly fire will be enabled (teammates can cause damage to other teammates)", + "Keywords": "friendly,fire,mp_friendlyfire", + "FieldName": "mp_friendlyfire", + "InputType": "checkbox", + "ParamFieldName": "mp_friendlyfire", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Flashlight", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If sets, allows the use of the flashlight by pressing the F button", + "Keywords": "flashlight,mp_flashlight", + "FieldName": "mp_flashlight", + "InputType": "checkbox", + "ParamFieldName": "mp_flashlight", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Footsteps", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the server will always play footstep sounds", + "Keywords": "footstep,sounds,mp_footsteps", + "FieldName": "mp_footsteps", + "InputType": "checkbox", + "ParamFieldName": "mp_footsteps", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Auto Crosshair", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the auto crosshair will be enabled", + "Keywords": "auto,crosshair,mp_autocrosshair", + "FieldName": "mp_autocrosshair", + "InputType": "checkbox", + "ParamFieldName": "mp_autocrosshair", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Teamplay", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If enabled, teamplay game rules will apply", + "Keywords": "team,play,teamplay,mp_teamplay", + "FieldName": "mp_teamplay", + "InputType": "checkbox", + "ParamFieldName": "mp_teamplay", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Allow Players To Pause Server", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, players will be able to pause the server. Not recommended", + "Keywords": "pause,pausable,sv_pausable", + "FieldName": "sv_pausable", + "InputType": "checkbox", + "ParamFieldName": "sv_pausable", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Allow Wait Command", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If enabled, the wait command will be allowed on clients connected to the server. Recommended to keep disabled to prevent server crash exploits", + "Keywords": "wait,command,sv_allow_wait_command", + "FieldName": "sv_allow_wait_command", + "InputType": "checkbox", + "ParamFieldName": "sv_allow_wait_command", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Voice Communication", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, voice communication will be enabled on the server", + "Keywords": "voice,communication,sv_voiceenable", + "FieldName": "sv_voiceenable", + "InputType": "checkbox", + "ParamFieldName": "sv_voiceenable", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Allow All Talk", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If enabled, players can communicate with all other players, with no team restrictions", + "Keywords": "all,talk,sv_alltalk", + "FieldName": "sv_alltalk", + "InputType": "checkbox", + "ParamFieldName": "sv_alltalk", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Enable Fade To Black", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If enabled, a player's screen fades to black for the remainder of the round after death (HUD and chat still works)", + "Keywords": "fade,black,spectator,death,mp_fadetoblack", + "FieldName": "mp_fadetoblack", + "InputType": "checkbox", + "ParamFieldName": "mp_fadetoblack", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Force Respawn", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If enabled, players will be forced to respawn after death", + "Keywords": "force,respawn,death,mp_forcerespawn", + "FieldName": "mp_forcerespawn", + "InputType": "checkbox", + "ParamFieldName": "mp_forcerespawn", + "DefaultValue": "1", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Automatic Team Balancing", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets whether to automatically balance teams based on the Teams Unbalance Limit", + "Keywords": "team,automatic,balance,balancing,mp_autoteambalance", + "FieldName": "mp_autoteambalance", + "InputType": "enum", + "ParamFieldName": "mp_autoteambalance", + "DefaultValue": "1", + "EnumValues": { + "0": "Off", + "1": "Forcibly switch (default)", + "2": "Ask for volunteers" + } + }, + { + "DisplayName": "Teams Unbalance Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Teams will be considered unbalanced for the purpose of Automatic Team Balancing when one team has this many more players than the other team. 0 = check disabled", + "Keywords": "team,automatic,balance,balancing,limit,mp_teams_unbalance_limit", + "FieldName": "mp_teams_unbalance_limit", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "mp_teams_unbalance_limit", + "DefaultValue": "1", + "Placeholder": "1", + "EnumValues": {} + }, + { + "DisplayName": "Enable Stalemate Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the stalemate mode will be enabled", + "Keywords": "stalemate,mode,mp_stalemate_enable", + "FieldName": "mp_stalemate_enable", + "InputType": "checkbox", + "ParamFieldName": "mp_stalemate_enable", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Stalemate Mode Time Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the time limit of the stalemate round", + "Keywords": "stalemate,round,time,limit,mp_stalemate_timelimit", + "FieldName": "mp_stalemate_timelimit", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "mp_stalemate_timelimit", + "DefaultValue": "240", + "Placeholder": "240", + "Suffix": "seconds", + "EnumValues": {} + }, + { + "DisplayName": "Map Rotation Time Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the game time per map. 0 = disabled", + "Keywords": "time,limit,rotation,mp_timelimit", + "FieldName": "mp_timelimit", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "mp_timelimit", + "DefaultValue": "0", + "Placeholder": "0", + "Suffix": "minutes", + "EnumValues": {} + }, + { + "DisplayName": "Round Kill Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the number of kills at which the map ends. 0 = disabled", + "Keywords": "kill,frag,limit,rotation,mp_fraglimit", + "FieldName": "mp_fraglimit", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "mp_fraglimit", + "DefaultValue": "0", + "Placeholder": "0", + "Suffix": "kills", + "EnumValues": {} + }, + { + "DisplayName": "Map Rotation Round Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the maximum number of rounds to play before the map rotates. 0 = disabled", + "Keywords": "round,limit,rotation,mp_maxrounds", + "FieldName": "mp_maxrounds", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "mp_maxrounds", + "DefaultValue": "0", + "Placeholder": "0", + "Suffix": "rounds", + "EnumValues": {} + }, + { + "DisplayName": "Map Rotation Win Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the maximum score one team can reach before the map rotates. 0 = disabled", + "Keywords": "win,limit,rotation,mp_winlimit", + "FieldName": "mp_winlimit", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "mp_winlimit", + "DefaultValue": "0", + "Placeholder": "0", + "EnumValues": {} + }, + { + "DisplayName": "Restrict Spectator Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the spectator mode for dead players will be restricted", + "Keywords": "spectator,camera,first,person,mp_forcecamera", + "FieldName": "mp_forcecamera", + "InputType": "checkbox", + "ParamFieldName": "mp_forcecamera", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Maximum Teams", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the maximum number of teams for the server", + "Keywords": "maxteams,max,maximum,teams,fof_sv_maxteams", + "FieldName": "fof_sv_maxteams", + "InputType": "enum", + "ParamFieldName": "fof_sv_maxteams", + "DefaultValue": "4", + "EnumValues": { + "2": "2", + "3": "3", + "4": "4" + } + }, + { + "DisplayName": "Enable Bots Dynamic Join", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the server will have bots join or leave automatically to fill slots", + "Keywords": "bots,dynamic,fof_sv_bot_dynamicjoin", + "FieldName": "fof_sv_bot_dynamicjoin", + "InputType": "checkbox", + "ParamFieldName": "fof_sv_bot_dynamicjoin", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Bots Slot Fill Percentage", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the slots percentage (expressed as a number between 0 and 1) filled by bots", + "Keywords": "bots,slot,fof_sv_bot_slotpct", + "FieldName": "fof_sv_bot_slotpct", + "InputType": "number", + "MinValue": "0", + "MaxValue": "1", + "ParamFieldName": "fof_sv_bot_slotpct", + "DefaultValue": "0", + "Placeholder": "0", + "EnumValues": {} + }, + { + "DisplayName": "Bots Skill Level", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the skill level of bots", + "Keywords": "bots,skill,level,fof_bot_skill", + "FieldName": "fof_bot_skill", + "InputType": "enum", + "ParamFieldName": "fof_bot_skill", + "DefaultValue": "2", + "EnumValues": { + "0": "Easy", + "1": "Medium", + "2": "Hard", + "3": "Expert", + "4": "Veteran", + "5": "Randomized", + "6": "Defined in script" + } + }, + { + "DisplayName": "AFK To Spectator Timer", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets how long players can be inactive before they are sent to spectator", + "Keywords": "afk,idle,spectator,fof_sv_maxidle_secs", + "FieldName": "fof_sv_maxidle_secs", + "InputType": "number", + "MinValue": "35", + "MaxValue": "120", + "ParamFieldName": "fof_sv_maxidle_secs", + "DefaultValue": "90", + "Placeholder": "90", + "Suffix": "seconds", + "EnumValues": {} + }, + { + "DisplayName": "Warmup Duration", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the warm-up duration", + "Keywords": "warmup,timer,duration,fof_sv_obj_warmuptime", + "FieldName": "fof_sv_obj_warmuptime", + "InputType": "number", + "MinValue": "0", + "MaxValue": "60", + "ParamFieldName": "fof_sv_obj_warmuptime", + "DefaultValue": "25", + "Placeholder": "25", + "Suffix": "seconds", + "EnumValues": {} + }, + { + "DisplayName": "Enable Competitive Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the competitive variant mode will be enabled: there is no time limit and the first player reaching the specified Notoriety Points To Win wins the game. The leader loses notoriety points when killed (same amount that their killer gets)", + "Keywords": "competitive,notoriety,fof_sv_dm_comp", + "FieldName": "fof_sv_dm_comp", + "InputType": "checkbox", + "ParamFieldName": "fof_sv_dm_comp", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Competitive Mode Notoriety Points To Win", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "Sets the number of notoriety points required to win the game in competitive mode", + "Keywords": "competitive,notoriety,fof_sv_dm_comp_points", + "FieldName": "fof_sv_dm_comp_points", + "InputType": "number", + "MinValue": "500", + "MaxValue": "1000", + "ParamFieldName": "fof_sv_dm_comp_points", + "DefaultValue": "500", + "Placeholder": "500", + "EnumValues": {} + }, + { + "DisplayName": "Enable Custom Shootout Mode", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, a custom Shootout mode will be enabled: weapon crates, whiskey and physic items are placed by following a script instead of their default positions. Create a script using the bot editor", + "Keywords": "custom,shootout,,fof_sv_shootout_custom", + "FieldName": "fof_sv_shootout_custom", + "InputType": "checkbox", + "ParamFieldName": "fof_sv_shootout_custom", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Alternate Ticks", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "Gameplay:joystick:2", + "Description": "If set, the server only simulates entities on even numbered ticks", + "Keywords": "alternate,ticks,sv_alternateticks", + "FieldName": "sv_alternateticks", + "InputType": "checkbox", + "ParamFieldName": "sv_alternateticks", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "Disable SourceTV", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "SourceTV:tv:3", + "Description": "If set, SourceTV will be disabled on the server", + "Keywords": "sourcetv,source,nohltv", + "FieldName": "nohltv", + "InputType": "checkbox", + "ParamFieldName": "nohltv", + "DefaultValue": "-nohltv ", + "EnumValues": { + "False": "", + "True": "-nohltv " + } + }, + { + "DisplayName": "Enable Automatic Demo Recording", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "SourceTV:tv:3", + "Description": "If set, all games will be recorded as SourceTV demos", + "Keywords": "sourcetv,tv,tv_autorecord", + "FieldName": "tv_autorecord", + "InputType": "checkbox", + "ParamFieldName": "tv_autorecord", + "DefaultValue": "0", + "EnumValues": { + "False": "0", + "True": "1" + } + }, + { + "DisplayName": "SourceTV Viewer Limit", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "SourceTV:tv:3", + "Description": "Sets the maximum number of clients allowed to connect to the server's SourceTV. 0 = no SourceTV viewers are allowed, the game will only be recorded locally", + "Keywords": "max,spectators,clients,viewers,sourcetv,tv,tv_maxclients", + "FieldName": "tv_maxclients", + "InputType": "number", + "MinValue": "0", + "MaxValue": "255", + "ParamFieldName": "tv_maxclients", + "DefaultValue": "128", + "Placeholder": "128", + "Suffix": "viewers", + "EnumValues": {} + }, + { + "DisplayName": "Maximum SourceTV Bandwidth", + "Category": "Fistful of Frags:stadia_controller", + "Subcategory": "SourceTV:tv:3", + "Description": "Sets the maximum SourceTV spectator bandwidth rate allowed. 0 = unlimited", + "Keywords": "maximum,bandwidth,rate,sourcetv,tv,tv_maxrate", + "FieldName": "tv_maxrate", + "InputType": "number", + "MinValue": "0", + "ParamFieldName": "tv_maxrate", + "DefaultValue": "8000", + "Placeholder": "8000", + "EnumValues": {} + }, + { + "DisplayName": "Metamod and SourceMod Management", + "Category": "Updates", + "Subcategory": "Metamod and SourceMod:build:3", + "Description": "Sets how to manage Metamod and SourceMod on the server. Branch and Build Versions must be set accordingly for installation. Update the server after changing this setting (unless \"Do nothing\" is selected)", + "Keywords": "install,metamod,sourcemod", + "FieldName": "InstallMod", + "InputType": "enum", + "ParamFieldName": "InstallMod", + "DefaultValue": "none", + "EnumValues": { + "none": "Do nothing (default)", + "false": "Deactivate mods", + "true": "Install and activate mods" + } + }, + { + "DisplayName": "Metamod Branch", + "Category": "Updates", + "Subcategory": "Metamod and SourceMod:build:3", + "Description": "Specifies the [Metamod](https://www.metamodsource.net/downloads.php) branch to install", + "Keywords": "metamod,branch", + "FieldName": "MetamodBranch", + "InputType": "enum", + "ParamFieldName": "MetamodBranch", + "DefaultValue": "1.11", + "EnumValues": { + "1.11": "Stable (1.11) (default)", + "1.12": "Development (1.12)", + "2.0": "Development (2.0)" + } + }, + { + "DisplayName": "Metamod Build Version", + "Category": "Updates", + "Subcategory": "Metamod and SourceMod:build:3", + "Description": "Specifies the [Metamod build version](https://www.metamodsource.net/downloads.php) to install. Blank = latest build for the branch specified under Metamod Branch", + "Keywords": "metamod,build,version", + "FieldName": "MetamodBuild", + "InputType": "number", + "ParamFieldName": "MetamodBuild", + "DefaultValue": "", + "Placeholder": "1156", + "EnumValues": {} + }, + { + "DisplayName": "SourceMod Branch", + "Category": "Updates", + "Subcategory": "Metamod and SourceMod:build:3", + "Description": "Specifies the [SourceMod](https://www.sourcemod.net/downloads.php) branch to install", + "Keywords": "sourcemod,branch", + "FieldName": "SourceModBranch", + "InputType": "enum", + "ParamFieldName": "SourceModBranch", + "DefaultValue": "1.12", + "EnumValues": { + "1.11": "Old stable (1.11)", + "1.12": "Stable (1.12) (default)", + "1.13": "Development (1.13)" + } + }, + { + "DisplayName": "SourceMod Build Version", + "Category": "Updates", + "Subcategory": "Metamod and SourceMod:build:3", + "Description": "Specifies the [SourceMod build version](https://www.sourcemod.net/downloads.php) to install. Blank = latest build for the branch specified under SourceMod Branch", + "Keywords": "sourcemod,build,version", + "FieldName": "SourceModBuild", + "InputType": "number", + "ParamFieldName": "SourceModBuild", + "DefaultValue": "", + "Placeholder": "7176", + "EnumValues": {} + } +] diff --git a/fistful-of-fragsmetaconfig.json b/fistful-of-fragsmetaconfig.json new file mode 100644 index 000000000..2da709f3d --- /dev/null +++ b/fistful-of-fragsmetaconfig.json @@ -0,0 +1,8 @@ +[ + { + "ConfigFile": "fof/cfg/server.cfg", + "AutoMap": true, + "ConfigType": "template", + "ConfigFileTemplate": "fof/AMP_server.cfg" + } +] \ No newline at end of file diff --git a/fistful-of-fragsports.json b/fistful-of-fragsports.json new file mode 100644 index 000000000..6e58d51d0 --- /dev/null +++ b/fistful-of-fragsports.json @@ -0,0 +1,23 @@ +[ + { + "Protocol": "Both", + "Port": 27015, + "Ref": "ServerPort", + "Name": "Game and RCON Port", + "Description": "Port for game and RCON traffic" + }, + { + "Protocol": "UDP", + "Port": 27020, + "Ref": "SourceTVPort", + "Name": "SourceTV Port", + "Description": "Port for SourceTV traffic" + }, + { + "Protocol": "UDP", + "Port": 27005, + "Ref": "ClientPort", + "Name": "Client Port", + "Description": "Port for client traffic" + } +] \ No newline at end of file diff --git a/fistful-of-fragsserver.cfg b/fistful-of-fragsserver.cfg new file mode 100644 index 000000000..5362caa6b --- /dev/null +++ b/fistful-of-fragsserver.cfg @@ -0,0 +1,67 @@ +// This file is controlled by AMP +// Configure any additional required settings via the AMP UI + +{{UserSettings}} +hostname "{{hostname}}" +sv_tags "{{sv_tags}}" +sv_steamgroup {{sv_steamgroup}} +fof_sv_motd_countdown {{fof_sv_motd_countdown}} +sv_lan {{sv_lan}} +sv_password "{{sv_password}}" +rcon_password "{{rcon_password}}" +fof_sv_currentmode {{fof_sv_currentmode}} +sv_region {{sv_region}} +sv_visiblemaxplayers {{sv_visiblemaxplayers}} +mp_allowspectators {{mp_allowspectators}} +sv_pure {{sv_pure}} +sv_pure_kick_clients {{sv_pure_kick_clients}} +sv_forcepreload {{sv_forcepreload}} +sv_cheats {{sv_cheats}} +sv_filterban {{sv_filterban}} +sv_allowdownload {{sv_allowdownload}} +sv_downloadurl "{{sv_downloadurl}}" +sv_allowupload {{sv_allowupload}} +net_maxfilesize {{net_maxfilesize}} +sv_minrate {{sv_minrate}} +sv_maxrate {{sv_maxrate}} +sv_minupdaterate {{sv_minupdaterate}} +sv_maxupdaterate {{sv_maxupdaterate}} +decalfrequency {{decalfrequency}} +sv_stats {{sv_stats}} +mp_friendlyfire {{mp_friendlyfire}} +mp_flashlight {{mp_flashlight}} +mp_footsteps {{mp_footsteps}} +mp_autocrosshair {{mp_autocrosshair}} +mp_teamplay {{mp_teamplay}} +sv_pausable {{sv_pausable}} +sv_allow_wait_command {{sv_allow_wait_command}} +sv_voiceenable {{sv_voiceenable}} +sv_alltalk {{sv_alltalk}} +mp_fadetoblack {{mp_fadetoblack}} +mp_forcerespawn {{mp_forcerespawn}} +mp_autoteambalance {{mp_autoteambalance}} +mp_teams_unbalance_limit {{mp_teams_unbalance_limit}} +mp_stalemate_enable {{mp_stalemate_enable}} +mp_stalemate_timelimit {{mp_stalemate_timelimit}} +mp_timelimit {{mp_timelimit}} +mp_fraglimit {{mp_fraglimit}} +mp_maxrounds {{mp_maxrounds}} +mp_winlimit {{mp_winlimit}} +mp_forcecamera {{mp_forcecamera}} +fof_sv_maxteams {{fof_sv_maxteams}} +fof_sv_bot_dynamicjoin {{fof_sv_bot_dynamicjoin}} +fof_sv_bot_slotpct {{fof_sv_bot_slotpct}} +fof_bot_skill {{fof_bot_skill}} +fof_sv_maxidle_secs {{fof_sv_maxidle_secs}} +fof_sv_obj_warmuptime {{fof_sv_obj_warmuptime}} +fof_sv_dm_comp {{fof_sv_dm_comp}} +fof_sv_dm_comp_points {{fof_sv_dm_comp_points}} +fof_sv_shootout_custom {{fof_sv_shootout_custom}} +sv_alternateticks {{sv_alternateticks}} +tv_autorecord {{tv_autorecord}} +tv_maxclients {{tv_maxclients}} +tv_maxrate {{tv_maxrate}} +exec banned_ip.cfg +exec banned_user.cfg +writeip +writeid diff --git a/fistful-of-fragsstart.json b/fistful-of-fragsstart.json new file mode 100644 index 000000000..270dfcef1 --- /dev/null +++ b/fistful-of-fragsstart.json @@ -0,0 +1,30 @@ +[ + { + "UpdateStageName": "Activate Metamod and SourceMod", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateFile", + "UpdateSourceData": "\"Plugin\"\n{\n\t\"file\"\t\"../fof/addons/metamod/bin/server\"\n}", + "UpdateSourceArgs": "{{$FullBaseDir}}fof/addons/metamod.vdf", + "OverwriteExistingFiles": true, + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true" + }, + { + "UpdateStageName": "Disable Metamod and SourceMod", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "cmd.exe", + "UpdateSourceArgs": "/C cd fof\\295230\\fof\\addons > NUL 2>&1 && del /Q /F metamod.vdf > NUL 2>&1 & exit /b 0", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "false" + }, + { + "UpdateStageName": "Disable Metamod and SourceMod", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"cd fof/295230/fof/addons >/dev/null 2>&1 && rm -rf metamod.vdf >/dev/null 2>&1; exit 0\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "false" + } +] \ No newline at end of file diff --git a/fistful-of-fragsupdates.json b/fistful-of-fragsupdates.json new file mode 100644 index 000000000..d60a44999 --- /dev/null +++ b/fistful-of-fragsupdates.json @@ -0,0 +1,162 @@ +[ + { + "UpdateStageName": "SteamCMD Server Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "SteamCMD", + "UpdateSourceData": "295230", + "UpdateSourceArgs": "265630" + }, + { + "UpdateStageName": "Server.cfg Template File Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/fistful-of-fragsserver.cfg", + "UpdateSourceArgs": "AMP_server.cfg", + "UpdateSourceTarget": "{{$FullRootDir}}", + "OverwriteExistingFiles": true + }, + { + "UpdateStageName": "Metamod Download", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"MetamodBuild=\\\"{{MetamodBuild}}\\\" && MetamodBranch=\\\"{{MetamodBranch}}\\\" && if [[ -z \\\"$MetamodBuild\\\" ]]; then LatestMetamodFile=$(wget -qO- https://mms.alliedmods.net/mmsdrop/$MetamodBranch/mmsource-latest-linux) && wget -qO metamod.tar.gz https://mms.alliedmods.net/mmsdrop/$MetamodBranch/$LatestMetamodFile && echo \\\"Latest Metamod $MetamodBranch build downloaded\\\"; elif [[ ! \\\"$MetamodBuild\\\" =~ ^[0-9]+$ ]]; then echo \\\"Invalid Metamod build version format specified\\\" && exit 1; else wget -qO metamod.tar.gz https://mms.alliedmods.net/mmsdrop/$MetamodBranch/mmsource-$MetamodBranch.0-git$MetamodBuild-linux.tar.gz && echo \\\"Metamod $MetamodBranch build $MetamodBuild downloaded\\\"; fi\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Metamod Download", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "powershell.exe", + "UpdateSourceArgs": "-NoProfile -Command \"$ProgressPreference='SilentlyContinue'; $MetamodBuild='{{MetamodBuild}}'; $MetamodBranch='{{MetamodBranch}}'; if ([string]::IsNullOrWhiteSpace($MetamodBuild)) { $LatestMetamodFile=(Invoke-RestMethod -UseBasicParsing -Uri https://mms.alliedmods.net/mmsdrop/$MetamodBranch/mmsource-latest-windows); Invoke-WebRequest -UseBasicParsing -Uri https://mms.alliedmods.net/mmsdrop/$MetamodBranch/$LatestMetamodFile -OutFile 'metamod.zip'; if ($?) { Write-Output \\\"Latest Metamod $MetamodBranch build downloaded\\\"; } } elseif ($MetamodBuild -notmatch '^\\d+$') { Write-Output \\\"Invalid Metamod build version format specified\\\"; exit 1; } else { Invoke-WebRequest -UseBasicParsing -Uri https://mms.alliedmods.net/mmsdrop/$MetamodBranch/mmsource-$MetamodBranch.0-git$MetamodBuild-windows.zip -OutFile 'metamod.zip'; if ($?) { Write-Output \\\"Metamod $MetamodBranch build $MetamodBuild downloaded\\\"; } }\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Metamod Extract", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "ExtractArchive", + "UpdateSourceData": "metamod.tar.gz", + "UpdateSourceTarget": "{{$FullBaseDir}}fof", + "OverwriteExistingFiles": true, + "DeleteAfterExtract": true, + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "Metamod Extract", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "ExtractArchive", + "UpdateSourceData": "metamod.zip", + "UpdateSourceTarget": "{{$FullBaseDir}}fof", + "OverwriteExistingFiles": true, + "DeleteAfterExtract": true, + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "SourceMod Download Directory Creation", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateDirectory", + "UpdateSourceArgs": "{{$FullBaseDir}}sm", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true" + }, + { + "UpdateStageName": "SourceMod Download", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"SourceModBuild=\\\"{{SourceModBuild}}\\\" && SourceModBranch=\\\"{{SourceModBranch}}\\\" && if [[ -z \\\"$SourceModBuild\\\" ]]; then LatestSourceModFile=$(wget -qO- https://sm.alliedmods.net/smdrop/$SourceModBranch/sourcemod-latest-linux) && wget -qO sourcemod.tar.gz https://sm.alliedmods.net/smdrop/$SourceModBranch/$LatestSourceModFile && echo \\\"Latest SourceMod $SourceModBranch build downloaded\\\"; elif [[ ! \\\"$SourceModBuild\\\" =~ ^[0-9]+$ ]]; then echo \\\"Invalid SourceMod build version format specified\\\" && exit 1; else wget -qO sourcemod.tar.gz https://sm.alliedmods.net/smdrop/$SourceModBranch/sourcemod-$SourceModBranch.0-git$SourceModBuild-linux.tar.gz && echo \\\"SourceMod $SourceModBranch build $SourceModBuild downloaded\\\"; fi\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "SourceMod Download", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "powershell.exe", + "UpdateSourceArgs": "-NoProfile -Command \"$ProgressPreference='SilentlyContinue'; $SourceModBuild='{{SourceModBuild}}'; $SourceModBranch='{{SourceModBranch}}'; if ([string]::IsNullOrWhiteSpace($SourceModBuild)) { $LatestSourceModFile=(Invoke-RestMethod -UseBasicParsing -Uri https://sm.alliedmods.net/smdrop/$SourceModBranch/sourcemod-latest-windows); Invoke-WebRequest -UseBasicParsing -Uri https://sm.alliedmods.net/smdrop/$SourceModBranch/$LatestSourceModFile -OutFile 'sourcemod.zip'; if ($?) { Write-Output \\\"Latest SourceMod $SourceModBranch build downloaded\\\"; } } elseif ($SourceModBuild -notmatch '^\\d+$') { Write-Output \\\"Invalid SourceMod build version format specified\\\"; exit 1; } else { Invoke-WebRequest -UseBasicParsing -Uri https://sm.alliedmods.net/smdrop/$SourceModBranch/sourcemod-$SourceModBranch.0-git$SourceModBuild-windows.zip -OutFile 'sourcemod.zip'; if ($?) { Write-Output \\\"SourceMod $SourceModBranch build $SourceModBuild downloaded\\\"; } }\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "SourceMod Extract", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "ExtractArchive", + "UpdateSourceData": "sourcemod.tar.gz", + "UpdateSourceTarget": "{{$FullBaseDir}}sm", + "OverwriteExistingFiles": true, + "DeleteAfterExtract": true, + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "SourceMod Extract", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "ExtractArchive", + "UpdateSourceData": "sourcemod.zip", + "UpdateSourceTarget": "{{$FullBaseDir}}sm", + "OverwriteExistingFiles": true, + "DeleteAfterExtract": true, + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": false + }, + { + "UpdateStageName": "SourceMod Installation", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "powershell.exe", + "UpdateSourceArgs": "-NoProfile -Command \"Set-Location -Path 'fof/295230'; if (Test-Path 'fof/cfg/sourcemod') { Remove-Item -Path 'sm/cfg/sourcemod' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null }; if (Test-Path 'fof/addons/sourcemod/configs') { Remove-Item -Path 'sm/addons/sourcemod/configs' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null }; if (Test-Path 'fof/addons/sourcemod/plugins') { Remove-Item -Path 'sm/addons/sourcemod/plugins' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null }; Copy-Item -Path 'sm/*' -Destination 'fof' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null; Remove-Item -Path 'sm' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": true + }, + { + "UpdateStageName": "SourceMod Installation", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"cd fof/295230 && [ -d fof/cfg/sourcemod ] && rm -rf sm/cfg/sourcemod >/dev/null 2>&1; [ -d fof/addons/sourcemod/configs ] && rm -rf sm/addons/sourcemod/configs >/dev/null 2>&1; [ -d fof/addons/sourcemod/plugins ] && rm -rf sm/addons/sourcemod/plugins >/dev/null 2>&1; \\cp -rf sm/* fof/ >/dev/null 2>&1; rm -rf sm >/dev/null 2>&1\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true", + "SkipOnFailure": true + }, + { + "UpdateStageName": "Activate Metamod and SourceMod", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateFile", + "UpdateSourceData": "\"Plugin\"\n{\n\t\"file\"\t\"../fof/addons/metamod/bin/server\"\n}", + "UpdateSourceArgs": "{{$FullBaseDir}}fof/addons/metamod.vdf", + "OverwriteExistingFiles": true, + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "true" + }, + { + "UpdateStageName": "Disable Metamod and SourceMod", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "cmd.exe", + "UpdateSourceArgs": "/C cd fof\\295230\\fof\\addons > NUL 2>&1 && del /Q /F metamod.vdf > NUL 2>&1 & exit /b 0", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "false" + }, + { + "UpdateStageName": "Disable Metamod and SourceMod", + "UpdateSourcePlatform": "Linux", + "UpdateSource": "Executable", + "UpdateSourceData": "/bin/bash", + "UpdateSourceArgs": "-c \"cd fof/295230/fof/addons >/dev/null 2>&1 && rm -rf metamod.vdf >/dev/null 2>&1; exit 0\"", + "UpdateSourceConditionSetting": "InstallMod", + "UpdateSourceConditionValue": "false" + } +]