# 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..." # 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..." $drives = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Name -ge 'C' } foreach ($drive in $drives) { $steam_exe = Get-ChildItem -Path "$($drive.Name):\" -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" Read-Host "Press Enter to exit" exit } Write-Host "Steam installation path: $steam_dir" # 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) { if ($library -match '"path"\s*"\s*(.+)\s*"') { $library_path = $matches[1] } 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" Read-Host "Press Enter to exit" exit } Write-Host "GMod installation path: $gmod_dir" # Confirm Garry's Mod installation path $GMODPath = Join-Path $gmod_dir "garrysmod" $AddonsPath = Join-Path $GMODPath "addons" $_text = "Do you want to install in this path? It will completely wipe the previous Beatrun install if you had one!`n$GMODPath (y/n)" $GMODConfirmation = Read-Host $_text if ($GMODConfirmation -eq "y") { $TempPath = Join-Path $GMODPath "temp" $ZIPPath = Join-Path $TempPath "beatrun.zip" $FolderPath = Join-Path $TempPath "beatrun" $FolderMainPath = Join-Path $TempPath "beatrun-main" New-Item -ItemType Directory -Path $TempPath -Force | Out-Null Write-Host "Downloading the archive..." (New-Object Net.WebClient).DownloadFile("https://github.com/JonnyBro/beatrun/archive/refs/heads/main.zip", $ZIPPath) Write-Host "Downloaded! Unpacking..." Expand-Archive $ZIPPath $TempPath -Force Write-Host "Unpacked successfully!" Rename-Item $FolderMainPath $FolderPath Remove-Item $ZIPPath $confirmation = Read-Host "Do you want to install modules? (Discord + Steam Presence) (y/n)" if ($confirmation -eq "y") { $ModulesPath = Join-Path $FolderPath "lua\*" $NewModulesPath = Join-Path $GMODPath "lua" Copy-Item -Path $ModulesPath -Destination $NewModulesPath -Force -Recurse } $AddonPath = Join-Path $FolderPath "beatrun" $NewAddonPath = Join-Path $AddonsPath "beatrun" if (Test-Path $NewAddonPath) { Remove-Item $NewAddonPath -Force -Recurse } Move-Item -Path $AddonPath -Destination $NewAddonPath Remove-Item $TempPath -Force -Recurse Write-Host "Beatrun Installed!" }