# Function to query the registry function Get-RegistryValue { param ( [string]$path, [string]$value ) try { $result = Get-ItemProperty -Path $path -ErrorAction Stop return $result.$value } catch { return $null } } Write-Host "Searching for Steam installation..." -ForegroundColor White # Get Steam installation path from registry $steam_dir = Get-RegistryValue "HKLM:\SOFTWARE\Valve\Steam" "InstallPath" if (-not $steam_dir) { $steam_dir = Get-RegistryValue "HKLM:\SOFTWARE\WOW6432Node\Valve\Steam" "InstallPath" } # Fallback to searching for Steam.exe on all drives if (-not $steam_dir) { Write-Host "No registry key found. Searching for Steam executable on all drives..." -ForegroundColor Yellow # Get all filesystem drives $drives = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Name -match '^[A-Z]$' } foreach ($drive in $drives) { # Properly format drive path, avoid additional quotes $drive_letter = $drive.Name $steam_exe = Get-ChildItem -Path "$($drive_letter):\" -Recurse -Include "Steam.exe" -ErrorAction SilentlyContinue | Select-Object -First 1 if ($steam_exe) { $steam_dir = Split-Path $steam_exe.FullName -Parent break } } } if (-not $steam_dir) { Write-Host "Steam installation path not found" -ForegroundColor Red Read-Host "Press Enter to exit" exit } Write-Host "Steam installation path: $steam_dir" -ForegroundColor Cyan # Initialize Garry's Mod directory as null $gmod_dir = $null # Check for Garry's Mod installation in the primary Steam library $gmod_check_path = Join-Path $steam_dir "steamapps\appmanifest_4000.acf" if (Test-Path $gmod_check_path) { $gmod_dir = Join-Path $steam_dir "steamapps\common\GarrysMod" } # Check for Garry's Mod in additional Steam library folders if not found in the primary if (-not $gmod_dir) { $library_folders_path = Join-Path $steam_dir "steamapps\libraryfolders.vdf" if (Test-Path $library_folders_path) { $library_folders = (Get-Content $library_folders_path) -join "`n" $library_paths = $library_folders -split '(?=\s*"\d+"\s*{)' # Split by each library entry foreach ($library in $library_paths) { # Extract the library path from the line that contains "path" if ($library -match '"path"\s*"\s*(.+)\s*"') { # Clean the extracted path to remove extra backslashes or quotes $library_path = $matches[1] -replace "\\{2,}", "\" # Replace any multiple backslashes with a single backslash $library_path = $library_path.Trim('"') # Remove any surrounding quotes } # If "4000" (Garry's Mod ID) is found, set the GMod directory if ($library -match '"4000"') { $gmod_dir = Join-Path $library_path "steamapps\common\GarrysMod" break } } } } if (-not $gmod_dir) { Write-Host "GMod installation path not found" -ForegroundColor Red Read-Host "Press Enter to exit" exit } Write-Host "GMod installation path: $gmod_dir" -ForegroundColor Cyan # Confirm Garry's Mod installation path $GMODPath = Join-Path $gmod_dir "garrysmod" Write-Host "Do you want to install in this path? It will completely wipe the previous Beatrun install if you had one!" -ForegroundColor Yellow $GMODConfirmation = Read-Host "(y/n)" if ($GMODConfirmation -eq "y" -or $GMODConfirmation -eq "Y") { # Define paths $TempPath = Join-Path $GMODPath "temp" $ZIPPath = Join-Path $TempPath "beatrun.zip" $FolderMainPath = Join-Path $TempPath "beatrun-main" $FolderPath = Join-Path $TempPath "beatrun" $AddonPath = Join-Path $FolderPath "beatrun" $NewAddonPath = Join-Path $GMODPath "addons\beatrun" # Ensure the temporary directory exists if (-not (Test-Path -Path $TempPath)) { New-Item -ItemType Directory -Path $TempPath -Force | Out-Null } # Download Beatrun zip Write-Host "Downloading the Beatrun archive..." -ForegroundColor White try { (New-Object Net.WebClient).DownloadFile("https://github.com/JonnyBro/beatrun/archive/refs/heads/main.zip", $ZIPPath) Write-Host "Download successful!" -ForegroundColor Green } catch { Write-Host "Error: Unable to download Beatrun. Please check your internet connection or URL." -ForegroundColor Red exit } # Unzip the archive Write-Host "Unpacking the archive..." -ForegroundColor White try { Expand-Archive -Path $ZIPPath -DestinationPath $TempPath -Force Write-Host "Unpacking successful!" -ForegroundColor Green } catch { Write-Host "Error: Failed to unpack the Beatrun archive." -ForegroundColor Red exit } # Rename and prepare files if (Test-Path $FolderMainPath) { Rename-Item -Path $FolderMainPath -NewName $FolderPath } else { Write-Host "Error: Unpacked folder not found." -ForegroundColor Red exit } # Remove the downloaded zip file Remove-Item -Path $ZIPPath -Force # Confirm the addon directory exists if (Test-Path $NewAddonPath) { Write-Host "Previous Beatrun installation found. Removing old installation..." -ForegroundColor White Remove-Item -Path $NewAddonPath -Recurse -Force } # Move the new Beatrun addon Write-Host "Installing Beatrun..." -ForegroundColor White Move-Item -Path $AddonPath -Destination $NewAddonPath -Force # Clean up temporary files Remove-Item -Path $TempPath -Recurse -Force Write-Host "Beatrun has been installed successfully!" -ForegroundColor Green }