StM's IRC FrameworkДля упрощения собственной разработки и ваших трудов я сделал шаблон (да, это корректнее, чем называть это фреймворком, но зато звучит солиднее!) для IRC-скриптов, который содержит (или будет содержать) возможные полезные решения, которые лично я достаточно часто применяю в играх.
Имейте в виду, это не готовый рабочий скрипт, это лишь оболочка, заполнять которую вы должны самостоятельно. Просто к ней прилагаются ряд уже готовых решений для частых проблем (или просто когда лень перетаскивать нужный кусок кода из одного скрипта в другой).
Установка1. Разархивируйте оба файла из архива в корень вашей папки /mIRC.
2. Переименуйте файл
stm_template.ini в префикс названия вашей игры (например, eg.ini). Файл stm_snippets.ini переименовывать
не нужно!
3. В запущенном клиенте нажмите Ctrl-R
4. В открывшемся окне выполните Файл — Загрузить — и загрузите оба скрипта.
5. Чтобы открыть исходник нужного файла перейдите в меню Вид — Ещё и выберите там файл двойным кликом.
6. Допишите игру и не забудьте её протестить.
7. Вы великолепны!
Шаблонstm_template.ini — файл-шаблон для скрипта игр. Содержит пустые блоки для диалогового окна, приёма команд с канала и привата, а также базовую схему интерактива.
Использование:1. Замените в файле все встречающиеся слова «prefix» на префикс вашей игры. Команда для запуска скрипта станет — /prefix (само собой, вместо слова prefix уже будут введённые вами буквы)
2. Заполните диалоговое окно элементами управления.
— Кнопки звуковых панелей будут автоматически отправлять звуки из саундпака на указанный канал. Расширение .mp3 в названии файла указывать не обязательно.
— Чтобы раскидать элементы управления по нужным вкладкам: отбор/игра/интер, припишите в конце строчки «tab
id_вкладки», на которой этот элемент будет выводиться.
Например, чтобы создать кнопку «Запустить отбор» на вкладке отбора, пропишите в диалоговое окно
- Code: Выделить всё
button "Запустить отбор", 52, 140 70 90 20, tab 40
здесь 52 — id самой кнопки, должен быть уникальным для каждого элемента
140 70 — координаты x и y кнопки
90 20 — ширина и высота
, tab 40 — кнопка будет появляться только на вкладке 40 (т.е. отбор)
Места, которые предназначены для заполнения отмечены комментарием
;... — на панели звуков, во вкладках, в блоке редактирования текста (допустим, вам нужно изменять переменные синхронно с содержимым текстового поля), в блоке кликов, в блоке обработки команд на канале и в привате. Все собственные алиасы можно дописывать в самый конец файла (желательно с параметром -l, чтоб алиас работал только в данном скрипте. Например:
alias -l m10_congratulate_user).
При необходимости замените или подкорректируйте блок интерактива: сейчас он прибавляет 1 очко пользователю, который введёт в приват номер верного ответа.
Также можете использовать алиас $get_question(номер_строки), который меняет вопрос из базы, во всех необходимых местах: при ручной смене вопроса, или при перелистывании с помощью кнопки, например.
Сниппетыstm_snippets.ini — набор алиасов, которые могут оказаться полезными в играх.
Алиасы выравнивания / align:- Code: Выделить всё
$a_left(текст,11,01,00)
$a_right(текст,11,01,00)
$a_center(текст,11,01,00)
Расположат текст слева, справа или по центру в плашке указанной длины, цвета текста и цвета фона.
$1 — текст (запятые нужно заменять на сочетание
$+ $chr(44), либо указывать переменную); $2 — нужная длина; $3 — код цвета текста (желательно двумя цифрами); $4 — код цвета фона (желательно двумя цифрами).
Алиасы работают наравне с моими старыми: leftal, rightal и central.
$s или
$s(10)Алиас возвращает символ неразрывного пробела (или сразу несколько), просто так проще чем $chr(160).
Алиасы форматирования / format:- Code: Выделить всё
$f_money(99,9)
Возвращает отформатированную сумму с двумя знаками после запятой, принимает дроби и через точки, и через запятые. Например $f_money(99.9) → 99,90 или $f_money(11) → 11,00
- Code: Выделить всё
$f_num(999999,99)
Возвращает отформатированное по разрядам число. Принимаются целые числа, а также десятичные дроби через точку или запятую. Разряды форматирует через пробел, десятичный разделитель — запятая. Хоть это и не совсем правильно, тысячный разряд он тоже отбивает от числа пробелом.
Например,
$f_num(1000000) → 1 000 000
$f_num(1999,9) → 1 999,9
$f_num($f_money(1999.9)) → 1 999,90
- Code: Выделить всё
$f_time(120)
$f_time(5:1,H:nn:ss)
Возвращает секунды или неправильный формат времени в указанном формате (либо по умолчанию в nn:ss).
Использование: $f_time(время, [формат])
Время можно указывать как в секундах, так и в неотформатированном таймстампе.
Формат — необязательный параметр. H — часы, n — минуты, s — секунды.
Например $f_time(120) — 2:00
$f_time(5:1, H:nn:ss) → 0:05:01.
Алиасы сравнения:- Code: Выделить всё
$min(a,b) ← сравнивает два числа, работает как и прежде, поэтому их замена не повлияет на ваши скрипты!
$max(a b c d e) / $min(a,b,c,d,e) ← сравнивает ряд чисел через пробел или запятые.
$max(a~b~c~d~e,126) ← сравнивает числа из токена, если вы укажете разделитель.
Возвращают наибольшее/наименьшее из ряда предоставленных чисел. Можно вводить или два через запятую (старый формат, сохранён для совместимости), либо указать токен через пробел или иной разделитель.
Алиасы работы с текстом:- Code: Выделить всё
$o(переменная с длинной строкой текста с кодами цветов)
Возвращает оптимизированную строку с объединёнными кодами цветов, для экономии символов. Полезно в случае вывода очень пёстрого графония с кучей элементов. Работает (пока) только при передаче строки через переменную.
Например, k1,1.k1,1.k1,1.k1,1.k1,1.k2,1.k2,1. → k1,1.....k2,1..
- Code: Выделить всё
$questionize(длинный текст вопроса,58)
Возвращает текст вопроса, разбитый на строки длиной не более N символов, разделённый тильдами. Полезно для построчного выведения длинного вопроса в плашках.
Например,
- Code: Выделить всё
$questionize(В каком году Александр I взошёл на титул правления государством?,20)
→
- Code: Выделить всё
В каком году~Александр I взошёл на~титул правления~государством?
Строку можно разбирать по токенам через цикл с $gettok(%question,%i,126). Тильды и запятые в сыром виде не использовать, вопрос желательно передавать через переменную.
И наконец самый важный раздел:
Алиас сортировки$sort- Code: Выделить всё
$sort(nicks names surnames,sortkey1,sortkey2:ar,sortkey3:n,[32])
Алиас создан на замену более специфическим алиасам и объединяет в себе все типы сортировки. Также алиас поддерживает
вторичную, третичную и дофигичную сортировки для тех, кому мало обычной — если сортировать нужно сразу по нескольким параметрам!
$1 — через пробел указываются переменные, которые нужно отсортировать.
$2,$3,$4... — переменные ключей сортировки, через двоеточие указываются типы сортировок: a — по алфавиту, n — числовая, r — по убыванию. Тип можно не указывать — по умолчанию будет использоваться числовая по убыванию.
[32] — последним параметром можно указать код символа разделителя, если это не пробел (иначе можно не указывать).
Важно! Все названия переменных нужно указывать без %! Также в первом пункте не нужно перечислять и ключи сортировки — все переменные будут отсортированы разом.
Примеры: исходные переменные
- Code: Выделить всё
%int_nick StM AE wwbm Дуся
%int_name СтМ АЕ Ввбмка Евдокия
%int_point 1 1 3 4
%int_time 11.58 11.10 3.65 5.62
$sort(int_nick int_name,int_point): - сортировка по очкам по убыванию
- Code: Выделить всё
%int_nick Дуся wwbm StM AE
%int_name Евдокия Ввбмка СтМ АЕ
%int_point 4 3 1 1
$sort(int_nick int_name,int_point,int_time:n): - сортировка по очкам по убыванию, по времени по возрастанию
- Code: Выделить всё
%int_nick Дуся wwbm AE StM
%int_name Евдокия Ввбмка АЕ СтМ
%int_point 4 3 1 1
%int_time 5.62 3.65 11.10 11.58
(После равных очков АЕ опережает СтМ по времени)
Тем не менее он до сих пор не работает со временными переменными, только сет и только хардкор: обратите внимание, что он самостоятельно заменяет значения вносимых в него переменных. А иначе никак.
Алиас для работы с интерактивом- Code: Выделить всё
$inter(int_nicks,nick,int_points,point)
$inter(int_nicks,nick,int_points,point).add
$inter(1,int_points int_points2,point point2).set
$inter(1,int_points int_points2,point point2).return
$inter(int_nicks,nick,int_points int_points2).delete
Полезный алиас для манипуляций с интерактивом, благодаря идее
WK217. Умеет прибавлять очки игрокам интерактива, удалять игроков и возвращать их счёт. Данный функционал можно применять не только к интерактиву, но и для добавления очков в других аналогичных переменных.
Используется со свойствами
.return (по умолчанию),
.add,
.set,
.delete.
Важно! Все названия переменных нужно указывать без %!
- Code: Выделить всё
$inter(int_nicks,nick,int_points int_points2 int_points3...,point).add ← прибавляет нику nick из интерактива point очков.
$inter(int_nicks,nick,int_points int_points2 int_points3...,point).set ← устанавливает нику nick в интерактиве point очков.
$inter(int_nicks,nick,int_points int_points2 int_points3) ← возвращает через пробел очки игрока из трёх указанных переменных
Если ник nick в интерактиве ещё не существует, то добавляет его к общему списку int_nicks.
Также можно добавлять очки по номеру игрока, ник будет необязателен. (но в этом случае добавление нового игрока невозможно, само собой)
- Code: Выделить всё
$inter(1,int_points int_points2 int_points3...,point point2 point3).add ← добавляет 1 Игроку point в int_points, point2 в int_points2 и т.д.
$inter(1,int_points int_points2 int_points3).return ← возвращает через пробел очки 1 Игрока из трёх указанных переменных
Ну и четвёртая опция — удаление игрока. Для этого требует указания ника и всех переменных, из которых нужно удалить статистику игрока.
- Code: Выделить всё
$inter(int_nicks,nick,int_points int_points2 int_points3).delete ← удаляет игрока из ников и трёх указанных переменных
Выборка уникальных токенов $disttok (Distinct token) — алиас удаляет дубликаты токенов и возвращает неповторяющиеся значения из строки.
- Code: Выделить всё
$disttok(token,[C])
[C] — код символа-разделителя (пробел — 32).
- Code: Выделить всё
$disttok(абажур ящур абажур мемасы,32) → абажур ящур мемасы
Перетасовывание (by Виктор)
- Code: Выделить всё
$shuftok(text,[C])
Алиас перемешивает токены в случайном порядке. $1 — текст, $2 — код разделителя токенов.
Использование:
%test = $shuftok(%test) — перемешает токены через пробел (по умолчанию)
%test = $shuftok(%test,124) — перемешает токены, указанные через вертикальную черту.
Бенчмарк алиасов- Code: Выделить всё
/bench
Алиас тестирует идентичные алиасы на скорость, выводя время работы нескольких тысяч их итераций в «тиках». Названия сравниваемых алиасов и передаваемые параметры нужно указывать в коде самого алиаса (расположен почти в конце файла stm_snippets.mrc)
В этой теме можете задавать вопросы касательно работы алиасов, свои пожелания и предложения, какие же часто используемые вами функции стоит включить в этот набор. По мере апгрейда версии будут перезаливаться во вложении.
Чейнджлог:- Code: Выделить всё
1.05.9 (02.04.20) — исправлена работа оптимайзера в некоторых частных случаях.
1.05.6 (16.06.19) — добавлен алиас работы с интерактивом $inter, заменён оптимайзер на новый алиас $o вместо $optimizer, переписаны алиасы $max и $min с поддержкой сравнения токенов, в алиасах выравнивания $a_left, $a_center и $a_right теперь выравнивание производится неразрывными пробелами; также ускорены $disttok, $shuftok, алиасы выравнивания и некоторые другие. Добавлен алиас $s(n), вставляющий в строку несколько неразрывных пробелов. Оптимизация работы алиасов.
1.04 (29.06.18) — добавлен общий алиас сортировки $sort и алиас, удаляющий дубликаты токенов $disttok.
1.03 (10.01.17) — исправлена работа алиаса $f_time в mIRC 7. Исправлена ошибка в алиасах выравнивания.
1.02 (12.11.16) — исправлена работа алиаса $f_time, добавлена возможность указания формата. Добавлен алиас $shuftok.
1.01 (11.11.16) — добавлены алиасы $f_num и $sort_inter_alpha. Подкорректирована работа алиаса $f_money — теперь он корректно возвращает дробь, если сумма передана через переменную.