EPIC4 Manual


Sztuczki

Tutaj będzie pare ciakawostek pozwalających budować proste i skuteczne zarazem potrzebne nam narzędzia.

Jak kopać.
Servery IRCNetu pozwalają na wykonywanie pewnych operacji na kilku nickach jednocześnie, o czym nie każdy wie. Jest to szczególnie pomocne np. przy kopaniu. Załóżmy, że chcemy wywalić jakiś 8 nicków - normalnie odbywałoby się to jakoś tak:


/kick #kanal Jenny BuM
/kick #kanal Jessie BuM
/kick #kanal Ash BuM
.....
/kick #kanal Venomoth BuM

Poza tym, ze nabijemy sobie ogromnego laga, razej nie uda się wszystkich 8 osób wyalić. Ale można te nicki wywalić huretem (servery ircd dla IRCNetu pozwalają wywalić po 4 naraz), oddzielając poszczególne nicki ',' (przecinkiem)


/kick #kanal Jenny,Jessie,Ash,Pikachu BuM
/kick #kanal Raichu,Machoke,Snorlax,Venomoth BuM

Przy takim użyciu KICK server przyjmie od razu te 4 nicki i wywali je natychmiast. Nie ma możliwości, żeby ktoś nam przeszkodził ich wszystkich naraz wywalić -- takie 'paczuszki' są niepodzielne. Oczywiście wywalenie drugiej partii nicków może się już nie udać (bedziemy mieć juz małego laga), ale i tak wykonanie 1 4xKICK daje mniejszego laga niż 4 1xKICK. A zatem, czysty zysk :-)



Opóźnienia
Rozważmy coś takiego:


/set mode_stripper ON

To ma uruchmić strippera do MODE`ów, tutaj akurat to nie jest szczególnie istotne



/on -mode_stripped '% % +o $servernick()' {
   echo Dostałem opa, czyli @ == $ischanop($servernick() $1)
}

To działa mniej więcej tak: mode stripper zostanie uruchomiony, gdy otrzymamy (nasz nick to $servernick()) +o na jakimś kanale. A jeżeli otrzymaliśmy własnie @, tzn, że funkcja $ischanop() powinna stwierdzić iż tego opa mamy (czyli zwrócić wartość '1'). Tymczasem...


'Dostałem opa, czyli @ == 0'

Dlaczego tak jest? Że dostając +o, wywołujemy akcję, która stewierdza, że jednak tego +o nie mamy? Otóż client update`uje listę opów po zakończeni działania wszelkich ONów. Dlatego potrzebujemy pewnego opóżnienia. Można używać wait, sleep, usleep, ale przyniesie to więcej szkody niż pożytku (całkowite zablokowanie clienta na jakiś czas). Tutaj należy użyć timera, ale też z głową.


/on -mode_stripped '% % +o $servernick()' {
   ^timer 0 echo Dostałem opa, czyli @ == $ischanop($servernick() $1)
}

Dlaczgo '^timer 0' a nie np. '^timer 1'? Bo ta jedna sekunda może czasem trwać za dlugo, żeby np. rozpocząc TakeOver :-) A '0' da clientowi, jakkoliwek by to głupio nie wyglądało, odpowiednio dużo czasu, żeby doświerzyć listę opów na kanale i tym samym stwierdzić, że my sami mamy +o.



Wstęp Home Następny Paragraf