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

mIRC 7

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

Сообщение » 05.08.2018, 18:41

Изображение


При необходимости мы стараемся следовать за трендами и поддерживать функционал на акутальном уровне. Необходимость перехода IRC на UTF-8 маячила давно, но пока мы не были к этому готовы ни технически, ни физически, да и не было достаточного количества причин для перевода всех наших игроков на новую платформу. Но чем дольше тянули, тем больше становилось поводов и возможностей, пока наконец не настал час X. Прежний IRC-сервер устарел окончательно, уступая дорогу новым игровым фишкам!

Представляем вам клиентскую платформу для участия и проведения IRC-игр, основанную на mIRC v7.55!

Скачать mIRC v7 от GS


Для дальнейшего участия в наших играх переход на неё будет практически ОБЯЗАТЕЛЬНЫМ. Сборки других клиентов мы, к сожалению, поддерживать не можем и не гарантируем правильную работоспособность всех новых функций и возможностей. Да и зачем вам другие — для перехода с предыдущего клиента вам будет достаточно скопировать все саундпаки в папку с новым клиентом!

Обновлённая инструкция по подключению

Чуть более подробные инструкции для перехода игрокам и по переносу скриптов ведущим вы найдёте ниже.

Взглянем на новые функции и возможности, которые даст нам переход на новую версию mIRC:


Поддержка юникода

Всё ради расово верного знака рубля в рамочках выигрышей!
Теперь чат поддерживает UTF-8, а значит никаких больше проблем с kodirovka при переходе с и на соседние серверы™, никаких иероглифов в логах — всё приводим к единому стандарту.
Ну и помимо этого IRC и логи форума поддерживают разные нестандартные символы, которые можно использовать для разнообразия игрового графония и геймплея!

Кому нравится идея, ставьте пять звёзд!

✰✰✰✰✰

(Примечание: прежний дефолтный шрифт Fixedsys не умеет в такие символы и плохо с ними сочетается, потому он был заменён на Consolas 12pt. Впрочем, кастомизировать его вы можете в меню «View → Font...»)

99 цветов (на самом деле все 100)

mIRC v 7.52 стал поддерживать дополнительные цвета помимо стандартных 16 и глупо этим не воспользоваться! Теперь код цвета может иметь значение от 0 до 99, где 0-15 — стандартные цвета для разных клиентов IRC, 16-98 — фиксированный спектр цветов, который поддерживает только mIRC v7.52 и свежее, потому мы настоятельно рекомендуем переходить именно на данную сборку для участия и проведения IRC-игр как на GS, так и на соседних серверах™. 99 — цвет прозрачности, его мы использовать пока не привыкли.

Посему надеюсь, что конвертер логов не смутится новым цветам и схемам!

Изображение


Подробное описание цветов в текстовом формате.


Цветные ники
Изображение

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

В этом обновлении помимо 0,99play и 0,99url мы вводим новую команду, доступную ведущим: 0,99cnick! Эта команда позволит раскрасить ники в списке по указанным вами правилам и цветам.

Синтаксис:
Код: Выделить всё
0,99cnick [reset] <ники через пробел> <цвет> [режимы] cnick <ники2> <цвет2> [режимы2]


Ники через пробел — список ников, которые нужно раскрасить. В качестве ников можно использовать маску * для полного или частичного соответствия.
Цвет — номер цвета в IRC от 0 до 98.
Режимы — необязательный параметр: @%+, можно указывать один, можно несколько слитно.
reset — необязательный параметр. Очищает все предыдущие цвета и правила.

Порядок вводимых параметров значения не имеет! После второго cnick соответственно можно указывать следующее правило для раскрашивания.

Например, как можно выделить ведущего игры и участников двух команд:
Код: Выделить всё
0,99cnick StM 07 cnick t1_player1 t1_player2 t1_player3 12 + cnick t2_player1 t2_player2 04 +


Здесь «+» означает, что в цвета 12 и 04 ники будут раскрашиваться только при наличии войса. Можем заменить цвета и сократить запись:

Код: Выделить всё
0,99cnick reset StM 04 cnick t1_* + 03 cnick t2_* + 11


Reset сбросит предыдущие цвета и установит новые правила теперь уже с масками вместо конкретных ников. Заметьте, что в этой команде + стоит перед номером цвета — напомню, что порядок параметров неважен.

Сбросить цвета вручную можно по ПКМ на списке ников — «Очистить цвета».

Ещё примеры:
cnick StM 11 — раскрасит ник StM в цвет 11
cnick 04 StM %@ — раскрасит ник StM в цвет 04 только если он будет опом или хопом.
cnick * @ 11 — раскрасит всех опов в цвет 11
cnick * 11 cnick reset StM 07 — раскрасит только ник StM в 07, т.к. предыдущее правило будет сброшено ресетом.

Удобное управление

Помимо удаления мусора, мы сделали некоторые часто используемые функции ближе к народу.

Автоидентификация

