diff --git a/call-of-duty-4-modern-warfare-remasterd.kvp b/call-of-duty-4-modern-warfare-remasterd.kvp new file mode 100644 index 000000000..33ed72270 --- /dev/null +++ b/call-of-duty-4-modern-warfare-remasterd.kvp @@ -0,0 +1,85 @@ +Meta.DisplayName=Call of Duty 4 Modern Warfare Remasterd +Meta.Description=H1-Mod Dedicated Server +Meta.Arch=x86_64 +Meta.Author=Draakoor - Made with AMP Config Generator +Meta.URL=https://github.com/auroramod/h1-mod +Meta.MinAMPVersion=2.4.6.6 +Meta.SpecificDockerImage= +Meta.DockerRequired=False +Meta.ContainerPolicy=Supported +Meta.ContainerPolicyReason= +Meta.Prerequsites=[] +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$GamePort} +Meta.AppConfigId=c2950262-65cc-4f93-9524-adebb41e95fe +App.AdminMethod=QuakeRCON +App.HasReadableConsole=true +App.HasWritableConsole=true +App.DisplayName=Call of Duty 4 Modern Warfare Remasterd +App.CommandLineArgs={{$PlatformArgs}} -console -nosteam -dedicated +set net_ip "{{$ApplicationIPBinding}}" +net_port "{{$GamePort}}" +set rcon_password "{{$RemoteAdminPassword}}" +exec server.cfg +set bots_manage_fill 8 {{$FormattedArgs}} +map_rotate +App.WindowsCommandLineArgs= +App.CommandLineParameterFormat=-{0} "{1}" +App.CommandLineParameterDelimiter= +App.RapidStartup=false +App.ApplicationReadyMode=RCONConnected +App.ExitMethod=String +App.ExitString=quit +App.ExitTimeout=30 +App.ExitFile=app_exit.lck +App.ForceUpdate=False +App.SupportsLiveSettingsChanges=False +App.LiveSettingChangeCommandFormat=set {0} "{1}" +App.ApplicationIPBinding=0.0.0.0 +App.AdminPortRef=GamePort +App.UniversalSleepApplicationUDPPortRef=0 +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepSteamQueryPortRef=0 +App.MaxUsers=18 +App.UseRandomAdminPassword=False +App.RemoteAdminPassword= +App.AdminLoginTransform=None +App.RCONConnectDelaySeconds=30 +App.RCONConnectRetrySeconds=15 +App.RCONHeartbeatCommand=ping +App.RCONHeartbeatMinutes=0 +App.TelnetLoginFormat={0} +App.SteamUpdateAnonymousLogin=False +App.SteamForceLoginPrompt=False +App.SupportsUniversalSleep=False +App.WakeupMode=Any +App.TemplateMatchRegex={{(\$?[\w]+)}} +App.MonitorChildProcess=False +App.MonitorChildProcessWaitMs=1000 +App.MonitorChildProcessName= +App.Compatibility=None +App.SteamWorkshopDownloadLocation={{$FullBaseDir}}undefined +Console.FilterMatchRegex= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=(WARNING|ERROR): Shader.+ +Console.UpdateAvailableRegex=^\[\d\d:\d\d:\d\d\] \[INFO\] A new server update is available! v[\d\.]+.$ +Console.SuppressLogAtStart=False +Console.ActivateLogRegex= +Console.UserActions={} +Console.SleepMode=False +Console.SleepOnStart=False +Console.SleepDelayMinutes=5 +Console.DozeDelay=2 +Console.AutoRetryCount=5 +Console.SleepStartThresholdSeconds=25 +Console.AppReadyRegex=^$ +Console.UserJoinRegex=^$ +Console.UserLeaveRegex=^$ +Console.UserChatRegex=^$ +Meta.OS=1 +Meta.ConfigManifest=call-of-duty-4-modern-warfare-remasterdconfig.json +Meta.MetaConfigManifest=call-of-duty-4-modern-warfare-remasterdmetaconfig.json +Meta.ConfigRoot=call-of-duty-4-modern-warfare-remasterd.kvp +App.RootDir=./call-of-duty-4-modern-warfare-remasterd/ +Meta.DisplayImageSource=url:https://github.com/auroramod/h1-mod/raw/develop/assets/github/banner.png?raw=true +App.BaseDirectory=./call-of-duty-4-modern-warfare-remasterd/393100/ +App.WorkingDir=393100 +App.ExecutableWin=393100\h1-mod.exe +App.ExecutableLinux=393100/ +App.LinuxCommandLineArgs= +App.Ports=@IncludeJson[call-of-duty-4-modern-warfare-remasterdports.json] +App.UpdateSources=@IncludeJson[call-of-duty-4-modern-warfare-remasterdupdates.json] +App.EnvironmentVariables={"LD_LIBRARY_PATH": "{{$FullBaseDir}}linux64:{{$FullRootDir}}linux64:%LD_LIBRARY_PATH%", "WINEPREFIX": "{{$FullRootDir}}.wine", "WINEARCH": "win64", "WINEDEBUG": "-all"} \ No newline at end of file diff --git a/call-of-duty-4-modern-warfare-remasterdconfig.json b/call-of-duty-4-modern-warfare-remasterdconfig.json new file mode 100644 index 000000000..115fac3ee --- /dev/null +++ b/call-of-duty-4-modern-warfare-remasterdconfig.json @@ -0,0 +1,343 @@ +[ + { + "DisplayName": "Game Port", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$GamePort", + "InputType": "number", + "Hidden": true, + "ParamFieldName": "net_port", + "EnumValues": {} + }, + { + "DisplayName": "IP Binding", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$ApplicationIPBinding", + "InputType": "text", + "Hidden": true, + "ParamFieldName": "net_ip", + "EnumValues": {} + }, + { + "DisplayName": "RCON Password", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$RemoteAdminPassword", + "InputType": "password", + "Hidden": true, + "ParamFieldName": "rcon_password", + "EnumValues": {} + }, + { + "DisplayName": "Enable Log File", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "logfile", + "InputType": "number", + "Hidden": true, + "ParamFieldName": "logfile", + "DefaultValue": "2", + "EnumValues": {} + }, + { + "DisplayName": "Continuous Log", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "g_logSync", + "InputType": "number", + "Hidden": true, + "ParamFieldName": "g_logSync", + "DefaultValue": "1", + "EnumValues": {} + }, + { + "DisplayName": "Log File Name", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "g_log", + "InputType": "text", + "Hidden": true, + "ParamFieldName": "g_log", + "DefaultValue": "logs/games_mp.log", + "EnumValues": {} + }, + { + "DisplayName": "Server Name", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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 CODMWR Server", + "EnumValues": {} + }, + { + "DisplayName": "Server Password", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the password to join the server", + "Keywords": "password,g_password", + "FieldName": "g_password", + "InputType": "password", + "ParamFieldName": "g_password", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "RCON Timeout", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "gametype war map mp_backlot map mp_bloc map mp_bog map mp_cargoship map mp_citystreets map mp_convoy map mp_countdown map mp_crash map mp_crossfire map mp_farm map mp_overgrown map mp_pipeline map mp_shipment map mp_showdown map mp_strike map mp_vacant map mp_crash_snow map mp_broadcast map mp_carentan map mp_creek map mp_killhouse", + "Placeholder": "gametype war map mp_backlot map mp_bloc map mp_bog map mp_cargoship map mp_citystreets map mp_convoy map mp_countdown map mp_crash map mp_crossfire map mp_farm map mp_overgrown map mp_pipeline map mp_shipment map mp_showdown map mp_strike map mp_vacant map mp_crash_snow map mp_broadcast map mp_carentan map mp_creek map mp_killhouse", + "EnumValues": {} + }, + { + "DisplayName": "Default Gametype", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Client Timeout Period", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Temporary Ban Period", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Enable Pure Server", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Allow Download From Web", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Reconnect Limit", + "Category": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "COD 4 MW Remastered:stadia_controller", + "Subcategory": "Server:dns:1", + "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": {} + } +] \ No newline at end of file diff --git a/call-of-duty-4-modern-warfare-remasterdmetaconfig.json b/call-of-duty-4-modern-warfare-remasterdmetaconfig.json new file mode 100644 index 000000000..61067019d --- /dev/null +++ b/call-of-duty-4-modern-warfare-remasterdmetaconfig.json @@ -0,0 +1,9 @@ +[ + { + "ConfigFile": "main/server.cfg", + "ConfigType": "kvp", + "AutoMap": true, + "ConfigFormat": "set {0} \"{1}\"", + "ConfigFormatRegex": "^set (?.+?) \"?(?.*?)\"?$" + } +] \ No newline at end of file diff --git a/call-of-duty-4-modern-warfare-remasterdports.json b/call-of-duty-4-modern-warfare-remasterdports.json new file mode 100644 index 000000000..9c96d12a2 --- /dev/null +++ b/call-of-duty-4-modern-warfare-remasterdports.json @@ -0,0 +1,9 @@ +[ + { + "Protocol": "Both", + "Port": "27016", + "Name": "Game Port", + "Description": "Port used for main game traffic", + "Ref": "GamePort" + } +] \ No newline at end of file diff --git a/call-of-duty-4-modern-warfare-remasterdserver.cfg b/call-of-duty-4-modern-warfare-remasterdserver.cfg new file mode 100644 index 000000000..3593f500f --- /dev/null +++ b/call-of-duty-4-modern-warfare-remasterdserver.cfg @@ -0,0 +1,278 @@ +///////////////////////////////////////////////////////////////////////// +// Call of duty: Modern Warfare Remastered MP Dedicated Server Config // +// H1-MOD // +///////////////////////////////////////////////////////////////////////// +// This config best view with Notepad++ OR // +// other *nix compatible editors of your choice.// +////////////////////////////////////////////////// +// Remove "//" in front of lines to allow the // +// server to read them. // +// Anything after "//" is a comment. // +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +// SERVER NAME & COLORS TIPS // +////////////////////////////////////////////////// +// // +// ^1 Red // +// ^2 Green // +// ^3 yellow // +// ^4 Blue // +// ^5 Cyan // +// ^6 Pink // +// ^7 White // +// ^8 Depends on the team colors playing. // +// ^9 Dark Red // +// ^0 Black // +// ^: Rainbow // +// // +////////////////////////////////////////////////// + +set sv_hostname "H1-Mod Dedicated Server" // Sets the name of your server on the server browser +set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. Leave blank for defualt intel messages. + +////////////////////////////////////////////////// +// BASIC CONFIGURATION // +////////////////////////////////////////////////// + +set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out. +set party_maxplayers "18" // Max players in your server. (Range 2-18) +set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions +set sv_reconnectlimit "3" // How many times you can try to reconnect +set g_inactivity "420" // Time in seconds before the server will kick a user for inactivity (range 0 - 10000) +set sv_kickBanTime "3600" // Time in seconds for a player temporary ban (on kick/tempban) (range 0 - 3600) +seta g_allowVote "1" // Toggle voting for [player kick/map restart/next map] (0 or 1 (default) ) +seta g_deadChat "0" // Toggle allowing dead players to chat with living players (0 (default) or 1) + + +////////////////////////////////////////////////// +// GENERIC GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_game_disablesprint 0 // Disables the possibility of sprinting +set scr_game_forceuav 0 // Constant UAV +set scr_game_deleteturrets 0 // Disable the use of turrets +set scr_player_forcerespawn 1 // Disable auto respawn +set scr_game_onlyheadshots 0 // Only headshots are valid +set scr_thirdPerson 0 // All players play in third person +//set scr_killstreak_kills_uav 3 // Kills to get UAV +//set scr_killstreak_kills_airstrike 5 // Kills to get Airstrike +//set scr_killstreak_kills_heli 3 // Kills to get Helicopter +set scr_diehard 0 // Hardcore mode +//set scr_killcount_persists 0 // Killstreaks count persist after player died ( Need Testing! ) +set scr_game_deathpointloss 0 // Penalty when player die +set scr_game_suicidepointloss 0 // Penalty when player suicide +set scr_team_teamkillpointloss 0 // Penalty when player kill a team mate +set pm_bouncing 0 // Enable bouncing. +set pm_bouncingAllAngles 0 // Enable bouncing from all angles. +set pm_cs_strafing 0 // Enable CS like strafing. +set g_enableElevators 0 // Enable Elevators. +set jump_height 39 // The maxium height of a player's jump (0-1000) +set jump_enableFallDamage 1 // Enable/Disable fall damage. Recommend if you set a higher jump. +set g_speed 190 // Increase or decrease game speed. (0-1000) +set scr_game_perks 1 // Enable/Disable perks + +////////////////////////////////////////////////// +// 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_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_teamkillkicklimit "3" // How many times to get kick for team killling. + +////////////////////////////////////////////////// +// B3, IW4MADMIN, GAME LOG & RCON SETTINGS // +////////////////////////////////////////////////// + +set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin. +set g_logSync "1" // 0 only flush on game end, 1 flush when buffer full, 2 always flush after a write, 3 append to old logs. +set g_log "h1-mod\logs\games_mp.log" // IMPORTANT! Make sure the filename is unique for each server you clone! +set rcon_password "" // RemoteControl password, needed for most management tools like IW4MADMIN and B3. Do not skip if you installing IW4MADMIN. +set sv_sayName "^7Server^7" // name server-side 'say' commands show up as. + +////////////////////////////////////////////////// +// FREE FOR ALL GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dm_scorelimit "15" // 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 "0" // 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 + +////////////////////////////////////////////////// +// TEAM DEATHMATCH GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_war_scorelimit "75" // 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 "0" // 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 + +////////////////////////////////////////////////// +// Kill Confirmed GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_conf_scorelimit "65" // Score limit to win the game. +set scr_conf_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_conf_playerrespawndelay "0" // How long player will wait until respawn. +set scr_conf_waverespawndelay "0" // Duration is seconds before the first respawn in each round. +set scr_conf_numlives "0" // Number of lives per player 0 for unlimited. +set scr_conf_roundlimit "1" // Rounds per game. +set scr_conf_winlimit "1" // amount of wins needed to win a round-based game + +////////////////////////////////////////////////// +// 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 + +////////////////////////////////////////////////// +// SEARCH AND DESTROY GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_sd_scorelimit "1" // Score limit 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'. + +////////////////////////////////////////////////// +// 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. + +////////////////////////////////////////////////// +// CAPTURE THE FLAG GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_ctf_scorelimit "3" // Score limit to win the match. +set scr_ctf_timelimit "20" // 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 per game. +set scr_ctf_playerrespawndelay "2.5" // Time before respawn. +set scr_ctf_roundlimit "1" // Rounds per game. +set scr_ctf_waverespawndelay "0" // Time delay for first respawn before the game. + +////////////////////////////////////////////////// +// DEMOLITION GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dd_scorelimit "0" // Score limit to win the match. +set scr_dd_timelimit "20" // Duration in minutes for the game to end if the score limit isn't reached. +set scr_dd_bombtimer "45" // Duration in seconds the bomb takes to detonate. +set scr_dd_defusetime "5" // Time taken to defuse the bomb. +set scr_dd_numlives "0" // Number of lives per player per game. +set scr_dd_planttime "5" // Time taken to plant the bomb. +set scr_dd_playerrespawndelay "0" // Time before respawn. +set scr_dd_roundlimit "3" // Rounds per game. +set scr_dd_roundswitch "1" // Rounds needed to be played before the teams switch sides. +set scr_dd_waverespawndelay "0" // Time delay for first respawn before the game. + +////////////////////////////////////////////////// +// GAMETYPES LIST // +////////////////////////////////////////////////// +// // +// dm - Free-for-all // +// war - Team Deathmatch // +// sd - Search and Destroy // +// dom - Domination // +// conf - Kill Confirmed // +// sab - Sabotage // +// koth - Headquarters // +// hp - Hardpoint // +// gun - Gun Game // +// ctf - Capture The Flag // +// dd - Demolition // +// // +////////////////////////////////////////////////// + +set g_gametype "war" // Sets the defualt gametype of the server if no gametype exist on map rotation +set ui_gametype "war" + +//scr_game_hodgepodgeMode "9" // Custom Gamemodes. 2 - Slasher | 4 - Snipers only | 6-7 - RPG Only | 9 - Prophunt + +////////////////////////////////////////////////// +// MAP SHORT NAMES ROTATION LIST // +////////////////////////////////////////////////// +// // +// Ambush* - mp_convoy // +// Backlot* - mp_backlot // +// Bog* - mp_bog // +// Crash* - mp_crash // +// Crossfire* - mp_crossfire // +// District* - mp_citystreets // +// Downpour* - mp_farm // +// Overgrown - mp_overgrown // +// Shipment - mp_shipment // +// Vacant* - mp_vacant // +// Lobby Map - mp_vlobby_room // +// // +// Variety Map Pack // +// // +// Broadcast - mp_broadcast // +// Chinatown - mp_carentan // +// Countdown - mp_countdown // +// Bloc - mp_bloc // +// Creek - mp_creek // +// Killhouse - mp_killhouse // +// Pipeline* - mp_pipeline // +// Strike* - mp_strike // +// Showdown* - mp_showdown // +// Wet Work - mp_cargoship // +// // +// Event Updates // +// // +// Winter Crash - mp_crash_snow // +// Day Break - mp_farm_spring // +// Beach Bog* - mp_bog_summer // +// // +// * - Prop Hunt Maps // +// // +////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +// EXAMPLE MAP+GAMETYPES ROTATIONS // +//////////////////////////////////////////////////////////////////////// +// Single Game Mode + Maps: // +// sv_mapRotation "gametype war map mp_bog map mp_crash map mp_farm" // +// // +// Several Mix Game Modes + Maps: // +// sv_mapRotation "gametype war map mp_bog gametype dm map mp_crash" // +//////////////////////////////////////////////////////////////////////// + +set sv_maprotation "gametype war map mp_convoy map mp_backlot map mp_bog map mp_crash map mp_crossfire map mp_citystreets map mp_farm map mp_overgrown map mp_shipment map mp_vacant map mp_boardcast map mp_carentan map mp_countdown map mp_bloc map mp_creek map mp_killhouse map mp_pipeline map mp_strike map mp_showdown map mp_cargoship map mp_crash_snow map mp_farm_spring map mp_bog_summer" \ No newline at end of file diff --git a/call-of-duty-4-modern-warfare-remasterdupdates.json b/call-of-duty-4-modern-warfare-remasterdupdates.json new file mode 100644 index 000000000..fdea9c582 --- /dev/null +++ b/call-of-duty-4-modern-warfare-remasterdupdates.json @@ -0,0 +1,63 @@ +[ + { + "UpdateStageName": "Main Directory Creation", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateDirectory", + "UpdateSourceArgs": "{{$FullBaseDir}}main" + }, + { + "UpdateStageName": "Mods Directory Creation", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateDirectory", + "UpdateSourceArgs": "{{$FullBaseDir}}mods" + }, + { + "UpdateStageName": "Steam Game Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "SteamCMD", + "UpdateSourceData": "393100", + "UpdateSourceArgs": "393100", + "UnzipUpdateSource": false, + "OverwriteExistingFiles": false, + "ForceDownloadPlatform": "Windows", + "DeleteAfterExtract": true, + "OneShot": true + }, + { + "UpdateStageName": "H1-Mod Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "GithubRelease", + "UpdateSourceData": "h1-mod.exe", + "UpdateSourceArgs": "auroramod/h1-mod", + "UpdateSourceTarget": "{{$FullBaseDir}}", + "OverwriteExistingFiles": true + }, + { + "UpdateStageName": "Config File Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/Draakoor/AMPTemplates/refs/heads/main/call-of-duty-4-modern-warfare-remasterdserver.cfg", + "UpdateSourceArgs": "server.cfg", + "UpdateSourceTarget": "{{$FullBaseDir}}main", + "OverwriteExistingFiles": false + }, + { + "UpdateStageName": "MWR Cleaner Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://github.com/skkuull/cod-files-cleaner/releases/download/v1.1/mwr-files-cleaner.exe", + "UpdateSourceArgs": "mwr-files-cleaner.exe", + "UpdateSourceTarget": "{{$FullBaseDir}}", + "OverwriteExistingFiles": false, + "OneShot": true + }, + { + "UpdateStageName": "Run MWR Cleaner", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "cmd.exe", + "UpdateSourceArgs": "/C cd call-of-duty-4-modern-warfare-remasterd\\393100 && .\\mwr-files-cleaner.exe", + "SkipOnFailure": true, + "OneShot": true + } +] \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered.kvp b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered.kvp new file mode 100644 index 000000000..b6c6dcf34 --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered.kvp @@ -0,0 +1,85 @@ +Meta.DisplayName=Horizon MW (Call of Duty Modern Warfare 2 Multiplayer resmastered) +Meta.Description=Dedicated Server HorizonMW +Meta.Arch=x86_64 +Meta.Author=Draakoor - Made with AMP Config Generator +Meta.URL=https://github.com/HorizonMW/HorizonMW-Client +Meta.MinAMPVersion=2.4.6.6 +Meta.SpecificDockerImage= +Meta.DockerRequired=False +Meta.ContainerPolicy=Supported +Meta.ContainerPolicyReason= +Meta.Prerequsites=[] +Meta.EndpointURIFormat=steam://connect/{ip}:{GenericModule.App.Ports.$GamePort} +Meta.AppConfigId=62162cd2-b3a2-4523-a7af-d20c6febe2cf +App.AdminMethod=QuakeRCON +App.HasReadableConsole=true +App.HasWritableConsole=true +App.DisplayName=Horizon MW (Call of Duty Modern Warfare 2 Multiplayer resmastered) +App.CommandLineArgs={{$PlatformArgs}} -console -nosteam -dedicated -memoryfix +exec server.cfg +set net_ip "{{$ApplicationIPBinding}}" +set net_port "{{$GamePort}}" +set rcon_password "{{$RemoteAdminPassword}}" {{$FormattedArgs}} +map_rotate +App.WindowsCommandLineArgs= +App.CommandLineParameterFormat=-{0} "{1}" +App.CommandLineParameterDelimiter= +App.RapidStartup=false +App.ApplicationReadyMode=RCONConnected +App.ExitMethod=String +App.ExitString=quit +App.ExitTimeout=30 +App.ExitFile=app_exit.lck +App.ForceUpdate=False +App.SupportsLiveSettingsChanges=False +App.LiveSettingChangeCommandFormat=set {0} "{1}" +App.ApplicationIPBinding=0.0.0.0 +App.AdminPortRef=GamePort +App.UniversalSleepApplicationUDPPortRef=0 +App.PrimaryApplicationPortRef=GamePort +App.UniversalSleepSteamQueryPortRef=0 +App.MaxUsers=18 +App.UseRandomAdminPassword=False +App.RemoteAdminPassword= +App.AdminLoginTransform=None +App.RCONConnectDelaySeconds=30 +App.RCONConnectRetrySeconds=15 +App.RCONHeartbeatCommand=ping +App.RCONHeartbeatMinutes=0 +App.TelnetLoginFormat={0} +App.SteamUpdateAnonymousLogin=False +App.SteamForceLoginPrompt=False +App.SupportsUniversalSleep=False +App.WakeupMode=Any +App.TemplateMatchRegex={{(\$?[\w]+)}} +App.MonitorChildProcess=False +App.MonitorChildProcessWaitMs=1000 +App.MonitorChildProcessName= +App.Compatibility=None +App.SteamWorkshopDownloadLocation={{$FullBaseDir}}undefined +Console.FilterMatchRegex= +Console.FilterMatchReplacement= +Console.ThrowawayMessageRegex=(WARNING|ERROR): Shader.+ +Console.UpdateAvailableRegex=^\[\d\d:\d\d:\d\d\] \[INFO\] A new server update is available! v[\d\.]+.$ +Console.SuppressLogAtStart=False +Console.ActivateLogRegex= +Console.UserActions={} +Console.SleepMode=False +Console.SleepOnStart=False +Console.SleepDelayMinutes=5 +Console.DozeDelay=2 +Console.AutoRetryCount=5 +Console.SleepStartThresholdSeconds=25 +Console.AppReadyRegex=^$ +Console.UserJoinRegex=^$ +Console.UserLeaveRegex=^$ +Console.UserChatRegex=^$ +Meta.OS=1 +Meta.ConfigManifest=horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredconfig.json +Meta.MetaConfigManifest=horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredmetaconfig.json +Meta.ConfigRoot=horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered.kvp +App.RootDir=./horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered/ +Meta.DisplayImageSource=url:https://github.com/HorizonMW/HorizonMW-Client/raw/main/assets/github/banner.png +App.BaseDirectory=./horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered/393100/ +App.WorkingDir=393100 +App.ExecutableWin=393100\hmw-mod.exe +App.ExecutableLinux=393100/ +App.LinuxCommandLineArgs= +App.Ports=@IncludeJson[horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredports.json] +App.UpdateSources=@IncludeJson[horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredupdates.json] +App.EnvironmentVariables={"LD_LIBRARY_PATH": "{{$FullBaseDir}}linux64:{{$FullRootDir}}linux64:%LD_LIBRARY_PATH%", "WINEPREFIX": "{{$FullRootDir}}.wine", "WINEARCH": "win64", "WINEDEBUG": "-all"} \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredauto_bots.gsc b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredauto_bots.gsc new file mode 100644 index 000000000..de0aa5af9 --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredauto_bots.gsc @@ -0,0 +1,99 @@ +#include maps\mp\bots\_bots; +#include maps\mp\gametypes\_hud_util; + +init() +{ + level thread onPlayerConnect(); + level thread serverBotFill(); +} + +onPlayerConnect() +{ + level endon( "game_ended" ); + + for (;;) + { + level waittill("connected", player); + + if(player isentityabot()) + { + player maps\mp\bots\_bots_util::bot_set_difficulty( common_scripts\utility::random( [ "regular", "hardened" ] ), undefined ); + } + else + { + player thread kickBotOnJoin(); + } + } +} + +isentityabot() +{ + return isSubStr(self getguid(), "bot"); +} + +serverBotFill() +{ + level endon( "game_ended" ); + level waittill("connected", player); + + for (;;) + { + while (level.players.size < 18 && !level.gameended) + { + spawnBotswrapper(1); + wait 0.5; + } + if (level.players.size >= 8 && contBots() > 18) + kickbot(); + + wait 0.05; + } +} + +contBots() +{ + bots = 0; + foreach (player in level.players) + { + if (player isentityabot()) + { + bots++; + } + } + return bots; +} + +spawnBotswrapper(a) +{ + spawn_bots(a, "autoassign"); +} + +kickbot() +{ + level endon( "game_ended" ); + + foreach (player in level.players) + { + if (player isentityabot()) + { + reason = "Replaced With Player"; + kick ( player getEntityNumber(), reason ); + break; + } + } +} + +kickBotOnJoin() +{ + level endon( "game_ended" ); + + foreach (player in level.players) + { + if (player isentityabot()) + { + reason = "Replaced With Player"; + kick ( player getEntityNumber(), reason ); + break; + } + } +} \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredconfig.json b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredconfig.json new file mode 100644 index 000000000..3879730dd --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredconfig.json @@ -0,0 +1,367 @@ +[ + { + "DisplayName": "Game Port", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$GamePort", + "InputType": "number", + "Hidden": true, + "ParamFieldName": "net_port", + "EnumValues": {} + }, + { + "DisplayName": "IP Binding", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$ApplicationIPBinding", + "InputType": "text", + "Hidden": true, + "ParamFieldName": "net_ip", + "EnumValues": {} + }, + { + "DisplayName": "RCON Password", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "$RemoteAdminPassword", + "InputType": "password", + "Hidden": true, + "ParamFieldName": "rcon_password", + "EnumValues": {} + }, + { + "DisplayName": "Enable Log File", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "logfile", + "InputType": "number", + "Hidden": true, + "ParamFieldName": "logfile", + "DefaultValue": "2", + "EnumValues": {} + }, + { + "DisplayName": "Continuous Log", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "g_logSync", + "InputType": "number", + "Hidden": true, + "ParamFieldName": "g_logSync", + "DefaultValue": "1", + "EnumValues": {} + }, + { + "DisplayName": "Log File Name", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "", + "Keywords": "", + "FieldName": "g_log", + "InputType": "text", + "Hidden": true, + "ParamFieldName": "g_log", + "DefaultValue": "logs/games_mp.log", + "EnumValues": {} + }, + { + "DisplayName": "Server Name", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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 CODMWR Server", + "EnumValues": {} + }, + { + "DisplayName": "Message of the day", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the message of the day for 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": "sv_motd,motd,message", + "FieldName": "sv_motd", + "InputType": "text", + "ParamFieldName": "sv_motd", + "DefaultValue": "^4Welcome to our server!", + "EnumValues": {} + }, + { + "DisplayName": "Server Key", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets your server key to list on serverlist", + "Keywords": "sv_serverkey,serverkey,server,key", + "FieldName": "sv_serverkey", + "InputType": "text", + "ParamFieldName": "sv_serverkey", + "DefaultValue": "ENTERMYKEY", + "EnumValues": {} + }, + { + "DisplayName": "Server Password", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "Description": "Sets the password to join the server", + "Keywords": "password,g_password", + "FieldName": "g_password", + "InputType": "password", + "ParamFieldName": "g_password", + "DefaultValue": "", + "EnumValues": {} + }, + { + "DisplayName": "RCON Timeout", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "gametype war map mp_broadcast gametype dom map mp_brecourt gametype conf map mp_convoy gametype war map mp_underpass gametype dom map mp_bog_summer gametype conf map mp_trailerpark gametype war map mp_crash_snow gametype dom map mp_terminal gametype conf map mp_bloc gametype war map mp_subbase gametype dom map mp_backlot gametype conf map mp_storm gametype war map mp_bog gametype dom map mp_nightshift gametype conf map mp_carentan gametype war map mp_boneyard gametype dom map mp_countdown gametype conf map mp_compact gametype war map mp_crash gametype dom map mp_rust gametype conf map mp_creek gametype war map mp_rundown gametype dom map mp_farm gametype conf map mp_quarry gametype war map mp_crossfire gametype dom map mp_checkpoint gametype conf map mp_citystreets gametype war map mp_invasion gametype dom map mp_farm_spring gametype conf map mp_highrise gametype war map mp_killhouse gametype conf map mp_fuel2 gametype war map mp_overgrown gametype dom map mp_favela gametype conf map mp_pipeline gametype war map mp_estate gametype dom map mp_shipment gametype conf map mp_derail gametype war map mp_showdown gametype dom map mp_abandon gametype conf map mp_strike gametype war map mp_complex gametype dom map mp_vacant gametype conf map mp_afghan gametype war map mp_cargoship", + "Placeholder": "gametype war map mp_broadcast gametype dom map mp_brecourt gametype conf map mp_convoy gametype war map mp_underpass gametype dom map mp_bog_summer gametype conf map mp_trailerpark gametype war map mp_crash_snow gametype dom map mp_terminal gametype conf map mp_bloc gametype war map mp_subbase gametype dom map mp_backlot gametype conf map mp_storm gametype war map mp_bog gametype dom map mp_nightshift gametype conf map mp_carentan gametype war map mp_boneyard gametype dom map mp_countdown gametype conf map mp_compact gametype war map mp_crash gametype dom map mp_rust gametype conf map mp_creek gametype war map mp_rundown gametype dom map mp_farm gametype conf map mp_quarry gametype war map mp_crossfire gametype dom map mp_checkpoint gametype conf map mp_citystreets gametype war map mp_invasion gametype dom map mp_farm_spring gametype conf map mp_highrise gametype war map mp_killhouse gametype conf map mp_fuel2 gametype war map mp_overgrown gametype dom map mp_favela gametype conf map mp_pipeline gametype war map mp_estate gametype dom map mp_shipment gametype conf map mp_derail gametype war map mp_showdown gametype dom map mp_abandon gametype conf map mp_strike gametype war map mp_complex gametype dom map mp_vacant gametype conf map mp_afghan gametype war map mp_cargoship", + "EnumValues": {} + }, + { + "DisplayName": "Default Gametype", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Client Timeout Period", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Temporary Ban Period", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Enable Pure Server", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Allow Download From Web", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "Reconnect Limit", + "Category": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": "HorizonMW:stadia_controller", + "Subcategory": "Server:dns:1", + "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": {} + } +] \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredmetaconfig.json b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredmetaconfig.json new file mode 100644 index 000000000..61067019d --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredmetaconfig.json @@ -0,0 +1,9 @@ +[ + { + "ConfigFile": "main/server.cfg", + "ConfigType": "kvp", + "AutoMap": true, + "ConfigFormat": "set {0} \"{1}\"", + "ConfigFormatRegex": "^set (?.+?) \"?(?.*?)\"?$" + } +] \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredports.json b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredports.json new file mode 100644 index 000000000..265fb1855 --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredports.json @@ -0,0 +1,9 @@ +[ + { + "Protocol": "Both", + "Port": "27022", + "Name": "Game Port", + "Description": "Port used for main game traffic", + "Ref": "GamePort" + } +] \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.cfg b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.cfg new file mode 100644 index 000000000..89ae597b0 --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.cfg @@ -0,0 +1,253 @@ +///////////////////////////////////////////////////////////////////////// +// Call of Duty: Modern Warfare Remastered MP Dedicated Server Config // +// HMW-MOD // +///////////////////////////////////////////////////////////////////////// +// This config best view with Notepad++ OR // +// other *nix compatible editors of your choice.// +////////////////////////////////////////////////// +// Remove "//" in front of lines to allow the // +// server to read them. // +// Anything after "//" is a comment. // +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +// SERVER NAME & COLORS TIPS // +////////////////////////////////////////////////// +// // +// ^1 Red // +// ^2 Green // +// ^3 yellow // +// ^4 Blue // +// ^5 Cyan // +// ^6 Pink // +// ^7 White // +// ^8 Depends on the team colors playing. // +// ^9 Dark Red // +// ^0 Black // +// ^: Rainbow // +// // +////////////////////////////////////////////////// + +set sv_hostname "yourservername" // Sets the name of your server on the server browser +set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. Leave blank for default intel messages. +set scr_game_hardpoints "1" // Allows Killstreaks (1 - on, 0 - off) +set party_maxplayers "12" // Sets the max player count of the server (2-18) +set scr_xpscale "1" // XP earn rate (1-2) [Maybe only 2x on weekends?] + +set sv_lanOnly "0" // Set this to "1" = true if local server +set sv_serverkey "" // Set your HMW server key, You will need to apply for this on HMW Discord (1 key per server you run) + +////////////////////////////////////////////////// +// BASIC CONFIGURATION // +////////////////////////////////////////////////// + +set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out. +set sv_maxclients "12" // (DOES NOT SEEM TO WORK) Max players in your server. (Range 2-18) +set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions +set sv_reconnectlimit "3" // How many times you can try to reconnect +set g_inactivity "420" // Time in seconds before the server will kick a user for inactivity (range 0 - 10000) +set sv_kickBanTime "3600" // Time in seconds for a player temporary ban (on kick/tempban) (range 0 - 3600) +seta g_allowVote "1" // Toggle voting for [player kick/map restart/next map] (0 or 1 (default) ) +seta g_deadChat "0" // Toggle allowing dead players to chat with living players (0 (default) or 1) + +////////////////////////////////////////////////// +// PRIVATE SLOT SETTINGS // +////////////////////////////////////////////////// + +seta sv_privateClients 0 // Maximum number of private clients allowed on the server (range 0-18 (clamped to sv_maxclients) ) + // Password for the private slots on this server. If set, users will be prompted on join attempt. + // Users providing this password will have access to all slots. + // Users providing an incorrect password will have access to the (sv_maxClients - sv_privateClients) public slots. +seta sv_privatePassword "" + +////////////////////////////////////////////////// +// GENERIC GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_game_disablesprint 0 // Disables the possibility of sprinting +set scr_game_forceuav 0 // Constant UAV +set scr_game_deleteturrets 0 // Disable the use of turrets +set scr_player_forcerespawn 1 // Disable auto respawn +set scr_game_onlyheadshots 0 // Only headshots are valid +set scr_thirdPerson 0 // All players play in third person +set scr_diehard 0 // Hardcore mode +//set scr_killcount_persists 0 // Killstreaks count persist after player died ( Need Testing! ) +set scr_game_deathpointloss 0 // Penalty when player die +set scr_game_suicidepointloss 0 // Penalty when player suicide +set scr_team_teamkillpointloss 0 // Penalty when player kill a team mate + +////////////////////////////////////////////////// +// 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_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_teamkillkicklimit "3" // How many times to get kick for team killling. + +////////////////////////////////////////////////// +// B3, IW4MADMIN, GAME LOG & RCON SETTINGS // +////////////////////////////////////////////////// + +set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin. +set g_logSync "1" // 0 only flush on game end, 1 flush when buffer full, 2 always flush after a write, 3 append to old logs. +set g_log "logs\default.log" // IMPORTANT! Make sure the filename is unique for each server you clone! +set rcon_password "yourpassword" // RemoteControl password, needed for most management tools like IW4MADMIN and B3. Do not skip if you installing IW4MADMIN. +set sv_sayName "^7" // name server-side 'say' commands show up as. + +////////////////////////////////////////////////// +// FREE FOR ALL GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dm_scorelimit "30" // Score limit to win the game. +set scr_dm_timelimit "10" // Duration in minutes for the game to end if the score limit is not reached. +set scr_dm_playerrespawndelay "0" // 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 + +////////////////////////////////////////////////// +// TEAM DEATHMATCH GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_war_scorelimit "75" // Score limit to win the game. +set scr_war_timelimit "10" // Duration in minutes for the game to end if the score limit is not reache +set scr_war_playerrespawndelay "0" // 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 + +////////////////////////////////////////////////// +// Kill Confirmed GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_conf_scorelimit "65" // Score limit to win the game. +set scr_conf_timelimit "10" // Duration in minutes for the game to end if the score limit is not reached. +set scr_conf_playerrespawndelay "0" // How long player will wait until respawn. +set scr_conf_waverespawndelay "0" // Duration is seconds before the first respawn in each round. +set scr_conf_numlives "0" // Number of lives per player 0 for unlimited. +set scr_conf_roundlimit "1" // Rounds per game. +set scr_conf_winlimit "1" // amount of wins needed to win a round-based game + +////////////////////////////////////////////////// +// DOMINATION GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_dom_scorelimit "200" // Score limit to win the game. +set scr_dom_timelimit "15" // Duration in minutes for the game to end if the score limit is not 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 + +////////////////////////////////////////////////// +// SEARCH AND DESTROY GAMETYPE SETTINGS // +////////////////////////////////////////////////// + +set scr_sd_scorelimit "1" // Score limit to win the game. +set scr_sd_timelimit "2.5" // Duration in minutes for the game to end if the score limit is not 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'. + +////////////////////////////////////////////////// +// 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 is not 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. + +////////////////////////////////////////////////// +// GAMETYPES LIST // +////////////////////////////////////////////////// +// // +// dm - Free-for-all // +// war - Team Deathmatch // +// sd - Search and Destroy // +// dom - Domination // +// conf - Kill Confirmed // +// sab - Sabotage // +// koth - Headquarters // +// hp - Hardpoint // +// gun - Gun Game // +// // +////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// MWR MAP SHORT NAMES ROTATION LIST // MW2CR MAP SHORT NAMES ROTATION LIST // MW2 MAP SHORT NAMES ROTATION LIST // HMW-MOD DLC MAP NAMES ROTATION LIST // +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // // // // +// Ambush - mp_convoy // Airport - airport // Afghan - mp_afghan // COMING SOON // +// Backlot - mp_backlot // Blizzard - cliffhanger // Derail - mp_derail // // +// Bog - mp_bog // Contingency - contingency // Estate - mp_estate // // +// Crash - mp_crash // DC Burning - dcburning // Favela - mp_favela // // +// Crossfire - mp_crossfire // Dumpsite - boneyard // Highrise - mp_highrise // // +// District - mp_citystreets // Gulag - gulag // Invasion - mp_invasion // // +// Downpour - mp_farm // Oilrig - oilrig // Karachi - mp_checkpoint // // +// Overgrown - mp_overgrown // Safehouse - estate // Quarry - mp_quarry // // +// Shipment - mp_shipment // Whiskey Hotel - dc_whitehouse // Rundown - mp_rundown // // +// Vacant - mp_vacant // // Rust - mp_rust // // +// // (these campaign maps do not support bots, // Scrapyard - mp_boneyard // // +// Broadcast - mp_boardcast // hp, koth, nor sab as of August 2024) // Skidrow - mp_nightshift // // +// Chinatown - mp_carentan // // Sub Base - mp_subbase // // +// Countdown - mp_countdown // // Terminal - mp_terminal // // +// Bloc - mp_bloc // // Underpass - mp_underpass // // +// Creek - mp_creek // // Wasteland - mp_brecourt // // +// Killhouse - mp_killhouse // // // // +// Pipeline - mp_pipeline // // Bailout - mp_complex // // +// Strike - mp_strike // // Salvage - mp_compact // // +// Showdown - mp_showdown // // Storm - mp_storm // // +// Wet Work - mp_cargoship // // Carnival - mp_abandon // // +// // // Fuel - mp_fuel2 // // +// Winter Crash - mp_crash_snow // // Trailer Park - mp_trailerpark // // +// Day Break - mp_farm_spring // // // // +// Beach Bog - mp_bog_summer // // // // +// // // // // +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +// EXAMPLE MAP+GAMETYPES ROTATIONS // +//////////////////////////////////////////////////////////////////////// +// Single Game Mode + Maps: // +// sv_mapRotation "gametype war map mp_convoy map mp_rust" // +// // +// Several Mix Game Modes + Maps: // +// sv_mapRotation "gametype war map mp_bog gametype dm map mp_quarry" // +//////////////////////////////////////////////////////////////////////// + +// (only MW2 maps) +set sv_maprotation "gametype war map mp_afghan map mp_complex map mp_abandon map mp_derail map mp_estate map mp_favela map mp_fuel2 map mp_highrise map mp_invasion map mp_checkpoint map mp_quarry map mp_rundown map mp_rust map mp_compact map mp_boneyard map mp_nightshift map mp_storm map mp_subbase map mp_terminal map mp_trailerpark map mp_underpass map mp_brecourt" + +// (all MWR + MW2 maps with TDM, DOM, and KC) +//set sv_maprotation "gametype war map mp_broadcast gametype dom map mp_brecourt gametype conf map mp_convoy gametype war map mp_underpass gametype dom map mp_bog_summer gametype conf map mp_trailerpark gametype war map mp_crash_snow gametype dom map mp_terminal gametype conf map mp_bloc gametype war map mp_subbase gametype dom map mp_backlot gametype conf map mp_storm gametype war map mp_bog gametype dom map mp_nightshift gametype conf map mp_carentan gametype war map mp_boneyard gametype dom map mp_countdown gametype conf map mp_compact gametype war map mp_crash gametype dom map mp_rust gametype conf map mp_creek gametype war map mp_rundown gametype dom map mp_farm gametype conf map mp_quarry gametype war map mp_crossfire gametype dom map mp_checkpoint gametype conf map mp_citystreets gametype war map mp_invasion gametype dom map mp_farm_spring gametype conf map mp_highrise gametype war map mp_killhouse gametype conf map mp_fuel2 gametype war map mp_overgrown gametype dom map mp_favela gametype conf map mp_pipeline gametype war map mp_estate gametype dom map mp_shipment gametype conf map mp_derail gametype war map mp_showdown gametype dom map mp_abandon gametype conf map mp_strike gametype war map mp_complex gametype dom map mp_vacant gametype conf map mp_afghan gametype war map mp_cargoship" + +// (only MW2CR maps (can not use bots on these)) +//set sv_maprotation "gametype dom map boneyard map cliffhanger map airport map dc_whitehouse map oilrig map contingency map estate map gulag map dcburning" + +// (only MWR maps) +//set sv_maprotation "gametype dom map mp_convoy map mp_backlot map mp_bloc map mp_bog map mp_bog_summer map mp_broadcast map mp_carentan map mp_countdown map mp_crash map mp_crash_snow map mp_creek map mp_crossfire map mp_citystreets map mp_farm map mp_farm_spring map mp_killhouse map mp_overgrown map mp_pipeline map mp_shipment map mp_showdown map mp_strike map mp_vacant map mp_cargoship" \ No newline at end of file diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.py b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.py new file mode 100644 index 000000000..7fa9485d4 --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.py @@ -0,0 +1,76 @@ +import os +import hashlib +import requests +from urllib.parse import urljoin + +# URLs +MANIFEST_URL = "https://delboy.b-cdn.net/hmw/manifest.json" +BASE_DOWNLOAD_URL = "https://delboy.b-cdn.net/hmw/" + +def calculate_sha256(file_path): + """ + Berechnet den SHA-256-Hash einer Datei. + """ + sha256_hash = hashlib.sha256() + try: + with open(file_path, "rb") as f: + for byte_block in iter(lambda: f.read(4096), b""): + sha256_hash.update(byte_block) + return sha256_hash.hexdigest() + except FileNotFoundError: + return None + +def download_file(file_url, local_path): + """ + Lädt eine Datei von der angegebenen URL herunter und speichert sie lokal. + """ + os.makedirs(os.path.dirname(local_path), exist_ok=True) + try: + response = requests.get(file_url, stream=True) + response.raise_for_status() + with open(local_path, "wb") as f: + for chunk in response.iter_content(chunk_size=8192): + f.write(chunk) + print(f"Heruntergeladen: {local_path}") + except Exception as e: + print(f"Fehler beim Herunterladen von {file_url}: {e}") + +def process_manifest(manifest): + """ + Verarbeitet das Manifest, überprüft und lädt Dateien bei Bedarf herunter. + """ + for module in manifest.get("Modules", []): + print(f"Verarbeite Modul: {module['Name']} (Version {module['Version']})") + files_with_hashes = module.get("FilesWithHashes", {}) + download_path = module.get("DownloadInfo", {}).get("DownloadPath", "") + + for file_path, expected_hash in files_with_hashes.items(): + # Überprüft Dateien im aktuellen Ordner + local_path = os.path.join(os.getcwd(), file_path) + actual_hash = calculate_sha256(local_path) + + if actual_hash == expected_hash: + print(f"Datei ist aktuell: {local_path}") + else: + print(f"Datei fehlt oder ist veraltet: {local_path}") + # Download-URL basierend auf mod-1.0 erstellen + file_url = urljoin(BASE_DOWNLOAD_URL, os.path.join(download_path, file_path).replace("\\", "/")) + download_file(file_url, local_path) + +def main(): + try: + # Manifest.json herunterladen + response = requests.get(MANIFEST_URL) + response.raise_for_status() + manifest = response.json() + + # Manifest verarbeiten + process_manifest(manifest) + + except requests.RequestException as e: + print(f"Fehler beim Abrufen von manifest.json: {e}") + except ValueError as e: + print(f"Ungültiges Format von manifest.json: {e}") + +if __name__ == "__main__": + main() diff --git a/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredupdates.json b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredupdates.json new file mode 100644 index 000000000..70aef1e8e --- /dev/null +++ b/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredupdates.json @@ -0,0 +1,86 @@ +[ + { + "UpdateStageName": "Main Directory Creation", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateDirectory", + "UpdateSourceArgs": "{{$FullBaseDir}}main" + }, + { + "UpdateStageName": "Scripts Directory Creation", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateDirectory", + "UpdateSourceArgs": "{{$FullBaseDir}}user_scripts/mp" + }, + { + "UpdateStageName": "Mods Directory Creation", + "UpdateSourcePlatform": "All", + "UpdateSource": "CreateDirectory", + "UpdateSourceArgs": "{{$FullBaseDir}}mods" + }, + { + "UpdateStageName": "Steam Game Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "SteamCMD", + "UpdateSourceData": "393100", + "UpdateSourceArgs": "393100", + "UnzipUpdateSource": false, + "OverwriteExistingFiles": false, + "ForceDownloadPlatform": "Windows", + "DeleteAfterExtract": true, + "OneShot": true + }, + { + "UpdateStageName": "Config File Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/Draakoor/AMPTemplates/refs/heads/dev/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.cfg", + "UpdateSourceArgs": "server.cfg", + "UpdateSourceTarget": "{{$FullBaseDir}}main", + "OverwriteExistingFiles": false + }, + { + "UpdateStageName": "Botscript File Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/Draakoor/AMPTemplates/refs/heads/dev/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredauto_bots.gsc", + "UpdateSourceArgs": "auto_bots.gsc", + "UpdateSourceTarget": "{{$FullBaseDir}}user_scripts/mp", + "OverwriteExistingFiles": false + }, + { + "UpdateStageName": "MWR Cleaner Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://github.com/skkuull/cod-files-cleaner/releases/download/v1.1/mwr-files-cleaner.exe", + "UpdateSourceArgs": "mwr-files-cleaner.exe", + "UpdateSourceTarget": "{{$FullBaseDir}}", + "OverwriteExistingFiles": false, + "OneShot": true + }, + { + "UpdateStageName": "Run MWR Cleaner", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "cmd.exe", + "UpdateSourceArgs": "/C cd horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered\\393100 && .\\mwr-files-cleaner.exe", + "SkipOnFailure": true, + "OneShot": true + }, + { + "UpdateStageName": "Update Script Download", + "UpdateSourcePlatform": "All", + "UpdateSource": "FetchURL", + "UpdateSourceData": "https://raw.githubusercontent.com/Draakoor/AMPTemplates/refs/heads/dev/horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmasteredserver.py", + "UpdateSourceArgs": "updater.py", + "UpdateSourceTarget": "{{$FullBaseDir}}", + "OverwriteExistingFiles": false + }, + { + "UpdateStageName": "Run Updater", + "UpdateSourcePlatform": "Windows", + "UpdateSource": "Executable", + "UpdateSourceData": "cmd.exe", + "UpdateSourceArgs": "/C cd horizon-mw-call-of-duty-modern-warfare-2-multiplayer-resmastered\\393100 && python .\\updater.py", + "SkipOnFailure": false + } +]