Felhasználói eszközök

Eszközök a webhelyen


tinyfugue

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Előző változat mindkét oldalonElőző változat
Következő változat
Előző változat
tinyfugue [2015/01/03 15:53] truthtinyfugue [2016/01/10 12:55] (aktuális) truth
Sor 28: Sor 28:
 /connect ev /connect ev
 </code> </code>
 +
 +===== Változók =====
 +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:
 +<code>
 +/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())]
 +</code>
 +
 +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.
  
 ===== Triggerek ===== ===== Triggerek =====
Sor 35: Sor 57:
 </code> </code>
  
-Folytköv.+Még egy fontos kapcsoló a triggereknél az ''-ag'', ami gag-eli a szövegmintával egyező sortPélda: 
 +<code> 
 +/def -mregexp -ag -t'Felkelsz a pihenesbol.
 +</code> 
 + 
 +==== Reguláris kifejezések ==== 
 +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: 
 +<code> 
 +/def -mregexp -t'Valaki (.*) arany ermet ad neked.' = mond %P1 aranyat kaptam. 
 +</code> 
 +Azonban ennél sokkal szűkebb értelmezési tartományt is meg lehet adni, példák: 
 +<code> 
 +; 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. 
 +</code> 
 +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: 
 +<code> 
 +/def -mregexp -t' (\d+) arany ermet ad neked.' = mond %P1 aranyat kaptam, %PL adta. 
 +</code> 
 +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|http://www.mutatismutandis.org/help/tf/topics/pcre.html]] 
 + 
 +=====Eseménykezelés===== 
 +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: 
 +<code> 
 +/def -hCONNECT acl1 = /load auto_con.tf%;FELH.NEV%;JELSZO 
 +/def -hDISCONNECT acl2 = /repeat -10 1 /connect ev 
 +</code> 
 +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. 
 + 
 +=====Feltételes elágazás===== 
 +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. 
 +<code> 
 +/if (condition) true_exp%;/else false_exp%;/endif 
 +</code> 
 +  * **condition**: kifejezés, aminek ha nullától eltérő értéke van, igaznak bizonyul. 
 +  * **true_exp**: teljesült feltétel esetén lefutó blokk. 
 +  * **false_exp**: hamis kifejezéskor végrehajtott ág. 
 + 
 +Több feltétel kiértékelése esetén használható az ''/elseif''
 +Példa: 
 +<code> 
 +/def -mregexp -t'Eletero: (\d+)\s+' = /if ({P1} < 700) /heal%;/elseif ({P1} < 400) menekules most%;/endif 
 +</code> 
 + 
 +=====Ciklusos utasítások===== 
 +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. 
 + 
 +====Iteráló ciklus==== 
 +A for utasítás segítségével n darabszor megismételhető a ciklusmag. 
 +<code> 
 +/for loop_var init_val end_val command 
 +</code> 
 +  * **loop_var**: léptethető ciklusváltozó neve. 
 +  * **init_val**: a változó kezdeti értéke. 
 +  * **end_val**: a változó eddig a szélsőértékig lesz inkrementálva, utána befejeződik a végrehajtása. 
 +  * **command**: a ciklusmag utasítása. 
 + 
 +Példa: 
 +<code> 
 +/for i 1 10 /echo %i 
 +</code> 
 + 
 +====Elöltesztelős ciklus==== 
 +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. 
 +<code> 
 +/while (condition) commands%;/done 
 +</code> 
 +  * **condition**: kiértékelt feltétel, ami ami igaz logikai érték esetén végrehajtja a ciklusmagot. 
 +  * **commands**: a ciklusmag utasításai. 
 + 
 +Példa: 
 +<code> 
 +/set i 10 
 +/while (i > 0) /test echo(--i)%;/done 
 +</code> 
 + 
 +====/repeat utasítás==== 
 +A repeat késleltetett/azonnali kiértékelést eredményez egy/több alkalommal. 
 +<code> 
 +/repeat -NUM [-S] NUM command 
 +</code> 
 +  * **-NUM**: a késleltetés mértéke másodpercben kifejezve, akár lebegőpontos formátumban. 
 +  * **-S**: szinkronban fut le a folyamattal, tehát azonnal. 
 +  * **NUM**: ismétlések száma. 
 +  * **command**: a kiértékelt parancs. 
 + 
 +Példa: 
 +<code> 
 +; 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 
 +</code>
tinyfugue.1420296824.txt.gz · Utolsó módosítás: 2015/01/03 15:53 szerkesztette: truth

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki