Lethal Company
Install

Details

Last Updated
First Uploaded
Downloads
1
Likes
0
Size
230KB
Dependency string
K0IN_TS-SharedLGUCurrency-1.0.0
Dependants

SharedLGUCurrency

SharedLGUCurrency ersetzt LGUs lokale Player-Credit-Guthaben durch genau eine host-authoritative Crew-Wallet. LGUs CurrencyAmount bleibt auf jedem Client nur als Anzeige-Cache erhalten; Kaufkraft und Transaktionsentscheidung existieren ausschließlich beim Host.

Zielversionen:

  • Lethal Company V81
  • BepInEx 5.x
  • LateGameUpgrades 3.14.1
  • MilkMolars 1.0.0
  • ChumpsModpack V81

Alle Spieler in der Lobby müssen SharedLGUCurrency in derselben Version installiert haben.

Verhalten

  • Ein normaler Milk Molar erzeugt genau den konfigurierten Contribute Amount einmal für die Crew.
  • Ein Mega Milk Molar verhält sich genauso; bei Contribute Amount = 3 entstehen insgesamt drei PC, nicht drei pro Spieler.
  • Jeder Client spiegelt denselben Host-Kontostand in LGUs Terminal/UI.
  • Alternative-Currency-Käufe werden an den Host gesendet. Der Host ermittelt Upgrade, aktuellen Levelzustand und Preis erneut, prüft das Guthaben, bucht atomar ab und lässt erst danach LGUs Shared-Upgrade-RPC laufen.
  • Gleichzeitige Käufe werden auf dem Host seriell verarbeitet. Eine veraltete Preis-/Levelanfrage wird abgelehnt.
  • Late Joiner erhalten automatisch den aktuellen Kontostand.
  • Disconnects ändern die Wallet nicht.
  • LGU-Resets setzen standardmäßig auch die Crew-Wallet zurück.
  • Quota-Currency ist standardmäßig deaktiviert. Wird sie aktiviert, verarbeitet nur der Host die Auszahlung einmal.

Erforderliche LGU-Konfiguration

In BepInEx/config/com.malco.lethalcompany.moreshipupgrades.cfg:

[_Alternative Currency_]
Enable Alternative Currency System = true
Enable Global Purchase = true
Global Purchase Mode = AlternateCurrency

[_Misc_]
Convert all upgrades to be shared. = true

Global Purchase Mode = Both funktioniert ebenfalls, wenn Company Credits neben Player Credits erlaubt bleiben sollen. Für den beschriebenen Molar-Gameplay-Loop ist AlternateCurrency eindeutig.

Empfehlung: All Upgrades Refundable = false. LGU 3.14.1 führt Player-Credit-Refunds und Konvertierungs-Nebeneffekte lokal aus; SharedLGUCurrency blockiert diese unsicheren Player-Credit-Pfade deshalb standardmäßig.

Empfohlene MilkMolars-Konfiguration

Die tatsächlichen Abschnittsnamen von MilkMolars 1.0.0 lauten Milk Molar Options und Mega Milk Molar Options:

[Milk Molar Options]
Milk Molar | Contribute Amount = 1
Milk Molar | Shared Contribute Amount = 0
Milk Molar | Activate Method = ReturnToShip

[Mega Milk Molar Options]
Mega Milk Molar | Contribute Amount = 3
Mega Milk Molar | Shared Contribute Amount = 0
Mega Milk Molar | Activate Method = ReturnToShip

ForceSharedContributeAmountToZero = true erzwingt den Shared-Wert zusätzlich zur Laufzeit. Die Gutschrift geschieht auf dem Host direkt in ActivateMolarRpc und wird anhand von MilkMolars' NetworkObjectId dedupliziert. Bei ReturnToShip akzeptiert der Host die Belohnung nur, wenn der aktivierende Spieler oder das Objekt im Schiff ist.

Eigene Konfiguration

Nach dem ersten Start entsteht BepInEx/config/timo.sharedlgucurrency.cfg:

[General]
Enabled = true

[MilkMolars]
ForceSharedContributeAmountToZero = true

[Currency]
DisableQuotaCurrency = true
ResetSharedCurrencyOnLGUReset = true
DisableUnsafePlayerCreditOperations = true

[Networking]
VerboseLogging = false
MaximumExternalDeltaPerRequest = 1000

DisableUnsafePlayerCreditOperations blockiert LGUs Player-Credit-Trade, beide Credit-Konvertierungen und Player-Credit-Refunds. Diese LGU-3.14.1-Pfade verändern jeweils einen zweiten Zustand, bevor eine asynchrone Wallet-Anfrage bestätigt wäre, und wären daher nicht transaktional. Company-Credit-Käufe und Company-Credit-Refunds bleiben unverändert.

Installation mit r2modman / Thunderstore Mod Manager

  1. Installiere ChumpsModpack beziehungsweise mindestens BepInEx, LateGameUpgrades 3.14.1 und MilkMolars 1.0.0.
  2. Importiere SharedLGUCurrency-1.0.0.zip als lokalen Mod oder veröffentliche/installiere das Thunderstore-Paket.
  3. Aktiviere die oben genannten LGU- und MilkMolars-Einstellungen für alle Profile.
  4. Stelle sicher, dass alle Mitspieler die Mod installiert haben.

