Build & Deploy / build (push) Successful in 28s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
103 lines
4.2 KiB
Markdown
103 lines
4.2 KiB
Markdown
# ProspectServerSwitcher
|
|
|
|
Petit utilitaire **multi-OS** (Linux/Proton + Windows) pour pointer un client
|
|
*The Cycle: Frontier* vers un serveur, importer le certificat, et lancer le jeu.
|
|
|
|
## Pourquoi
|
|
|
|
L'agent Prospect (`Prospect.Agent.dll`, injecté par `Prospect.Client.Loader.exe`)
|
|
hooke l'URL de l'API PlayFab et la remplace par le contenu de **`backend.txt`**,
|
|
placé à côté de l'exécutable du jeu (`Prospect/Binaries/Win64`). S'il est absent,
|
|
l'agent retombe sur `https://127.0.0.1:8443`.
|
|
|
|
**Tout l'aiguillage du client tient donc dans cette seule valeur.** Cet outil ne fait
|
|
essentiellement qu'écrire le bon `backend.txt` — plus quelques commodités (cert, launch).
|
|
|
|
## Serveurs (presets)
|
|
|
|
Les presets utilisent les **domaines publics** pour que la même cible marche pour
|
|
tout le monde (le DNS résout vers l'IP publique pour les amis, et le certificat TLS
|
|
unifié couvre les deux hostnames) :
|
|
|
|
| Preset | URL |
|
|
|-----------|----------------------------------|
|
|
| `prod` | `https://tc.nfteam.ovh:8443` |
|
|
| `preprod` | `https://rd-tc.nfteam.ovh:8444` |
|
|
|
|
> **Sur le même LAN que le serveur**, ajoute une entrée hosts pour éviter le hairpin NAT :
|
|
> ```
|
|
> 192.168.1.136 tc.nfteam.ovh
|
|
> 192.168.1.136 rd-tc.nfteam.ovh
|
|
> ```
|
|
|
|
## Utilisation
|
|
|
|
### Menu interactif
|
|
Lance le binaire sans argument :
|
|
- **1** : définir le dossier du jeu (`…/Prospect/Binaries/Win64`) — mémorisé
|
|
- **2/3** : basculer sur PROD / PREPROD
|
|
- **4** : URL personnalisée
|
|
- **5** : importer un certificat (`.crt`)
|
|
- **6** : lancer le jeu
|
|
- **0** : quitter
|
|
|
|
### En ligne de commande (scriptable)
|
|
```
|
|
ProspectServerSwitcher --folder "<...>/Prospect/Binaries/Win64" --set preprod
|
|
ProspectServerSwitcher --set prod
|
|
ProspectServerSwitcher --set https://mon-serveur:8443 # URL libre
|
|
```
|
|
|
|
> ⚠️ `backend.txt` n'est lu qu'**au démarrage** du loader → relance le jeu après un switch.
|
|
> Le serveur ciblé doit **tourner** (conteneurs on-demand `the-cycle-api` / `the-cycle-api-rd`).
|
|
|
|
## Certificat
|
|
|
|
L'outil récupère le certificat **en direct depuis le serveur** ciblé (il lit `backend.txt`
|
|
et se connecte en TLS), puis le rend fiable :
|
|
|
|
- **Windows** : import automatique dans *Autorités de certification racines de confiance*
|
|
(utilisateur courant), via le magasin `X509Store`.
|
|
- **Linux/Proton** : import **automatique dans le préfixe Wine** du jeu. Comme `wine certutil`
|
|
est cassé sous Proton, l'outil écrit directement le *blob* sérialisé du certificat
|
|
(propriété SHA1 `id=3` + certificat encodé `id=0x20`) dans le magasin `Root` du préfixe via
|
|
`wine reg import`. Il :
|
|
1. détecte le binaire `wine` de Proton (`…/common/Proton*/files/bin/wine`),
|
|
2. liste les préfixes `compatdata/*/pfx` (le plus récemment utilisé en premier),
|
|
3. importe dans le préfixe choisi (⚠️ **le jeu doit être fermé**), mémorisé ensuite.
|
|
|
|
> ⚠️ Le client tourne souvent comme **raccourci non-Steam** → son préfixe n'est **pas**
|
|
> `compatdata/868270` mais un appid généré (ex. `3883998305`). D'où la sélection explicite
|
|
> du préfixe plutôt qu'une déduction sur l'appid du jeu.
|
|
|
|
## Lancement
|
|
|
|
- **Windows** : démarre `Prospect.Client.Loader.exe` depuis le dossier du jeu.
|
|
- **Linux/Proton** : passe par Steam (`steam steam://rungameid/868270`) — le loader doit
|
|
tourner dans le préfixe Proton.
|
|
|
|
## Réglages
|
|
|
|
Le dossier du jeu est mémorisé dans
|
|
`…/ApplicationData/ProspectSwitcher/settings.json`
|
|
(`%AppData%` sous Windows, `~/.config` sous Linux).
|
|
|
|
## Build / publication
|
|
|
|
Projet console **net8.0** (cross-platform, `InvariantGlobalization`), jamais buildé par
|
|
la CI serveur (Linux).
|
|
|
|
```bash
|
|
# build simple
|
|
dotnet build src/Prospect.Client.Config -c Release
|
|
|
|
# binaires autonomes single-file (aucun .NET requis chez l'utilisateur)
|
|
dotnet publish src/Prospect.Client.Config -c Release -r win-x64 --self-contained \
|
|
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true
|
|
dotnet publish src/Prospect.Client.Config -c Release -r linux-x64 --self-contained \
|
|
-p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true
|
|
```
|
|
|
|
Les binaires publiés sont distribués via la release Gitea **`friends-client`**
|
|
(`ProspectServerSwitcher.exe` pour Windows, `ProspectServerSwitcher-linux-x64` pour Linux).
|