Tartalomjegyzék
Reset kalkulátor program leírása
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 :) ).
Felhasznált programozási elemek
#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áljokat
Használat
- A teljes forráskód menüből másold ki a kódot
- Mentsd el a gépepeden és jegyezd meg az útvonalat. A fájl kiterjesztése .set legyen!
- #load <ahova mentetted útvonal> ezzel töltöd be
reset
beütésével láthatod, hogy mennyi idő múlva lesz a következő reset- Példa kimenet: „RESETJELZO: 10 masodperc mulva RESET!”
Soronkét a kód, magyarázattal
#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.
Teljes forráskód
#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