Verbunden wird nur beim Start ueber die Lobby, bricht die Verbindung ab alle 10 s neu (nicht nach Ablehnung oder Konto-Problem). release.ps1 legt jetzt Gitea-Releases mit bso-release.json an. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.4 KiB
BSO – Bus Simulator Online
Multiplayer-Mod für Bus-Simulator 2012 (European Bus Simulator 2012, TML-Studios), aufgebaut wie MSCO: eigenständiger Loader im Spielordner, die Mod selbst in C# (.NET 10).
- Mod: dieses Repository
- Lobby-Server (ohne Portfreigabe): BSO-Relay
- Launcher (installiert und aktualisiert die Mod): BSO-Launcher
- Website, Konten, Freunde, Lobbys, Releases: BSO-Website
Stand: Freunde spielen zusammen in einer Lobby – der Server läuft im BSO-Relay, die Mod verbindet sich per WebSocket, niemand braucht eine Portfreigabe. Mitspieler erscheinen als Bus bzw. Spielfigur mit Namensschild in der Welt.
Wie es funktioniert
| Teil | Was | MSCO-Gegenstück |
|---|---|---|
Loader\dinput8.cpp |
Proxy-DLL dinput8.dll im Spielordner: reicht alles an die echte DirectInput-DLL weiter, startet .NET und ruft die Mod jedes Bild auf |
Unity Doorstop (winhttp.dll) |
Bootstrap.cs |
Einstieg (Start, OnFrame), Protokoll |
Bootstrap.cs |
Vision.cs |
Aufrufe in die Havok Vision Engine (Vision90.dll exportiert ihre Funktionen mit Namen) |
UnityEngine-Referenz |
Rtti.cs, Entities.cs |
Spielobjekte und ihre Klassennamen (CarVehicle, KeyControlledCharacter …) finden |
– |
LocalPlayer.cs |
eigene Figur und eigener Bus, daraus der PlayerState |
– |
Multiplayer.cs |
Verbindung zum Server, Mitspieler | MultiplayerManager.cs |
Config.cs |
BSO.json (Name, Server, AutoConnect) |
– |
PositionHud.cs |
Anzeige im Spiel | Overlays.cs |
BorderlessWindow.cs |
Vollbild im Fenster (F11) | – |
RemotePlayers.cs, Models.cs |
Mitspieler als Bus/Spielfigur in der Welt, Namensschild | RemotePlayer.cs |
Shared\*.cs |
Protokoll, Connection, Ticket, RelayClient (WebSocket-Brücke) – gleiche Dateien wie in BSO-Relay |
NetSession.cs |
- Bild-Takt: Das Spiel fragt die Tastatur mehrmals pro Bild über DirectInput ab. Der Loader hängt sich dort ein
und ruft
Bootstrap.OnFrameim Hauptthread auf. Gerechnet wird, wenn die Engine-Uhr weiterläuft; Text wird bei jedem Aufruf ausgegeben (sonst flackert er). Spielcode wird nicht verändert. - Speicher lesen:
Memprüft jede Adresse vorher, denn ein falscher Zeiger würde das Spiel abstürzen lassen. - Netzwerk wie MSCO:
[int Länge][byte Typ][Daten]über TCP, Lesen perPoll()im Hauptthread, Senden über eigenen Thread. Jeder Spieler schickt 10× pro Sekunde seinen Zustand, der Server verteilt ihn. - Nur die 64-Bit-Version (
Bin_High_Win64). Steam startet sie auf 64-Bit-Windows automatisch. - Die Engine rechnet in cm. Der eigene Bus ist ein
CarVehicle(Ursprung ~5 m hinter dem Fahrersitz). Solange man im Bus sitzt, ist die Spielfigur (KeyControlledCharacter) aus der Szene verschwunden.
Installation
Mit dem Launcher (empfohlen): BSO-Launcher installiert und aktualisiert BSO und startet das Spiel.
Von Hand: dinput8.dll nach <Spielordner>\Bin_High_Win64, BSO.dll, BSO.runtimeconfig.json und
BSO.deps.json nach Bin_High_Win64\BSO. Braucht die .NET 10 Runtime (x64).
Bauen
Voraussetzungen: Visual Studio mit C++, .NET 10 SDK.
.\build.ps1 # -> dist\dinput8.dll, dist\BSO\, dist\BSO-Mod.zip
.\install.ps1 # -> F:\SteamLibrary\steamapps\common\Bus-Simulator 2012\Bin_High_Win64
.\install.ps1 -Uninstall
.\release.ps1 -Product mod -Version 0.2.0 -File dist\BSO-Mod.zip -Changelog "..."
Test ohne Spiel: Loader\ProxyTest.cpp lädt die Proxy-DLL wie das Spiel (Bauen siehe Kopf der Datei).
Im Spiel
| Taste | |
|---|---|
| F9 | Anzeige ein/aus |
| F10 | alle Objekte der Szene nach Bin_High_Win64\BSO\entities.txt (Diagnose) |
| F11 | Vollbild im Fenster ↔ normales Fenster (nur wenn im Spiel „Vollbild“ aus ist) |
Einstellungen in Bin_High_Win64\BSO\BSO.json (der Launcher schreibt Name und Server hinein):
{
"Name": "MrMaho",
"Server": "127.0.0.1:7777",
"AutoConnect": false
}
Protokoll: Bin_High_Win64\BSO\BSO_Loader.txt
Nächste Schritte
Mod lädt, Busposition anzeigenNetzwerk: Server + Positionen austauschen, Mitspieler als TextMitspieler-Busse in der Welt, NamensschildKonten, Freunde, Lobby ohne Portfreigabe (BSO-Relay)- Direkt ins Spiel laden, Chat, Türen/Lichter