<# fws-play.ps1 — session de jeu Windows orchestree pour le retour vers FWS. Flux robuste : - on desactive la tache ONSTART (evite qu'un declenchement tardif ne rearme FWS EN PLEIN MATCH) ; - on arme le boot suivant vers WINDOWS (un crash/reboot pendant le jeu revient sur Windows, pas ejecte vers FWS au milieu d'un match) ; - on lance Valorant et on attend sa fermeture OU son crash ; - dans un FINALLY (donc quoi qu'il arrive) : on rearme le boot suivant vers FWS, on reactive la tache ONSTART, et on reboote — SEULEMENT si le jeu a bien ete vu (pas de reboot force en plein 1er telechargement de patch). Le filet permanent BootOrder[0]=FWS couvre tout ce que ce script raterait. A lancer a l'ouverture de session du compte gaming (autologin) ou a la main. Doit tourner EN ADMIN. #> $ErrorActionPreference = 'Stop' $here = Split-Path -Parent $MyInvocation.MyCommand.Path $return = Join-Path $here 'fws-return.ps1' $taskName = 'FWS-Return-OnStart' $seen = $false try { # Neutraliser la course avec la tache ONSTART pendant la session. try { Disable-ScheduledTask -TaskName $taskName -ErrorAction Stop | Out-Null } catch { } # Pendant la session, un crash/reboot doit rester sur WINDOWS. try { & $return -Target Windows } catch { Write-Warning "Arm Windows a echoue : $_" } # Lancer Valorant via le Riot Client (adapter le chemin si necessaire). $riot = Join-Path $Env:ProgramFiles 'Riot Games\Riot Client\RiotClientServices.exe' if (Test-Path $riot) { Start-Process $riot -ArgumentList '--launch-product=valorant','--launch-patchline=live' } else { Write-Warning "Riot Client introuvable : $riot — lance Valorant manuellement." } # Attendre l'apparition du process (SANS plafond serre : un 1er patch Riot / # une MAJ Vanguard peuvent etre longs), puis attendre sa fermeture/crash. $proc = 'VALORANT-Win64-Shipping' for ($i = 0; $i -lt 1440; $i++) { # ~2 h max d'attente d'apparition if (Get-Process $proc -ErrorAction SilentlyContinue) { $seen = $true; break } Start-Sleep -Seconds 5 } if ($seen) { Get-Process $proc -ErrorAction SilentlyContinue | ForEach-Object { $_.WaitForExit() } } else { Write-Warning "Jeu jamais detecte — pas de reboot automatique." } } finally { # Rearmer FWS et reactiver la tache, QUOI QU'IL ARRIVE. try { & $return -Target FWS } catch { Write-Warning "Arm FWS a echoue : $_ — BootOrder[0]=FWS reste le filet." } try { Enable-ScheduledTask -TaskName $taskName -ErrorAction Stop | Out-Null } catch { } if ($seen) { Start-Sleep -Seconds 2 Restart-Computer -Force } else { Write-Warning "Session sans jeu detecte : redemarre manuellement pour revenir a FWS (BootNext deja arme vers FWS)." } }