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

StM's framework

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

Сообщение » 23.11.2016, 18:39

Найден баг во всех алиасах выравнивания:
Код: Выделить всё
var %dot  $str(...,100)
if ($calc($2 - $len($strip($1))) > 0) {
   var %dot $left(%dot, $calc($2 - $len($strip($1))))
}
return  $+ $3 $+ , $+ $4 $+ $1 $+  $+ $4 $+ , $+ $4 $+ %dot

Если длина сообщения не больше необходимого числа, то выведутся все 300 точек.
Аватара пользователя
STO
Осталось STO жизней
 
Репутация: +124/-4
Сообщения: 827
Медаль им. Губерниева (II ст.) Медаль им. Канделаки (III ст.) Медаль им. Кулешова (III ст.) Медаль им. Якубовича (II ст.)

Сообщение » 23.11.2016, 21:04

Забавно, что однострочная операция для каждого варианта выравнивания расписана как отдельный алиас

Я пару лет назад себе сделал сие алиасик для выравнивания (вместо точек - загадочный пробел :) ).

$a_line(tx, bc, length, text, align)

tc - цвет текста
bc - цвет фона (для прозрачного фона указывать 99)
length - длина возвращаемой строки
text - сам текст (можно уже сразу цветной вставлять, для этого и используется strip, чтобы не нарушилась длина строки)
align - выравнивание (1 - слева, 2 - центр, 3 - справа)

Код: Выделить всё
alias a_line {
  if ($5 == 1) return  $+ $1 $+ , $+ $2 $+ $4 $+  $+ $2 $+ $str($chr(160), $calc($3 - $len($strip($4))))
  if ($5 == 2) return  $+ $1 $+ , $+ $2 $+ $str($chr(160), $calc($3 - $len($strip($4)) - $int($calc(($3 - $len($strip($4))) / 2)))) $+ $4 $+ $str($chr(160), $int($calc(($3 - $len($strip($4))) / 2)))
  if ($5 == 3) return  $+ $1 $+ , $+ $2 $+ $str($chr(160), $calc($3 - $len($strip($4)))) $+ $4
}
Последний раз редактировалось Виктор 23.11.2016, 21:07, всего редактировалось 2 раз(а).
Виктор
The People versus…
 
Репутация: +211/-10
Сообщения: 1477
Медаль им. Доманского (II ст.) Медаль им. Канделаки (III ст.) Медаль им. Кулешова (II ст.) Медаль им. Пельша (III ст.) Медаль им. Якубовича (II ст.)

Сообщение » 23.11.2016, 21:14

Виктор, читаемость куда хуже, к тому же запоминать, что есть 1/2/3 сложнее, чем a_left, a_right... Функционал аналогичный уже имеющемуся, тогда зачем это здесь?

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

Баг поправлю завтра.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +522/-6
Сообщения: 7452
Медаль им. Доманского (I ст.) Медаль им. Канделаки (I ст.) Медаль им. Пельша (I ст.) Медаль им. Якубовича (I ст.)

Сообщение » 09.01.2017, 20:02

Когда будет обновление framework'а?
Лада
 
Репутация: +10/-38
Сообщения: 145

Сообщение » 10.01.2017, 11:52

StereoMaster пишет:Если кто вдруг юзает для седьмого мирка — замените gmt обратно на asctime. Позже на неделе попробую запилить цивилизованный фикс и выложу апдейт.

Заменить то заменил, но проблема вся ровно в том, что, например, при команде $asctime(0) значение [HH] идёт с отклонением GMT+3, а команда $gmt(0) в mIRC 6 время показывает как раз по Гринвичу. В mIRC 7 при запуске команды $gmt(0) в //echo выдаёт ошибку:
Код: Выделить всё
/echo: insufficient parameters

Я зачастую пользуюсь 7-ой версии, так что для меня это, конечно, не такой существенный, но минус. Кстати, до сих пор жду «цивилизованный фикс» и апдейт)
Аватара пользователя
Dmitros
Здесь могут быть ваши "знания"
 
Репутация: +34/-50
Сообщения: 897

Сообщение » 10.01.2017, 13:51

Обновлено. В первом посте.

Исправлено:
— алиасы выравнивания теперь не выводят все точки, если требуемая длина оказывается меньше длины самого текста
— f_time должно выводить корректные результаты, не зависящие от версии mIRC и часового пояса:
Код: Выделить всё
//echo -a $f_time(1010) = 16:50
//echo -a $f_time(1010,H:nn:ss) = 00:16:50
//echo -a $f_time(170,n:ss) = 2:50
//echo -a $f_time(170,nn:ss) = 02:50
//echo -a $f_time(1:70:10) = 02:10:10
//echo -a $f_time(1310,H:nn:ss) = 00:21:50