Вам не придётся каждый раз при входе на сервер авторизовываться через /ns identify пароль: клиент это сделает за вас в автоматическом режиме. После первого успешного входа он запомнит ваш пароль к указанному нику и будет его вводить при подключении или смене одного зарегистрированного ника на другой.
Чтобы клиент запомнил пароль и к альтернативным никам, достаточно просто его сменить и авторизоваться первый раз — никаких заполнений форм и галочек!

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

Смена режимов правой кнопкой
Изображение

Теперь запускать молчанку +m на канале можно в два клика! Не нужно ни вводить команду /mode # +m вручную, ни вбивать режим в окошко.
Меню доступно правой кнопкой мыши в области канала — «Режимы».

Аналогично можно раздавать войсы и опы пользователям канала: выделить юзера (или нескольких, зажав Ctrl) в списке ников, и выбрать в выпадающем меню необходимый режим.

Обращение по даблклику
Изображение

Возможность, которой я активно пользовался в своей сборке, но отсутствовавшая в опубликованных скриптах теперь может быть у каждого!
Ранее по умолчанию при двойном клике по нику в чате или списке ников открывался приват, теперь же в меню «Команды → Двойной клик по нику» вы можете настроить предпочитаемое для себя поведение.

Умная система обращений поставит ник участника спереди заготовленной фразы, а несколько обращений укажет через запятую и вместо машинного «StM: [DjF96]: wwbm: привет!» вы получите ламповое «StM, [DjF96], wwbm: привет!».

Приглашение через меню

Изображение

Вместо долгих команд /invite user #channel теперь пользователей можно приглашать на другие каналы с помощью контекстного меню!


Рефакторинг remote.ini

Файл наших собственных скриптов не перерабатывался и не обновлялся на протяжении уже 5 лет (если не считать небольшого весеннего апдейта, который позволил транслировать музыку через приваты и нотисы). Сниппеты, которыми он был забит ранее, уже давно устарели и были забыты — тем более что мы сделали куда более удобный и универсальный фреймворк. Сборка mIRC 7 соседнего сервера™ и вовсе кишила всяким древним мусором, который вообще непонятно откуда там восстал из пепла.

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

Изображение
Также часть режимов, которая в играх никогда толком и не использовалась, тоже попала под бритву СтМа. Нет смысла запускать звуки от хопов, т.к. хопами мы обычно обозначаем основных игроков, а не соведущих — у тех статус оператора был всегда.

Оставляем только действительно нужные и используемые вещи.


0url теперь в любом месте строки

Из-за некорректной формулировки скрипта команда 0url определялась только в начале строки. Таким образом, если вы захотели поставить картинку в строку, которая уже содержала текст, изображение само не открывалось — приходилось открывать ссылку через браузер. Теперь эта ошибка устранена — url можно запускать с любым цветом в любом месте строки!

Переработанный saysumm

Saysumm — функция озвучки денежных сумм, которую Виктор реализовывал для гонг-игры «Народ против» в своё время, — уже давно не была востребована на ГШ, тем не менее ей пользуются на Соседнем сервере™, а значит, что и эту вещь нужно было переработать.
Теперь вместо 8 алиасов она работает лишь с помощью одного. Звуковой набор зачитывает любые суммы от 0,01 ₽ до 999 999,99 ₽.

Формат: [цвет]saysumm сумма


Скрипты для ведущих в комплекте

В клиент уже добавлены сниппеты от StM, которые облегчают скриптописание для ведущих и организаторов IRC-игр. Также в \scripts\stm_template.ini находится удобный стартовый шаблон для игровых скриптов. Всё обновлено до последней версии и перекодировано в юникод!




Переходим со старого клиента mIRC v6

Для участников:
1. Скачайте новый клиент
2. Скопируйте все саундпаки из mIRC\sounds старого клиента в соответствующую папку нового.
3. Вы восхитительны.

Для ведущих:
1. Пересохраните ваши скрипты в кодировке UTF-8 (upd: таки можно и через Блокнот — кодировка указывается при сохранении)
2. Загрузите нужные скрипты в редактор скриптов нового мирка — Alt+R → File → Load.
3. Замените в коде скрипта строки 0play на 0,99play, аналогично и с урлом: 0url на 0,99url. Новый mIRC белый цвет без фона отображает чёрным текстом, потому нужно подкладывать какой-нибудь фон (99 — прозрачный).
4. Вы восхитительны.

Скачать mIRC v7 от GS




Если обнаружились какие-то ошибки или недоработки, можно писать сюда — будем стараться оперативно исправлять!
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 12.08.2018, 18:34

Заметил небольшую некорректность в saysumm - в нём используется функция f_money из сниппетов. Я думаю было бы логично ввести alias f_money в сам ремоут или алиасы, чтобы он работал без дополнительных скриптов.
Аватара пользователя
Martvv94
 
Репутация: +11/-5
Сообщения: 142

Сообщение » 12.08.2018, 18:45

Martvv94, я вижу сниппеты в роли вполне полезного инструмента и не вижу причин их отделять от сборки и уж тем более плодить двойственные сущности, чтоб алиас был и в сниппетах, и в ремоуте.

