- Rust 99.6%
- Python 0.3%
- Shell 0.1%
| docs | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| rustfmt.toml | ||
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).
- Saját profil: az lcsync saját mappájában (
- 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
- Töltsd le és indítsd el az
lcsyncprogramot. Első indításkor a Csatlakozás oldal nyílik meg. - 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.
- 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).
- Csatlakozás → az lcsync átvált a Frissítés oldalra, és megnézi, mi változott.
- ⬇ Frissítés most. Az lcsync előbb mindent letölt és ellenőriz, csak utána cserél és töröl.
- 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:
-
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, nemlocalhost) - A „Bizalmas kliens” (Confidential client) jelölőt vedd ki. Bizalmas klienssel a véletlen portos visszahívás nem működik.
- Név:
-
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
-
Válaszd ki a profilt, és nyisd meg a Közzététel fület.
-
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. -
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-modpackcímkével; - Meglévő repó: egy már létező repó. Az lcsync figyelmeztet, ha a repó vagy a tulaja nem nyilvános.
- Új modpack létrehozása: nyilvános repót hoz létre (a saját neved alatt vagy egy szervezetedben),
-
🔄 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.
-
Í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.”).
-
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. Alcsync-cli profiles listcsillaggal jelöli az aktívat. - A
-yminden 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:
0siker;1hiba (Hiba: …a standard hibakimeneten), vagy nemet mondtál egy kérdésre (Megszakítva., ilyenkor semmi nem változott);2hibá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, adumps, a naplók és a kikapcsolt modok (*.oldfá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-filescsomag 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-tmpmappá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 1966720paranccsal 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.