A programkódunk a reset parancsra kiírja, hogy mennyi időnk van a következő resetig. A programkód a verzio és datum rovid parancsokból számolja ki ezt az értéket.
A logikája a következő:
Számunkra az idő perc és másodperc része a fontos, amiket másodpercre fogok alakítani. Pl.: 10 óra 10 perc 10 másodpercből a 10 perc és 10 másodperc kell nekünk. 10 perc az 600 másodperc + a 10 másodperc ami éppen van, ez 610 másodperc lesz. Ezt a verzio és datum rovid parancsokból is kinyerjük.
A matekunk pedig a következő: 7200 + <verzio másodpercre alakitva> - <dátum másopercere alakitva>, majd ezt az eredményt osztjuk 900-al. A maradék, hogy mennyi idő van resetig. Azért 900-al osztunk, mert egy reset 15 perc, ami 900 másodperc.
Most még soronként leírom a program működését, de később, amikor már gyakorlottabbak lesztek, ez kevésbé lesz ilyen részletes (és unalmas :) ).
#class : ezzel zárjuk egy egységbe az aliasokat, változókat, triggereket#var : ezzel hozunk létre változókat#math : ezzel tudnk változókon (#var) műveleteket végezni#alias : ezzel adunk egy rövid hivatkozási nevet több programsornak#if : ezzel vizsgáljuk meg, hogy egy feltétel igaz e#trigger: ezzel mondjuk meg, hogy milyen beérkező szövegre induljon el az automatizmus#gagline: ezzel tudjuk a felesleges beérkező üzeneteket elrejteni#OK : még fogalmam sincs róla, de minden példakódban benne van#say : ezzel íratjuk ki a képernyőre a szöveget#load : ezzel tudjuk betölteni a scriptfáljokatreset beütésével láthatod, hogy mennyi idő múlva lesz a következő reset
#class class_reset: a class_reset nevet adtuk a kódnak. A teljes class-t tudjuk engedélyezni vagy letiltani. Erről majd a tutoriálban fogok írni.
#var wro 0: Létrehozzuk a wro változót. Arra használjuk, ha a reset szóval adjuk ki a datum és reset parancsokat, akkor a #gagline miatt nem írjuk ki a képernyőre, így nem zavar minket a játékban.
#var verzio 0: itt fogjuk tárolni a verzio parancs által visszadott értéket
#var datum 0: itt fogjuk tárolni a datum parancs által visszadott értéket
#var reset 0: itt fogjuk tárolni, hogy mennyi másodperc van még resetig, később pedig kiíratjuk
#var egeszdiff 0: sajnos a VIP mud nem tud modulos osztást, igy ezt magunk fogjuk kiszámolni.
#ALIAS reset: ezzel létrhozzuk a reset aliasunkat
#math wro {1}: beállítjuk a wro változónkat 1-re. Ennek hatására a programkódunk tudni fogja, hogy ne írja ki a képernyőre a mudtől érkező datum rovid és datum válaszokat.
#trigger {ElveszettVilag (Driver: FluffOS *} {#gagline All; #OK;};: gagoljuk a sort
#trigger {Elveszett Vilag Mudlib *} {#gagline All; #OK;};: szintén gagoljuk a sort
verzio;: lekérdezzük, hogy mikortól fut a mud
#trigger {*. * *. (*) *:&verzioperc:&verziomasodperc CET ota fut.} {: Késztünk egy trigger, amit feldolgozza a verzio választ. A csillag karakterek azt jelentik, hogy bármilyen karakter állhat ott. Számunkra a veziónak a perc és másodperc része az érdekes. Ezeket a &verzioperc és &verziomasodperc parancsokkal nyerjük ki és a @verzioperc és @verziomasodperc változókba fogja elmenteni nekünk VIP mud.
#gagline All;: kigagoljuk a sort, így nem fog megjelenni a képernyőn a verzio-ra kapott válasz a mudtól.
#OK;: fogalmam sincs, de minden példakódban benne volt.
#math verzio {@verzioperc * 60 + @verziomasodperc};: A @verzio változóba elmentjük a mud verzio-janak perc (@verzioperc) és másodperc (@verziomasodperc) értékét, másodperc formában. Ezért szorozzuk a percet 60-al, hogy másodpercre alakítsuk. Pl: Ha a mud verziója 18 óra 10 perc 15 másodperc, akkor a @verzioperc értéke 10 lesz, a @verziomasodperc értéke 15. A @verzio értéke pedig: 10 * 60 + 15 = 615.
datum rovid;: megkérdezzük a mudot, hogy szerinte mennyi az idő.
#trigger {*Az aktualis jatekido: *. * *. (*) *:&datumperc:&datummasodperc} {: következő fontos trigger, ami elmenti a @datumperc és @datummasodperc változókba az aktuális perc és másodperc értékét. A csillag karakterek itt is azt jelentik, hogy bármilyen szöveg állhat helyettük. Például, ha most 19 óra 20 perc 0 másodperc van, akkor a @datumperc értéke 20, a @datummasodperc értéke 0 lesz.
#math wro {0};: 0-ra állítjuk a wro-t, így ha beütjük a verzio, vagy datum rovid parancsokat, akkor nem lesznek kigagolva a sorok.
#math datum {@datumperc * 60 + @datummasodperc};: a @datum változóba elmentjük az éppen aktuális dátum perc és másodperc értéket másodpercben. A fenti példával: 19 óra 20 perc 0 másodperc van, ekkor 20 * 60 + 0 = 1200 lesz az értéke.
#math reset {7200 + @verzio - @datum};: Ebben a sorban kivonjuk a verzió értékét a dátum értékéből, hogy tudjuk mennyi másodperc a különbség. A biztonság kedvéért hozzáaduk az eredményhez 7200 másodpercet, hogy biztosan pozitív értéket kapjunk. A 7200 helyett más szám is lehetne, a lényeg, hogy a reset értékvel, ami 900, maradék nélkül osztható legyen.
#math egeszdiff {@reset / 900};: Mivel a VIP mud nem tud maradékos osztást, ezért ez nekünk kell megoldani. Itt arra vagyunk kiváncsiak, hogy a @reset változónkban hányszor van meg a 900 és azt eltároljuk a @egeszdiff változóban.
#math reset {@reset - (@egeszdiff * 900)};: Az előbb kiszámoltuk, hogy hányszor van meg maradék nélkül a @reset változóban a 900. Ha most ezt az értéket visszaszorozzuk 900-al és kivonjuk a @reset változóból az értékét, akkor megkapjuk, mennyi másodperc van még a következő resetig.
#if {@reset < 0} {#math {reset} {900+@reset}};: Ha minusz lenne a vege, akkor adjunk hozza 900-at, hogy helyes eredmenyt kapjuk.
#say {RESETJELZO: @reset masodperc mulva RESET!};: Kiírjuk a képernyőre, hogy mennyi idő van még resetig.
#say {Resetjelzo betoltve}: Kiírjuk a képernyőre, hogy a reset jelző modulunkat betöltöttük.
#class 0 lezárjuk a reset jelző #class-unkat.
#class class_reset
#var wro 0
#var verzio 0
#var datum 0
#var reset 0
#var egeszdiff 0
#ALIAS reset {
#math wro {1};
#trigger {ElveszettVilag (Driver: FluffOS *} {#gagline All; #OK;};
#trigger {Elveszett Vilag Mudlib *} {#gagline All; #OK;};
verzio;
}
#trigger {*. * *. (*) *:&verzioperc:&verziomasodperc CET ota fut.} {
#if {@wro = 1} {
#gagline All;
#OK;
#math verzio {@verzioperc * 60 + @verziomasodperc};
datum rovid;
}
};
#trigger {*Az aktualis jatekido: *. * *. (*) *:&datumperc:&datummasodperc} {
#if {@wro = 1} {
#gagline All;
#OK;
#math wro {0};
#math datum {@datumperc * 60 + @datummasodperc};
#math reset {7200 + @verzio - @datum};
#math egeszdiff {@reset / 900};
#math reset {@reset - (@egeszdiff * 900)};
#if {@reset < 0} {#math {reset} {900+@reset}};
#say {RESETJELZO: @reset masodperc mulva RESET!};
}
}
#say {Resetjelzo betoltve}
#class 0