Amikor a SAMP szerverünkkel bíbelődünk, és kiegészítő funkciókat szeretnénk hozzáadni, gyakran találkozunk a filterscriptek fogalmával. Ezek a kis programrészek teszik igazán egyedivé és élvezetessé a játékélményt, legyen szó akár egy admin parancsrendszerről, dinamikus objektumokról, vagy egyedi minijátékokról. Sokan közülünk azonban szembesülnek egy bosszantó jelenséggel: hiába próbáljuk meg feltölteni több filterscriptet a `/rcon loadfs` paranccsal, a szerver valahogy csak egyet ismer fel, mintha a többi láthatatlan lenne számára. Miért történik ez? Nos, ez a „rejtély” korántsem misztikus, sokkal inkább a SAMP szerver működésének és a konfiguráció finomságainak megértésében rejlik. Merüljünk el együtt ennek a jelenségnek a mélységeiben, és fejtsük meg a titkát!
### A `/rcon loadfs` Parancs és a Valóság: Egy Félreértés Tisztázása 🤔
Kezdjük talán a leggyakoribb tévhit eloszlatásával. A `/rcon loadfs` parancs nevében is benne van a „load filterscript”, de ez nem azt jelenti, hogy több filterscriptet is betölthetünk vele egyszerre, egyszerűen csak felsorolva őket. A `/rcon loadfs [scriptnév]` parancs egyetlen, specifikus filterscript betöltésére szolgál a szerver futása közben. Ha beírod, hogy `/rcon loadfs deathmatch`, akkor a szerver megpróbálja betölteni a `deathmatch.amx` fájlt. Ha utána beírod, hogy `/rcon loadfs freeroam`, akkor az előző betöltés sikerességétől függetlenül ez a parancs elindul, és megpróbálja betölteni a `freeroam.amx`-et.
Ez nem egy listázó, vagy csoportos betöltő funkció. Ezt fontos megérteni, hiszen sokan itt futnak bele az első csapdába. Ha tehát azt tapasztalod, hogy csak az utoljára kiadott `loadfs` parancsot ismeri fel, az teljesen normális, mert mindegyik egy különálló utasítás. De akkor hogyan tudunk egyszerre több modult betölteni, hogy azok együttesen működjenek? A válasz a SAMP szerver beállító fájlában, a `server.cfg`-ben rejlik.
### A `server.cfg` Titkai: A Helyes Konfiguráció Kódja 📝
A SAMP szerver konfigurációs fájla, a `server.cfg` a szerver lelke. Itt állítjuk be a játékmódot, a szerver nevét, a portot, és természetesen a betöltendő filterscript-eket is. Ez az a hely, ahol a szerver indításakor megadjuk, mely kiegészítő modulokat szeretnénk aktívan látni.
A `server.cfg` fájlban a `filterscripts` sor a kulcs. Ennek a sornak a formátuma a következő:
`filterscripts [script1] [script2] [script3] …`
Például:
`filterscripts adminbase vehicle_mod house_system`
Ebben az esetben a szerver elindulásakor automatikusan megpróbálja betölteni az `adminbase.amx`, a `vehicle_mod.amx` és a `house_system.amx` fájlokat. Fontos, hogy a felsorolt nevek a lefordított, `.amx` kiterjesztésű fájlok nevei legyenek, és a kiterjesztést nem kell feltüntetni! A szerver magától fogja keresni az `.amx` végződést.
**Gyakori hibák a `server.cfg` konfigurálásakor:**
1. **Elírások:** Egy apró elgépelés, és a szerver máris nem találja a fájlt. Ellenőrizd többször is a neveket!
2. **Hiányzó `.amx` fájlok:** Hiába szerepel egy szkript neve a `server.cfg`-ben, ha nincs lefordítva, vagy hiányzik a megfelelő mappából, a szerver nem tudja betölteni.
3. **Helytelen útvonal:** Bár a szerver alapértelmezetten a `filterscripts` mappában keresi ezeket a kiegészítőket, ha valamiért máshova tetted őket, akkor relatív útvonalat kell megadni, ami további bonyodalmakhoz vezethet. Mindig javasolt a dedikált `filterscripts` mappát használni!
4. **Kommentelt sor:** Előfordul, hogy egy `;` jellel kezdődik a sor, ami azt jelenti, hogy kommentként kezeli a szerver, és figyelmen kívül hagyja.
> A leggyakoribb hiba, amiért a SAMP szerver csak egy filterscriptet „ismer fel”, az a `/rcon loadfs` parancs helytelen alkalmazása több script betöltésére. Mindig a `server.cfg` a kulcs a több modul egyidejű indításához!
### Hol Laknak a Szkriptjeid? Fájlútvonalak és Elhelyezés 📂
A SAMP szerver rendkívül érzékeny a fájlok elhelyezésére. Ahhoz, hogy egy filterscript sikeresen betöltődjön, a szervernek meg kell találnia azt. Az alapértelmezett és erősen ajánlott helyszín a szerver gyökérkönyvtárában található `filterscripts` mappa.
Amikor egy filterscript-et letöltesz vagy készítesz, általában `.pwn` kiterjesztésű forráskódot kapsz. Ezt fordítani kell egy Pawn compiler segítségével, ami egy `.amx` kiterjesztésű, futtatható fájlt eredményez. Ez az `.amx` fájl az, amit a szerver betölt és futtat.
Győződj meg arról, hogy:
* Az `.amx` fájl létezik. Ha csak `.pwn` fájlod van, fordítsd le!
* Az `.amx` fájl a szerver `filterscripts` mappájában van.
* A fájlnév pontosan megegyezik azzal, amit a `server.cfg` fájlban megadtál (ügyelve a kis- és nagybetűkre is, főleg Linux alapú szerverek esetén!).
Ha a fájl nem a `filterscripts` mappában van, vagy a név nem egyezik, a szerver egyszerűen ignorálja, mintha nem is létezne.
### A Szkriptek Belső Világa: Hibák és Konfliktusok 💥
Előfordulhat, hogy minden konfiguráció rendben van, a fájlok a helyükön vannak, mégis csak egy vagy néhány szkript töltődik be, vagy éppenséggel a szerver instabillá válik. Ilyenkor érdemes a filterscriptek belső működésére és a közöttük lévő esetleges konfliktusokra gyanakodni.
1. **Kódolási hibák:** Egy hibásan megírt filterscript, különösen az `OnFilterScriptInit` vagy `OnGameModeInit` (ha az GM és FS interakcióról van szó) függvényében, súlyos problémákat okozhat. Egy kritikus hiba akár az egész szerver összeomlását is előidézheti, vagy megakadályozhatja a további szkriptek betöltését. Például, ha egy modul hibásan próbál meg adatbázis kapcsolatot létesíteni, vagy érvénytelen memóriaterületre ír, az a szerver instabilitásához vezethet.
2. **Függőségek:** Néhány komplexebb filterscript más pluginokra vagy akár más filterscript-ekre is támaszkodhat. Ha egy ilyen függőség nem teljesül (pl. egy szükséges plugin hiányzik), az adott modul nem tud megfelelően inicializálódni, és hibát okozhat. Bár ez ritkán akadályozza meg *az összes* többi script betöltését, okozhat láncreakciót.
3. **Funkció átfedések/konfliktusok:** Két filterscript, amelyik ugyanazt a SAMP callback függvényt próbálja túlságosan agresszíven felülírni vagy kezelni, konfliktusba kerülhet. Például, ha két szkript is megpróbálja kezelni az `OnPlayerCommandText` függvényt egyazon paranccsal kapcsolatban, kiszámíthatatlan viselkedés léphet fel. Bár a SAMP rendszere megpróbálja sorban hívni az összes releváns szkript callback-jét, súlyosabb esetekben ez is instabilitáshoz vezethet.
4. **Plugin konfliktusok:** Bár ez nem közvetlenül a filterscript probléma, de egy hibásan vagy inkompatibilisen betöltött plugin (amik a `plugins` sorban szerepelnek a `server.cfg`-ben) komolyan befolyásolhatja a filterscript-ek működését. Egy rossz plugin tönkreteheti az egész környezetet, amiben a szkriptek futnának.
**A diagnózis kulcsa: a szerver log!**
Amikor bármilyen problémát tapasztalsz a SAMP szerverrel, az első és legfontosabb lépés a `server_log.txt` fájl megvizsgálása, illetve a szerver konzoljának figyelése. A szerver minden egyes betöltési próbálkozást és hibát rögzít. Itt azonnal látni fogod, ha egy szkriptet nem talál, ha nem tudja betölteni (pl. „Failed to load filterscript ‘valami.amx'”), vagy ha egy kritikus hiba történt az inicializáció során. A hibakódok és üzenetek sok esetben azonnal rávezetnek a probléma gyökerére.
### Technikai Mélyfúrás: Mit csinál valójában a SAMP szerver? 🧠
Amikor elindítod a SAMP szervert, az az alábbi lépéseket követi a filterscript-ekkel kapcsolatban:
1. **`server.cfg` feldolgozása:** A szerver beolvassa a `server.cfg` fájlt, és megkeresi a `filterscripts` kulcsszóval kezdődő sort.
2. **Listázás és ellenőrzés:** Létrehoz egy belső listát a megadott filterscript nevekről. Minden névhez megpróbálja hozzáfűzni az `.amx` kiterjesztést, majd ellenőrzi, hogy létezik-e ilyen fájl a `filterscripts` mappában.
3. **Sorban történő betöltés:** A szerver elkezdi betölteni a szkripteket a listáról, pontosan abban a sorrendben, ahogy a `server.cfg`-ben szerepelnek.
* Minden `.amx` fájl egy különálló „modul” a szerver számára.
* Ha egy szkript sikeresen betöltődik, a szerver elindítja az inicializációs rutinjait (pl. `OnFilterScriptInit`).
* Ha egy szkript hibás, vagy nem található, a szerver ezt általában kiírja a konzolra és a logba, majd megpróbálja folytatni a következő szkript betöltésével (kivéve, ha az előző hiba olyan súlyos volt, ami a szerver összeomlását okozta).
Ezért fontos a sorrend is! Ha egy szkript egy másik funkciójára támaszkodik, akkor az előbbinek kell betöltődnie. Például, ha az `adminbase` ad néhány admin parancsot, amit a `house_system` használna egy belső ellenőrzéshez, akkor az `adminbase`-nek kell előbb szerepelnie a listán.
### Gyakori Hibák és Megoldások Egy Asztalon 💡
| Jelenség | Valószínű ok | Megoldás |
| :———————————————————————– | :———————————————————————– | :—————————————————————————————————————————————————————————————————————————————————- |
| `/rcon loadfs` paranccsal csak egy modul aktiválódik. | A `/rcon loadfs` parancs egyszerre csak egyetlen modult tölt be. | Használd a `server.cfg` fájlt a `filterscripts` sorban a modulok felsorolására. A `/rcon loadfs` parancsot csak futás közben történő, egyedi modul aktiválására használd (pl. teszteléshez). |
| A `server.cfg`-ben felsorolt modulok közül csak néhány töltődik be. | Elírás a `server.cfg`-ben; hiányzó `.amx` fájl; helytelen útvonal; kis/nagybetű érzékenység. | Ellenőrizd a `server.cfg` fájlt minden név pontos egyezőségére. Győződj meg róla, hogy az `.amx` fájlok léteznek és a `filterscripts` mappában vannak. Nézd át a szerver logját (`server_log.txt`) a pontos hibaüzenetért. |
| A szerver el sem indul, vagy azonnal összeomlik egy modul betöltésekor. | Súlyos hiba a modul forráskódjában, vagy inkompatibilitás más modulokkal/pluginokkal. | Ellenőrizd a szerver logját. A hibaüzenet (pl. „segfault”, „access violation”) segíthet beazonosítani a hibás modult. Távolítsd el ideiglenesen a gyanús modult a `server.cfg`-ből, és próbáld meg elindítani nélküle. |
| Betöltődnek a modulok, de nem működnek megfelelően. | Konfliktus más modulokkal; hiányzó plugin(ok); kódolási hiba a modul logikájában. | Ellenőrizd a logot további hibaüzenetekért. Próbáld meg egyesével betölteni a modulokat, hogy lásd, melyik okozza a problémát. Győződj meg róla, hogy minden szükséges plugin telepítve van és betöltődött (`plugins` sor a `server.cfg`-ben). |
| Linux szerveren nem töltődik be egy modul, de Windowson igen. | Kis- és nagybetű érzékenység miatti eltérés a fájlnévben. | Ellenőrizd, hogy a `server.cfg`-ben szereplő modulnév *pontosan* megegyezik-e a fájlrendszerben lévő `.amx` fájl nevével (beleértve a kis- és nagybetűket is!). Linux alatt a `DeathMatch.amx` és `deathmatch.amx` két különböző fájl! |
### Véleményem: A Rendszer Logikája vs. Az Emberi Faktor 🗣️
Több éves SAMP szerver üzemeltetési és támogatási tapasztalatom alapján azt mondhatom, hogy a „Miért csak egy scriptet ismer fel a SAMP szerverem?” kérdés mögött szinte soha nem egy szerverhiba, vagy a SAMP motorjának korlátozása áll. Sokkal inkább az emberi faktor: a konfigurációs fájlok helytelen szerkesztése, a fájlrendszerbeli apró elírások, vagy egyszerűen a `/rcon loadfs` parancs céljának félreértelmezése okozza a problémát.
Az adatok, amiket a szerver naplója (a `server_log.txt`) szolgáltat, a leghasznosabb információforrások. A napló minden egyes betöltési kísérletről, hibáról és sikeres inicializálásról részletes feljegyzést tartalmaz. Aki ignorálja a naplófájlt, az valójában önmagát fosztja meg a legegyszerűbb és leggyorsabb hibaelhárítási lehetőségtől. Gyakran látom, hogy percekig tartó próbálkozás után jön az újbóli kérdés, miközben egyetlen pillantás a logba azonnal megadná a választ: „Failed to load filterscript ‘adminbas.amx’ – No such file or directory” – azaz egy elgépelés, és máris világos a probléma.
A SAMP rendszere logikus és következetes. A problémák szinte mindig a felhasználói beavatkozások hibáiból fakadnak. Éppen ezért, ha ezzel a „rejtéllyel” találkozol, ne a szervert okold először, hanem vizsgáld meg alaposan a saját konfigurációdat és a szerver logját!
### Összefoglalás és Jó Tanácsok a Sima Működéshez ✅
A „rejtély”, hogy a SAMP szervered csak egy filterscriptet ismer fel a `/rcon loadfs` parancsra, valójában egyszerűen magyarázható: a parancs egyedi szkriptek futás közbeni betöltésére szolgál, nem pedig tömeges indításra. A valódi megoldás a szerver konfigurációjának alapos és pontos beállítása a `server.cfg` fájlban, a `filterscripts` sor segítségével.
* **Mindig a `server.cfg`:** Ez az elsődleges hely, ahol megadod a szervereddel együtt induló kiegészítő modulokat.
* **Pontos fájlnevek:** Ügyelj a kis- és nagybetűkre, illetve az elírásokra.
* **Létező `.amx` fájlok:** Győződj meg róla, hogy minden `.pwn` forráskódot lefordítottál `.amx` fájllá.
* **Helyes elhelyezés:** A `filterscripts` mappába tedd az összes `.amx` fájlt.
* **Rendszeres log ellenőrzés:** A `server_log.txt` a legjobb barátod a hibaelhárításban. Soha ne hagyd figyelmen kívül!
* **Sorrend fontossága:** A `server.cfg`-ben megadott sorrend számít a modulok betöltésénél.
A SAMP szerver üzemeltetés néha kihívásokkal teli lehet, de a szisztematikus megközelítés és a szerver által adott információk (mint a logok) figyelembe vétele segít elhárítani a legtöbb akadályt. Reméljük, ez a részletes útmutató segített eloszlatni a „rejtélyt”, és most már magabiztosan kezelheted a szervered filterscript-jeit! Hajrá, és jó szórakozást a testreszabott Grand Theft Auto San Andreas Multiplayer élményhez!