Пишу про заинтересовавшие сервисы, блоги, твиттеры, а также собственные идеи и задумки.

mIRC-скриптинг. Часть 1

1 июня 2012, 9:54

К лету решил написать парочку-троечку статей о том, как же делать скрипты в mIRC. Точнее, как их делаю я. Для некоторых юзеров GS это может быть немного полезным. Для тех, кто не знает, IRC — это своеобразный протокол чата, mIRC — название программы-клиента для него, в котором можно писать собственные скрипты на его собственном же языке.

Начну немного нелогично: вместо того, чтоб описывать начало, я пока опишу несколько техник, которыми пользуюсь я для решения определённых задач.

Алиасы форматирования

Специфика моих скриптов такова, что требуется выравнивать текст на определённой длине — слева, справа или по центру. Некоторые клиенты не поддерживают наличие нескольких пробелов, идущих подряд, потому роль выравнивателя выполняют точки цвета фона текста. В каждом скрипте я делаю 3 алиаса: $leftal (left alignment), $central (не владимирский, central alignment), $rightal.

alias leftal {
 set %script_dot
 if ($calc($2 - $len($strip($1))) > 0) {
  set %script_dot $str(...,33)
  set %script_dot $left(%script_dot, $calc($2 - $len($strip($1))))
 }
 return  $+ $3 $+ , $+ $4 $+ $1 $+  $+ $4 $+ , $+ $4 $+ %script_dot
 unset %script_dot
}

alias central {
 set %script_dot1
 set %script_dot2
 if ($calc($2 - $len($strip($1))) > 0) {
  set %script_dots $str(...,33)
  set %script_dot1 $left(%script_dots, $calc(($2 - $len($strip($1))) / 2))
  set %script_dot2 $left(%script_dots, $calc($2 - $len($strip($1)) - $len(%script_dot1)))
 }
 return  $+ $4 $+ , $+ $4 $+ %script_dot2 $+  $+ $3 $+ , $+ $4 $+ $1 $+  $+ $4 $+ , $+ $4 $+ %script_dot1
 unset %script_dot*
}

alias rightal {
 set %script_dot
 if ($calc($2 - $len($strip($1))) > 0) {
  set %script_dot $str(...,33)
  set %script_dot $left(%script_dot, $calc($2 - $len($strip($1))))
 }
 return  $+ $4 $+ , $+ $4 $+ %script_dot $+  $+ $3 $+ , $+ $4 $+ $1
 unset %script_dot
}

Работают они одинаково:

$leftal(text,length,color,backcolor)

Высчитывается длина текста без цветов, от строки точке отсекается часть до итоговой длины и добавляется к строке в зависимости от алиаса: к началу, концу, либо делится на половины и прибавляется и туда, и туда, если надо по центру.

Здесь важно проверять, не является ли длина текста больше, чем указано в алиасе: если проигнорировать, то к тексту будет прибавлена вся строка точек целиком, а это очень некрасиво.

Массивы

В mIRC-скриптинге нет массивов как таковых, их заменяют токены — часть строки, стоящий между символами-разделителями. Чтоб понятнее, пример:

set %token_string первый второй третий четвёртый
set %token_string первый|второй|третий|четвёртый

Это обычные строки, но к ним можно использовать функции токенов с обозначением разделителя. В первом случае разделителем считается пробел, во втором — вертикальная черта ($chr(124)). Я привык использовать именно вторую, чтоб спокойно использовать пробел именно в его настоящем назначении, разделять слова.
Для токенов есть куча функций, о которых вы почитаете в мануале. У каждого токена есть свой номер, начиная с первого. Именно это можно считать индексом массива.

N-мерные массивы

По аналогии с предыдущим, N-мерные массивы можно заменить нужным числом строк токенов.

set %name Василий Иван Дмитрий Владимир Николай
set %last_name Медведев Пупкин Ургант Винокур Срулёв

Первому токену первой строки соответствует первый токен во второй и так далее. Важно не забывать менять элементы обеих строк в соответственном порядке, если требуется перемешать массив.

Перемешивание токенов

Часто стоит задача сгенерировать случайную строку из заданных токенов так, чтобы не было лишних повторов или недостач. Вроде бы кажется логичным вариант брать случайный элемент из исходной строки и добавлять его во вторую, которая и будет являться результатом. Но нужно не забывать проверять на наличие этого же элемента в добавленной, и вообще малейшая ошибка приведёт к тому, что весь цикл, в котором происходит наращивание строки, может зациклится, как бы тавтологично не звучало.

Мой вариант в этом плане менее болезненный: я беру одну строку, беру две переменных со случайными значениями и в исходной строке просто переставляю два случайных токена местами. Цикл при этом должен иметь как можно больше шагов, чтобы строка действительно хорошо перемешалась.

9 комментариев
mult

ооо.... ирц. лет пять назад было популярно в разных кампусных сетях (красноярска). а потом, с появлением безлимитных интернетов, социальных сетей, конференций в жаббере, стало умирать... тогда и скрипты писали, и свои сборки делали из mIRC'ов, x-chat'ов... экстремалы и юниксоиды сидели в консольных irssi.

StereoMaster

Мы и поныне сидим, играем. Всякие жаберо-конфы — это не то, там как минимум нельзя сообщения оформлять, да и у нас свои нужды и средства для их удовлетворения. Не такой уж и мёртвый протокол, думаю.

Андрей

А символ цвета нельзя как-то получше оформлять? Его так и потерять легко. Ну и ещё куча всех этих долларов ужасает.

Андрей

Протокол не мертвый, но и развивать его особо не торопятся.

StereoMaster

А как ты символ получше оформишь, пыщь-лучиками и рюшечками?) А с долларами тоже никуда не деться — служебный символ, используется для функций и токенов. А процент — для переменных. Не знаю, как там у вас в квирц.

Ну и это единственный путь сделать две переменные кодом цвета — конкатенировать через $+.

StereoMaster

Его время уже прошло, там действительно из любопытного только оформление цветом и осталось (которое уже мало кому нужно для обычного общения), остальное есть в более удобных и функциональных.

Андрей

У нас символ цвета — $k(), жирности — $b() и т. д. А конкатенация безо всяких ухищрений — просто запись строк подряд. Смотрится попроще, чем у вас.

Danshatdanila

Люди! Мне нужен скрипт на цветной ник на канале! Я оп!

StereoMaster

Цветной ник на канале? Это где, это что?

Ваш комментарий
адрес не будет опубликован

ХТМЛ не работает

Ctrl + Enter
Популярное