Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
SharedLGUCurrency
Host-authoritative single crew wallet for LGU Player Credits, with atomic purchases and MilkMolars integration.
By K0IN_TS
| Date uploaded | 17 hours ago |
| Version | 1.0.0 |
| Download link | K0IN_TS-SharedLGUCurrency-1.0.0.zip |
| Downloads | 4 |
| Dependency string | K0IN_TS-SharedLGUCurrency-1.0.0 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305malco-Lategame_Upgrades
Mod focused on providing many upgrades which are purchaseable from the terminal through an interactive application. Most if not all of the available upgrades are configurable to allow customized experiences to everyone's liking.
Preferred version: 3.14.1Snowlance-MilkMolars
Adds 2 new scrap items as an alternative way to earn LateGameUpgrades points! Picking up a Milk Molar rewards points that can be spent on upgrades when using the alternative currency system. Highly customizable.
Preferred version: 1.0.0README
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 Amounteinmal für die Crew. - Ein Mega Milk Molar verhält sich genauso; bei
Contribute Amount = 3entstehen 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
- Installiere ChumpsModpack beziehungsweise mindestens BepInEx, LateGameUpgrades 3.14.1 und MilkMolars 1.0.0.
- Importiere
SharedLGUCurrency-1.0.0.zipals lokalen Mod oder veröffentliche/installiere das Thunderstore-Paket. - Aktiviere die oben genannten LGU- und MilkMolars-Einstellungen für alle Profile.
- 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.
- Host bringt einen normalen Molar zurück: Balance steigt um 1.
- Client bringt einen normalen Molar zurück: Balance steigt insgesamt um 1.
- Client bringt einen Mega Molar zurück: Balance steigt insgesamt um 3.
- Host kauft ein Upgrade: Preis wird einmal abgezogen; das Shared-Upgrade wird bei allen aktiv.
- Client kauft ein Upgrade: identisches Ergebnis.
- Zwei Clients bestätigen bei nur einmal ausreichendem Guthaben gleichzeitig: genau ein Kauf wird genehmigt.
- Ein Client joint bei bestehender Balance: LGU zeigt nach dem Sync sofort den Host-Wert.
- Ein Spieler verlässt die Lobby: Balance bleibt unverändert.
- Quota Failure/LGU Reset: Balance wird bei aktivierter Reset-Option einmal auf null gesetzt.
- 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-Commitcef482fadedf06a97300cfb25dcfc5a6e45d2cec - MilkMolars,
1.0.0, Source-Commitc7b261a98965152a7429176e03432d04d2938c8f
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.
CHANGELOG
Changelog
1.0.0
- Added one host-authoritative crew wallet for LGU Player Credits.
- Added atomic, server-validated LGU alternative-currency purchases with rollback.
- Added Milk Molar and Mega Milk Molar rewards credited once per network object.
- Added late-join synchronization, replay protection, disconnect-safe ownership and LGU reset handling.
- Added optional suppression of LGU quota currency.
- Added safe blocking of LGU 3.14.1 per-player credit trade, conversion and Player Credit refund paths.
- Added Windows build and Thunderstore packaging scripts.