Тем не менее, ввиду малой распространённости требований иных видов форматирования времени, данный алиас не является (да я вряд ли стану заморачиваться) гибким и форматирование с выводом часа — костыльное. Потому если вам требуется выводить таймер в совсем уж специфическом формате, подгоняйте алиас (или напишите копию) под свои нужды самостоятельно.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +522/-6
Сообщения: 7452
Медаль им. Доманского (I ст.) Медаль им. Канделаки (I ст.) Медаль им. Пельша (I ст.) Медаль им. Якубовича (I ст.)

Сообщение » 10.01.2017, 20:41

Просто отлично!Ураааааааааааааааааааааааааааааааааааааааа!!!!!
Предупреждение: StereoMaster 10.01.2017, 20:45
Причина: Флуд.
anepershin1
 
Репутация: 0/-17
Сообщения: 67

Сообщение » 10.01.2017, 20:45

Вот теперь Александр можете сами написать скрипт для игры
Лада
 
Репутация: +10/-38
Сообщения: 145

Сообщение » 25.03.2018, 22:20

Все знают, что в фреймворке есть функция сортировки интерактива. Но она позволяет сортировать только по одному параметру. Бывают случаи (в том же самом Буме), что нужно сортировать по 2 параметрам: по ключевому (кол-во баллов) и по дополнительному (затраченное время). Выкладываю свой костыль по 2 причинам:
* По ключевому: кому-то может и понадобится сортировать так в будущем.
* По дополнительному: что бы добавить в фреймворк.
Код: Выделить всё
alias -l boom_sort_otbor {
  $sort_inter(boom_otbor_nick boom_otbor_time,boom_otbor_points)

  var %boom_temp1 %boom_otbor_nick
  var %boom_temp2 %boom_otbor_points
  var %boom_temp3 %boom_otbor_time

  set %boom_otbor_nick
  set %boom_otbor_points
  set %boom_otbor_time

  while ($numtok(%boom_temp1,32) > 0) {
    var %p $gettok(%boom_temp2,1,32)
    set %boom_temp001
    set %boom_temp002
    set %boom_temp003
    while (%p == $gettok(%boom_temp2,1,32)) {
      set %boom_temp001 %boom_temp001 $gettok(%boom_temp1,1,32)
      set %boom_temp002 %boom_temp002 $gettok(%boom_temp2,1,32)
      set %boom_temp003 %boom_temp003 $gettok(%boom_temp3,1,32)
      set %boom_temp1 $deltok(%boom_temp1,1,32)
      set %boom_temp2 $deltok(%boom_temp2,1,32)
      set %boom_temp3 $deltok(%boom_temp3,1,32)
    }
    $sort_inter(boom_temp001 boom_temp002,boom_temp003,1)
    set %boom_otbor_nick %boom_otbor_nick %boom_temp001
    set %boom_otbor_points %boom_otbor_points %boom_temp002
    set %boom_otbor_time %boom_otbor_time %boom_temp003
  }
}
Аватара пользователя
STO
Осталось STO жизней
 
Репутация: +124/-4
Сообщения: 827
Медаль им. Губерниева (II ст.) Медаль им. Канделаки (III ст.) Медаль им. Кулешова (III ст.) Медаль им. Якубовича (II ст.)

Сообщение » 29.06.2018, 15:20

А пока мы выбираем лучший виннинг лайнс сезона, СтМ не дремлет и продолжает немного подкоживать для IRC (хотя кому это теперь нужно).

Обновлено. v1.04 в первом посте.

Добавлены:
$sort — универсальный алиас сортировок переменных, работает как для числовой, так и для алфавитной сортировки. Поддерживает возможность многоуровневой сортировки, чтоб без костылей в буме. Сортируёт всё и по-всякому, как вам захочется.
$sort(nicks names surnames,points:n,time:nr,alphabet:a,[32])

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

Прежние сортировки интера и по никам теперь работают на его основе. Они как бы ещё есть, но больше не самостоятельны.

$disttok — небольшой алиас, удаляющий из заданной строки токены-дубликаты, возвращает строку без них. Полезно, например, когда есть целый список каналов, куда надо слать сообщения, но чтоб не слать на один канал дважды. Ну или для приёма ответов в интере, если вам отправляют их несколько и могут попасться одинаковые.
Аватара пользователя
StereoMaster
O-|—<
 
Репутация: +522/-6
Сообщения: 7452
Медаль им. Доманского (I ст.) Медаль им. Канделаки (I ст.) Медаль им. Пельша (I ст.) Медаль им. Якубовича (I ст.)

Пред.

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