No description
  • Rust 99.6%
  • Python 0.3%
  • Shell 0.1%
Find a file
2026-10-28 21:31:45 +00:00
docs diagnostics: a secret on the next line stays hidden; V2-STATUS limits 2026-10-28 15:51:28 +01:00
scripts v2 W0: alap – modulok, közös típusok, config v2, GUI keret 2026-10-27 23:34:19 +01:00
src diagnostics: a secret on the next line stays hidden; V2-STATUS limits 2026-10-28 15:51:28 +01:00
tests Verifier fixes: safety, CLI parity, GUI layout and wording 2026-10-28 15:45:33 +01:00
.gitignore lcsync: Lethal Company modpack szinkron Forgejo-hoz (GUI + CLI) 2026-10-27 21:46:48 +01:00
Cargo.lock v2 W0: alap – modulok, közös típusok, config v2, GUI keret 2026-10-27 23:34:19 +01:00
Cargo.toml Verifier fixes: safety, CLI parity, GUI layout and wording 2026-10-28 15:45:33 +01:00
README.md Update README.md 2026-10-28 21:31:45 +00:00
rustfmt.toml v2 W0: alap – modulok, közös típusok, config v2, GUI keret 2026-10-27 23:34:19 +01:00

Steve Metrodick's Awesome Modpack Syncer (SMAMS)

Lethal Company (BepInEx) modpackek pontos tükrözése egy Forgejo szerveren keresztül.

A modpack tulaja feltölti a saját profilja állapotát, a barátai pedig egy gombnyomással pontosan ugyanazt kapják: ugyanazok a fájlok, a fölösleges modok törlődnek, a configok felülíródnak. Ezen felül az lcsync egyszerű modkezelő is: profilokat kezel, Thunderstore-ról telepít, és indítja a játékot.

  • lcsync: a grafikus program (Windows és Linux).
  • lcsync-cli: ugyanez parancssorból, haladóknak és teszteléshez (lásd Parancssor).

Tartalom: Fogalmak · Barátoknak · Modpack tulajnak · Gale-lel együtt · Hibakeresés · Parancssor · Hogyan működik · Fejlesztés


Fogalmak

  • Profil: egy mappa a modokkal (BepInEx/ és a doorstop fájlok). A bal oldali sávban választod ki, minden művelet a kiválasztott profilon fut. Háromféle van:
    • Saját profil: az lcsync saját mappájában (profiles/<azonosító>), teljesen az lcsync kezeli.
    • Gale profil: a Gale egyik profilja, helyben. Alapból csak olvasható (lásd Gale-lel együtt).
    • Mappa profil: bármilyen mappa, amit te választasz ki (akár a játék mappája).
  • Modpack: egy nyilvános repó a Forgejo szerveren. A tulaj ide tölti fel a profilját.
  • Meghívókód: lcsync1:… kezdetű szöveg. Ebből tudja az lcsync, melyik szerverről és repóból frissítsen. Jelszót és tokent nem tartalmaz, nyugodtan elküldheted chaten.
  • Egy profil vagy feliratkozott (egy barátod modpackjét tükrözi), vagy saját modpack (te töltöd fel), vagy egyik sem.

Barátoknak: csatlakozás, frissítés, indítás

  1. Töltsd le és indítsd el az lcsync programot. Első indításkor a Csatlakozás oldal nyílik meg.
  2. Másold be a Meghívókódot, amit a modpack tulajától kaptál. Az lcsync megmutatja a modpack nevét, verzióját és méretét.
  3. Válaszd ki, hova kerüljön:
    • Új profil (ajánlott): új, üres saját profil. A Gale-t és a többi profilodat nem érinti.
    • Meglévő Gale profil alapján (gyors): saját másolatot készít az egyik Gale profilodról, és csak a különbséget tölti le. A mod fájlokat hardlinkkel veszi át (nem foglal dupla helyet), a configokat lemásolja. A Gale profilod nem változik. Akkor jó, ha a modpack nagy része már megvan a Gale-ben.
    • Meglévő profil: egy profilod helyben. Ha ez Gale profil, az lcsync rákérdez, mielőtt írni kezdene bele (lásd Gale-lel együtt).
  4. Csatlakozás → az lcsync átvált a Frissítés oldalra, és megnézi, mi változott.
  5. ⬇ Frissítés most. Az lcsync előbb mindent letölt és ellenőriz, csak utána cserél és töröl.
  6. Ha azt látod, hogy „✔ Minden naprakész, indíthatod a játékot!”, kattints fent a ▶ Indítás gombra. A Vanilla indítás modok nélkül indítja a játékot. A játékot mindig a Steam indítja.

