Вход  •  Регистрация

Отзыв за сообщение

Тема: StM's frameworkПерейти к сообщению

Изображение


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 — теперь он корректно возвращает дробь, если сумма передана через переменную.
От кого Дата Комментарий Изменение репутации

Mio-chan

11.11.2016, 14:27

thanks, это полезно

+

ilyar

11.11.2016, 09:37

Наконец-то руки дойдут сделать что-то самостоятельно

+

Andrey Yeriomin

11.11.2016, 09:16

Ужасно… Ужасно подходит, чтобы сделать IRC-«Охоту». Я пошёл.

+

Cheriksoft

11.11.2016, 07:02

полезно

+

WK217

10.11.2016, 18:12

Не понимаю, сделал всё по инструкции, а великолепен всё равно вы!

+

Доманский

10.11.2016, 17:52

Полезно.

+