<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Полезные мелочи сети, заметки с тегом: IRC</title>
<link>https://stereomaster.ru/?go=tags/irc/</link>
<description></description>
<generator>E2 (v3254; Aegea)</generator>

<item>
<title>mIRC-скриптинг. Часть 1</title>
<guid isPermaLink="false">208</guid>
<link>https://stereomaster.ru/?go=all/mirc-skripting-chast-1/</link>
<comments>https://stereomaster.ru/?go=all/mirc-skripting-chast-1/</comments>
<description>&lt;p&gt;&lt;img class="alignleft size-thumbnail wp-image-1283" title="" src="http://stereomaster.ru/wp-content/uploads/2012/06/mirc-16806-120x120.jpg" alt="" width="120" height="120" /&gt;&lt;/p&gt;
&lt;p&gt;К лету решил написать парочку-троечку статей о том, как же делать скрипты в mIRC. Точнее, как их делаю я. Для некоторых юзеров GS это может быть немного полезным. Для тех, кто не знает, IRC — это своеобразный протокол чата, mIRC — название программы-клиента для него, в котором можно писать собственные скрипты на его собственном же языке.&lt;/p&gt;
&lt;p&gt;Начну немного нелогично: вместо того, чтоб описывать начало, я пока опишу несколько техник, которыми пользуюсь я для решения определённых задач.&lt;/p&gt;
&lt;h2&gt;Алиасы форматирования&lt;/h2&gt;
&lt;p&gt;Специфика моих скриптов такова, что требуется выравнивать текст на определённой длине — слева, справа или по центру. Некоторые клиенты не поддерживают наличие нескольких пробелов, идущих подряд, потому роль выравнивателя выполняют точки цвета фона текста. В каждом скрипте я делаю 3 алиаса: $leftal (left alignment), $central (не владимирский, central alignment), $rightal.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;alias leftal {
 set %script_dot
 if ($calc($2 - $len($strip($1))) &amp;amp;gt; 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))) &amp;amp;gt; 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))) &amp;amp;gt; 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
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Работают они одинаково:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$leftal(text,length,color,backcolor)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Высчитывается длина текста без цветов, от строки точке отсекается часть до итоговой длины и добавляется к строке в зависимости от алиаса: к началу, концу, либо делится на половины и прибавляется и туда, и туда, если надо по центру.&lt;/p&gt;
&lt;p&gt;Здесь важно проверять, не является ли длина текста больше, чем указано в алиасе: если проигнорировать, то к тексту будет прибавлена вся строка точек целиком, а это очень некрасиво.&lt;/p&gt;
&lt;h2&gt;Массивы&lt;/h2&gt;
&lt;p&gt;В mIRC-скриптинге нет массивов как таковых, их заменяют &lt;em&gt;токены — &lt;/em&gt;часть строки, стоящий между символами-разделителями. Чтоб понятнее, пример:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;set %token_string первый второй третий четвёртый
set %token_string первый|второй|третий|четвёртый&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Это обычные строки, но к ним можно использовать функции токенов с обозначением разделителя. В первом случае разделителем считается пробел, во втором — вертикальная черта ($chr(124)). Я привык использовать именно вторую, чтоб спокойно использовать пробел именно в его настоящем назначении, разделять слова.&lt;br /&gt;
Для токенов есть куча функций, о которых вы почитаете в мануале. У каждого токена есть свой номер, начиная с первого. Именно это можно считать индексом массива.&lt;/p&gt;
&lt;h2&gt;N-мерные массивы&lt;/h2&gt;
&lt;p&gt;По аналогии с предыдущим, N-мерные массивы можно заменить нужным числом строк токенов.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;set %name Василий Иван Дмитрий Владимир Николай
set %last_name Медведев Пупкин Ургант Винокур Срулёв&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Первому токену первой строки соответствует первый токен во второй и так далее. Важно не забывать менять элементы обеих строк в соответственном порядке, если требуется перемешать массив.&lt;/p&gt;
&lt;h2&gt;Перемешивание токенов&lt;/h2&gt;
&lt;p&gt;Часто стоит задача сгенерировать случайную строку из заданных токенов так, чтобы не было лишних повторов или недостач. Вроде бы кажется логичным вариант брать случайный элемент из исходной строки и добавлять его во вторую, которая и будет являться результатом. Но нужно не забывать проверять на наличие этого же элемента в добавленной, и вообще малейшая ошибка приведёт к тому, что весь цикл, в котором происходит наращивание строки, может зациклится, как бы тавтологично не звучало.&lt;/p&gt;
&lt;p&gt;Мой вариант в этом плане менее болезненный: я беру одну строку, беру две переменных со случайными значениями и в исходной строке просто переставляю два случайных токена местами. Цикл при этом должен иметь как можно больше шагов, чтобы строка действительно хорошо перемешалась.&lt;/p&gt;
</description>
<pubDate>Fri, 01 Jun 2012 14:54:24 +0500</pubDate>
</item>


</channel>
</rss>