К слову, скоро придётся выпустить небольшое обновление, которое устраняет пару найденных Ty4ka ошибок, перекачать его надо будет всем — там есть и косячок с saysumm тоже.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 24.08.2018, 15:00

Secure Fix (v1.1)

Перед началом сезона (а первая игра уже через неделю!) просьба обновить скрипты mIRC 7, в которых устранены некоторые весьма важные ошибки и добавлена ещё одна плюшечка.

Добавлено:
— Возможность приглашать пользователей на канал через контекстное меню:
Изображение

Исправлено:
— Уязвимость, через которую можно было бы узнать ваш пароль от IRC, если бы вы оказались со злоумышленником на ином сервере, отличном от GS и FOX. (обнаружил Ty4ka)
— Ошибка в saysumm, приводящая к некорректному произношению суммы десятков в определённых ситуациях. (обнаружил Ty4ka)

Скачать скрипты
Основной дистрибутив клиента также обновлён — скачать mIRC 7.

Установка: заменить файлы /scripts/remote.ini и popup.ini на соответствующие в mIRC/scripts вашего клиента.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 27.09.2018, 19:06

Нашёлся ещё один небольшой баг: команда exec (которой пока что никто не пользуется, но всё же) не работает
Исправление: через поиск по скрипту в двух местах заменить
Код: Выделить всё
$gettok($1-, $calc($findtok($1-, exec, 1, 32) + 1), 32)
на
$gettok($1-, $calc($findtok($1-, $wildtok($1-, *exec, 1, 32), 1, 32) + 1), 32)

Если у кого-то во время «Тайного Гитлера» раскрашивались ники игроков только в списке ников, а хотелось, чтобы игроки по умолчанию подсвечивались ещё и на канале, то можно аналогично заменить строку:
Код: Выделить всё
var %cnick_param -fm2s1
на
var %cnick_param -fm0s1

//режим m0: список пользователей + окно сообщений
//режим m1: только окно сообщений
//режим m2: только список пользователей

И это будет выглядеть вот так:
Изображение
Аватара пользователя
Ty4ka
 
Репутация: +29/-17
Сообщения: 503

Сообщение » 13.11.2018, 18:18

URL Update (v1.2)

Спасибо АЕ за отличную и полезную софтину url.exe, которая на протяжении 8 лет радовала нас отображением картинок в мирке, внесла в мир ирц-игр понятие фотовопросов и фотоответов. Но в этот день её поезд достиг конечной станции и здесь она сходит, а мы движемся дальше.



Исправлено:
— некорректная работа URL при наличии второй цветной ссылки в сообщении. В связи с этим данное обновление категорически рекомендуется к установке.




Изображение


От внешней софтины я предлагаю перейти ко внутренним резервам mIRC. Теперь картинки kURL будут открываться в собственном и единственном окошке мирка.
Что это даёт:
— Никаких сотен окошек на фоне после игры, которые надо долго закрывать. Только одно обновляемое окно.
— Фоточка будет всегда поверх окна: если фотовопрос откроется, вы его не пропустите и он всегда будет на виду!
— Два режима открытия файла: обычный (закрывается по клику на самой картинке) и -top (как прежде и был, закрывается только по клику по крестику — случайно такой не скроете)
— Проще обслуживать и обновлять, если понадобится новый функционал. Ну и ругаться антивирус теперь должен меньше.

Формат команды:
Остаётся прежним: url в любом месте строки и ссылка на файл. Например:
Код: Выделить всё
Это обычный текст 0,99url http://img.gameshows.ru/stm/url_upd.png 1и после ссылки тоже.

Код: Выделить всё
Это крутой текст 0,99url http://img.gameshows.ru/stm/url_upd.png -top


А ещё пара новых параметров:
-close закрывает картинки у всех (у кого включена опция их отображения):
Код: Выделить всё
0,99url -close


-clear очищает папочку закэшированных изображений \scripts\url.
Код: Выделить всё
0,99url -clear


Если по какой-то причине файл не загрузился до конца, либо закэшировался, а нужно открыть заново, можно нажать на ПКМ и обновить файл:
Изображение




Прикреплённый приват

Любители слотов, угадаек, квизапа и прочих игрулей, где важно быстро отправлять ведущему в интерактив ответы, наверняка оценят следующую функцию:
Изображение

Она позволяет без потерь фокуса и лишних кликов спамить приват ведущего нон-стоп! Самая удивительная магия: если напишете в другой канал, закреплённый приват на первом канале сохранится. Но если нужно его убрать — достаточно просто стереть, никаких лишних кликов, помните?




Радужная магия

И напоследок ещё одна полезная вещь для нашей сборки, которую вы получите, выполнив инструкцию:
  1. Нажмите Alt-R
  2. File — Load
  3. \mIRC\scripts\pallette.ini
  4. Нажмите F2!
  5. Вы и автор скрипта (FroggieDaFrog) восхитительны.

Да, это первый случай, когда мы не стали изобретать велосипед и воспользовались готовым и шикарным решением!

Изображение




Скачать скрипты
Основной дистрибутив клиента также обновлён — скачать mIRC 7.

