Files
MSCO/MODDING.md
T
MrMahoandClaude Opus 5.5 4c1366b5d9 MSCO 2.10.0: mod support, ESC no longer quits from the main menu
- MscoMod API (ModApi.cs) and ModLoader: own mods from MSCO\Mods, hooks for menu/game/update/GUI,
  session and player events, Send/OnMessage between players (MsgType.ModMessage)
- Server mods: ModList before Welcome, consent prompt (INSTALL & JOIN), download with SHA-256 check
  into MSCO\Mods\Servers, active only on that server; game start waits for the download
- Mods page in the MSCO menu, console command "mods"
- Server browser: MODS pill, VANILLA/MODDED filters, mod list in the server profile
- PlayMaker ApplicationQuit is ignored in the main menu (ESC used to close the game)
- MODDING.md and examples/HelloMod

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 01:00:16 +02:00

3.9 KiB
Raw Blame History

MSCO-Mods schreiben

MSCO läuft ohne MSCLoader und hat eine eigene, kleine Mod-Schnittstelle. Eine MSCO-Mod ist eine .NET-3.5-DLL mit einer Klasse, die von MSCO.MscoMod erbt. MSCLoader-Mods laufen damit nicht (sie brauchen MSCLoader).

Wo liegen Mods?

Ordner
<Spielordner>\MSCO\Mods\*.dll eigene Mods – immer aktiv, werden beim Spielstart geladen
<Spielordner>\MSCO\Mods\*.dll.off ausgeschaltet (Launcher → Mods)
<Spielordner>\MSCO\Mods\Servers\*.dll Mods von Servern – nur aktiv, solange man auf einem Server ist, der sie verlangt
Server: data/mods/*.dll Mods, die der dedizierte Server an seine Spieler verteilt (Web-Panel → Mods)

Im Spiel: Seite Mods im MSCO-Menü, Konsole (F7) mods. Im Launcher: Seite Mods (hinzufügen, aus-/einschalten, entfernen).

Server-Mods

Liegen Mods in data/mods des Servers, bekommt jeder Spieler beim Beitreten die Liste (Name, Version, Größe, SHA-256). Fehlt ihm eine Mod, fragt das Spiel: INSTALL & JOIN lädt sie direkt vom Server (Prüfsumme wird kontrolliert), CANCEL verlässt den Server. Danach geht es ins Spiel. Hat der Spieler dieselbe Datei schon (gleiche Prüfsumme), wird nichts geladen.

Server mit Mods bekommen in der Serverliste automatisch den Tag MODDED; im Server-Browser (Spiel, Launcher, Website) steht, welche Mods sie nutzen, und es gibt Filter VANILLA / MODDED.

Mods sind Programme und laufen mit vollen Rechten auf dem PC der Spieler. Serverbetreiber: nur Mods anbieten, denen ihr vertraut. Spieler: nur auf Servern zustimmen, denen ihr vertraut.

Eine Mod bauen

Vorlage: examples/HelloMod – Projekt (.NET Framework 3.5) mit Verweisen auf UnityEngine.dll (aus mysummercar_Data\Managed) und MSCO.dll (aus <Spielordner>\MSCO, Copy Local aus).

msbuild examples/HelloMod/HelloMod.csproj -p:Configuration=Release -p:GamePath="C:\...\My Summer Car"
using MSCO;
using UnityEngine;

public class HelloMod : MscoMod
{
    public override string ID { get { return "hellomod"; } }      // eindeutig: Buchstaben, Ziffern, . - _
    public override string Name { get { return "Hello Mod"; } }
    public override string Version { get { return "1.0.0"; } }
    public override string Author { get { return "Ich"; } }

    public override void OnGameLoad() { Log("Im Spiel!"); }

    public override void Update()
    {
        if (Input.GetKeyDown(KeyCode.H)) Send(System.Text.Encoding.UTF8.GetBytes("wave"));
    }

    public override void OnMessage(int fromPlayerId, byte[] data)
    {
        string name;
        Log((Players.TryGetValue(fromPlayerId, out name) ? name : "?") + " winkt");
    }
}

Name und Version, die Launcher und Server-Panel anzeigen, kommen aus den Assembly-Attributen (AssemblyProduct, AssemblyInformationalVersion).

Schnittstelle

Mitglied
ID, Name, Version, Author Angaben zur Mod (ID und Name müssen überschrieben werden)
OnLoad() einmal nach dem Laden
OnMenuLoad(), OnGameLoad() Hauptmenü bzw. Spiel (Szene GAME) geladen
Update(), FixedUpdate(), OnGUI() jeden Frame (wie bei Unity)
OnSessionStart(), OnSessionEnd() mit Server/Host verbunden bzw. getrennt
OnPlayerJoined(id, name), OnPlayerLeft(id, name) Mitspieler kommt/geht
OnMessage(fromPlayerId, data) Daten, die dieselbe Mod (gleiche ID) bei einem anderen Spieler mit Send geschickt hat
Send(byte[] data) an dieselbe Mod bei allen anderen Spielern (bis 60 KB; P2P und dedizierter Server)
IsInSession, IsHost, LocalPlayerId, Players Sitzung, eigene ID, Spieler (ID → Name)
Log(text), LogWarning(text) in die MSCO-Konsole (F7) und output_log.txt

Fehler in einer Mod fängt MSCO ab und schreibt sie ins Log. Wirft eine Mod ständig Fehler (50×), wird sie abgeschaltet. Harmony 1.2 (0Harmony.dll) liegt neben MSCO.dll und kann von Mods mitbenutzt werden.