A TinyFugue a mud kliensek között a legjobb, feltéve, ha valaki tudja használni. Sokkal kiterjedtebb hozzáférést biztosít mélyebb vezérléshez és beprogramozáshoz a többi klienshez képest. Továbbá kiemeli még a többi a közül a szembetűnő sebessége, amiben az összes többi klienst lehagyja, így mindenképp megéri telepíteni és tanulmányozni, amiben a cikk többi része nyújt segítséget. Ha további kérdés felmerülne benned, írj nekem mudon levelet: level truth
.
zypper/yum/apt-get install tf
. Ha nincs a tárolóban, akkor marad a forráskód, aminek a függőségei között szerepel a zlib és pcre csomagok, amiket viszont megtalálsz a csomagkezelőben, továbbá a gcc, make és patch csomagokat is telepítsd. Utána az archívumot bontsd ki, majd nyiss oda terminált és a readme
fájlban található parancsokon menj végig, és ha hiba nélkül lefut, telepítve lesz a program és futtatható a tf
paranccsal.
A TinyFugue nagyon sokban eltér a többi klienstől. Míg a megszokott jel a parancsok elválasztására a ;
, itt ezzel a két karakterrel lehet a parancs végét jelezni az interpreternek: %;
. Továbbá az is elterjedt a kliensekben, hogy a kettős kereszt után megadott számmal lehet jelölni az azt követő parancs ismétléseinek számát. Az szintén nem így működik itt, hanem eléggé csúnya módon: /repeat -0 -S SZAM PARANCS
. Az előzőleg kiadott parancs ismétlésére sincs lehetőség csupán az ENTER megnyomásával. Ezek a kényelmes játékot ellehetetlenítik, azonban a TF sokrétűsége végett be lehet programozni ezeket is, készítettem egy script-et, amivel ezeket be és ki lehet kapcsolni. Innen töltheted le. A script fájlokat a /load fájlnév
képes betölteni, a program indulásakor pedig automatikusan betölti a munkakönyvtárban található .tfrc
-t. Tehát: /load pvesszo.tf
, a /pon
parancs bekapcsolja, a /poff
pedig ki a speciális értelmezési műveleteket.
A program sikeres futtatását követően kíséreljük meg a csatlakozást az EV-hez. A kapcsolatok kezeléséhez ismertetek is pár utasítást:
/listworlds
: kilistázza a definiált mudokat./addworld MUD_NEVE HOST PORT
: hozzáad új mudot a listához./unworld MUD_NEVE
: eltávolítja a mudot a listából./purgeworld
: eltávolítja az összes mudot a listából./saveworld FÁJLNÉV
: elmenti egy fájlba a mudlistát, később a /load FÁJLNÉV
paranccsal lehet betölteni újra./connect MUD_NEVE
: csatlakozik a definiált mudhoz./dc
: szétkapcsol a mudtól és offline módba lép.Tehát EV-hez így lehet kapcsolódni például:
/addworld ev elveszettvilag.hu 6666 /connect ev
Kétféle módszer van a változók deklarálására, az egyik a /set
parancs, a másik a /test
parancson keresztül valósítható meg. A változókra később úgy lehet hivatkozni, hogy a nevük elé egy %
jelet írunk. Egy függvény esetében pedig, ha nem a visszatérési értékkel szeretnénk dolgozni, hanem annak kimenetével, akkor a függvényt közre kell zárni két szögletes zárójellel, ami elé egy $
jelet kell tenni. A változókkal való műveletekre pedig a /test parancsot használjuk, ott lehet matematikai műveleteket, függvényeket értelmezni. Léptetni a változót is ezzel a paranccsal kell. Példa:
/set i 1 ; vagy /test i := 1 ; szám értékének növelése eggyel /test ++i ; szám értékének csökkentése eggyel /test --i ; összeadás /test i := 5+7 ; string deklarálása /test s := 'abc def' ; függvény visszatérési értékének mentése. s értéke 'val' lesz /test s := substr('valami',0,3) ; függvény kimenetének váltózóba mentése a visszatérési érték helyett. a jelenlegi év lesz s értéke. /test s := $[ftime("%Y",time())]
A TF által ismert függvények listája a /help functions
paranccsal kérhetőek le, ahol további súgó elérhető mindegyik függvényhez.
A triggerek két részből állnak: pattern és command(s). Az előbbi az a szövegminta, ami egyezéskor lefuttatja az utóbbit, vagyis a parancsokat. Pattern-ből négyfélét támogat a TF: simple, glob, regexp, substr. Ezek közül a regexp az igazán releváns, érdemes azzal egyeztetni a szövegeket, mivel az rendelkezik a legtöbb formázási lehetőséggel. A /def
paranccsal lehet definiálni aliasokat, triggereket, hookokat, makrókat. Triggerhez a -t
kapcsoló szükséges, azon belül pedig szükség van még egy kapcsolóra, az -m
-re, ami a pattern stílusát határozza meg. Én a továbbiakban mindig a regexp-et fogom használni a példákban, azt érdemes elsajátítani. Egy egyszerű példa:
/def -mregexp -t' holtan esett ossze !' = kivesz penz hullabol
Még egy fontos kapcsoló a triggereknél az -ag
, ami gag-eli a szövegmintával egyező sort. Példa:
/def -mregexp -ag -t'Felkelsz a pihenesbol.'
A szövegmintákban használhatsz ilyeneket, amik helyettesítenek különböző karaktersorozatokat. Tegyük fel, hogy valaki ad Neked pénzt, és az összeget szeretnéd kinyerni a szövegből, ami ez: 'Valaki 100 arany ermet ad neked.' Több lehetőséged van, a legegyszerűbb a mindenhova használható kifejezés, ez: (.*). Ez bármire egyezni fog. Használata:
/def -mregexp -t'Valaki (.*) arany ermet ad neked.' = mond %P1 aranyat kaptam.
Azonban ennél sokkal szűkebb értelmezési tartományt is meg lehet adni, példák:
; a következő csak akkor fog kattanni, ha a Valaki után egy szám lesz megadva, ; a 'd' jelöli a számot, a '+' pedig azt, hogy legalább egy karakter hosszúságú, ha '*' állna a helyén, akár nulla is lehet a hossza. /def -mregexp -t'Valaki (\d+) arany ermet ad neked.' = mond %P1 aranyat kaptam. ; a 'w' egy betűsorozatot jelöl: /def -mregexp -t'(\w+) (\d+) arany ermet ad neked.' = mond %P2 aranyat kaptam. ; az 's' pedig szóközöket: /def -mregexp -t'(\w+)\s+(\d+) arany ermet ad neked.' = mond %P2 aranyat kaptam, %P1 adta.
A kódban láthatóak a következő kifejezések: %P1
és %P2
. Korábban említve volt, hogy a változókat jelöljük százalékjellel, ezek is azok. Ha a reguláris kifejezésben zárójelek közé írjuk a mintát, elmenti az odaillő szöveget a trigger lefutásakor abba a változóba, amit fel lehet használni a trigger törzsében. A számozásuk logikusan attól függ, hogy hányadik zárójelek közötti kifejezésre szeretnénk mutatni. Továbbá van még két hasznos ilyen változó, a PL
és PR
. Az előbbi a pattern eleje előtti szöveget tartalmazza, az utóbbi pedig a pattern utáni szövegeket, példa:
/def -mregexp -t' (\d+) arany ermet ad neked.' = mond %P1 aranyat kaptam, %PL adta.
Ezen kívül még sokféle mintát lehet a regexp-ben használni, amikről interneten lehet leírásokat találni, például itt: http://www.mutatismutandis.org/help/tf/topics/pcre.html
A /help hooks
parancs kilistáz minden elérhető eseményt, azonban a legfontosabb ez a kettő: CONNECT és DISCONNECT. Erre a két eseményre van a szükség a mud-hoz való automatikus újracsatlakozás végett. Példa a használatára:
/def -hCONNECT acl1 = /load auto_con.tf%;FELH.NEV%;JELSZO /def -hDISCONNECT acl2 = /repeat -10 1 /connect ev
Szemléletesen mutatja, hogy a CONNECT a csalatkozás után lefuttatja a törzsében lévő utasításokat, még a DISCONNECT a szétkapcsolás után fut le azonnal. Ezen kívül egy új elem is felfedezhető a kódban, be lett szúrva, hogy acl1
és acl2
. Definiáláskor lehet külön nevet is adni triggereknek, aliasoknak, hookoknak, stb., aminek jelentősége az, hogy módosításkor és a memóriából való eltávolításkor így lehet specifikusan arra a tárolt kifejezésre mutatni.
Az /if
elágazás segítségével lehetőség nyílik utasításblokkok feltételtől függő végrehajtására.
/if (condition) true_exp%;/else false_exp%;/endif
Több feltétel kiértékelése esetén használható az /elseif
.
Példa:
/def -mregexp -t'Eletero: (\d+)\s+' = /if ({P1} < 700) /heal%;/elseif ({P1} < 400) menekules most%;/endif
Ciklusszervezéssel egy utasításblokk ismételhető feltétel szerinti alkalommal. A TF-ben két klasszikus, más nyelvekből is ismert utasítás van erre a célra: /for
és /while
, továbbá rendelkezésre áll még a /repeat
, amely gazdagítja az eszköztárat időintervallumok megadásának lehetőségével.
A for utasítás segítségével n darabszor megismételhető a ciklusmag.
/for loop_var init_val end_val command
Példa:
/for i 1 10 /echo %i
A while egy olyan ismétlési szerkezet, amely egészen addig ismétli a ciklusmagot, amíg az elején meghatározott feltétel teljesül.
/while (condition) commands%;/done
Példa:
/set i 10 /while (i > 0) /test echo(--i)%;/done
A repeat késleltetett/azonnali kiértékelést eredményez egy/több alkalommal.
/repeat -NUM [-S] NUM command
Példa:
; megismétli 10x egymás után azonnal az 'eszak' parancsot. /repeat -0 -S 10 eszak ; 5 másodperc múlva 'felkel' a karakter. /repeat -5 1 felkel