Установка:
  1. замените файлы /scripts/remote.ini и popup.ini на соответствующие в mIRC/scripts вашего клиента.
  2. загрузите pallette.ini в скриптах через Alt-R (ну инструкция же выше).
  3. удалите папку \Apps\url\ с её содержимым, она служила нам верой и правдой столько времени, но пора отправлять на покой.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 09.06.2019, 17:57

7.55 Update

Изображение


mIRC продолжает периодически обновляться, внося небольшие правки во внешний вид и чуть более значительные — в начинку.

Что нового?

— Регистрация? Я вас умоляю.
— Некие новые алгоритмы рандомизации $rand, которые рандомят и отрицательные значения, и новая крипторандомилка $rands(1,1158) — теперь никакой русский хакер не взломает бастион лорда Рандома, даже Геймербой.
— Ну и другие непонятные для вас, простые смертные, улучшения, которые вы даже не почувствуете на себе!

— В сборку уже добавлены последние версии StM Framework 1.05.03 (да, сегодня он уже трижды перевыпустился)

//Ссылка удалена

Как апдейтнуться?
1. Перетащите свои звуки и скрипты в соответственные папочки.
2. Загрузите нужные вам скрипты в мирку.
3. Ну и выполните начальные настройки под себя. Да, я намеренно не говорю, что можно просто заменить mirc.exe и жить со старым — я настаиваю на сохранении исходного файла настроек.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 10.06.2019, 13:38

Здравствуйте! Решил поставить новую сборку и при заходе столкнулся с такой проблемой:

Проверялось всеми способами: удаление всех mIRCов, ставил чистый из архива, а проблема сохраняется. Спасибо!
MrAngryDroid
 
Репутация: 0
Сообщения: 7

Сообщение » 10.06.2019, 15:23

MrAngryDroid пишет:Здравствуйте! Решил поставить новую сборку и при заходе столкнулся с такой проблемой:

Проблему будем рассматривать, вероятнее всего в таком случае придётся вернуться к прежней схеме работы с мирком со вводом рандомных кодов. Если что, прежняя сборка доступна на mirc_old.rar, пока не будет определено будущее.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 12.06.2019, 21:40

MrAngryDroid пишет:Здравствуйте! Решил поставить новую сборку и при заходе столкнулся с такой проблемой:

StereoMaster пишет:Проблему будем рассматривать, вероятнее всего в таком случае придётся вернуться к прежней схеме работы с мирком со вводом рандомных кодов. Если что, прежняя сборка доступна на mirc_old.rar, пока не будет определено будущее.

Самое странное, что я скачал новую сборку (до удаления ссылки), и она у меня заработала нормально, её сейчас и использую. У остальных знакомых всё тоже пошло нормально. Может быть, проблема только у MrAngryDroid?
Аватара пользователя
Mio-chan
Здесь могут быть ваши "знания"
 
Репутация: +40/-51
Сообщения: 1093

Сообщение » 13.06.2019, 12:57

Нет, проблема явно не единичная, может быть она возникла из-за перебора количества юзеров с одной лицензией.
Аватара пользователя
Martvv94
 
Репутация: +11/-5
Сообщения: 142

Сообщение » 15.06.2019, 13:08

Если у кого-то сохранялась проблема с верификацией, ссылка в первом посте обновлена, можно клиент перекачать. Туда также воткнута последняя на сей момент (а она снова обновилась) версия StM Framework — 1.05.5 от 11.06 (небольшая оптимизация от Ty4ka по сравнению с 1.05.4, ничего критически важного — но если заинтересует, архив в топике фреймворка также перезалит).

По-прежнему, если будут какие-то проблемы с запуском, пишите.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +564/-8
Сообщения: 7835

Сообщение » 25.04.2020, 11:43

Оптимизация алиаса playsound.
Бенчом не тестировал насколько стало быстрее, но явно многократное использование, например обычной переменной %isNextWav, гораздо быстрее, чем многократный расчёт $matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32) (особенно, если matchtok+strip+calc вынуждены вызываться по 20+ раз для одной и той же строки размером в 400+ символов)
По идее всё это дело можно и дальше заоптимизировать, включая кусок с seek:, но пока так. Основная задача у меня была понять что тут происходит под капотом и вроде как теперь всё стало чуть более читабельно

[upd 02.05.2020]: Вроде как, в конечном итоге, 4я итерация получилась достаточно короткой и удобочитаемой (правда требует переименования переменной %sys_waveloop в %sys_wavloop для соответствия формату %sys_[ext]loop). По-прежнему ничего не тестировал бенчом, но, насколько мог, проверил что работает без глюков.

[upd 16.05.2020]: Ещё более читабельная версия, убрано дублированние кода обработки токена.

