{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Полезные мелочи сети, заметки с тегом: IRC",
    "home_page_url": "https:\/\/stereomaster.ru\/?go=tags\/irc\/",
    "feed_url": "https:\/\/stereomaster.ru\/?go=tags%2Firc%2Fjson%2F",
    "icon": "https:\/\/stereomaster.ru\/user\/userpic@2x.jpg",
    "author": {
        "name": "StereoMaster",
        "url": "https:\/\/stereomaster.ru\/",
        "avatar": "https:\/\/stereomaster.ru\/user\/userpic@2x.jpg"
    },
    "items": [
        {
            "id": "208",
            "url": "https:\/\/stereomaster.ru\/?go=all\/mirc-skripting-chast-1\/",
            "title": "mIRC-скриптинг. Часть 1",
            "content_html": "<p><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\" \/><\/p>\n<p>К лету решил написать парочку-троечку статей о том, как же делать скрипты в mIRC. Точнее, как их делаю я. Для некоторых юзеров GS это может быть немного полезным. Для тех, кто не знает, IRC — это своеобразный протокол чата, mIRC — название программы-клиента для него, в котором можно писать собственные скрипты на его собственном же языке.<\/p>\n<p>Начну немного нелогично: вместо того, чтоб описывать начало, я пока опишу несколько техник, которыми пользуюсь я для решения определённых задач.<\/p>\n<h2>Алиасы форматирования<\/h2>\n<p>Специфика моих скриптов такова, что требуется выравнивать текст на определённой длине — слева, справа или по центру. Некоторые клиенты не поддерживают наличие нескольких пробелов, идущих подряд, потому роль выравнивателя выполняют точки цвета фона текста. В каждом скрипте я делаю 3 алиаса: $leftal (left alignment), $central (не владимирский, central alignment), $rightal.<\/p>\n<pre class=\"e2-text-code\"><code>alias leftal {\r\n set %script_dot\r\n if ($calc($2 - $len($strip($1))) &amp;gt; 0) {\r\n  set %script_dot $str(...,33)\r\n  set %script_dot $left(%script_dot, $calc($2 - $len($strip($1))))\r\n }\r\n return \u0003 $+ $3 $+ , $+ $4 $+ $1 $+ \u0003 $+ $4 $+ , $+ $4 $+ %script_dot\r\n unset %script_dot\r\n}\r\n\r\nalias central {\r\n set %script_dot1\r\n set %script_dot2\r\n if ($calc($2 - $len($strip($1))) &amp;gt; 0) {\r\n  set %script_dots $str(...,33)\r\n  set %script_dot1 $left(%script_dots, $calc(($2 - $len($strip($1))) \/ 2))\r\n  set %script_dot2 $left(%script_dots, $calc($2 - $len($strip($1)) - $len(%script_dot1)))\r\n }\r\n return \u0003 $+ $4 $+ , $+ $4 $+ %script_dot2 $+ \u0003 $+ $3 $+ , $+ $4 $+ $1 $+ \u0003 $+ $4 $+ , $+ $4 $+ %script_dot1\r\n unset %script_dot*\r\n}\r\n\r\nalias rightal {\r\n set %script_dot\r\n if ($calc($2 - $len($strip($1))) &amp;gt; 0) {\r\n  set %script_dot $str(...,33)\r\n  set %script_dot $left(%script_dot, $calc($2 - $len($strip($1))))\r\n }\r\n return \u0003 $+ $4 $+ , $+ $4 $+ %script_dot $+ \u0003 $+ $3 $+ , $+ $4 $+ $1\r\n unset %script_dot\r\n}<\/code><\/pre><p>Работают они одинаково:<\/p>\n<pre class=\"e2-text-code\"><code>$leftal(text,length,color,backcolor)<\/code><\/pre><p>Высчитывается длина текста без цветов, от строки точке отсекается часть до итоговой длины и добавляется к строке в зависимости от алиаса: к началу, концу, либо делится на половины и прибавляется и туда, и туда, если надо по центру.<\/p>\n<p>Здесь важно проверять, не является ли длина текста больше, чем указано в алиасе: если проигнорировать, то к тексту будет прибавлена вся строка точек целиком, а это очень некрасиво.<\/p>\n<h2>Массивы<\/h2>\n<p>В mIRC-скриптинге нет массивов как таковых, их заменяют <em>токены — <\/em>часть строки, стоящий между символами-разделителями. Чтоб понятнее, пример:<\/p>\n<pre class=\"e2-text-code\"><code>set %token_string первый второй третий четвёртый\r\nset %token_string первый|второй|третий|четвёртый<\/code><\/pre><p>Это обычные строки, но к ним можно использовать функции токенов с обозначением разделителя. В первом случае разделителем считается пробел, во втором — вертикальная черта ($chr(124)). Я привык использовать именно вторую, чтоб спокойно использовать пробел именно в его настоящем назначении, разделять слова.<br \/>\nДля токенов есть куча функций, о которых вы почитаете в мануале. У каждого токена есть свой номер, начиная с первого. Именно это можно считать индексом массива.<\/p>\n<h2>N-мерные массивы<\/h2>\n<p>По аналогии с предыдущим, N-мерные массивы можно заменить нужным числом строк токенов.<\/p>\n<pre class=\"e2-text-code\"><code>set %name Василий Иван Дмитрий Владимир Николай\r\nset %last_name Медведев Пупкин Ургант Винокур Срулёв<\/code><\/pre><p>Первому токену первой строки соответствует первый токен во второй и так далее. Важно не забывать менять элементы обеих строк в соответственном порядке, если требуется перемешать массив.<\/p>\n<h2>Перемешивание токенов<\/h2>\n<p>Часто стоит задача сгенерировать случайную строку из заданных токенов так, чтобы не было лишних повторов или недостач. Вроде бы кажется логичным вариант брать случайный элемент из исходной строки и добавлять его во вторую, которая и будет являться результатом. Но нужно не забывать проверять на наличие этого же элемента в добавленной, и вообще малейшая ошибка приведёт к тому, что весь цикл, в котором происходит наращивание строки, может зациклится, как бы тавтологично не звучало.<\/p>\n<p>Мой вариант в этом плане менее болезненный: я беру одну строку, беру две переменных со случайными значениями и в исходной строке просто переставляю два случайных токена местами. Цикл при этом должен иметь как можно больше шагов, чтобы строка действительно хорошо перемешалась.<\/p>\n",
            "date_published": "2012-06-01T14:54:24+05:00",
            "date_modified": "2015-01-23T11:09:28+05:00",
            "_date_published_rfc2822": "Fri, 01 Jun 2012 14:54:24 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "208",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3254,
    "_e2_ua_string": "E2 (v3254; Aegea)"
}