POPUPS
avagy hogyan irjuk at a mIRC menujet...
A popupsot ugy tudjuk atszerkeszteni, hogy a tools menu
popups reszere
kattintunk.5 fele kulombozo popups van,
az egyik a Status, itt a status
ablak menupontjat
irhatjuk at, A channel nel a csati menupontjat, a
query/chat nal a dcc es msg menupontokat, a nickname
listnel a nickre
kattintasi menupontokat, a menubar nal
pedig a fenti csikhoz adhatunk hozza
menupontokat.Ezek
kozt a view menunel valtogathatunk.
Remelem eleg vilagos voltam.A menu felepitese
egyertelmu.a sor elején a
menüben megjelenô szöveg
szerepel, melyet egy ":" választ el a parancsoktól,
amikre hivatkozik. Ha több mint egy parancs áll a ":"
után, akkor azok
"{" "}" jelek közé kerültek - innen
tudja a mIRC, hogy egybe tartoznak.
Három kiemelt
szerepű karakter van, a "-", amely egy vízszintes
vonalat
húz a két menüpont közé, a "." ami közvetlenül a
sor elején van, s azt
eredményezi, hogy az adott opció
a felette lévô elsô "." nélküli menüpont
almenüje lesz,
és a "&" jel, amely gyorsbillentyüt rendel az utána álló
betüt használva az opcióhoz (azaz, ha valaki a menük
megjelenése után
megnyomja az adott billentyüt, akkor az
egyenértékűnek számít azzal, mintha
erre a menüpontra
kattintott volna). A "."-ok halmozásával természetesen
további almenüket is készíthetünk.peldaul:
Boci
.kutya:{
/join #a
/join #b
}
Namost ha ennyi all
osszessen pl a status popupsjaban,
akkor ha a status ablakba kattintunk, egy
"boci" menu
jelenik meg, aminek van egy "kutya" almenuje.Ha a
kutyara
kattintunk, a mircunk fellep a #a es a #b
csatornara.Ezzel a modszerrel
beallithatod pl hogy eleg
legyen valamelyik menure kattintanod, es a mirc
fellepjen azokra a csatornakra ahol allandoan ottvagy.
A mIRC ben
kulombozo fuggvenyek vannak, ezek $ -el
kezdodnek.Ilyenek pl a $me (a neved
adja vissza) $chan
(az aktualis csatornat adja vissza)
$snick(csatinev,sorszam) az adott csatin a kijelolt
nevet adja vissza.pl
ha valamelyik menube beleirod hogy
/whois $me , akkor az akarmi legyen a
nicked, rolad fog
egy whoist kerni
Vannak meg kulombozo algoritmusok, mint pl az "if" amely
a "ha"
szocskanak felel meg. pl
IF (feltétel) { parancs arra az esetre ha a feltétel
igaz }
ELSEIF
(feltétel) { parancs arra az esetre, ha az elôzô
nem igaz, de az új feltétel
igen (elhagyható) }
ELSE { parancs arra, az esetre ha a fentiek egyike sem
nem igaz (elhagyható) }
valamint kulombozo operatorok:
ison - x ison y, igaz, ha x az y csatin
van.
isvo - x isvo y, igaz, ha x VOICE-s y csatin.
ischan - x ischan, ha
x csatornanév.
isignore - x isignore y, ha x ignoreolva van y
paraméterrel(elhagyható).
isnotify - x isnotify, ha a notify list-edben van
az illetô.
(ezek majd a tobbi resznel is elojonnek)
Tehat itt egy gombnyomassal
masmilyen parancsokat is
vegrehajthatunk attol fuggoen, hogy milyen
feltetelek
vannak. Pl:
&OP/DEOP: {
if ( $snick( $chan, 1) isvo $chan ) { mode $chan -v
$snick( $chan, 1) }
;ha van a kijelölt nick-nek voiceja, akkor elvesszük
else { mode $chan +v $snick( $chan, 1) }
;különben adunk neki
}
Ha pedig az operatorok ele ! -et teszunk, a dolog pont
az ellenkezojere
valtozik (pl x !isop y akkor ad igazat,
ha x nem opos y csatin.)
ezenkivul ami meg ide fontos lehet: $$1 = az elso
kijelolt nick
$$2 =
a masodik kijelolt nick... es igy tovabb
Remelem ennyi eleg ennek a resznek a megertesehez.
---
Aliases:
A Tools/Aliases alatt található a mIRC azon része, ahol
új parancsokat
definiálhatunk, vagy régieket másíthatunk meg.Az Aliases
felépítése
triviális: a parancsnak szánt
szó után itt is "{" "}" jelek között van az
algoritmus.
Néhány kiemelt névrôl szintén szólhatunk: az Fx, sFx és
cFx-eket (ahol x egy egész szám 0-13 között) parancs
neveként megadva
F1-F12-vel, ill. Shift-el vagy
Control-al együtt megnyomott változataival
érhetjük el
az adott parancsot.
A menüknél szerzett tudásunkat két fontos dologgal kell
bôvítenünk. Aki
programozott már, annak ismerôsek a
változók - a mIRC-ben ezek kezelése
rendkívül egyszerű,
még a típusukat sem kell megadni használatuk elött. A
változók nevei "%"
jellel kezdôdnek - a késôbbiekben
ezzel a névvel
tudunk hivatkozni egy adott számra ill.
szövegre, amit elötte értékül adtunk
neki. Pl. ha
"%proba = kutya", akkor az "msg $active %proba"
eredménye
az lesz, hogy az aktuális ablakba a "kutya"
szót írjuk. A változók aktuális
értékeit a Variables
menüpont alatt tekinthetjük meg.
A ciklusok legalább oly fontosak, mint a változók -
igazán jó programot
meglehetôsen nehéz nélkülük írni. A
ciklus az egymás után elvégzendô azonos
alapú munkákat
egyszerűsíti le - adott esetben pl. nem kell tízszer
leírni ugyanazt a parancssorozatot, elég ha egy goto
parancs
segítségével visszaugrunk egy ":" kezdettel
megadott cimkére, hogy újból
lefuthassanak az utána álló
utasítások. Nagyon sok kiakadás forrása egy-egy
végtelen ciklus, ezért fontos figyelni arra, hogy minden
esetben
fejezôdjön be annak futása, egy return vagy egy
halt parancs meghívásával.
Míg az elöbbinél ha másik
parancsból lett meghívva, akkor visszaugrik annak
futtatásához, az utóbbinál tökéletesen leáll a program
futása. A
következô ciklus például végtelen, mert nincs
olyan hely, ahol megállhatna:
%teszt = 0
:vissza
inc %teszt
echo -a %teszt
goto vissza
A dolog jelenleg a kovetkezokeppen nez ki: a %teszt
valtozonak 0 erteket
adunk.
Megadunk egy visszaugrasi helyet ( :vissza. ha :123 -t
irtunk
volna akkor a goto utan 123-at kellene irnunk)
A %teszt ertekehez
hozzaadtunk egyet
kiiratjuk az aktiv ablakba az erteket
visszaterunk a :
vissza hoz, az egesz kezdodik elorol
Jo kis muri, az egyetlen gond, hogy a mircunk elkezd 0
tol szamolni a
vegtelensegig. Hogy ezt megakadalyozzuk,
be kell szurnunk a :vissza es a
goto vissza sorok koze a kovetkezot:
if %a = 3 { halt }
Ezaltal a program 3 futas utan megall.
Két új függvényt is meg kell ismernünk a kód megértéséhez. Egyikük a
$len, amely egy adott szöveg hosszát adja vissza, másikuk pedig a $mid,
amely három paramétert kap: az elsô egy szöveg, a második az a szám,
ahányadik karakterére vagyunk kiváncsiak, a harmadik pedig az, hogy a
másodikként megadott karaktertôl számítva hány utánalévôt vegyen
figyelembe.
Nezzunk egy peldat.
Pl.: Az eggdrop1.3.23 as botoknak
van egy bugja (hibaja).
Ha A nevedet eloszor [][][][] re azutan {}{}{}{} re
valtoztatod es ezt
megismetled 2-3 szor, kiesik. Namost, mivel ezt eleg
gyorsan nehez lenne
gepelni, nezzunk egy parancsot:
/eggbug {
/set
%mynick $me
;a jelenlegi nickedet elraktarozza a %mynick valtozoba
/set
%valt = 0
;%valt ot 0 ra irod at
:egg
;ide jon vissza ketszer
inc %valt
; %valt hoz hozzaadsz 1 et
/nick [][][][]
/nick
{}{}{}{}
;nickvaltasok
if %valt = 2 { goto endeggbug }
;ket futas
utan a :endeggbughoz megy
goto egg
; vissza :egg hez
:endeggbug
;ide jon ket futas utan
/nick %mynick
;visszairja az eredeti nicked
}
ezek utan a /eggbug parancsal ugyanaz tortenik, mintha sorban ezeket
irtad volna be
/nick [][][][]
/nick {}{}{}{}
/nick [][][][]
/nick {}{}{}{}
/nick azeredetineved
De ha mar itt az elobb a $len es $mid valtozokrol beszeltem, leirok egy
peldat, mire is jo ez:
bw {
if *1 == $null { echo 14 -a Hasznalat: /cn szoveg | halt }
set
%1for 0,1
set %2for 1,0
set %lenght $len(*1)
set %count 1
set
%colored ""
:stop1.cn
%colored = %colored $+ $+ %1for $+
$mid(%count,1,*1) $+
if %count >= %lenght { say %colored | unset %1for
%2for %count %colored
%lenght | halt }
inc %count 1
:stop2.ice
%colored = %colored $+ $+ %2for $+ $mid(%count,1,*1) $+
if %count
>= %lenght { say %colored | unset %1for %2for %count %colored
%lenght |
halt }
inc %count 1
goto stop1.cn
}
itt nem irom oda a sorok utan, mi miert van. A lenyeg a kovetkezo: a /cn
szoveg utan a paros betuk feher alapon feketek, a paratlanok fekete
alapon feherek lesznek.
---
A Remote
Avagy a mIRC lelke :)
Ez a resz a tools menu remote alatt talalhato.Ez A mIRC legfobb es
legosszetettebb (tehat a legnehezebb) resze.Itt allithatjuk be, hogy a
mIRC mire hogyan reagaljon.Valamint Ez a resz kepes a popups es aliases
reszt is ellatni.Ha Remote scriptünkben akarunk új parancsot elhelyezni,
akkor azt a sor elején lévô alias parancs segítségével tehetjük meg (a
szintaxis innentôl megegyezik az Aliases-nél írtakkal), amennyiben pedig
menü írására szeretnénk használni, a sor eleji menu szócskával hozhatjuk
mIRC-ünk számára ezt nyilvánvalóvá (a menu szó után az adott ablak neve
kell hogy szerepeljen, majd a továbbiakban a Popups-ban tanultak szerint
cselekedhetünk).
Az inger-figyelés szintaxisának megértéséhez fontos
tudni, hogy a
mIRC-ben egyes host-okhoz különbféle User-szinteket
rendelhetünk (lásd.
Users fülecske), ezáltal szabályozva, hogy egy-egy
kitüntetett
felhasználóval szemben miként viselkedjen mIRC-ünk. Amennyiben
egy külsô
hatásra mindenkinek egyformán kell felelni, ezt a részt figyelmen
kívül
hagyhatjuk.
A ctcp és a raw figyelések kivételével egységes formátumban kell megadni
a különbözô történésekre való általunk kívánt reakciókat: "on
[felhasználó szint]:[inger]:[esetleges paraméter(ek)]: { [reakció]}" . Ha
pl. azt szeretnénk, hogy mindenkit üdvözöljön a scriptünk, aki a #magyar
csatira érkezik, akkor ehhez az "on *:JOIN:#magyar: { /msg $chan Szia
$nick $+ ! }" sort kell a Remote-ba szúrnunk (a $nick, $chan, $+
függvények jelentését lásd. az Aliases-rôl szóló cikkben).
A Remote-nál is használhatunk kitüntetett karaktereket - egyikük a "^",
melyet közvetlenül a felhasználó szintje elé rakva eltüntethetjük a mIRC
által felénk mutatott, elôre megadott reagációit egyes dolgokra (pl.
JOIN-nál a csatira írt információt arról, hogy valaki érkezett), a másik
két fontos karakter pedig a "*" és a "?" - ôket a paramétereknél és a
felhasználó szintek megadásánál lehet használni (a "*" - mint a legtöbb
helyen - tetszôleges karaktersorozatot, a "?" pedig tetszôleges karaktert
helyettesíthet). A "*" és a "?", "#" társukkal együtt akkor is
használható, ha azt kell megadni, hogy mely helyeken érvényes az adott
szabály - a "?" azonban így a privát msg-ket, a "#" pedig az összes
csatornát jelöli, míg a "*" a privát msg-ket és a csatornákat együttesen
szimbolizálja.
scriptünkben a CTCP PING válaszát fogjuk kicserélni egy-egy meglepô
véletlenszerű szövegre - de elötte nézzük végig a legfontosabb ingereket
és paramétereiket:
on[felh. szint]:TEXT:[szöveg]:[hely]: { [parancs] } - ha az adott
szöveget az adott helyen írja valaki, akkor végrehajtódik a parancs.
Hasonló szintaxisú: NOTICE, ACTION.
on [felh. szint]:OP:[csatorna]: {
[parancs] } - akkor fut le a parancs,
ha valaki OP-ol valakit az adott
helyen. Hasonló szintaxisú: DEOP, VOICE,
DEVOICE, HELP(IRCNet-en nincs),
DEHELP(IRCNet-en nincs), SERVEROP (ha
netsplit miatt a server opol valakit),
JOIN, PART, KICK, BAN, UNBAN,
MODE, SERVERMODE, TOPIC.
on [felh.
szint]:QUIT: { [parancs] } - ha valaki lelép IRC-rôl, akkor a
parancs
végrehajtódik. Hasonló szintaxisú: START (amikor a mIRC
betöltôdik), CONNECT
(serverrel való sikeres kapcsolat megkezdése
esetén), USERMODE (felh. mód
váltása esetén).
CTCP [felh. szint]:[paraméter]: { [parancs] } - adott
paraméterrel
küldött CTCP esetén fut le a parancs.
raw [raw
száma]:[paraméter]: { [parancs] }
Nem véletlenül került a raw a legutolsó helyre, hiszen ez a legösszettebb
az összes közül - gyakorlatilag bármit figyelhetünk vele (s egyes
dolgokat kizárólag vele tudunk figyelni), csak az adott parancshoz
tartozó számot kell tudnunk hozzá. Ennek megértéséhez, és használatához
fontos ismerni az IRC RFC-t [1459] (itt van leírva, hogy miként is
működik ez az egész rendszer), vagy - kevésbé érdeklôdôknek, és az
egyszerű kezelôfelületet kedvelôknek - érdemes elolvasni, és használni a
Jeepster féle "IRC Numeric Reference"-et, melyet a www.ircworks.com
címrôl lehet letölteni. Példaképpen néhány fontosabb hibaüzenet száma:
406 - "nem találtam ilyen nick-et"
432 - "a nick hibás"
433 - "a nick
foglalt"
471 - "a csatornára nem férsz be"
473 - "a csati +i-s"
474
- "a csatiról BAN-olva vagy"
475 - "a csati jelszavas"
482 - "nem vagy
opos a csatin"
Ennyi információrengeteg után nézzük végre az ígért példát! Sokan nem
szeretik, ha PING-elik ôket mások - nekik lesz most egy kis meglepetés: a
következô script használatával a CTCP PING válasza helyett egy
véletlenszerű szöveget kap a PING-elô válaszul.
ctcp *:PING:{[enter]
;ha bárki CTCP PING-et küld nekünk, akkor a
következô utasításokat kell
végrehajtani: [enter]
haltdef [enter]
;letiltjuk az eredeti választ [enter]
%ra = $rand(1,3) [enter]
;a
%ra változónak a $rand függvény segítségével véletlenszerű értéket
adunk
(1-tôl 3-ig terjedôt) [enter]
if %ra = 1 { %szoveg = Miert vagy ra kivancsi
$nick $+ ? } [enter]
elseif %ra = 2 { %szoveg = $nick $+ , $nick $+ , nem
mondtak meg neked,
hogy ezt nem illik? } [enter]
else { %szoveg = Pong!
8) } [enter]
;a random értéktôl függôen kiválasztunk egy szöveget, ami a
válasz lesz
[enter]
ctcpreply $nick PING %szoveg [enter]
;elküldjük
a szöveget válaszként a PING-re [enter]
unset %szoveg [enter]
unset %ra
[enter]
;a használt változókat lenullázzuk, hogy ne maradjon bennük szemét
[enter]
} [enter]
Mivel esetenként lehetséges, hogy egyes
script-részeket - pl. ezt a
szöveges ping választ - nem szeretnénk
használni, érdemes úgynevezett
"csapatokba" szervezni az esetlegesen
kikapcsolandó részeket. A csapat
eleje egy "#[csapat neve] [on/off]"-al
kezdôdik, ahol természetesen az on
jelzi a bekapcsolt, az off pedig a
kikapcsolt állapotot, a csapat vége
pedig egy "#[csapat neve] end"-el van
jelölve. A továbbiakban az "/enable
[csapat neve]", ill. a "/disable [csapat
neve]" parancsokkal tudjuk
engedélyezni vagy letiltani az adott csapat
használatát.
Az utasítások végrehajtását szépítendô, gyakran lehet szükségünk arra,
hogy egy-egy parancs ne jelezzen vissza, miszerint sikeresen lefutott
(eredetileg ezt tenné pl. az enable, vagy a disable is, ill. az msg-k is
látszanak a képernyôn, mikor küldjük ôket) - ilyen esetekben érdemes az
utasítás elé közvetlenül egy pontot tenni (pl. /.msg), így annak
futásáról a felhasználónak semmiféle tudomása nem lesz.
A Remote scriptek legfôbb problémái abban rejlenek, hogy legtöbbjük
folyamatosan teszi teendôit, nem figyelve a floodolásra - a netsplitek és
a lag elkerülése végett ugyanis a serverek autómatikusan eltávolítják
azokat a serverrôl, akiknek túlságosan nagy az adatforgalmuk. Ha pl. a
scriptünk minden köszönônek visszaköszön, akkor egy rosszindulatú
felhasználó a köszönések gyors ismétlésével kifloodolhat minket a
serverrôl. Egy helyesen megírt script mindig figyel az ilyen
eshetôségekre - így pl. a CTCP-t küldô illetô CTCP-it 20 mp-re rögtön
ignore-olhatjuk a fenti scriptben, egy ".ignore -tu20 $wildsite" parancs
segítségével.
Mivel az emberek többnyire szeretnek tudni arról, ami velük történik - s
ez IRC-n sincs másként - az eredeti válasz letiltását kiegyensúlyozandó,
érdemes egy "echo 4 -a *** $1 from $nick $+ !" sort is beszúrni a CTCP-k
figyeléséhez, hogy a felhasználó is értesüljön a PING érkezésérôl. Az
echo parancs segítségével a képernyôre írhatunk - a négyes szám jelen
esetben az írás színét adja, míg a "-a" az aktuális ablakra való
hivatkozás (helyette állhat egy ablak neve is).
Egyenlore ennyi.
U.I.:Kulon koszonet Vide0nak a forrasanyagert.Ami ekezetekkel van irva,
az szo szerint az o muve.Ami nem, az azert van, mert angol a
billenytyuzetem.