Сейчас : 
Код: Выделить всё
alias playsound {
  var %temp $findtok($strip($1-), play, 1, 32)
  if ($istok($strip($1-), play, 32) && $strip($1-) != play && $matchtok($gettok($1-, $findtok($1-, $matchtok($1-, play, 1, 32), 1, 32), 32), , 1, 32)) {
    if (($gettok($strip($1-), $calc(%temp + 1), 32) == pause || $gettok($strip($1-), $calc(%temp + 2), 32) == pause) && $insong == $true) { splay pause }
    elseif (($gettok($strip($1-), $calc(%temp + 1), 32) == resume || $gettok($strip($1-), $calc(%temp + 2), 32) == resume) && $insong == $true) { splay resume }
    elseif (($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), seek:, 1, 32) || $matchtok($gettok($strip($1-), $calc(%temp + 2), 32), seek, 1, 32)) && $insong == $true) {
      if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), seek, 1, 32)) splay seek $right($gettok($strip($1-), $calc(%temp + 1), 32), $calc($len($gettok($strip($1-), $calc(%temp + 1), 32)) - 5))
      else splay seek $right($gettok($strip($1-), $calc(%temp + 2), 32), $calc($len($gettok($strip($1-), $calc(%temp + 2), 32)) - 5))
    }
    if ($gettok($strip($1-), $calc(%temp + 1), 32) == mp3:stop || $gettok($strip($1-), $calc(%temp + 2), 32) == mp3:stop) { splay -p stop }
    if ($gettok($strip($1-), $calc(%temp + 1), 32) == wav:stop || $gettok($strip($1-), $calc(%temp + 2), 32) == wav:stop) { splay -w stop }
    if ($gettok($strip($1-), $calc(%temp + 1), 32) == stop) { splay stop }
    if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32) || ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 2), 32), .mp3, 1, 32))) {
      set %sys_mp3loop $false
      if (($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 1), 32), :loop, 1, 32)) || ($matchtok($gettok($strip($1-), $calc(%temp + 2), 32), .mp3, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 2), 32), :loop, 1, 32))) {
        if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32)) splay $left($gettok($strip($1-), $calc(%temp + 1), 32), $calc($pos($gettok($strip($1-), $calc(%temp + 1), 32),:,1) - 1))
        else splay $left($gettok($strip($1-), $calc(%temp + 2), 32), $calc($pos($gettok($strip($1-), $calc(%temp + 2), 32),:,1) - 1))
        set %sys_mp3loop $true
      }
      elseif (($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 1), 32), :, 1, 32) == $null) || ($matchtok($gettok($strip($1-), $calc(%temp + 2), 32), .mp3, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 2), 32), :, 1, 32) == $null )) {
        if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32)) splay $gettok($strip($1-), $calc(%temp + 1), 32)
        else splay $gettok($strip($1-), $calc(%temp + 2), 32)
      }
      else {
        if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32)) splay $left($gettok($strip($1-), $calc(%temp + 1), 32), $calc($pos($gettok($strip($1-), $calc(%temp + 1), 32),:,1) - 1)) $right($gettok($strip($1-), $calc(%temp + 1), 32), $calc($len($gettok($strip($1-), $calc(%temp + 1), 32)) - $pos($gettok($strip($1-), $calc(%temp + 1), 32),:,1)))
        else splay $left($gettok($strip($1-), $calc(%temp + 2), 32), $calc($pos($gettok($strip($1-), $calc(%temp + 2), 32),:,1) - 1)) $right($gettok($strip($1-), $calc(%temp + 2), 32), $calc($len($gettok($strip($1-), $calc(%temp + 2), 32)) - $pos($gettok($strip($1-), $calc(%temp + 2), 32),:,1)))
      }
    }
    if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32) || ($matchtok($gettok($strip($1-), $calc(%temp + 2), 32), .wav, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .mp3, 1, 32))) {
      set %sys_waveloop $false
      if (($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 1), 32), :loop, 1, 32)) || ($matchtok($gettok($strip($1-), $calc(%temp + 2), 32), .wav, 1, 32) && $matchtok($gettok($strip($1-), $calc(%temp + 2), 32), :loop, 1, 32))) {
        set %sys_waveloop $true
        if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32)) splay $left($gettok($strip($1-), $calc(%temp + 1), 32), $calc($pos($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32),:,1) - 1))
        else splay $left($gettok($strip($1-), $calc(%temp + 2), 32), $calc($len($gettok($strip($1-), $calc(%temp + 2), 32)) - 5))
      }
      else {
        if ($matchtok($gettok($strip($1-), $calc(%temp + 1), 32), .wav, 1, 32)) splay $gettok($strip($1-), $calc(%temp + 1), 32)
        else splay $gettok($strip($1-), $calc(%temp + 2), 32)
      }
    }
  }
}