Később: indításkor az lcsync magától megnézi, van-e új verzió (ezt a Beállításokban kikapcsolhatod: „Indításkor nézze meg, van-e frissítés”). Ha van, a profil mellett és a Frissítés fülön egy pötty jelenik meg. Letölteni csak akkor fog, ha rányomsz a ⬇ Frissítés most gombra. Ha kikapcsolod, indításkor semmit nem néz meg: a Frissítés oldalon a 🔄 Ellenőrzés gombbal kérheted.

A Frissítés oldalon látod:

  • a modpack nevét, verzióját, a tulaj üzenetét és azt, hogy ki töltötte fel;
  • a Modok listát: mi új (+), mi törlődik (−), mi frissül (régi → új verzió), mit kapcsolt ki vagy be a tulaj;
  • a Fájlok listát modonként csoportosítva;
  • a 🔄 Ellenőrzés gombot, ha most azonnal meg akarod nézni.

Saját fájlok megtartása. A frissítés a modpack configjait is felülírja. Ha egy fájlból a sajátodat akarod megtartani (például a billentyűkiosztásodat), a Frissítés oldal alján a „Saját fájlok megtartása” részben add hozzá, például:

BepInEx/config/com.rune580.LethalCompanyInputUtils/*

A * egy mappán belül bármit jelent, a ** több mappán át. A frissítés ezeket a fájlokat nem írja felül és nem törli. A Fájlok listában a felülíródó configok mellett a Megtartom gomb ugyanezt csinálja.

Ne telepíts modot egy feliratkozott profilba (se lcsync-kel, se Gale-lel): a következő frissítés úgyis visszaállítja a modpack állapotát. Ha saját modokat szeretnél, készíts másolatot a Profilok oldalon, és azt módosítsd.

Modpack tulajnak

1. A szerver előkészítése (egyszer, a szerver adminja)

OAuth alkalmazás. A „Bejelentkezés böngészővel” egy OAuth alkalmazást használ a Forgejón:

  1. Forgejo: Beállítások → Alkalmazások → OAuth2 alkalmazások kezelése → új alkalmazás.

    • Név: lcsync
    • Átirányítási cím: http://127.0.0.1/callback (pontosan így: 127.0.0.1, nem localhost)
    • A „Bizalmas kliens” (Confidential client) jelölőt vedd ki. Bizalmas klienssel a véletlen portos visszahívás nem működik.
  2. A kapott client_id-t (a titkos kulcs nem kell) add meg az lcsync-ben:

    • a Közzététel oldalon a bejelentkezésnél a Haladó részben, vagy
    • parancssorból: lcsync-cli login https://git.example.com --client-id <client_id>.

    A client_id nem titok: bekerül a meghívókódba is, így a barátaidnál is megvan, ha később ők is közzétennének valamit. Bármelyik felhasználó használhatja, akkor is, ha más regisztrálta.

Ha nincs client_id beállítva, az lcsync a Forgejo beépített „tea” alkalmazását használja. Ez is működik, de a böngészőben „tea” néven jelenik meg, és ütközhet egy valódi tea bejelentkezéssel. A bejelentkezés jogosultsági köre rögzített (üres = minden); ha egyszer engedélyezted, ne regisztráld újra más beállítással.

Méretkorlátok. A szerveren a [packages] részben a LIMIT_SIZE_GENERIC és a reverse proxy body-limitje (pl. nginx client_max_body_size) legyen legalább akkora, mint a legnagyobb modfájl (most kb. 250 MB).

Nyilvános szervezet, nyilvános repó (ajánlott). A barátaid bejelentkezés nélkül frissítenek. Ez csak akkor működik, ha

  • a modpack repója nyilvános, és
  • a tulaja (felhasználó vagy szervezet) is nyilvános láthatóságú. A fájlok a tulajhoz tartoznak, nem a repóhoz: korlátozott vagy privát tulajnál a letöltés hibát ad, még nyilvános repónál is.

A legjobb egy nyilvános szervezet (pl. lc-modpacks), benne minden modpack egy külön nyilvános repó. A modpack tulajai legyenek tagjai egy csapatnak, amelynek írási joga van a repókhoz és a csomagokhoz. Privát repóval a frissítés nem működik („A modpack privát vagy nem létezik – szólj a tulajnak, hogy legyen nyilvános.”), és valódi titkosságot sem ad.

2. A profil, amit közzéteszel

  • Gale profil helyben: Profilok → Gale profiljaid → Hozzáadás (helyben, csak olvasható), vagy a sor ⬆ Közzététel gombja. A feltöltés csak olvassa a Gale profilt, semmit nem ír bele, és a modlistát a Gale adatbázisából veszi (a kikapcsolt modokkal együtt). A modokat továbbra is a Gale-ben kezeled.
  • Saját másolat: Importálás másolatként (Gale profilból) vagy Importálás mappából. Ezután a modokat az lcsync-ben kezeled: Modok fül (be/kikapcsolás, frissítés, eltávolítás) és Mod böngésző (Thunderstore).
  • Üres profil: Profilok → Új profil → Üres profil. Az lcsync telepíti bele a BepInExPack-et, a többit a Mod böngészőben adod hozzá.

3. Bejelentkezés és közzététel

  1. Válaszd ki a profilt, és nyisd meg a Közzététel fület.

  2. Add meg a szerver címét, és jelentkezz be:

    • Bejelentkezés böngészővel: megnyílik a Forgejo, ott engedélyezd az lcsync-et, majd gyere vissza.
    • 📋 Token beillesztése: ha a böngészős bejelentkezés nem megy. A tokent a Forgejón a Beállítások → Alkalmazások oldalon hozod létre (repository és package írás, user és organization olvasás/írás).

    A bejelentkezés a tokentárba kerül (credentials.json, csak a te felhasználód olvashatja), nem a beállítások közé. Az lcsync magától frissíti; kb. 30 nap feltöltés nélkül újra be kell jelentkezned.

  3. Kösd össze a profilt egy repóval:

    • Új modpack létrehozása: nyilvános repót hoz létre (a saját neved alatt vagy egy szervezetedben), lcsync-modpack címkével;
    • Meglévő repó: egy már létező repó. Az lcsync figyelmeztet, ha a repó vagy a tulaja nem nyilvános.
  4. 🔄 Változások megnézése: megmutatja, mi változott a legutóbbi feltöltés óta, modonként (új, törölt, frissített, ki/bekapcsolt) és fájlonként.

  5. Írd be, mit változtattál, és ⬆ Feltöltés. Csak az új fájlok mennek fel. Ha semmi nem változott, nem készül új verzió („Nincs változás a legutóbbi feltöltés óta.”).

  6. Meghívókód készítése → 📋 Másolás, és küldd el a barátaidnak.

Előzmények. Az Előzmények fülön látod a modpack összes verzióját (dátum, üzenet, mod-változások). A Visszaállítás erre a verzióra egy régebbi állapotot tesz közzé új verzióként; a régi fájlok sosem törlődnek a szerverről, ezért ez mindig működik.

Több modpack: minden modpack egy külön repó. A fájlok tulajonként közösek, egy fájl csak egyszer töltődik fel.

A saját modpackedre is frissíthetsz (például egy másik gépen). Ilyenkor az lcsync rákérdez, mert a frissítés felülírja a még fel nem töltött helyi változásaidat.

Gale-lel együtt

  • Az lcsync a Gale adatait sosem írja: a Gale adatbázisáról csak egy ideiglenes másolatot olvas.
  • Egy helyben hozzáadott Gale profil alapból csak olvasható: feltölteni lehet belőle, frissíteni nem.
  • Frissíteni egy Gale profilba csak akkor lehet, ha megerősítés után engedélyezed az írást (a Csatlakozásnál vagy a Frissítés oldalon). Ilyenkor:
    • a Gale nem fogja látni a változásokat a saját listájában, hiszen az lcsync a fájlokat írja, nem a Gale adatbázisát;
    • modot telepíteni, törölni vagy kapcsolni lcsync-kel Gale profilban akkor sem lehet;
    • ha a profil a Gale saját szinkronjával is frissül, a Gale indításkor felülírhatja, amit az lcsync letöltött. Az lcsync ezt jelzi.
  • Biztonságosabb a saját másolat (Csatlakozásnál: Meglévő Gale profil alapján (gyors), vagy Profilok → Importálás másolatként): gyors, nem foglal dupla helyet, és a Gale profilod érintetlen marad.

Hibakeresés

Hibakeresés fül (a kiválasztott profilra):

  • Naplók: a BepInEx naplója (LogOutput.log), a játék naplója (Player.log) és az lcsync saját naplója. Megnyitás, Mentés másként…, vagy az utolsó 200 sor közvetlenül a programban.
  • Integritás ellenőrzése: minden fájlt újra beolvas (gyorsítótár nélkül), és összeveti a modpackkel. Eltérésnél a Javítás letölti a hiányzó és módosult fájlokat.
  • Újratelepítés: minden fájlt újra letölt a modpackből, és kicseréli.
  • Ideiglenes fájlok törlése: a félbehagyott letöltések (.lcsync-tmp).
  • Gyorsítótár ürítése: az lcsync hash-gyorsítótára és a BepInEx/cache.
  • 📋 Diagnosztika exportálása (.zip): naplók, fájllista, modlista, rendszeradatok egy zipben. Tokent és jelszót nem tartalmaz. Küldd el ezt a fájlt a modpack tulajának.
  • Alul a profil és a játék mappája, Proton igen/nem, a doorstop verziója és az indítás előtti figyelmeztetések.

Gyakori hibák:

üzenet mit tegyél
A modpack privát vagy nem létezik – szólj a tulajnak, hogy legyen nyilvános. A repó vagy a tulaja nem nyilvános (lásd fent), vagy elírták a meghívókódot.
Ehhez a modpackhez újabb lcsync kell (…). Töltsd le az új verziót! Frissítsd az lcsync-et.
A játék már fut. Zárd be a játékot, mielőtt frissítesz, modot telepítesz vagy indítasz.
Nem találom a Lethal Company-t – add meg a mappát a Beállításokban. Beállítások → A játék mappája → 📁 Tallózás… (a mappa, amiben a Lethal Company.exe van).
Ez a profil csak olvasható (Gale). … Engedélyezd az írást, vagy (inkább) importáld másolatként.
Egy másik lcsync művelet fut ezen a profilon. … Fut a GUI vagy a parancssor egy másik példánya ugyanazon a profilon; várd meg.
Lejárt a bejelentkezés, jelentkezz be újra. Tulajként: Közzététel → bejelentkezés.

Mindig modokkal indul a játék? Ha a játék mappájában van egy BepInEx mappa, a játék minden indításnál betölti. Az lcsync indítás előtt figyelmeztet erre.

Linux / Proton. Az lcsync indításkor elvégzi a szükséges beállítást (winhttp DLL felülbírálás a Proton prefixben, előtte biztonsági mentéssel). Ha a profilod maga a játék mappája, és a játékot a Steamből indítod, a Steam indítási beállításaiba ez kell (a Beállítások is mutatja):

WINEDLLOVERRIDES="winhttp=n,b" %command%

Ha a Proton prefix még nem létezik, indítsd el egyszer a játékot a Steamből.

Hol vannak a fájlok?

Linux Windows
beállítások (config.json) és tokentár (credentials.json) ~/.config/lcsync %APPDATA%\lcsync
saját profilok ~/.local/share/lcsync/profiles %LOCALAPPDATA%\lcsync\data\profiles
gyorsítótár és az lcsync naplója (lcsync.log) ~/.cache/lcsync %LOCALAPPDATA%\lcsync\cache

A Beállítások → Névjegy rész mutatja a pontos útvonalakat; kattintásra a vágólapra másolja őket.

Új lcsync verzió. A Beállítások → lcsync frissítése részben megadhatod, hol jelennek meg az lcsync kiadásai (tulaj/repó a modpack szerverén, vagy teljes cím). Az lcsync ekkor jelzi, ha van újabb verzió, és megnyitja a letöltési oldalt. Magát sosem cseréli le.

Parancssor (lcsync-cli)

Ugyanazt a beállítást és ugyanazokat a profilokat használja, mint a grafikus program, a kettő egyszerre is futhat. A kimenete magyar.

  • Minden parancs elfogadja a --profile <név|azonosító> kapcsolót; enélkül a kiválasztott (aktív) profilon dolgozik. A lcsync-cli profiles list csillaggal jelöli az aktívat.
  • A -y minden kérdésre igennel felel. Terminál nélkül (pl. szkriptből) a kérdéses műveletekhez kötelező: enélkül a parancs nem kérdez és nem is csinál semmit, hanem hibával (kilépési kód 1) leáll.
  • Tokent sosem adj meg a parancssorban. A --token - (vagy érték nélkül --token) és a --read-token - a standard bemenetről olvas, pl. lcsync-cli login https://git.example.com --token - < token.txt.
  • Kilépési kód: 0 siker; 1 hiba (Hiba: … a standard hibakimeneten), vagy nemet mondtál egy kérdésre (Megszakítva., ilyenkor semmi nem változott); 2 hibás használat (ismeretlen parancs vagy kapcsoló, hiányzó vagy rossz érték). Hibás használatnál a program a beállításokhoz hozzá sem nyúl.
Profilok
  profiles list                              profilok (* = aktív)
  profiles create <név> [--no-bepinex]       új saját profil, BepInExPack-kel
  profiles import <név> <mappa|gale-név>     mappa vagy Gale profil (név szerint) importálása saját másolatként
  profiles add-gale <gale-név>               Gale profil hozzáadása helyben (csak olvasható)
  profiles rename <profil> <új név>
  profiles remove <profil> [--files]         --files: a mappát is törli (csak saját profilnál)
  profiles select <profil>                   aktív profil kiválasztása
  gale list                                  a Gale Lethal Company profiljai

Feliratkozás és frissítés
  join <kód>                                 új saját profil a modpack nevével
  join <kód> --new <név>                     új saját profil ezzel a névvel
  join <kód> --profile <profil>              meglévő profil összekötése (Gale profilnál rákérdez)
  join <kód> --from-gale <gale-név> [--name <név>]
                                             saját másolat egy Gale profilról, majd frissítés (gyors)
  join <kód> <mappa>                         (v1 forma) az ilyen mappájú profil, vagy új mappa profil;
                                             Gale profil mappájánál rákérdez, a Gale adatain belül tilos
  status                                     mi változna egy frissítéssel (nem tölt le semmit)
  pull [-y]                                  frissítés
  reinstall [-y]                             minden fájl újratöltése
  verify                                     integritás ellenőrzése (eltérésnél kilépési kód 1)

Modpack tulaj
  login <szerver> [--client-id <id>]         böngészős bejelentkezés (kiírja a címet is)
  login <szerver> --token -                  bejelentkezés tokennel (a standard bemenetről)
  logout [<szerver>] | whoami [<szerver>]    alapból az aktív profil szervere
  publish --owner <tulaj> --repo <repó> [--create] [--name <modpack név>] [--description <leírás>] [--server <szerver>]
                                             a profil összekötése egy repóval (--create: új nyilvános repó)
  push "<üzenet>" [-y]                       feltöltés (változás nélkül nem készít új verziót)
  invite [--read-token -]                    meghívókód
  history [--page N]                         verziók
  rollback <commit> [-y]                     visszaállítás egy régebbi verzióra

Modok
  mods [--updates]                           a profil modjai (--updates: Thunderstore frissítések)
  ts search <keresés> [--page N]
  ts install <Ns-Name[-verzió]> [-y]         függőségekkel együtt (csak saját, nem feliratkozott profilba)
  ts remove <Ns-Name> [-y]
  ts toggle <Ns-Name> on|off

Játék és hibakeresés
  launch [--vanilla] [--dry-run]             --dry-run: csak kiírja a Steam parancsot
  diag <kimenet.zip>                         diagnosztika zip
  logs [--tail N]                            naplófájlok (és az utolsó N sor)
  settings                                   beállítások és útvonalak
  settings set check-on-start on|off
  settings set game-dir <mappa>|auto         Lethal Company.exe nélküli mappánál rákérdez (-y)
  settings set zoom <0.5–3.0>
  settings set update-repo <tulaj/repó>|-
  version | help

Példa, tulaj:

lcsync-cli profiles import "Dave modpack" ~/.local/share/com.kesomannen.gale/lethal-company/profiles/dave
lcsync-cli login https://git.example.com --client-id <client_id>
lcsync-cli publish --owner lc-modpacks --repo dave --create --name "Dave modpack"
lcsync-cli push "első verzió" -y
lcsync-cli invite

Példa, barát:

lcsync-cli join 'lcsync1:…' --new "Dave modpack"
lcsync-cli pull -y
lcsync-cli launch

Hogyan működik

  • Az lcsync egy profilban csak a BepInEx/ mappát és a 3 doorstop fájlt (winhttp.dll, doorstop_config.ini, .doorstop_version) kezeli. Ezen kívül semmit nem ír és nem töröl, így a játék mappája is lehet profil.
  • Kimarad a szinkronból: BepInEx/cache, a dumps, a naplók és a kikapcsolt modok (*.old fájlok). A kikapcsolt modok a modlistában „kikapcsolva” jelöléssel látszanak.
  • A fájlok tartalma SHA-256 hash szerint a Forgejo Generic Package Registry-be kerül (lcsync-files csomag a modpack tulajánál). Minden tartalom csak egyszer töltődik fel, így egy frissítés kicsi.
  • A modpack aktuális állapota a modpack repójában egy manifest.json (fájllista hash-ekkel, modlista, BepInExPack verzió). Minden feltöltés egy commit, így a repó története egyben a változásnapló.
  • Frissítéskor az lcsync előbb mindent letölt a profil .lcsync-tmp mappájába és ellenőrzi, csak utána töröl és cserél. A félbeszakadt frissítés folytatható.
  • Fájlt csak új fájl + átnevezés (rename) módon cserél, sosem ír bele egy meglévőbe, így a Gale hardlinkelt gyorsítótára nem sérül.
  • A Thunderstore modok telepítése a Gale-lel azonos módon képezi le a zip tartalmát a profil mappáiba. Egy már meglévő config fájlt nem ír felül.
  • Indításkor a doorstop fájlok a játék mappájába kerülnek (csak ha a játék nem fut), majd a Steam -applaunch 1966720 paranccsal indítja a játékot, a profil BepInEx-ére mutató doorstop kapcsolókkal.

Frissítés az lcsync 1-es verziójáról

Az új lcsync első indításkor átalakítja a régi beállítást: a régi modpack és célmappa egy profil lesz, az írási token pedig a tokentárba kerül. A régi fájlról titkok nélküli másolat készül (config.json.v1.bak). Utána már ne indítsd el a régi verziót, mert az új beállítást üresnek látná, és felülírná.

Fordítás és fejlesztés

cargo build --release                                            # Linux
cargo xwin build --release --target x86_64-pc-windows-msvc      # Windows (cargo-xwin)
scripts/check.sh                                                 # fmt, clippy, tesztek

Kimenet: target/release/lcsync és target/release/lcsync-cli (Windowson .exe).

Környezeti változók (fejlesztéshez és tesztekhez):

változó hatás
LCSYNC_HOME minden beállítás, adat és gyorsítótár ebbe a mappába kerül (a tokentár is)
LCSYNC_GALE_DIR a Gale adatmappája helyett ezt olvassa
LCSYNC_IGNORE_RUNNING_GAME=1 kikapcsolja a futó játék ellenőrzését
LCSYNC_TS_BASE a Thunderstore helyett ezt a címet használja
LCSYNC_STEAM a Steam program helyett ezt indítja (tesztekhez, próbaindításhoz)

Tesztek. A Forgejót igénylő tesztek a helyi teszt szervert használják (docker start lcsync-forgejo, http://127.0.0.1:3999); ha az nem fut, kihagyják magukat. A parancssori tesztek gyerekfolyamatként futnak, mindegyik saját LCSYNC_HOME-mal, így a valódi beállításaidhoz nem nyúlnak. A scripts/check.sh --all a hálózatot igénylő (#[ignore]) teszteket is lefuttatja.