Manuelle Installation

Kopiere SharedLGUCurrency.dll nach beispielsweise:

Lethal Company/BepInEx/plugins/SharedLGUCurrency/SharedLGUCurrency.dll

Die Abhängigkeiten müssen ebenfalls installiert sein. Starte das Spiel einmal, um die Config zu erzeugen.

Build unter Windows

Benötigt wird das .NET 8 SDK oder neuer. Ein vorhandener dotnet-Host ohne SDK reicht nicht aus.

dotnet restore .\SharedLGUCurrency.csproj
dotnet build .\SharedLGUCurrency.csproj -c Release

Für DLL und Thunderstore-ZIP genügt:

.\build.ps1

oder ein Doppelklick auf BUILD_EASY_WINDOWS.bat. Das Skript setzt den Build-Ausgabeordner ausdrücklich, kopiert die DLL nach dist/SharedLGUCurrency.dll und erzeugt dist/SharedLGUCurrency-1.0.0.zip mit:

SharedLGUCurrency.dll
manifest.json
README.md
CHANGELOG.md
icon.png

Multiplayer-Testplan

Für aussagekräftige Tests VerboseLogging = true setzen und Host- sowie Client-Logs aufbewahren.

  1. Host bringt einen normalen Molar zurück: Balance steigt um 1.
  2. Client bringt einen normalen Molar zurück: Balance steigt insgesamt um 1.
  3. Client bringt einen Mega Molar zurück: Balance steigt insgesamt um 3.
  4. Host kauft ein Upgrade: Preis wird einmal abgezogen; das Shared-Upgrade wird bei allen aktiv.
  5. Client kauft ein Upgrade: identisches Ergebnis.
  6. Zwei Clients bestätigen bei nur einmal ausreichendem Guthaben gleichzeitig: genau ein Kauf wird genehmigt.
  7. Ein Client joint bei bestehender Balance: LGU zeigt nach dem Sync sofort den Host-Wert.
  8. Ein Spieler verlässt die Lobby: Balance bleibt unverändert.
  9. Quota Failure/LGU Reset: Balance wird bei aktivierter Reset-Option einmal auf null gesetzt.
  10. Vier Spieler bringen je einen normalen Molar: Endstand ist 4, nicht 16.

Zusätzlich sollten veraltete Kaufdialoge, Molar-Doppelaktivierungen und Client-Anfragen oberhalb von MaximumExternalDeltaPerRequest als abgelehnt im Log erscheinen.

Architektur und Sicherheitsgrenzen

Das Netzwerkprotokoll verwendet Unity Netcode CustomMessagingManager. Der Host hält SharedBalance und SpentBalance; Clients können nur Deltas oder Käufe anfragen. Nachrichten tragen Nonces gegen Replay. Die strengen Gameplay-Pfade werden serverseitig validiert:

  • Molar: Netzwerkobjekt, Aktivator, ReturnToShip-Zustand und Betrag aus der servergeschriebenen NetworkVariable.
  • Kauf: Upgrade-Name, Shared-Status, Level/Max-Level, aktueller LGU-Preis und verfügbares Crew-Guthaben.

Beliebige Drittmods, die nur CurrencyManager.AddCurrencyAmount/RemoveCurrencyAmount aufrufen, werden ebenfalls zur Host-Wallet geroutet. Da LGUs API dabei keinen Ereignisbeleg oder Objektbezug übergibt, kann der Host für solche generischen Aufrufe lediglich Absender, Replay und Delta-Grenze validieren. Vollständig manipulierte Clients lassen sich in einem client-moddbaren Peer-to-Peer-Spiel nicht kryptografisch absichern.

Echte Host-Migration wird von Lethal Company/Unity Netcode in diesem Ablauf nicht bereitgestellt. Verlässt der Host, endet die Sitzung; die Wallet migriert nicht zu einem neuen Host.

MonsterDropsPatch

MonsterDropsPatch benötigt keinen Sonderpatch. SharedLGUCurrency verändert weder Hunter-Samples noch Scrap-Werte oder Company Credits. Nur LGUs Player-Credit-Manager, LGUs alternativer Kaufpfad und MilkMolars-Aktivierungen werden abgefangen. Hunter-/MonsterDrops-Samples bleiben normale Scrap-/Company-Credit-Belohnungen, sofern eine andere Mod sie nicht ausdrücklich an LGUs CurrencyManager weiterleitet.

Gegen die Zielquellen entwickelt

  • LateGameUpgrades, 3.14.1, Source-Commit cef482fadedf06a97300cfb25dcfc5a6e45d2cec
  • MilkMolars, 1.0.0, Source-Commit c7b261a98965152a7429176e03432d04d2938c8f

Die Integration nutzt Reflection nur für LGU/MilkMolars-Typen; dadurch gibt es keine direkte Compile-Time-DLL-Referenz auf diese Mods. Die BepInEx-/Thunderstore-Abhängigkeiten stellen trotzdem die korrekte Lade-Reihenfolge sicher.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.