Итерация 1 : 
Код: Выделить всё
alias playsound {
  set -l %stripd $strip($1-)
  set -l %pos $findtok(%stripd, play, 1, 32)
  if ($istok(%stripd, play, 32) && %stripd != play && $matchtok($gettok($1-, $findtok($1-, $matchtok($1-, play, 1, 32), 1, 32), 32), , 1, 32)) {
    set -l %tokNext $gettok(%stripd, $calc(%pos + 1), 32)
    set -l %isNextWav $matchtok(%tokNext, .wav, 1, 32)
    set -l %isOverWav $matchtok(%tokOver, .wav, 1, 32)
    set -l %tokOver $gettok(%stripd, $calc(%pos + 2), 32)
    set -l %isNextMp3 $matchtok(%tokNext, .mp3, 1, 32)
    set -l %isOverMp3 $matchtok(%tokOver, .mp3, 1, 32)
    if ((%tokNext == pause || %tokOver == pause) && $insong == $true) { splay pause }
    elseif ((%tokNext == resume || %tokOver == resume) && $insong == $true) { splay resume }
    elseif (($matchtok(%tokNext, seek:, 1, 32) || $matchtok(%tokOver, seek, 1, 32)) && $insong == $true) {
      if ($matchtok(%tokNext, seek, 1, 32)) splay seek $right(%tokNext, $calc($len(%tokNext) - 5))
      else splay seek $right(%tokOver, $calc($len(%tokOver) - 5))
    }
    if (%tokNext == mp3:stop || %tokOver == mp3:stop) { splay -p stop }
    if (%tokNext == wav:stop || %tokOver == wav:stop) { splay -w stop }
    if (%tokNext == stop) { splay stop }
    if (%isNextMp3 || (%isNextWav && %isOverMp3)) {
      set %sys_mp3loop $false
      if ((%isNextMp3 && $matchtok(%tokNext, :loop, 1, 32)) || (%isOverMp3 && $matchtok(%tokOver, :loop, 1, 32))) {
        if (%isNextMp3) splay $left(%tokNext, $calc($pos(%tokNext,:,1) - 1))
        else splay $left(%tokOver, $calc($pos(%tokOver,:,1) - 1))
        set %sys_mp3loop $true
      }
      elseif ((%isNextMp3 && $matchtok(%tokNext, :, 1, 32) == $null) || (%isOverMp3 && $matchtok(%tokOver, :, 1, 32) == $null )) {
        if (%isNextMp3) splay %tokNext
        else splay %tokOver
      }
      else {
        if (%isNextMp3) splay $left(%tokNext, $calc($pos(%tokNext,:,1) - 1)) $right(%tokNext, $calc($len(%tokNext) - $pos(%tokNext,:,1)))
        else splay $left(%tokOver, $calc($pos(%tokOver,:,1) - 1)) $right(%tokOver, $calc($len(%tokOver) - $pos(%tokOver,:,1)))
      }
    }
    if (%isNextWav || (%isOverWav && %isNextMp3)) {
      set %sys_waveloop $false
      if ((%isNextWav && $matchtok(%tokNext, :loop, 1, 32)) || (%isOverWav && $matchtok(%tokOver, :loop, 1, 32))) {
        set %sys_waveloop $true
        if (%isNextWav) splay $left(%tokNext, $calc($pos(%isNextWav,:,1) - 1))
        else splay $left(%tokOver, $calc($len(%tokOver) - 5))
      }
      else {
        if (%isNextWav) splay %tokNext
        else splay %tokOver
      }
    }
  }
}

Ит. 2 : 
Код: Выделить всё
alias playsound {
  set -l %stripd $strip($1-)
  set -l %pos $findtok(%stripd, play, 1, 32)
  if ($istok(%stripd, play, 32) && %stripd != play && $matchtok($gettok($1-, $findtok($1-, $matchtok($1-, play, 1, 32), 1, 32), 32), , 1, 32)) {
    set -l %tokNext $gettok(%stripd, $calc(%pos + 1), 32)
    set -l %isNextWav $matchtok(%tokNext, .wav, 1, 32)
    set -l %isOverWav $matchtok(%tokOver, .wav, 1, 32)
    set -l %tokOver $gettok(%stripd, $calc(%pos + 2), 32)
    set -l %isNextMp3 $matchtok(%tokNext, .mp3, 1, 32)
    set -l %isOverMp3 $matchtok(%tokOver, .mp3, 1, 32)
    if ((%tokNext == pause || %tokOver == pause) && $insong == $true) { splay pause }
    elseif ((%tokNext == resume || %tokOver == resume) && $insong == $true) { splay resume }
    elseif (($matchtok(%tokNext, seek:, 1, 32) || $matchtok(%tokOver, seek, 1, 32)) && $insong == $true) {
      if ($matchtok(%tokNext, seek, 1, 32)) splay seek $right(%tokNext, -5)
      else splay seek $right(%tokOver, -5)
    }
    if (%tokNext == mp3:stop || %tokOver == mp3:stop) { splay -p stop }
    if (%tokNext == wav:stop || %tokOver == wav:stop) { splay -w stop }
    if (%tokNext == stop) { splay stop }
    if (%isNextMp3 || (%isNextWav && %isOverMp3)) {
      set %sys_mp3loop $false
      if ((%isNextMp3 && $gettok(%tokNext, -1, 58) == loop) || (%isOverMp3 && $gettok(%tokOver, -1, 58) == loop)) {
        if (%isNextMp3) splay $gettok(%tokNext, 1, 58)
        else splay $gettok(%tokOver, 1, 58)
        set %sys_mp3loop $true
      }
      elseif (( %isNextMp3 && !$pos(%tokNext,:,1)) || ( %isOverMp3 && !$pos(%tokOver,:,1) )) {
        if (%isNextMp3) splay %tokNext
        else splay %tokOver
      }
      else {
        if (%isNextMp3) splay $gettok(%tokNext, 1, 58) $gettok(%tokNext, 2, 58)
        else splay $gettok(%tokOver, 1, 58) $gettok(%tokOver, 2, 58)
      }
    }
    if (%isNextWav || (%isOverWav && %isNextMp3)) {
      set %sys_waveloop $false
      if ((%isNextWav && $gettok(%tokNext, -1, 58) == loop) || (%isOverWav && $gettok(%tokOver, -1, 58) == loop)) {
        set %sys_waveloop $true
        if (%isNextWav) splay $gettok(%tokNext, 1, 58)
        else splay $left(%tokOver, -5)
      }
      else {
        if (%isNextWav) splay %tokNext
        else splay %tokOver
      }
    }
  }
}

