Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Application]::EnableVisualStyles() # ===== Configurações de versão ===== $VersionPortrait = "2026.03.06.3" $VersionDual = "2026.03.05.2" $VersionBotoneira = "2025.01.13.1" $ReleaseBaseUrl = "https://ndlabversions.pilotgamingsys.com/devel" # Verify Admin Rights if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator)) { [System.Windows.Forms.MessageBox]::Show("Restarting as Administrator...") Start-Process powershell "-ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs exit } function Write-Log { param ($text) $outputBox.AppendText("$text`r`n") $outputBox.ScrollToCaret() } function Stop-Unity { Write-Log "Stopping unity.exe and cabinet.exe if running..." try { Stop-Process -Name "unity" -Force -ErrorAction Stop Write-Log "unity.exe process stopped." } catch { Write-Log "unity.exe was not running or could not be stopped." } try { Stop-Process -Name "cabinet" -Force -ErrorAction Stop Write-Log "cabinet.exe process stopped." } catch { Write-Log "cabinet.exe was not running or could not be stopped." } } function Update-StartBat { param ([string]$Mode) $batPath = "C:\pilotgames\start.bat" if ($Mode -eq "Portrait") { $content = @" cd /D C:\pilotgames\NDGDRelease powershell -command "Start-Process cabinet.exe -Verb runas -ArgumentList '-screen-height', '1920', '-screen-width','1080', '-screen-fullscreen', '0', '-popupwindow'" "@ } else { $content = @" cd /D C:\pilotgames\BRGDRelease powershell -command "Start-Process cabinet.exe -Verb runas -ArgumentList '-screen-height', '1080', '-screen-width','1920', '-screen-fullscreen', '0', '-popupwindow'" "@ } Write-Log "Updating start.bat for $Mode..." Set-Content -Path $batPath -Value $content -Force -Encoding ASCII Write-Log "start.bat updated." } function Get-ModeVersion { param ( [string]$Mode ) switch ($Mode) { "Portrait" { return $VersionPortrait } "Dual" { return $VersionDual } "Botoneira" { return $VersionBotoneira } default { throw "Unknown mode: $Mode" } } } function Get-ModeOrientation { param ( [string]$Mode ) switch ($Mode) { "Portrait" { return "Portrait" } "Dual" { return "Dual" } "Botoneira" { return "Portrait" } default { throw "Unknown mode: $Mode" } } } function Download-ReleaseZip { param ( [string]$Version ) $zipFileName = "NDGDRelease-$Version.zip" $zipUrl = "$ReleaseBaseUrl/$zipFileName" $zipDest = "C:\pilotgames\downloads\$zipFileName" Write-Log "Downloading release package..." Write-Log "URL: $zipUrl" try { if (Test-Path $zipDest) { Remove-Item -Path $zipDest -Force -ErrorAction SilentlyContinue } Invoke-WebRequest -Uri $zipUrl -OutFile $zipDest -UseBasicParsing Write-Log "Download completed: $zipDest" return $zipDest } catch { throw "Failed to download file from $zipUrl. $_" } } function Install-Pilot { param ([string]$Mode) $outputBox.Clear() Write-Log "Starting $Mode installation..." $version = Get-ModeVersion -Mode $Mode $orient = Get-ModeOrientation -Mode $Mode Write-Log "Selected version: $version" Write-Log "Selected orientation: $orient" Write-Log "`nRenaming PC using MAC address..." $mac = (Get-NetAdapter -InterfaceAlias "*Ethernet*" | Select-Object -First 1 -ExpandProperty MacAddress) -replace '-', '' if ($mac) { Rename-Computer -NewName "$mac" -Force Write-Log "Computer renamed to: $mac" Write-Log "Please restart the computer to apply the change.`n" } else { Write-Log "Could not retrieve MAC address.`n" } Write-Log "Stopping PilotGameAgent service..." Stop-Service -Name "PilotGameAgent" -Force -ErrorAction SilentlyContinue Stop-Unity Push-Location "C:\pilotgames" try { Write-Log "Clearing downloads folder..." Remove-Item -Path "C:\pilotgames\downloads\*" -Force -Recurse -ErrorAction SilentlyContinue Write-Log "Removing backup folders..." Remove-Item -Path "C:\pilotgames\BRGDRelease.bak" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "C:\pilotgames\NDGDRelease.bak" -Recurse -Force -ErrorAction SilentlyContinue Write-Log "Waiting 10 seconds...." Start-Sleep -Seconds 10 if (Test-Path "C:\pilotgames\BRGDRelease") { Write-Log "Backing up BRGDRelease folder..." Move-Item "C:\pilotgames\BRGDRelease" "C:\pilotgames\BRGDRelease.bak" -Force } if (Test-Path "C:\pilotgames\NDGDRelease") { Write-Log "Backing up NDGDRelease folder..." Move-Item "C:\pilotgames\NDGDRelease" "C:\pilotgames\NDGDRelease.bak" -Force } $zipPath = Download-ReleaseZip -Version $version Write-Log "Unzipping file into C:\pilotgames..." Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory($zipPath, "C:\pilotgames") Update-StartBat -Mode $orient Write-Log "Waiting 20 seconds..." Start-Sleep -Seconds 20 Write-Log "Starting PilotGameAgent service..." Set-Service -Name "PilotGameAgent" -StartupType Automatic -PassThru Start-Service -Name "PilotGameAgent" Write-Log "$Mode installation completed successfully." } catch { Write-Log "Installation error: $_" } finally { Pop-Location } } function Set-HighPerformancePowerPlan { Write-Log "`nActivating High Performance power plan..." $highPerf = powercfg -l | Where-Object { $_ -match "High performance" -or $_ -match "Alto desempenho" } if ($highPerf) { $guid = ($highPerf -split '\s+')[3] powercfg -setactive $guid powercfg -change -monitor-timeout-ac 0 powercfg -change -monitor-timeout-dc 0 powercfg -change -standby-timeout-ac 0 powercfg -change -standby-timeout-dc 0 powercfg -change -disk-timeout-ac 0 powercfg -change -disk-timeout-dc 0 Write-Log "Power settings applied successfully.`n" } else { Write-Log "High Performance power plan not found.`n" } } function Rename-PCToMac { Write-Log "`nRenaming PC using MAC address..." $mac = (Get-NetAdapter -InterfaceAlias "*Ethernet*" | Select-Object -First 1 -ExpandProperty MacAddress) -replace '-', '' if ($mac) { Rename-Computer -NewName "$mac" -Force Write-Log "Computer renamed to: $mac" Write-Log "Please restart the computer to apply the change.`n" } else { Write-Log "Could not retrieve MAC address.`n" } } function Install-CommonTools { Write-Log "`nInstalling tools and dependencies via winget..." try { winget install -e --id Notepad++.Notepad++ --accept-source-agreements --accept-package-agreements winget install -e --id Microsoft.DotNet.DesktopRuntime.8 --accept-source-agreements --accept-package-agreements winget install -e --id Microsoft.VCRedist.2015+.x64 --accept-source-agreements --accept-package-agreements Write-Log "Installation completed.`n" } catch { Write-Log "Installation error: $_" } } function Disable-UACAndNotifications { Write-Log "`nDisabling UAC and notifications..." try { Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLUA -Value 0 Set-ItemProperty -Path REGISTRY::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -Value 0 New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender Security Center\Notifications" -Force | Out-Null Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender Security Center\Notifications" -Name "DisableEnhancedNotifications" -Type DWord -Value 1 Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search -Name SearchBoxTaskbarMode -Value 0 -Type DWord -Force Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False Write-Log "UAC and notifications disabled.`n" } catch { Write-Log "Error while configuring system: $_" } } # GUI $form = New-Object System.Windows.Forms.Form $form.Text = "Pilot Installer" $form.Size = New-Object System.Drawing.Size(760,500) $form.StartPosition = "CenterScreen" $buttons = @( @{ Text = "Install Portrait"; Action = { Install-Pilot -Mode "Portrait" } }, @{ Text = "Install Dual"; Action = { Install-Pilot -Mode "Dual" } }, @{ Text = "Install Botoneira"; Action = { Install-Pilot -Mode "Botoneira" } }, @{ Text = "Exit"; Action = { $form.Close() } } ) $x = 10 foreach ($btn in $buttons) { $button = New-Object System.Windows.Forms.Button $button.Text = $btn.Text $button.Size = New-Object System.Drawing.Size(170,30) $button.Location = New-Object System.Drawing.Point($x,20) $button.Add_Click($btn.Action) $form.Controls.Add($button) $x += 180 } $outputBox = New-Object System.Windows.Forms.TextBox $outputBox.Multiline = $true $outputBox.ScrollBars = "Vertical" $outputBox.ReadOnly = $true $outputBox.Size = New-Object System.Drawing.Size(720,370) $outputBox.Location = New-Object System.Drawing.Point(10,70) $outputBox.Font = New-Object System.Drawing.Font("Consolas",10) $outputBox.Name = "OutputTextBox" $form.Controls.Add($outputBox) $form.Topmost = $true $form.ShowDialog()