diff --git a/call-of-dutymw2.kvp b/call-of-dutymw2.kvp new file mode 100644 index 0000000..86acff1 --- /dev/null +++ b/call-of-dutymw2.kvp @@ -0,0 +1,101 @@ +Meta.DisplayName=Call of Duty: Modern Warfare 2 (2009) +Meta.Description=Call of Duty: Modern Warfare 2 (2009) Dedicated Server +Meta.OS=Windows, Linux +Meta.AarchSupport=Unknown +Meta.Arch=x86_64 +Meta.Author=Greelan +Meta.URL=https://www.callofduty.com/modernwarfare2 +Meta.DisplayImageSource=steam:10190 +Meta.EndpointURIFormat=steam://connect/{0} +Meta.ConfigManifest=call-of-dutymw2config.json +Meta.MetaConfigManifest=call-of-dutymw2metaconfig.json +Meta.ConfigRoot=call-of-dutymw2.kvp +Meta.MinAMPVersion=2.4.6.4 +Meta.SpecificDockerImage=cubecoders/ampbase:wine +Meta.DockerRequired=False +Meta.DockerBaseReadOnly=False +Meta.ContainerPolicy=SupportedOnWindows, RecommendedOnLinux +Meta.ContainerPolicyReason=The server requires Wine 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=Call of Duty: Modern Warfare 2 (2009) +App.RootDir=./call-of-dutymw2/ +App.BaseDirectory=./call-of-dutymw2/10190/ +App.SteamWorkshopDownloadLocation= +App.ExecutableWin=10190\iw4x.exe +App.ExecutableLinux=/usr/bin/wine +App.WorkingDir=10190 +App.LinuxCommandLineArgs="./iw4x.exe" +App.WindowsCommandLineArgs= +App.CommandLineArgs={{$PlatformArgs}} -console -dedicated -stdout +fs_game "{{fs_game}}" +set net_port "{{$GamePort}}" +set net_ip "{{$ApplicationIPBinding}}" +exec "server.cfg" +set party_enable "0" {{$FormattedArgs}} +map_rotate +App.UseLinuxIOREDIR=False +App.AppSettings={} +App.EnvironmentVariables={"SteamAppId":"10190","WINEPREFIX":"{{$FullRootDir}}.wine","WINEARCH":"win32","WINEDEBUG":"-all"} +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":"Both","Port":28960,"Ref":"GamePort","Name":"Game Port","Description":"Port for game traffic"}] +App.AdminPortRef=0 +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepApplicationUDPPortRef=0 +App.UniversalSleepSteamQueryPortRef=0 +App.MaxUsers=18 +App.UseRandomAdminPassword=False +App.PersistRandomPassword=False +App.RemoteAdminPassword= +App.AdminMethod=STDIO +App.AdminLoginTransform=None +App.LoginTransformPrefix= +App.RCONConnectDelaySeconds=5 +App.RCONConnectRetrySeconds=5 +App.RCONHeartbeatMinutes=0 +App.RCONHeartbeatCommand=ping +App.TelnetLoginFormat=login {0} +App.UpdateSources=@IncludeJson[call-of-dutymw2updates.json] +App.PreStartStages=[] +App.ForceUpdate=False +App.ForceUpdateReason= +App.Compatibility=None +App.SteamUpdateAnonymousLogin=False +App.SteamForceLoginPrompt=False +App.RapidStartup=False +App.MonitorChildProcess=True +App.DumpFullChildProcessTree=False +App.MonitorChildProcessWaitMs=1000 +App.MonitorChildProcessName=iw4x.exe +App.SupportsUniversalSleep=True +App.WakeupMode=Any +App.ApplicationReadyMode=RegexMatch +App.TemplateMatchRegex={{(\$?[\w]+)}} +Console.FilterMatchRegex= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=^(WARNING|ERROR): Shader.+$ +Console.AppReadyRegex=^Got \d+ names from the master server$ +Console.UserJoinRegex=^Registering xuid (?.+?) at slot \d+ in .*$ +Console.UserLeaveRegex=^Removing xuid (?.+?) \(clientNum \d+\) from session$ +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/call-of-dutymw2config.json b/call-of-dutymw2config.json new file mode 100644 index 0000000..d3c519e --- /dev/null +++ b/call-of-dutymw2config.json @@ -0,0 +1,608 @@ +[ + { + "DisplayName":"Game Port", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$GamePort", + "InputType":"number", + "Hidden":true, + "ParamFieldName":"net_port", + "EnumValues":{} + }, + { + "DisplayName":"IP Binding", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$ApplicationIPBinding", + "InputType":"number", + "Hidden":true, + "ParamFieldName":"net_ip", + "EnumValues":{} + }, + { + "DisplayName":"Enable Log File", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"logfile", + "InputType":"number", + "Hidden":true, + "ParamFieldName":"logfile", + "DefaultValue":"2", + "EnumValues":{} + }, + { + "DisplayName":"Continuous Log", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"g_logSync", + "InputType":"number", + "Hidden":true, + "ParamFieldName":"g_logSync", + "DefaultValue":"1", + "EnumValues":{} + }, + { + "DisplayName":"Log File Name", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"g_log", + "InputType":"text", + "Hidden":true, + "ParamFieldName":"g_log", + "DefaultValue":"logs/games_mp.log", + "EnumValues":{} + }, + { + "DisplayName":"Log Filter", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"com_logFilter", + "InputType":"number", + "Hidden":true, + "ParamFieldName":"com_logFilter", + "DefaultValue":"1", + "EnumValues":{} + }, + { + "DisplayName":"Disable Lobby Server", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"party_enable", + "InputType":"text", + "Hidden":true, + "ParamFieldName":"party_enable", + "DefaultValue":"0", + "EnumValues":{} + }, + { + "DisplayName":"Server Name", + "Category":"Server Settings", + "Description":"Sets the name of the server. Colour codes can be used: ^0=Black, ^1=Red, ^2=Green, ^3=Yellow, ^4=Blue, ^5=Cyan, ^6=Pink, ^7=White, ^8=Team Colours, ^9=Grey, ^:=Rainbow", + "Keywords":"server,name,sv_hostname", + "FieldName":"sv_hostname", + "InputType":"text", + "ParamFieldName":"sv_hostname", + "DefaultValue":"^1AMP Hosted CODMW2 Server", + "EnumValues":{} + }, + { + "DisplayName":"Message Of The Day", + "Category":"Server Settings", + "Description":"Sets a custom message of the day (MOTD) displayed when players join. Colour codes can also be used, as per the Server Name. Blank = default intel messages", + "Keywords":"message,motd,sv_motd", + "FieldName":"sv_motd", + "InputType":"text", + "ParamFieldName":"sv_motd", + "DefaultValue":"^4Welcome to CODMW2!", + "EnumValues":{} + }, + { + "DisplayName":"Enable Private LAN Party Mode", + "Category":"Server Settings", + "Description":"If enabled, the server will be unlisted publicly and added to the local serverlist only. Otherwise, heartbeats will be sent to the online serverlist", + "Keywords":"public,online,private,lan,party,sv_lanonly", + "FieldName":"sv_lanonly", + "InputType":"checkbox", + "ParamFieldName":"sv_lanonly", + "IncludeInCommandLine":true, + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Internet/LAN Server", + "Category":"Server Settings", + "Description":"If enabled, the server will be started as an internet server. Otherwise, it will be started as a LAN server", + "Keywords":"lan,internet,dedicated", + "FieldName":"dedicated", + "InputType":"checkbox", + "ParamFieldName":"dedicated", + "IncludeInCommandLine":true, + "DefaultValue":"2", + "EnumValues":{ + "False":"1", + "True":"2" + } + }, + { + "DisplayName":"Server Admin Username", + "Category":"Server Settings", + "Description":"Sets the admin username for administrative purposes", + "Keywords":"admin,username,_Admin", + "FieldName":"_Admin", + "InputType":"text", + "ParamFieldName":"_Admin", + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Server Admin Email Address", + "Category":"Server Settings", + "Description":"Sets the email address for the server admin for administrative purposes", + "Keywords":"email,address,_Email", + "FieldName":"_Email", + "InputType":"text", + "ParamFieldName":"_Email", + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Server Admin Website", + "Category":"Server Settings", + "Description":"Sets the URL for the server admin's website", + "Keywords":"website,url,_Website", + "FieldName":"_Website", + "InputType":"url", + "ParamFieldName":"_Website", + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"Server Location", + "Category":"Server Settings", + "Description":"Sets the server location that is displayed in the server information", + "Keywords":"location,_Location", + "FieldName":"_Location", + "InputType":"text", + "ParamFieldName":"_Location", + "DefaultValue":"Earth", + "Placeholder":"Earth", + "EnumValues":{} + }, + { + "DisplayName":"Server Password", + "Category":"Server Settings", + "Description":"Sets the password to join the server", + "Keywords":"password,g_password", + "FieldName":"g_password", + "InputType":"password", + "ParamFieldName":"g_password", + "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,rcon_password", + "FieldName":"rcon_password", + "InputType":"password", + "ParamFieldName":"rcon_password", + "DefaultValue":"", + "EnumValues":{} + }, + { + "DisplayName":"RCON Timeout", + "Category":"Server Settings", + "Description":"Sets the minimum allowed interval between RCON messages per IP address", + "Keywords":"rcon,interval,timeout,rcon_timeout", + "FieldName":"rcon_timeout", + "InputType":"number", + "ParamFieldName":"rcon_timeout", + "DefaultValue":"100", + "Placeholder":"100", + "EnumValues":{} + }, + { + "DisplayName":"Map Rotation List", + "Category":"Server Settings", + "Description":"Sets the map list to use for map rotations for the server. Each entry must be in the format: map . To mix gametypes, use the format: gametype map . See userraw/server.cfg for mapnames", + "Keywords":"map,rotation,list,sv_maprotation", + "FieldName":"sv_maprotation", + "InputType":"Textarea", + "ParamFieldName":"sv_maprotation", + "DefaultValue":"map mp_highrise map mp_terminal map mp_firingrange map mp_trailerpark map mp_boneyard map mp_quarry map mp_killhouse map mp_rundown map mp_rust_long map mp_nightshift map mp_afghan map mp_abandon map mp_estate_tropical map mp_crash_tropical map mp_bloc_sh map mp_checkpoint map mp_invasion map mp_storm_spring map mp_fav_tropical map mp_rust map mp_nuked map mp_shipment map mp_strike map mp_cargoship_sh map co_hunted map mp_underpass map oilrig map mp_cross_fire map mp_brecourt map mp_crash map mp_fuel2 map mp_cargoship map mp_vacant map mp_subbase map mp_storm map mp_complex map mp_favela map mp_shipment map mp_derail map mp_compact map mp_overgrown map mp_estate map mp_derail map mp_shipment_long", + "Placeholder":"map mp_highrise map mp_terminal map mp_firingrange map mp_trailerpark map mp_boneyard map mp_quarry map mp_killhouse map mp_rundown map mp_rust_long map mp_nightshift map mp_afghan map mp_abandon map mp_estate_tropical map mp_crash_tropical map mp_bloc_sh map mp_checkpoint map mp_invasion map mp_storm_spring map mp_fav_tropical map mp_rust map mp_nuked map mp_shipment map mp_strike map mp_cargoship_sh map co_hunted map mp_underpass map oilrig map mp_cross_fire map mp_brecourt map mp_crash map mp_fuel2 map mp_cargoship map mp_vacant map mp_subbase map mp_storm map mp_complex map mp_favela map mp_shipment map mp_derail map mp_compact map mp_overgrown map mp_estate map mp_derail map mp_shipment_long", + "EnumValues":{} + }, + { + "DisplayName":"Randomise Map Rotation", + "Category":"Server Settings", + "Description":"If set, the loading order of the Map Rotation List maps will be randomised", + "Keywords":"map,rotation,random,randomise,randomize,sv_randomMapRotation", + "FieldName":"sv_randomMapRotation", + "InputType":"checkbox", + "ParamFieldName":"sv_randomMapRotation", + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Default Gametype", + "Category":"Server Settings", + "Description":"Sets the default gametype in case the Map Rotation List does not specify gametypes. Settings for each gametype can be set in userraw/server.cfg", + "Keywords":"game,type,g_gametype", + "FieldName":"g_gametype", + "InputType":"enum", + "ParamFieldName":"g_gametype", + "DefaultValue":"war", + "EnumValues":{ + "war":"Team Deathmatch (default)", + "dm":"Free-for-all", + "dom":"Domination", + "koth":"King of the Hill / Headquarters", + "sab":"Sabotage", + "sd":"Search and Destroy", + "arena":"Arena", + "dd":"Demolition", + "ctf":"Capture the Flag", + "oneflag":"One-Flag CTF", + "gtnw":"Global Thermo-Nuclear War" + } + }, + { + "DisplayName":"Load Mod", + "Category":"Server Settings", + "Description":"Sets the mod to load when starting the server, based on the path to the mod in the mods directory", + "Keywords":"mods,fs_game", + "FieldName":"fs_game", + "InputType":"text", + "ParamFieldName":"fs_game", + "DefaultValue":"", + "Placeholder":"mods/bots", + "EnumValues":{} + }, + { + "DisplayName":"Player Limit", + "Category":"Server Settings", + "Description":"Sets the maximum number of players allowed on the server", + "Keywords":"max,players,limit", + "FieldName":"$MaxUsers", + "InputType":"number", + "MinValue":"1", + "ParamFieldName":"sv_maxclients", + "DefaultValue":"18", + "Placeholder":"18", + "EnumValues":{} + }, + { + "DisplayName":"Player Limit", + "Category":"Server Settings", + "Description":"", + "Keywords":"", + "FieldName":"$MaxUsers", + "InputType":"number", + "Hidden":true, + "ParamFieldName":"party_maxplayers", + "EnumValues":{} + }, + { + "DisplayName":"Maximum Ping", + "Category":"Server Settings", + "Description":"Sets the maximum ping permitted for a player to be allowed to join. If a custom DLC reports the 'server is for low ping players only', set to 0", + "Keywords":"maximum,ping,sv_maxPing", + "FieldName":"sv_maxPing", + "InputType":"number", + "MinValue":"0", + "MaxValue":"1000", + "ParamFieldName":"sv_maxPing", + "DefaultValue":"0", + "Placeholder":"0", + "Suffix":"milliseconds", + "EnumValues":{} + }, + { + "DisplayName":"Client Timeout Period", + "Category":"Server Settings", + "Description":"Sets the time before the server will kick a client if no response is sent to the server", + "Keywords":"timeout,sv_timeout", + "FieldName":"sv_timeout", + "InputType":"number", + "MinValue":"0", + "MaxValue":"1800", + "ParamFieldName":"sv_timeout", + "DefaultValue":"20", + "Placeholder":"20", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Player Inactivity Kick Period", + "Category":"Server Settings", + "Description":"Sets the time before the server will kick a player for inactivity", + "Keywords":"inactivity,afk,period,g_inactivity", + "FieldName":"g_inactivity", + "InputType":"number", + "MinValue":"0", + "ParamFieldName":"g_inactivity", + "DefaultValue":"300", + "Placehoder":"300", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Spectator Kick Period", + "Category":"Server Settings", + "Description":"Sets the time before the server will kick a spectator", + "Keywords":"inactivity,period,spectator,g_inactivitySpectator", + "FieldName":"g_inactivitySpectator", + "InputType":"number", + "MinValue":"0", + "ParamFieldName":"g_inactivitySpectator", + "DefaultValue":"500", + "Placehoder":"500", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Temporary Ban Period", + "Category":"Server Settings", + "Description":"Sets the time for a player temporary ban (on kick/tempban)", + "Keywords":"ban,period,temporary,sv_kickBanTime", + "FieldName":"sv_kickBanTime", + "InputType":"number", + "MinValue":"0", + "MaxValue":"3600", + "ParamFieldName":"sv_kickBanTime", + "DefaultValue":"3600", + "Placeholder":"3600", + "Suffix":"seconds", + "EnumValues":{} + }, + { + "DisplayName":"Security Level", + "Category":"Server Settings", + "Description":"Sets the server's security level", + "Keywords":"security,level,sv_securityLevel", + "FieldName":"sv_securityLevel", + "InputType":"number", + "MinValue":"0", + "ParamFieldName":"sv_securityLevel", + "DefaultValue":"23", + "Placeholder":"23", + "EnumValues":{} + }, + { + "DisplayName":"Enable Pure Server", + "Category":"Server Settings", + "Description":"If enabled, only clients with verified files will be able to join the server", + "Keywords":"pure,verify,sv_pure", + "FieldName":"sv_pure", + "InputType":"checkbox", + "ParamFieldName":"sv_pure", + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"XP Scaling Factor", + "Category":"Server Settings", + "Description":"Sets the XP scaling factor. DO NOT ABUSE! Warn of high XP via hostname. Don't change this unless you know what you are doing", + "Keywords":"xp,scale,scr_xpscale", + "FieldName":"scr_xpscale", + "InputType":"enum", + "ParamFieldName":"scr_xpscale", + "DefaultValue":"1", + "EnumValues":{ + "1":"No scaling (default)", + "2":"2x", + "3":"3x", + "4":"4x" + } + }, + { + "DisplayName":"Enable Voice Chat", + "Category":"Server Settings", + "Description":"If set, server voice chat will be enabled (teams only)", + "Keywords":"voice,chat,sv_voice", + "FieldName":"sv_voice", + "InputType":"checkbox", + "ParamFieldName":"sv_voice", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Voice Chat Quality", + "Category":"Server Settings", + "Description":"Sets the server voice quality level", + "Keywords":"voice,chat,quality,sv_voicequality", + "FieldName":"sv_voicequality", + "InputType":"number", + "MinValue":"0", + "MaxValue":"9", + "ParamFieldName":"sv_voicequality", + "DefaultValue":"9", + "Placeholder":"9", + "EnumValues":{} + }, + { + "DisplayName":"Disable Chat", + "Category":"Server Settings", + "Description":"If set, chat messages from clients will be disabled", + "Keywords":"disable,chat,messages,sv_disableChat", + "FieldName":"sv_disableChat", + "InputType":"checkbox", + "ParamFieldName":"sv_disableChat", + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Allow Download From Web", + "Category":"Server Settings", + "Description":"If set, clients will be allowed to download maps and mods from a different server instead of the game server", + "Keywords":"allow,download,content,maps,mods,sv_wwwDownload", + "FieldName":"sv_wwwDownload", + "InputType":"checkbox", + "ParamFieldName":"sv_wwwDownload", + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Web Download URL", + "Category":"Server Settings", + "Description":"Sets the http URL to a usermaps and mods folder on a web server for clients to download from. Note that https does NOT work!", + "Keywords":"download,url,sv_wwwBaseUrl", + "FieldName":"sv_wwwBaseUrl", + "InputType":"url", + "ParamFieldName":"sv_wwwBaseUrl", + "DefaultValue":"", + "Placeholder":"http://example.com", + "EnumValues":{} + }, + { + "DisplayName":"Enable Flood Protection", + "Category":"Server Settings", + "Description":"If enabled, chat spam protection applies. Should be enabled on non-password-protected public servers", + "Keywords":"flood,protection,sv_floodProtect", + "FieldName":"sv_floodProtect", + "InputType":"checkbox", + "ParamFieldName":"sv_floodProtect", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Reconnect Limit", + "Category":"Server Settings", + "Description":"Sets the number of times a player can reconnect after disconnection", + "Keywords":"reconnect,limit,sv_reconnectlimit", + "FieldName":"sv_reconnectlimit", + "InputType":"number", + "MinValue":"0", + "MaxValue":"1800", + "ParamFieldName":"sv_reconnectlimit", + "DefaultValue":"4", + "Placeholder":"4", + "EnumValues":{} + }, + { + "DisplayName":"Allow Voting", + "Category":"Server Settings", + "Description":"If enabled, voting will be allowed on the server", + "Keywords":"vote,voting,g_allowVote", + "FieldName":"g_allowVote", + "InputType":"checkbox", + "ParamFieldName":"g_allowVote", + "DefaultValue":"0", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Allow Client Console", + "Category":"Server Settings", + "Description":"If enabled, players will be able to access server commands", + "Keywords":"client,console,server,commands,sv_allowClientConsole", + "FieldName":"sv_allowClientConsole", + "InputType":"checkbox", + "ParamFieldName":"sv_allowClientConsole", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Server-Side Say Name", + "Category":"Server Settings", + "Description":"Sets the name that server-side 'say' commands show up as in-game", + "Keywords":"say,name,server-side,sv_sayName", + "FieldName":"sv_sayName", + "InputType":"text", + "ParamFieldName":"sv_sayName", + "DefaultValue":"^7Console", + "Placeholder":"^7Console", + "EnumValues":{} + }, + { + "DisplayName":"Randomise Bot Names", + "Category":"Server Settings", + "Description":"If enabled, the names of bots will be randomised", + "Keywords":"random,bot,names,sv_randomBotNames", + "FieldName":"sv_randomBotNames", + "InputType":"checkbox", + "ParamFieldName":"sv_randomBotNames", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Replace Bots", + "Category":"Server Settings", + "Description":"If enabled, test clients will be replaced by connecting players when the server is full", + "Keywords":"replace,bots,test,clients,sv_replaceBots", + "FieldName":"sv_replaceBots", + "InputType":"checkbox", + "ParamFieldName":"sv_replaceBots", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Allow Aim Assist", + "Category":"Server Settings", + "Description":"If set, Controller Aim-Assist will be enabled", + "Keywords":"aim,assist,aim-assist,controller,sv_allowAimAssist, ", + "FieldName":"sv_allowAimAssist", + "InputType":"checkbox", + "ParamFieldName":"sv_allowAimAssist", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + }, + { + "DisplayName":"Allow Coloured Names", + "Category":"Server Settings", + "Description":"If enabled, colours in player names will be allowed", + "Keywords":"colored,coloured,names,sv_allowColoredNames", + "FieldName":"sv_allowColoredNames", + "InputType":"checkbox", + "ParamFieldName":"sv_allowColoredNames", + "DefaultValue":"1", + "EnumValues":{ + "False":"0", + "True":"1" + } + } +] diff --git a/call-of-dutymw2metaconfig.json b/call-of-dutymw2metaconfig.json new file mode 100644 index 0000000..c4a85b8 --- /dev/null +++ b/call-of-dutymw2metaconfig.json @@ -0,0 +1,9 @@ +[ + { + "ConfigFile":"userraw/server.cfg", + "AutoMap":true, + "ConfigType":"kvp", + "ConfigFormat":"set {0} \"{1}\"", + "ConfigFormatRegex":"^set (?.+?) \"?(?.*?)\"?$" + } +] \ No newline at end of file diff --git a/call-of-dutymw2server.cfg b/call-of-dutymw2server.cfg new file mode 100644 index 0000000..5084ac3 --- /dev/null +++ b/call-of-dutymw2server.cfg @@ -0,0 +1,464 @@ +////////////////////////////////////////////////// +/// IW4x Server Configuration file // +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +// AMP CONTROLLED SETTINGS // +////////////////////////////////////////////////// + +set sv_hostname "^1AMP Hosted CODMW2 Server" +set sv_motd "4Welcome to CODMW2!" +set dedicated "2" +set g_password "" +set rcon_password "" +set rcon_timeout "100" +set sv_maprotation "map mp_highrise map mp_terminal map mp_firingrange map mp_trailerpark map mp_boneyard map mp_quarry map mp_killhouse map mp_rundown map mp_rust_long map mp_nightshift map mp_afghan map mp_abandon map mp_estate_tropical map mp_crash_tropical map mp_bloc_sh map mp_checkpoint map mp_invasion map mp_storm_spring map mp_fav_tropical map mp_rust map mp_nuked map mp_shipment map mp_strike map mp_cargoship_sh map co_hunted map mp_underpass map oilrig map mp_cross_fire map mp_brecourt map mp_crash map mp_fuel2 map mp_cargoship map mp_vacant map mp_subbase map mp_storm map mp_complex map mp_favela map mp_shipment map mp_derail map mp_compact map mp_overgrown map mp_estate map mp_derail map mp_shipment_long" +set sv_randomMapRotation "0" +set g_gametype "war" +set sv_maxclients "18" +set party_maxplayers "18" +set sv_voice "1" +set sv_voicequality "9" +set sv_maxPing "0" +set sv_timeout "20" +set g_inactivity "300" +set g_inactivitySpectator "500" +set sv_kickBanTime "3600" +set sv_floodProtect "1" +set sv_reconnectlimit "4" +set logfile "2" +set g_logSync "1" +set g_log "logs/games_mp.log" +set com_logFilter "1" +set sv_securityLevel "23" +set g_allowVote "0" +set sv_allowClientConsole "1" +set sv_pure "0" +set sv_sayName "^7Console" +set sv_randomBotNames "1" +set sv_replaceBots "1" +set party_enable "0" +set sv_allowAimAssist "1" +set sv_allowColoredNames "1" +set sv_disableChat "0" +set sv_wwwDownload "0" +set sv_wwwBaseUrl "" +set _Admin "" +set _Email "" +set _Website "" +set _Location "Earth" +set scr_xpscale "1" + +////////////////////////////////////////////////// +// OTHER SETTINGS // +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +// NON-GAMEPLAY CONFIGURATION // +////////////////////////////////////////////////// + +set sv_customTextColor "" // custom color for ^; + +////////////////////////////////////////////////// +// BASE GAME CONFIGURATION // +////////////////////////////////////////////////// +// // +// war - Team Deathmatch // +// dm - Free-for-all // +// dom - Domination // +// koth - Headquarters // +// sab - Sabotage // +// sd - Search and Destroy // +// arena - Arena // +// dd - Demolition // +// ctf - Capture the Flag // +// oneflag - One-Flag CTF // +// gtnw - Global Thermo-Nuclear War // +// // +////////////////////////////////////////////////// + +set scr_player_forcerespawn "1" // Players respawn automatically after being fragged +set scr_thirdperson "0" // third-person mode +set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards +set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters +set scr_hardpoint_allowuav "1" // Allow UAV +set scr_hardpoint_allowartillery "1" // Allow Airstrikes +set scr_game_perks "1" // Allow players to have perks +set scr_game_allowkillcam "1" // Allow Killcam. +set scr_nukeTimer "10" // Timer when nuke goes off +set scr_diehard "0" // die-hard mode. Teammates will have to revive each other. +set scr_teambalance "1" // Enable or Disable auto balance. +set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free +set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide. +set scr_player_sprinttime "4" // Sprint time, duration a player can run. +set scr_game_killstreakdelay "8" // Delay your killstreaks +set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke +set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only. +set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy). +set bg_rocketJump "0" // Enable CoD4 Rocket Jumps. +set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket. +set bg_climbAnything "0" // Treat any surface as a ladder. +set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double). +set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces). +set bg_disableLandingSlowdown "0" // Toggle landing slowdown. +set bg_bunnyHopAuto "0" // Constantly jump when holding space. +set bg_playerCollision "1" // Push intersecting players away from each other. +set bg_playerEjection "1" // Push intersecting players away from each other. +set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles). +set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position. +set bg_lean "1" // Enable CoD4 leaning. + +////////////////////////////////////////////////// +// XP BOOST CONFIGURATION // +////////////////////////////////////////////////// +// uncomment below commands for XP config // +// by removing the // before each set dvar. // +// Change "war" gametype to your liking. // +// // +// DO NOT ABUSE! Some people like to rank. // +// DON'T BE A DICK! Warn HIGH XP via hostname. // +// Don't know what you doing? Don't touch it! // +////////////////////////////////////////////////// + +//set scr_war_score_kill "0" // Amount of XP by each kill. +//set scr_war_score_headshot "0" // Amount of XP by each headshot. +//set scr_war_score_death "0" // Amount of XP by each death. +//set scr_war_score_suicide "0" // Amount of XP by each suicide. +//set scr_war_score_assist "0" // Amount of XP by each assist. + +////////////////////////////////////////////////// +// HARDCORE CONFIGURATION // +////////////////////////////////////////////////// +// uncomment below commands for some hardcore // +// by removing the // before each set dvar. // +////////////////////////////////////////////////// + +// set g_hardcore "1" // Enable hardcore mode +// set scr_hardcore "1" // Enable hardcore mode again... +// set ui_hud_hardcore "1" // Removes Heads up display which can be used both regular and HC +// set scr_game_deathpointloss "0" // Points Loss on death XP. +// set scr_game_onlyheadshots "0" // Enable/Disable Only Headshots mode. You can only kill players by taking headshots. +// set scr_player_maxhealth "30" // Percent of Health players will have on Respawn. (100 is normal. 30 is hardcore) +// set scr_team_fftype "1" // Enable or Disable Friendly Fire. (1 on, 2 reflect, 3 shared) +// set scr_player_healthregentime "0" // Time it takes you to recover damage. (5 is normal, 0 is hardcore) +// set scr_team_kickteamkillers "5" // Anyone who team kills, gets kicked automatically if you enable this feature. +// set scr_team_teamkillspawndelay "20" // Team Killer gets a respawn penalty of specified seconds (20). + + +////////////////////////////////////////////////// +// AIRDROP CONFIGURATION // +////////////////////////////////////////////////// +// uncomment below commands for airdrop config // +// by removing the // before each set dvar. // +// // +// Weight (1->1000) // +// Selection is weighted random // +// higher weights increase selection chance // +////////////////////////////////////////////////// + +// set scr_airdrop_ac130 "3" +// set scr_airdrop_ammo "17" +// set scr_airdrop_counter_uav "15" +// set scr_airdrop_emp "1" +// set scr_airdrop_harrier_airstrike "7" +// set scr_airdrop_helicopter "7" +// set scr_airdrop_helicopter_flares "5" +// set scr_airdrop_helicopter_minigun "3" +// set scr_airdrop_nuke "0" +// set scr_airdrop_precision_airstrike "11" +// set scr_airdrop_predator_missile "12" +// set scr_airdrop_sentry "12" +// set scr_airdrop_stealth_airstrike "5" +// set scr_airdrop_uav "17" + + +////////////////////////////////////////////////// +// EMERGENCY AIRDROP CONFIGURATION // +////////////////////////////////////////////////// +// uncomment below commands for airdrop config // +// by removing the // before each set dvar. // +// // +// Weight (1->1000) // +// Selection is weighted random // +// higher weights increase selection chance // +////////////////////////////////////////////////// + +// set scr_airdrop_mega_ac130 "2" +// set scr_airdrop_mega_ammo "12" +// set scr_airdrop_mega_counter_uav "16" +// set scr_airdrop_mega_emp "0" +// set scr_airdrop_mega_harrier_airstrike "5" +// set scr_airdrop_mega_helicopter "5" +// set scr_airdrop_mega_helicopter_flares "3" +// set scr_airdrop_mega_helicopter_minigun "2" +// set scr_airdrop_mega_nuke "0" +// set scr_airdrop_mega_precision_airstrike "10" +// set scr_airdrop_mega_predator_missile "14" +// set scr_airdrop_mega_sentry "16" +// set scr_airdrop_mega_stealth_airstrike "3" +// set scr_airdrop_mega_uav "12" + + +////////////////////////////////////////////////// +// FREE FOR ALL GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dm_scorelimit "1500" // Score limit to win the game. +set scr_dm_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_dm_playerrespawndelay "-1" // How long player will wait until respawn. +set scr_dm_numlives "0" // Number of lives per player. 0 for unlimited. +set scr_dm_roundlimit "1" // Rounds per game. +set scr_dm_winlimit "1" // amount of wins needed to win a round-based game +set scr_dm_promode "0" + +////////////////////////////////////////////////// +// TEAM DEATHMATCH GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_war_scorelimit "25000" // Score limit to win the game. +set scr_war_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_war_playerrespawndelay "-1" // How long player will wait until respawn. +set scr_war_waverespawndelay "0" // Duration is seconds before the first respawn in each round. +set scr_war_numlives "0" // Number of lives per player 0 for unlimited. +set scr_war_roundlimit "1" // Rounds per game. +set scr_war_winlimit "1" // amount of wins needed to win a round-based game +set scr_war_promode "0" + +////////////////////////////////////////////////// +// DOMINATION GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dom_scorelimit "200" // Score limit to win the game. +set scr_dom_timelimit "0" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_dom_playerrespawndelay "0" // How long player will wait until respawn. +set scr_dom_waverespawndelay "0" // Duration is seconds before the first respawn in each round. +set scr_dom_numlives "0" // Number of lives per player per game. 0 is unlimited. +set scr_dom_roundlimit "1" // Rounds per game +set scr_dom_winlimit "1" // amount of wins needed to win a round-based game +set scr_dom_promode "0" + +////////////////////////////////////////////////// +// DEMOLITION GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dd_scorelimit "1" // Score limit needed to win. +set scr_dd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_dd_playerrespawndelay "0" // How long player will wait until respawn. +set scr_dd_waverespawndelay "0" // Duration is seconds before the first respawn in each round. +set scr_dd_numlives "0" // Number of lives per player per game. 0 is unlimited. +set scr_dd_roundswitch "1" // Rounds before the teams switch the sides. +set scr_dd_bombtimer "45" // Time the bomb takes to detonate. +set scr_dd_defusetime "5" // Time taken to defuse the bomb. +set scr_dd_planttime "5" // Time it takes to plant a bomb in seconds. +set scr_dd_roundlimit "3" // Rounds the game is limited to, if there are no winners. +set scr_dd_promode "0" + +////////////////////////////////////////////////// +// SEARCH AND DESTROY GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_sd_scorelimit "1" // Score limit required to win the game. +set scr_sd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_sd_playerrespawndelay "0" // How long player will wait until respawn. +set scr_sd_waverespawndelay "0" // Duration is seconds before the first respawn in each round. +set scr_sd_numlives "1" // Number of lives per player per game. +set scr_sd_roundlimit "0" // Rounds the game is limited to 0 for unlimited. +set scr_sd_winlimit "4" // amount of wins needed to win a round-based game. +set scr_sd_roundswitch "3" // after X rounds, switch sides. +set scr_sd_bombtimer "45" // Time taken for the bomb to detonate. +set scr_sd_defusetime "5" // Time taken to defuse the bomb. +set scr_sd_multibomb "0" // allow multiple people to 'have the bomb'. +set scr_sd_planttime "5" // How long will it take player to 'plant the bomb'. +set scr_sd_promode "0" + + +////////////////////////////////////////////////// +// SABOTAGE GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_sab_scorelimit "0" // Score limit to win the match. +set scr_sab_timelimit "20" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_sab_bombtimer "30" // Duration in seconds the bomb takes to detonate. +set scr_sab_defusetime "5" // Time taken to defuse the bomb. +set scr_sab_hotpotato "0" // One bomb that the teams must fight over. One defending and one have to plant at the site. +set scr_sab_numlives "0" // Number of lives per player per game. +set scr_sab_planttime "2.5" // Time taken to plant the bomb. +set scr_sab_playerrespawndelay "7.5" // Time before respawn. +set scr_sab_roundlimit "1" // Rounds per game. +set scr_sab_roundswitch "1" // Rounds needed to be played before the teams switch sides. +set scr_sab_waverespawndelay "0" // Time delay for first respawn before the game. +set scr_sab_promode "0" + + +////////////////////////////////////////////////// +// CAPTURE THE FLAG GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_ctf_scorelimit "0" // Target score before the round ends. +set scr_ctf_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_ctf_numlives "0" // Number of lives per player 0 for unlimited. +set scr_ctf_halftime "1" // Half-Time +set scr_ctf_roundlimit "1" // How many rounds match would last. +set scr_ctf_returntime "30" // How many seconds before flag returns to base without nobody touching it. +set scr_ctf_playerrespawndelay "0" // Respawn wait in seconds. +set scr_ctf_waverespawndelay "10" // Time delay for first respawn before the game. +set scr_ctf_promode "0" + +////////////////////////////////////////////////// +// ONE FLAG GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_oneflag_scorelimit "1" // Target score before the round ends. +set scr_oneflag_timelimit "3" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_oneflag_numlives "0" // number of lives per player 0 for unlimited. +set scr_oneflag_playerrespawndelay "0" // Respawn wait in seconds. +set scr_oneflag_roundlimit "1" // How many rounds match would last. +set scr_oneflag_roundswitch "1" // Rounds before the teams switch sides. +set scr_oneflag_waverespawndelay "0" // First respawn delay for each round. +set scr_oneflag_promode "0" + +////////////////////////////////////////////////// +// HEADQUARTERS GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_koth_scorelimit "250" // Score limit to win the game. +set scr_koth_timelimit "15" // Duration in minutes the game will continue if the score isn't reached. +set scr_koth_numlives "0" // Number of lives per game. 0 for unlimited. +set scr_koth_playerrespawndelay "0" // Players respawn wait. +set scr_koth_roundlimit "1" // Rounds to be played. +set scr_koth_roundswitch "1" // Rounds to be played before teams switch sides. +set scr_koth_winlimit "1" // rounds per game +set scr_koth_waverespawndelay "0" // First respawn delay for each round. +set scr_koth_promode "0" + +////////////////////////////////////////////////// +// ARENA GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_arena_scorelimit "1" // Score limit to win the game. +set scr_arena_timelimit "2.5" // Duration in minutes the game will continue if the score isn't reached. +set scr_arena_numlives "1" // Number of lives per game 0 for unlimited. +set scr_arena_roundlimit "0" // Rounds to be played. +set scr_arena_roundswitch "3" // Rounds before the teams switch sides. +set scr_arena_winlimit "4" // rounds per game +set scr_arena_promode "0" + + +////////////////////////////////////////////////// +// GLOBAL THERMONUCLEAR WAR GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_gtnw_scorelimit "101" // Score limit to win the game. +set scr_gtnw_timelimit "10" // Duration in minutes the game will continue if the score isn't reached. +set scr_gtnw_numlives "0" // Number of lives per game 0 for unlimited. +set scr_gtnw_playerrespawndelay "0" // Players respawn wait. +set scr_gtnw_roundlimit "1" // Rounds to be played. +set scr_gtnw_roundswitch "0" // Rounds before the teams switch sides. +set scr_gtnw_winlimit "1" // rounds per game +set scr_gtnw_waverespawndelay "0" // First respawn delay for each round. +set scr_gtnw_promode "0" + + +////////////////////////////////////////////////// +// MAP SHORT NAMES ROTATION LIST // +////////////////////////////////////////////////// +// // +// mp_afghan - Afghan // +// mp_derail - Derail // +// mp_estate - Estate // +// mp_favela - Favela // +// mp_highrise - Highrise // +// mp_invasion - Invasion // +// mp_checkpoint - Karachi // +// mp_quarry - Quarry // +// mp_rundown - Rundown // +// mp_rust - Rust // +// mp_boneyard - Scrapyard // +// mp_nightshift - Skidrow // +// mp_subbase - Sub Base // +// mp_terminal - Terminal // +// mp_underpass - Underpass // +// mp_brecourt - Wasteland // +// // +//// DLC1 STIMULUS /////////////////////////////// +// // +// mp_complex - Bailout // +// mp_crash - Crash // +// mp_overgrown - Overgrown // +// mp_compact - Salvage // +// mp_storm - Storm // +// // +//// DLC2 RESURGENCE ///////////////////////////// +// // +// mp_abandon - Carnival // +// mp_fuel2 - Fuel // +// mp_strike - Strike // +// mp_trailerpark - Trailer Park // +// mp_vacant - Vacant // +// // +//// DLC3 NUKETOWN /////////////////////////////// +// // +// mp_nuked - Nuketown // +// // +/// DLC4 CLASSICS 1 ////////////////////////////// +// // +// mp_cross_fire - Crossfire // +// mp_bloc - Bloc // +// mp_cargoship - Cargoship // +// // +/// DLC5 CLASSICS 2 ////////////////////////////// +// // +// mp_killhouse - Killhouse // +// mp_bog_sh - Bog // +// // +/// DLC6 FREIGHTER /////////////////////////////// +// // +// mp_cargoship_sh - Freighter // +// // +/// DLC7 RESURRECTION //////////////////////////// +// // +// mp_shipment - Shipment // +// mp_shipment_long - Long:Shipment // +// mp_rust_long - Long: Rust // +// mp_firingrange - Firing Range // +// // +/// DLC8 RECYCLED //////////////////////////////// +// // +// mp_storm_spring - Chemical Plant // +// mp_fav_tropical - Tropical: Favela // +// mp_estate_tropical - Tropical: Estate // +// mp_crash_tropical - Tropical: Crash // +// mp_bloc_sh - Forgotten City // +// // +/// DLC9 CLASSICS 3 ////////////////////////////// +// // +// mp_backlot - Backlot // +// mp_broadcast - Broadcast // +// mp_carentan - Chinatown // +// mp_citystreets - District // +// mp_convoy - Ambush // +// mp_countdown - Countdown // +// mp_crash_snow - Winter Crash // +// mp_farm - Downpour // +// mp_pipeline - Pipeline // +// mp_showdown - Showdown // +// // +/// DLC10 MW3 //////////////////////////////////// +// // +// mp_dome - Dome // +// mp_hardhat - Hardhat // +// mp_paris - Resistance // +// mp_seatown - Seatown // +// mp_bravo - Mission // +// mp_underground - Underground // +// mp_plaza2 - Arkaden // +// mp_village - Village // +// mp_alpha - Lockdown // +// // +/// SP MAPS to MP //////////////////////////////// +// // +// oilrig - Oilrig // +// iw4_credits - Test map // +// co_hunted - Village // +// // +////////////////////////////////////////////////// diff --git a/call-of-dutymw2updates.json b/call-of-dutymw2updates.json new file mode 100644 index 0000000..e2c0acd --- /dev/null +++ b/call-of-dutymw2updates.json @@ -0,0 +1,72 @@ +[ + { + "UpdateStageName":"Userraw Directory Creation", + "UpdateSourcePlatform":"All", + "UpdateSource":"CreateDirectory", + "UpdateSourceArgs":"{{$FullBaseDir}}userraw" + }, + { + "UpdateStageName":"Mods Directory Creation", + "UpdateSourcePlatform":"All", + "UpdateSource":"CreateDirectory", + "UpdateSourceArgs":"{{$FullBaseDir}}mods" + }, + { + "UpdateStageName":"SteamCMD Game Download", + "UpdateSourcePlatform":"All", + "UpdateSource":"SteamCMD", + "UpdateSourceData":"10190", + "UpdateSourceArgs":"10190", + "ForceDownloadPlatform":"Windows" + }, + { + "UpdateStageName":"AlterWare Launcher Download", + "UpdateSourcePlatform":"Windows", + "UpdateSource":"GithubRelease", + "UpdateSourceArgs":"mxve/alterware-launcher", + "UpdateSourceData":"alterware-launcher.exe", + "UpdateSourceTarget":"{{$FullBaseDir}}", + "OverwriteExistingFiles":true + }, + { + "UpdateStageName":"AlterWare Launcher Download", + "UpdateSourcePlatform":"Linux", + "UpdateSource":"GithubRelease", + "UpdateSourceArgs":"mxve/alterware-launcher", + "UpdateSourceData":"alterware-launcher-x86_64-unknown-linux-gnu.tar.gz", + "UpdateSourceTarget":"{{$FullBaseDir}}", + "UnzipUpdateSource":true, + "OverwriteExistingFiles":true, + "DeleteAfterExtract":true + }, + { + "UpdateStageName":"Client Installation", + "UpdateSourcePlatform":"Windows", + "UpdateSource":"Executable", + "UpdateSourceData":"cmd.exe", + "UpdateSourceArgs":"/C cd call-of-dutymw2\\10190 && .\\alterware-launcher.exe iw4x --update --skip-launcher-update --bonus --force" + }, + { + "UpdateStageName":"Client Installation", + "UpdateSourcePlatform":"Linux", + "UpdateSource":"Executable", + "UpdateSourceData":"/bin/bash", + "UpdateSourceArgs":"-c 'cd ./call-of-dutymw2/10190 && ./alterware-launcher iw4x --update --skip-launcher-update --bonus --force'" + }, + { + "UpdateStageName":"Config File Download", + "UpdateSourcePlatform":"All", + "UpdateSource":"FetchURL", + "UpdateSourceData":"https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/call-of-dutymw2server.cfg", + "UpdateSourceArgs":"server.cfg", + "UpdateSourceTarget":"{{$FullBaseDir}}userraw", + "OverwriteExistingFiles":false + }, + { + "UpdateStageName":"Initialise Wine", + "UpdateSourcePlatform":"Linux", + "UpdateSource":"Executable", + "UpdateSourceData":"/bin/bash", + "UpdateSourceArgs":"-c 'WINEPREFIX=\"{{$FullRootDir}}.wine\" WINEARCH=win32 /usr/bin/wineboot --init --update'" + } +] \ No newline at end of file