Защита
По непонятным причинам в начале октября 2001 года на канале #southnet произошло резкое оживление публики. В результате постояльцам канала потребовались защитные скрипты. :) Как говорится: партия сказала надо, комсомол ответил есть! К протект-скриптам были выдвинуты следующие требованиями, они должны:
1) автоматически возвращать оп 2) автоматически снимать бан 3) автоматически возвращать на канал после кика
После недолгих раздумий и продолжительного тестирования был создан следующий набор скриптов.
on *:DEOP:#:{
if ($me == $opnick) && ($me != $nick) {
if ($nick isop $chan) chanserv DEOP $chan $nick
if ($me !isop $chan) chanserv OP $chan $me
}
 }
on *:BAN:#:{
if ($banmask iswm $address($me,5)) {
if ($nick isop $chan) chanserv DEOP $chan $nick
if ($me !isop $chan) chanserv OP $chan $me
mode $chan -b $banmask
}
}
on *:KICK:#:{
if ($knick == $me) && ($nick != $me) {
if ($nick isop $chan) chanserv DEOP $chan $nick
chanserv INVITE $chan
chanserv UNBAN $chan
}
}
Единственным органичением в использовании является необходимость ставить на себя режим -x, потому что команда chanserv\'а UNBAN работает только с "настоящими" масками. Прошел год и, как это не странно, ситуация повторилась. Про эту статью и эти скрипты я успешно забыл и написал новый вариант. А потом случайно наткнулся на эту статью и сравнил старые и новые скрипты. Разница была только в DEOP скрипте. Вот он какой:
on *:DEOP:#:{
if ($me == $opnick) && ($me != $nick) {
if (. !isin $nick) && (serv !isin $nick) && $&
($nick ison $chan) && ($nick isop $chan) $&
chanserv deop $chan $nick
if ($me !isop $chan) chanserv op $chan $me
}
}
Как вы это видите, различия минимальны: новый скрипт не пытается деопать сервера (после сплитов) и не реагирует еще на несколько экзотических случаев. Заодно этот пример показывает метод борьбы с очень длинными строками: всё что находится после $& mIRC считает относящимся к предыдущей строке. Людям использующим "|" меня не понять :))
© by Zmey
Модификация вводимого текста
А еще был у нас в сети вот такой случай... Завалился ко мне в приват кто-то и попросил скриптец который бы ему одни буквы на другие менял (например: ш на w). А у меня видать настроение было хорошее и я ломался не долго и скриптец тот написал. Вот что у меня получилось:
on *:INPUT:*: {
if (!$ctrlenter) {
var %action, %result = $1-
if ($left(%result,1) != /) {
%action = say
%result = $replacecs(%result, ш, w, Ш, W)
}
else {
%action = $gettok(%result,1,32)
%result = $replacecs($deltok(%result,1,32), ш, w, Ш, W)
}
%action %result
halt
}
}
Думаю понятно что надо делать чтобы этот скрипт другие буквы подменял?
А потом смотрю, так ведь эту лабуду я для ^MAD-MAKC^\'а когда-то делал. Мы тогда пытались облегчить /me и /ame. И вот до чего дооблегчались:
on *:INPUT:*: {
if ($ctrlenter == $false) {
var %result = $1-
if ($left(%result,1) == -) { me $right(%result,-1) | halt }
if ($left(%result,1) == =) { ame $right(%result,-1) | halt }
}
}
Все строки начинающиеся с "-" скрипт интерпретирует как /me, а все строки начинающиеся с "=" -- как /ame.
Потом я еще не раз этот самый скрипт под разными соусами распространял. Вот совсем недавно я его для ice переделывал. Ему смайлики хотелось подменять: допустим пишет он "=)", а на экране отображается "ж)". Уже и не помню что именно я ему слил, но что-то типа этого:
on *:INPUT:*: {
if (!$ctrlenter) {
var %say = $iif($left($1-,1) != /, say)
%say $replacecs($1-, = $+ $chr(41), $+ $rand(1,15) $+ ж $+ $chr(41))
halt
}
}
Этот скрипт самый продвинутый из всех трёх: он случайным образом определяет цвет буквы "ж" в смайлике ;)
После всего этого я понял, что статью надо про это написать и закончить с этой темой, дабы к ней больше не возвращаться. Очень неинтересно всё время одно и то же писать. Ну а статья перед вами :)
P.S.: Каждый скрипт содержит условие "if (!$ctrlenter)" (или "if ($ctrlenter == $false)", что одно и то же), которое блокирует выполнение скрипта, если при нажатии клавиши энтер (Enter) нажата клавиша контрол (Ctrl).
© by Zmey
Развлечения
Парочка развлекательных скриптов:
[22:53:15] * @tvrsh разрубил lamestbot на две половинки, (lamest) и (bot)
Код скрипта:
/axe {
var %axe.len = $len($$1)
var %axe.nick = $$1
set %axe.rnd $rand(1, %axe.len )
if ( %axe.rnd == %axe.len ) { set %axe.rnd $rand(1, %axe.len ) }
set %axe.1 $left(%axe.nick, %axe.rnd )
set %axe.2 $remove(%axe.nick, %axe.1 )
/me разрубил %axe.nick на две половинки, ( $+ %axe.1 $+ ) и ( $+ %axe.2 $+ )
}
[22:56:15] * @tvrsh пропустил lamestbot через шреддер! Вышло |e|s|o|t|
Код скрипта:
/shredder {
var %sh.x = 1
var %sh.1 = 0
while (%sh.x <= $len($$1) ) {
set %sh.1 $mid( $$1 , %sh.x ,1)
set %sh.rnd $rand(0,1)
if ( %sh.rnd ) { set %sh.out %sh.out $+ $chr(124) $+ %sh.1 }
inc %sh.x
}
/me пропустил $$1 через шреддер! Вышло %sh.out $+ $chr(124)
set %sh.x 1
unset %sh.out
}
Скопируйте эти скрипты в Alt+R -> Aliases и используйте их /axe nick или /shredder nick
© by vindi
Остальные скрипты Вы можете найти в соответствующем разделе нашего форума.
|