Ит. 3 : 
Код: Выделить всё
alias playsound {
  set -l %stripd $strip($1-)
  set -l %pos $findtok(%stripd, play, 1, 32)
  if ($istok(%stripd, play, 32) && %stripd != play && $matchtok($gettok($1-, $findtok($1-, $matchtok($1-, play, 1, 32), 1, 32), 32), , 1, 32)) {
    set -l %tokNext $gettok(%stripd, $calc(%pos + 1), 32)
    set -l %tokOver $gettok(%stripd, $calc(%pos + 2), 32)
    if ($gettok($gettok(%tokNext,-1,46),1,58) == Wav) || ($v1 == Mp3) { set -l % $+ [ isNext $+ [ $v2 ] ] $true }
    if ($gettok($gettok(%tokOver,-1,46),1,58) == Wav) || ($v1 == Mp3) { set -l % $+ [ isOver $+ [ $v2 ] ] $true }
    if ((%tokNext == pause || %tokOver == pause) && $insong == $true) { splay pause }
    elseif ((%tokNext == resume || %tokOver == resume) && $insong == $true) { splay resume }
    elseif (($matchtok(%tokNext, seek:, 1, 32) || $matchtok(%tokOver, seek, 1, 32)) && $insong == $true) {
      if ($matchtok(%tokNext, seek, 1, 32)) splay seek $right(%tokNext, -5)
      else splay seek $right(%tokOver, -5)
    }
    if (%tokNext == mp3:stop || %tokOver == mp3:stop) { splay -p stop }
    if (%tokNext == wav:stop || %tokOver == wav:stop) { splay -w stop }
    if (%tokNext == stop) { splay stop }
    if (%isNextMp3 || (%isNextWav && %isOverMp3)) {
      set %sys_mp3loop $false
      if ((%isNextMp3 && $gettok(%tokNext, -1, 58) == loop) || (%isOverMp3 && $gettok(%tokOver, -1, 58) == loop)) {
        if (%isNextMp3) splay $gettok(%tokNext, 1, 58)
        else splay $gettok(%tokOver, 1, 58)
        set %sys_mp3loop $true
      }
      elseif (( %isNextMp3 && !$pos(%tokNext,:,1)) || ( %isOverMp3 && !$pos(%tokOver,:,1) )) {
        if (%isNextMp3) splay %tokNext
        else splay %tokOver
      }
      else {
        if (%isNextMp3) splay $gettok(%tokNext, 1, 58) $gettok(%tokNext, 2, 58)
        else splay $gettok(%tokOver, 1, 58) $gettok(%tokOver, 2, 58)
      }
    }
    if (%isNextWav || (%isOverWav && %isNextMp3)) {
      set %sys_waveloop $false
      if ((%isNextWav && $gettok(%tokNext, -1, 58) == loop) || (%isOverWav && $gettok(%tokOver, -1, 58) == loop)) {
        set %sys_waveloop $true
        if (%isNextWav) splay $gettok(%tokNext, 1, 58)
        else splay $left(%tokOver, -5)
      }
      else {
        if (%isNextWav) splay %tokNext
        else splay %tokOver
      }
    }
  }
}

