From 30076ca8093fac75923ee7fab241a0394d1fa117 Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Thu, 10 Nov 2022 10:56:28 +1100 Subject: [PATCH] Add Call of Duty: Modern Warfare 3 (#193) --- call-of-dutymw3.kvp | 86 +++++++++++++ call-of-dutymw3config.json | 212 +++++++++++++++++++++++++++++++++ call-of-dutymw3metaconfig.json | 9 ++ 3 files changed, 307 insertions(+) create mode 100644 call-of-dutymw3.kvp create mode 100644 call-of-dutymw3config.json create mode 100644 call-of-dutymw3metaconfig.json diff --git a/call-of-dutymw3.kvp b/call-of-dutymw3.kvp new file mode 100644 index 0000000..5f42bb3 --- /dev/null +++ b/call-of-dutymw3.kvp @@ -0,0 +1,86 @@ +Meta.DisplayName=Call of Duty: Modern Warfare 3 +Meta.Description=Call of Duty: Modern Warfare 3 Dedicated Server +Meta.OS=Windows, Linux +Meta.Arch=x86_64 +Meta.Author=Greelan +Meta.URL=https://www.callofduty.com/au/en/mw3 +Meta.DisplayImageSource=steam:42690 +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$MasterServerPort} +Meta.ConfigManifest=call-of-dutymw3config.json +Meta.MetaConfigManifest=call-of-dutymw3metaconfig.json +Meta.ConfigRoot=call-of-dutymw3.kvp +Meta.MinAMPVersion=2.4.0.8 +Meta.SpecificDockerImage=cubecoders/ampbase:wine +Meta.DockerRequired=False +Meta.ContainerPolicy=RecommendedOnLinux +Meta.ContainerPolicyReason=The server requires Wine and Xvfb to run on Linux. Using a container avoids the need to install these dependencies on the host. +Meta.Prerequsites=[] +Meta.ExtraContainerPackages=[] +Meta.ConfigReleaseState=NotSpecified +Meta.NoCommercialUsage=False +App.DisplayName=Call of Duty: Modern Warfare 3 +App.RootDir=./call-of-dutymw3/ +App.BaseDirectory=./call-of-dutymw3/42750/ +App.ExecutableWin=42750\iw5mp_server.exe +App.ExecutableLinux=/usr/bin/xvfb-run +App.WorkingDir=42750 +App.LinuxCommandLineArgs=-a wine "./iw5mp_server.exe" +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} +set sv_config "server.cfg" +set net_queryPort {{$OpenGamePort}} +set net_port {{$SecureGamePort}} +set net_authPort {{$AuthPort}} +set net_masterServerPort {{$MasterServerPort}} +start_map_rotate {{$FormattedArgs}} +App.UseLinuxIOREDIR=False +App.AppSettings={} +App.EnvironmentVariables={"LD_LIBRARY_PATH":"{{$FullBaseDir}}linux64:%LD_LIBRARY_PATH%","SteamAppId":"42690"} +App.CommandLineParameterFormat=+set {0} "{1}" +App.CommandLineParameterDelimiter= +App.ExitMethod=OS_CLOSE +App.ExitTimeout=30 +App.ExitString=quit +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":27014,"Ref":"OpenGamePort","Name":"Open Game Port","Description":"Port for Steam visible server game traffic"},{"Protocol":"UDP","Port":27015,"Ref":"SecureGamePort","Name":"Secure Game Port","Description":"Port for secure game traffic"},{"Protocol":"UDP","Port":8766,"Ref":"AuthPort","Name":"Authentication Port","Description":"Port for Steam authentication traffic"},{"Protocol":"UDP","Port":27016,"Ref":"MasterServerPort","Name":"Master Server Port","Description":"Port for Steam master server or browser traffic"}] +App.PrimaryApplicationPortRef=OpenGamePort +App.UniversalSleepApplicationUDPPort=OpenGamePort +App.UniversalSleepSteamQueryPort=MasterServerPort +App.MaxUsers=16 +App.UseRandomAdminPassword=False +App.RemoteAdminPassword=Password123 +App.AdminMethod=STDIO +App.AdminLoginTransform=None +App.RCONConnectDelaySeconds=5 +App.RCONConnectRetrySeconds=5 +App.RCONHeartbeatMinutes=0 +App.RCONHeartbeatCommand=ping +App.TelnetLoginFormat=login {0} +App.UpdateSources=[{"UpdateStageName":"SteamCMD Download","UpdateSourcePlatform":"All","UpdateSource":"SteamCMD","UpdateSourceData":"42750","ForceDownloadPlatform":"Windows"}] +App.Compatibility=None +App.SteamUpdateAnonymousLogin=False +App.SteamForceLoginPrompt=False +App.RapidStartup=False +App.MonitorChildProcess=True +App.MonitorChildProcessWaitMs=1000 +App.MonitorChildProcessName=wine +App.SupportsUniversalSleep=True +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=^$ +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 diff --git a/call-of-dutymw3config.json b/call-of-dutymw3config.json new file mode 100644 index 0000000..42f7b1f --- /dev/null +++ b/call-of-dutymw3config.json @@ -0,0 +1,212 @@ +[ + { + "DisplayName":"Server Name", + "Category":"Server Settings", + "Description":"Sets the name of the server", + "Keywords":"server,name", + "FieldName":"sv_hostname", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"sv_hostname", + "IncludeInCommandLine":false, + "DefaultValue":"AMP Powered Call of Duty: Modern Warfare 3 Server", + "EnumValues":{} + }, + { + "DisplayName":"Make Server Public", + "Category":"Server Settings", + "Description":"If enabled, the server will be visible publicly. Otherwise it will only be accessible from the local network", + "Keywords":"public,visible", + "FieldName":"dedicated", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"dedicated", + "IncludeInCommandLine":true, + "DefaultValue":"2", + "EnumValues":{ + "True":"2", + "False":"1" + } + }, + { + "DisplayName":"Server Password", + "Category":"Server Settings", + "Description":"Sets the password to join the server", + "Keywords":"password", + "FieldName":"g_password", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"g_password", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"RCON Password", + "Category":"Server Settings", + "Description":"Sets the RCON password to allow sending console commands in-game. Default is no password, disabling console commands", + "Keywords":"rcon,password", + "FieldName":"rcon_password", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"rcon_password", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Player Limit", + "Category":"Server Settings", + "Description":"The maximum number of players allowed on the server", + "Keywords":"max,players,limit", + "FieldName":"$MaxUsers", + "InputType":"number", + "MinValue":"1", + "MaxValue":"18", + "IsFlagArgument":false, + "ParamFieldName":"sv_maxclients", + "IncludeInCommandLine":false, + "DefaultValue":"16", + "EnumValues":{} + }, + { + "DisplayName":"Private Player Limit", + "Category":"Server Settings", + "Description":"The maximum number of private players allowed on the server (those that can use non-public reserved slots). Will be limited to the Player Limit", + "Keywords":"max,private,players,limit", + "FieldName":"sv_privateClients", + "InputType":"number", + "MinValue":"0", + "MaxValue":"18", + "IsFlagArgument":false, + "ParamFieldName":"sv_privateClients", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{} + }, + { + "DisplayName":"Private Player Password", + "Category":"Server Settings", + "Description":"Sets the password for private players to join the server. Private players entering this password have access to all slots on the server, otherwise the players only have access to the public slots (Player Limit less Private Player Limit)", + "Keywords":"private,player,password", + "FieldName":"sv_privatePassword", + "InputType":"password", + "IsFlagArgument":false, + "ParamFieldName":"sv_privatePassword", + "IncludeInCommandLine":false, + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Map Rotation", + "Category":"Server Settings", + "Description":"Sets the dedicated server play list (DSPL) for map rotation. Valid game options are controlled via the dedicated server recipe (DSR) specified in the DSPL", + "Keywords":"map,rotation", + "FieldName":"sv_maprotation", + "InputType":"text", + "IsFlagArgument":false, + "ParamFieldName":"sv_maprotation", + "IncludeInCommandLine":false, + "DefaultValue":"default", + "EnumValues":{} + }, + { + "DisplayName":"Server Voice Chat", + "Category":"Server Settings", + "Description":"Sets the server voice chat configuration", + "Keywords":"voice,chat", + "FieldName":"sv_voice", + "InputType":"enum", + "IsFlagArgument":false, + "ParamFieldName":"sv_voice", + "IncludeInCommandLine":false, + "DefaultValue":"2", + "EnumValues":{ + "0":"No Chat", + "1":"Free Chat", + "2":"Team Chat (default)" + } + }, + { + "DisplayName":"Enable Voting", + "Category":"Server Settings", + "Description":"If enabled, voting is allowed for player kick, map restart and next map", + "Keywords":"vote,voting", + "FieldName":"g_allowVote", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"g_allowVote", + "IncludeInCommandLine":false, + "DefaultValue":"1", + "EnumValues":{ + "True":"1", + "False":"0" + } + }, + { + "DisplayName":"Enable Dead Chat", + "Category":"Server Settings", + "Description":"If enabled, dead players will be allowed to chat with living players", + "Keywords":"dead,chat", + "FieldName":"g_deadChat", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"g_deadChat", + "IncludeInCommandLine":false, + "DefaultValue":"0", + "EnumValues":{ + "True":"1", + "False":"0" + } + }, + { + "DisplayName":"Inactivity Kick Period", + "Category":"Server Settings", + "Description":"Time before the server will kick a player for inactivity", + "Keywords":"inactivity,afk,period", + "FieldName":"g_inactivity", + "InputType":"number", + "IsFlagArgument":false, + "MinValue":"0", + "MaxValue":"10000", + "ParamFieldName":"g_inactivity", + "IncludeInCommandLine":false, + "DefaultValue":"120", + "Suffix":"seconds", + "Placeholder":"0 - 10000", + "EnumValues":{} + }, + { + "DisplayName":"Temporary Ban Period", + "Category":"Server Settings", + "Description":"Time for a player temporary ban (on kick/tempban)", + "Keywords":"ban,period,temporary", + "FieldName":"sv_kickBanTime", + "InputType":"number", + "IsFlagArgument":false, + "MinValue":"0", + "MaxValue":"3600", + "ParamFieldName":"sv_kickBanTime", + "IncludeInCommandLine":true, + "DefaultValue":"300", + "Suffix":"seconds", + "Placeholder":"0 - 3600", + "EnumValues":{} + }, + { + "DisplayName":"Enable Flood Protection", + "Category":"Server Settings", + "Description":"If enabled, flood protection applies, so user commands are throttled. Should be enabled on non-password-protected public servers", + "Keywords":"flood,protection", + "FieldName":"sv_floodProtect", + "InputType":"checkbox", + "IsFlagArgument":false, + "ParamFieldName":"sv_floodProtect", + "IncludeInCommandLine":true, + "DefaultValue":"1", + "EnumValues":{ + "True":"1", + "False":"0" + } + } +] \ No newline at end of file diff --git a/call-of-dutymw3metaconfig.json b/call-of-dutymw3metaconfig.json new file mode 100644 index 0000000..b29d0ab --- /dev/null +++ b/call-of-dutymw3metaconfig.json @@ -0,0 +1,9 @@ +[ + { + "ConfigFile":"admin/server.cfg", + "AutoMap":true, + "ConfigType":"kvp", + "ConfigFormat":"seta {0} \"{1}\"", + "ConfigFormatRegex":"^seta (?.+?) \"?(?.*?)\"?$" + } +] \ No newline at end of file