[
    {
        "UpdateStageName": "SteamCMD Server Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "SteamCMD",
        "UpdateSourceData": "740",
        "UpdateSourceArgs": "4465480",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Remove Old Library",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"rm -rf csgo/740/bin/libgcc_s.so.1 >/dev/null 2>&1\"",
        "SkipOnFailure": true
    },
    {
        "UpdateStageName": "Server.cfg Template File Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "FetchURL",
        "UpdateSourceData": "https://raw.githubusercontent.com/CubeCoders/AMPTemplates/main/counter-strike-goserver.cfg",
        "UpdateSourceArgs": "AMP_server.cfg",
        "UpdateSourceTarget": "{{$FullRootDir}}",
        "OverwriteExistingFiles": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Metamod Download",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"MetamodBuild=\\\"{{MetamodBuild}}\\\" && MetamodBranch=\\\"{{ModBranch}}\\\" && if [[ -z \\\"$MetamodBuild\\\" ]]; then wget -qO metamod.tar.gz \\\"https://metamodsource.net/latest.php?os=linux&version=$MetamodBranch\\\" && echo \\\"Latest Metamod $MetamodBranch build downloaded\\\" && exit 0; elif [[ ! \\\"$MetamodBuild\\\" =~ ^[0-9]+$ ]]; then echo \\\"Invalid Metamod build version format specified\\\" && exit 1; fi; if { [[ \\\"$MetamodBranch\\\" == \\\"2.0\\\" ]] && [[ \\\"$MetamodBuild\\\" -ge 1391 ]]; } || { [[ \\\"$MetamodBranch\\\" == \\\"1.12\\\" ]] && [[ \\\"$MetamodBuild\\\" -ge 1221 ]]; }; then DownloadURL=\\\"https://github.com/alliedmodders/metamod-source/releases/download/$MetamodBranch.0.$MetamodBuild/mmsource-$MetamodBranch.0-git$MetamodBuild-linux.tar.gz\\\"; else DownloadURL=\\\"https://mms.alliedmods.net/mmsdrop/$MetamodBranch/mmsource-$MetamodBranch.0-git$MetamodBuild-linux.tar.gz\\\"; fi; wget -qO metamod.tar.gz \\\"$DownloadURL\\\" && echo \\\"Metamod $MetamodBranch build $MetamodBuild downloaded\\\"\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Metamod Download",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"$ProgressPreference='SilentlyContinue'; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $MetamodBuild='{{MetamodBuild}}'; $MetamodBranch='{{ModBranch}}'; if ([string]::IsNullOrWhiteSpace($MetamodBuild)) { Invoke-WebRequest -UseBasicParsing -Uri \\\"https://metamodsource.net/latest.php?os=windows&version=$MetamodBranch\\\" -OutFile 'metamod.zip'; if ($?) { Write-Output \\\"Latest Metamod $MetamodBranch build downloaded\\\"; exit 0 } } elseif ($MetamodBuild -notmatch '^\\d+$') { Write-Output \\\"Invalid Metamod build version format specified\\\"; exit 1 }; if (($MetamodBranch -eq '2.0' -and [int]$MetamodBuild -ge 1391) -or ($MetamodBranch -eq '1.12' -and [int]$MetamodBuild -ge 1221)) { $DownloadURL = \\\"https://github.com/alliedmodders/metamod-source/releases/download/$MetamodBranch.0.$MetamodBuild/mmsource-$MetamodBranch.0-git$MetamodBuild-windows.zip\\\" } else { $DownloadURL = \\\"https://mms.alliedmods.net/mmsdrop/$MetamodBranch/mmsource-$MetamodBranch.0-git$MetamodBuild-windows.zip\\\" }; Invoke-WebRequest -UseBasicParsing -Uri $DownloadURL -OutFile 'metamod.zip'; if ($?) { Write-Output \\\"Metamod $MetamodBranch build $MetamodBuild downloaded\\\" }\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Metamod Extract",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "ExtractArchive",
        "UpdateSourceData": "metamod.tar.gz",
        "UpdateSourceTarget": "{{$FullBaseDir}}csgo",
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Metamod Extract",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "ExtractArchive",
        "UpdateSourceData": "metamod.zip",
        "UpdateSourceTarget": "{{$FullBaseDir}}csgo",
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "SourceMod Download Directory Creation",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "CreateDirectory",
        "UpdateSourceArgs": "{{$FullBaseDir}}sm",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "SourceMod Download",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"SourceModBuild=\\\"{{SourceModVersion}}\\\" && SourceModBranch=\\\"{{SourceModBranch}}\\\" && if [[ -z \\\"$SourceModBuild\\\" ]]; then wget -qO sourcemod.tar.gz \\\"https://sourcemod.net/latest.php?os=linux&version=$SourceModBranch\\\" && echo \\\"Latest SourceMod $SourceModBranch build downloaded\\\" && exit 0; elif [[ ! \\\"$SourceModBuild\\\" =~ ^[0-9]+$ ]]; then echo \\\"Invalid SourceMod build version format specified\\\" && exit 1; fi; if { [[ \\\"$SourceModBranch\\\" == \\\"1.13\\\" ]] && [[ \\\"$SourceModBuild\\\" -ge 7311 ]]; } || { [[ \\\"$SourceModBranch\\\" == \\\"1.12\\\" ]] && [[ \\\"$SourceModBuild\\\" -ge 7225 ]]; }; then DownloadURL=\\\"https://github.com/alliedmodders/sourcemod/releases/download/$SourceModBranch.0.$SourceModBuild/sourcemod-$SourceModBranch.0-git$SourceModBuild-linux.tar.gz\\\"; else DownloadURL=\\\"https://sm.alliedmods.net/smdrop/$SourceModBranch/sourcemod-$SourceModBranch.0-git$SourceModBuild-linux.tar.gz\\\"; fi; wget -qO sourcemod.tar.gz \\\"$DownloadURL\\\" && echo \\\"SourceMod $SourceModBranch build $SourceModBuild downloaded\\\"\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "SourceMod Download",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"$ProgressPreference='SilentlyContinue'; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $SourceModBuild='{{SourceModVersion}}'; $SourceModBranch='{{SourceModBranch}}'; if ([string]::IsNullOrWhiteSpace($SourceModBuild)) { Invoke-WebRequest -UseBasicParsing -Uri \\\"https://sourcemod.net/latest.php?os=windows&version=$SourceModBranch\\\" -OutFile 'sourcemod.zip'; if ($?) { Write-Output \\\"Latest SourceMod $SourceModBranch build downloaded\\\"; exit 0 } } elseif ($SourceModBuild -notmatch '^\\d+$') { Write-Output \\\"Invalid SourceMod build version format specified\\\"; exit 1 }; if (($SourceModBranch -eq '1.13' -and [int]$SourceModBuild -ge 7311) -or ($SourceModBranch -eq '1.12' -and [int]$SourceModBuild -ge 7225)) { $DownloadURL = \\\"https://github.com/alliedmodders/sourcemod/releases/download/$SourceModBranch.0.$SourceModBuild/sourcemod-$SourceModBranch.0-git$SourceModBuild-windows.zip\\\" } else { $DownloadURL = \\\"https://sm.alliedmods.net/smdrop/$SourceModBranch/sourcemod-$SourceModBranch.0-git$SourceModBuild-windows.zip\\\" }; Invoke-WebRequest -UseBasicParsing -Uri $DownloadURL -OutFile 'sourcemod.zip'; if ($?) { Write-Output \\\"SourceMod $SourceModBranch build $SourceModBuild downloaded\\\" }\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "SourceMod Extract",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "ExtractArchive",
        "UpdateSourceData": "sourcemod.tar.gz",
        "UpdateSourceTarget": "{{$FullBaseDir}}sm",
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "SourceMod Extract",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "ExtractArchive",
        "UpdateSourceData": "sourcemod.zip",
        "UpdateSourceTarget": "{{$FullBaseDir}}sm",
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "SourceMod Installation",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"Set-Location -Path 'csgo/740'; if (Test-Path 'csgo/cfg/sourcemod') { Remove-Item -Path 'sm/cfg/sourcemod' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null }; if (Test-Path 'csgo/addons/sourcemod/configs') { Remove-Item -Path 'sm/addons/sourcemod/configs' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null }; if (Test-Path 'csgo/addons/sourcemod/plugins') { Remove-Item -Path 'sm/addons/sourcemod/plugins' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null }; Copy-Item -Path 'sm/*' -Destination 'csgo' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null; Remove-Item -Path 'sm' -Recurse -Force -ErrorAction SilentlyContinue | Out-Null\"",
        "SkipOnFailure": true
    },
    {
        "UpdateStageName": "SourceMod Installation",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"cd csgo/740 && [ -d csgo/cfg/sourcemod ] && rm -rf sm/cfg/sourcemod >/dev/null 2>&1; [ -d csgo/addons/sourcemod/configs ] && rm -rf sm/addons/sourcemod/configs >/dev/null 2>&1; [ -d csgo/addons/sourcemod/plugins ] && rm -rf sm/addons/sourcemod/plugins >/dev/null 2>&1; \\cp -rf sm/* csgo/ >/dev/null 2>&1; rm -rf sm >/dev/null 2>&1\"",
        "SkipOnFailure": true
    },
    {
        "UpdateStageName": "Activate Metamod and SourceMod",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "CreateFile",
        "UpdateSourceData": "\"Plugin\"\n{\n\t\"file\"\t\"../csgo/addons/metamod/bin/server\"\n}",
        "UpdateSourceArgs": "{{$FullBaseDir}}csgo/addons/metamod.vdf",
        "OverwriteExistingFiles": true
    },
    {
        "UpdateStageName": "NoLobbyReservation Plugin Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "GithubRelease",
        "UpdateSourceArgs": "nuxencs/NoLobbyReservation",
        "UpdateSourceTarget": "{{$FullBaseDir}}csgo",
        "UnzipUpdateSource": true,
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "NoLobbyReservation Gamedata Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "FetchURL",
        "UpdateSourceData": "https://raw.githubusercontent.com/nuxencs/NoLobbyReservation/refs/heads/master/addons/sourcemod/gamedata/nolobbyreservation.games.txt",
        "UpdateSourceTarget": "{{$FullBaseDir}}csgo/addons/sourcemod/gamedata",
        "OverwriteExistingFiles": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "NoLobbyReservation Scripting Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "FetchURL",
        "UpdateSourceData": "https://raw.githubusercontent.com/nuxencs/NoLobbyReservation/refs/heads/master/addons/sourcemod/scripting/nolobbyreservation.sp",
        "UpdateSourceTarget": "{{$FullBaseDir}}csgo/addons/sourcemod/scripting",
        "OverwriteExistingFiles": true,
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Update steam.inf File",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"if [[ -f csgo/740/csgo/steam.inf ]]; then sed -i \\\"s/^\\s*appID=730\\s*$/appID=4465480/\\\" csgo/740/csgo/steam.inf; fi\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Update steam.inf File",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"if (Test-Path 'csgo\\740\\csgo\\steam.inf') { (Get-Content 'csgo\\740\\csgo\\steam.inf') -replace '^\\s*appID=730\\s*$', 'appID=4465480' | Set-Content 'csgo\\740\\csgo\\steam.inf' }\"",
        "SkipOnFailure": false
    }
]