Ит. 4 : 
Код: Выделить всё
alias playsound {
  set -l %stripd $strip($1-)
  set -l %pos $findtok(%stripd, play, 1, 32)
  if (%pos && %stripd != play && $wildtok($1-,*play,1,32) == $matchtok($1-,play,1,32)) {
    set -l %tokNext $gettok(%stripd, $calc(%pos + 1), 32)
    set -l %tokOver $gettok(%stripd, $calc(%pos + 2), 32)
    if ($insong) {
      if (%tokNext == pause || %tokOver == pause) { splay pause }
      elseif (%tokNext == resume || %tokOver == resume) { splay resume }
    }
    if (%tokNext == mp3:stop || %tokOver == mp3:stop) { splay -p stop }
    if (%tokNext == wav:stop || %tokOver == wav:stop) { splay -w stop }
    if (%tokNext == stop) { splay stop }
    set -l %filename $gettok(%tokNext,1,58)
    if ($numtok(%filename,46) > 1 && (($gettok(%filename,-1,46) == Wav) || ($v1 == Mp3))) {
      set -l %ext $v2
      set % $+ [ sys_ $+ [ $v2 ] $+ loop ] $iif($gettok(%tokNext,2,58) == loop, $true,$false)
      set -l % $+ [ do $+ [ %ext ] ] $gettok(%tokNext,1,58) $iif($int($v1) isnum 0-,$v1)
    }
    set -l %filename $gettok(%tokOver,1,58)
    if ($numtok(%filename,46) > 1 && (($gettok(%filename,-1,46) == Wav) || ($v1 == Mp3))) {
      set -l %ext $v2
      set % $+ [ sys_ $+ [ $v2 ] $+ loop ] $iif($gettok(%tokOver,2,58) == loop, $true,$false)
      set -l % $+ [ do $+ [ %ext ] ] $gettok(%tokOver,1,58) $iif($int($v1) isnum 0-,$v1)
    }
    if (%doMp3) splay %doMp3
    if (%doWav) splay %doWav
  }
}

Код: Выделить всё
;## Переименование loop-переменных

on *:MP3END: if (%sys_Mp3loop) splay $filename
on *:WAVEEND: {
  if ($numtok(%saysumm_list,32)) {
    %saysumm_list = $deltok(%saysumm_list,1,32)
    if ($gettok(%saysumm_list,1,32)) splay $v1
    else unset %saysumm_list
  }
  elseif (%sys_Wavloop) splay $filename
}
alias snd {
  if (!$4) {
    if ($istok($3, mp3, 46)) set %sys_Mp3loop $false
    elseif ($istok($3, wav, 46)) set %sys_Wavloop $false
    splay $3
    return  $+ $1 $+ , $+ $2 $+ play $3
  }
  else {
    if ($4 == loop) {
      if ($istok($3, mp3, 46)) set %sys_Mp3loop $true
      elseif ($istok($3, wav, 46)) set %sys_Wavloop $true
      splay $3
    }
    elseif ($4 == stop) {
      if ($3 == mp3) splay -p stop
      elseif ($3 == wav) splay -w stop
    }
    elseif ($3 == seek) splay seek $4
    else {
      if ($istok($3, mp3, 46)) set %sys_Mp3loop $false
      elseif ($istok($3, wav, 46)) set %sys_Wavloop $false
      splay $3 $4
    }
    return  $+ $1 $+ , $+ $2 $+ play $3 $+ : $+ $4
  }
}

Ит. 5 : 
Код: Выделить всё
alias playsound {
  set -l %stripd $strip($1-)
  set -l %pos $findtok(%stripd, play, 1, 32)
  if (%pos && %stripd != play && $wildtok($1-,*play,1,32) == $matchtok($1-,play,1,32)) {
    set -l %tok1 $gettok(%stripd, $calc(%pos + 1), 32)
    set -l %tok2 $gettok(%stripd, $calc(%pos + 2), 32)
    if ($insong) {
      if     (%tok1 == pause  || %tok2 == $v2) { splay $v2 }
      elseif (%tok1 == resume || %tok2 == $v2) { splay $v2 }
    }
    if (%tok1 == mp3:stop || %tok2 == $v2) { splay -p stop }
    if (%tok1 == wav:stop || %tok2 == $v2) { splay -w stop }
    if (%tok1 == stop) { splay stop }
    set -l %i 1
    while (%i <= 2) {
      set -l %tok [ [ $+(%,tok,%i) ] ]
      set -l %filename $gettok(%tok,1,58)
      if ($numtok(%filename,46) > 1 && (($gettok(%filename,-1,46) == Wav) || ($v1 == Mp3))) {
        set -l %ext $v2
        set $+(%,sys_,$v2,loop) $iif($gettok(%tok,2,58) == loop, $true,$false)
        set -l $+(%,do,%ext) %filename $iif($int($v1) isnum 0-,$v1)
      }
      inc %i
    }
    if (%doMp3) splay %doMp3
    if (%doWav) splay %doWav
  }
}

;## Usage: <anything> <token0> <token1>             [token2] <anything>
;##                   *play   file.ext:[time/loop] -//-
;##
;## As in all previous versions:
;## (!) Just one *play command per message will be correctly executed
;## (!) Message in its stripped version should not contain "play"-token prior to actual *play command
;##
;## Command looks for 2 tokens further (by ascii:32) trying to find, in described order:
;##   + keywords -> resume/pause/stop/mp3:stop/wav:stop
;##     when found, act as expected, if mIRC is playing sound now / played smth. recently
;##   + pattern -> file.ext[:param]
;##     when found, starting to play soundfile if ext=mp3/wav and filename file=!$null
;##     optionally can loop soundfile if param=loop or start it from certain ms-position if param=(isnum 0-)
;##     ignores :param2,3... when sees pattern like -> file.ext:param:param2:param3...
;##
;## Support of seek:time option removed since it helps to significantly simplify the script and noone used it anyway
Аватара пользователя
Ty4ka
 
Репутация: +29/-17
Сообщения: 503


Вернуться в IRC-игры и конкурсы