[ГАЙД] логируйте изменения уников по дням

Возможно когда-нибудь @_Mr_ded_ вас попросит скинуть "в какой период сколько уников у тебя было", а ты такой "эыээ..."
Это важно для крупных игр (поскольку в нашем комьюнити есть люди, которые ценят историю популярности режимов), по этому сегодня покажу простенькую систему логирования уников для вашей игры


Форматирование (BB-код):
Событие игрока - Вход
    Присв переменную - Установить вр. в в. даты (date) // Вернёт значение 'гггг-мм-дд чч:мин:сек.мс'
    Присв переменную - Разделить текст на элементы (date.split, date, пусто) // Разделяем дату на пробел
    Если переменная - Не равно (^date.save != date.splitඞ0) // Проверяем совпадение сохранённой даты
        Если переменная - Не существует (date.array ⎘ඞ499) // После "ඞ" ставим ваш лимит записей, можно не делать
            Присв переменную - Установить (^date.save = date.splitඞ0)
            Присв переменную - Объединить текст (date.formated = date.splitඞ0 + ЯБЛОКО@уник.посетители $разделение_пробелом)
            Массивы - Добавить в конец (^date.array ⎘ .положить date.formated)
 
            // Добавлена запись, пример: '2024-07-26 1599'
            // Где слева - дата, справа - уники

// Проверка логов
Событие игрока - Событие чата
    Если переменная - Текст содержит (ЯБЛОКО@сообщение .содержит "@uniqlog")
        Игровое действие - Отменить событие
        Если игрок - Имеет права ($Белый_список)
            Присв переменную - Разделить текст (%player%_message, ЯБЛОКО@сообщение, пусто)
 
            // Поиск записи по айди
            Если переменная - Равно (%player%_messageඞ1 == "id")
                Присв переменную - Парсить число (%player%_uniqlog.id .из %player%_messageඞ2)
                Массивы - Получить элемент (^date.array ⎘, %player%_uniqlog.id, %player%_uniqlog.log)
                Действие игрока - Отправить ("Запись под id ", %player%_uniqlog.id, ": ", %player%_uniqlog.log)

            // Использование: '@uniqlog id 10' - поиск с айди 10
 
            // Поиск записей по содержанию текста, например по дате, или месяцу
            Если переменная - Равно (%player%_messageඞ1 == "date")
                Присв переменную - Установить (%player%_uniqlog.target = %player%_messageඞ2)
                Присв переменную - Установить (%player%_uniqlog.index = 0)
                Присв переменную - Установить (%player%_uniqlog.result = "&f") // Пустой текст
                Массивы - Получить размер (^date.array ⎘, %player%_uniqlog.len)
                Вызвать функцию (uniqlog.date.for $синхронный_запуск)

              // Использование: `@uniglog date 2024-07-` - поиск за июль 2024


Функция (uniqlog.date.for)
    Присв переменную - Прибавить (%player%_uniqlog.index += 1)
 
    Если переменная - Сравнить число (%player%_uniqlog.index <= %player%_uniqlog.len)
        Массивы - Получить элемент (^date.array ⎘, %player%_uniqlog.index, %player%_uniqlog.elem)
        Если переменная - Текст содержит (%player%_uniqlog.elem .содержит %player%_uniqlog.target $все_переключатели_нажать)
            Присв переменную - Объединить ($новые_строки %player%_uniqlog.result = %player%_uniqlog.result + %player%_uniqlog.elem)
 
   Иначе
        Действие игрока - Отправить сообщение ("Найденные записи: ", %player%_uniqlog.result)
]"Абв"текст
123число
ЯБЛОКО@абвигровое значение
^Сохр. массив или переменная (ставить его в коде НЕ НУЖНО!)
Абвдинамическая переменная
^Абвсохр. динамическая переменная
Абвмассив
Абвඞ123несохр. переменная, с элементом несохр. массива
^Абв ⎘сохр. массив
Абв⎘ඞ123несохр. переменная с элементом сохр. массива
.контекстконтекст некоторых действий (Например: абв .объединить вба -> абввба)
Пустопустой параметр
$Абвпараметр, переключатель

// Абв. Абв
комментарий

Код добавляет лог с униками.
В событии входа мы проверяем день в году, равен ли он прошлой записи, если нет - создаётся в массиве запись в формате "дата+уники".
В событии чата создан инструмент для поиска записей по айди, и по содержанию записи

Код нереально простой, всего 3 строки, а добавляет интересную особенность

По простым подсчётам в /build'е код занимает мало сохранённых переменных, 1 в любом случае, и +1 за каждую запись

Можно добавить новые инструменты, вот вам идея: крд принимает 2 аргумента, где указывается минимальныое и максимальное допустимое значение уников, чтобы оно попало в сообщение. Кто напишет как это делается получит 5к золота, жду точный код

кароче езз код, делал цвета с телефона 2 часа, пж оценку
 

_Mr_ded_

Эксперт
Регистрация
5 Июн 2023
Сообщения
30
Одобряю, надеемся, что скоро новое видео с топом.
Есть мир(ы) с 1000 униками? Пишите в дс (он совпадает с моим ником), вас добавлю в топ.
 

legendaleto

Участник
Регистрация
31 Янв 2024
Сообщения
17
Возможно когда-нибудь @_Mr_ded_ вас попросит скинуть "в какой период сколько уников у тебя было", а ты такой "эыээ..."
Это важно для крупных игр (поскольку в нашем комьюнити есть люди, которые ценят историю популярности режимов), по этому сегодня покажу простенькую систему логирования уников для вашей игры


Форматирование (BB-код):
Событие игрока - Вход
    Присв переменную - Установить вр. в в. даты (date) // Вернёт значение 'гггг-мм-дд чч:мин:сек.мс'
    Присв переменную - Разделить текст на элементы (date.split, date, пусто) // Разделяем дату на пробел
    Если переменная - Не равно (^date.save != date.splitඞ0) // Проверяем совпадение сохранённой даты
        Если переменная - Не существует (date.array ⎘ඞ499) // После "ඞ" ставим ваш лимит записей, можно не делать
            Присв переменную - Установить (^date.save = date.splitඞ0)
            Присв переменную - Объединить текст (date.formated = date.splitඞ0 + ЯБЛОКО@уник.посетители $разделение_пробелом)
            Массивы - Добавить в конец (^date.array ⎘ .положить date.formated)
 
            // Добавлена запись, пример: '2024-07-26 1599'
            // Где слева - дата, справа - уники

// Проверка логов
Событие игрока - Событие чата
    Если переменная - Текст содержит (ЯБЛОКО@сообщение .содержит "@uniqlog")
        Игровое действие - Отменить событие
        Если игрок - Имеет права ($Белый_список)
            Присв переменную - Разделить текст (%player%_message, ЯБЛОКО@сообщение, пусто)
 
            // Поиск записи по айди
            Если переменная - Равно (%player%_messageඞ1 == "id")
                Присв переменную - Парсить число (%player%_uniqlog.id .из %player%_messageඞ2)
                Массивы - Получить элемент (^date.array ⎘, %player%_uniqlog.id, %player%_uniqlog.log)
                Действие игрока - Отправить ("Запись под id ", %player%_uniqlog.id, ": ", %player%_uniqlog.log)

            // Использование: '@uniqlog id 10' - поиск с айди 10
 
            // Поиск записей по содержанию текста, например по дате, или месяцу
            Если переменная - Равно (%player%_messageඞ1 == "date")
                Присв переменную - Установить (%player%_uniqlog.target = %player%_messageඞ2)
                Присв переменную - Установить (%player%_uniqlog.index = 0)
                Присв переменную - Установить (%player%_uniqlog.result = "&f") // Пустой текст
                Массивы - Получить размер (^date.array ⎘, %player%_uniqlog.len)
                Вызвать функцию (uniqlog.date.for $синхронный_запуск)

              // Использование: @uniglog date 2024-07- - поиск за июль 2024


Функция (uniqlog.date.for)
    Присв переменную - Прибавить (%player%_uniqlog.index += 1)
 
    Если переменная - Сравнить число (%player%_uniqlog.index <= %player%_uniqlog.len)
        Массивы - Получить элемент (^date.array ⎘, %player%_uniqlog.index, %player%_uniqlog.elem)
        Если переменная - Текст содержит (%player%uniqlog.elem .содержит %player%_uniqlog.target $всепереключ

Можно добавить новые инструменты, вот вам идея: крд принимает 2 аргумента, где указывается минимальныое и максимальное допустимое значение уников, чтобы оно попало в сообщение. Кто напишет как это делается получит 5к золота, жду точный код

Объясни ещё раз как-нибудь
Типо пишешь 2 числа - мин, макс уников и тебе выдается период времени, когда эти уники были набраны?[/code]
Сообщение объединено:

кароче езз код, делал цвета с телефона 2 часа, пж оценку
Молодец какой, держи печеньку 🍪
 

legendaleto

Участник
Регистрация
31 Янв 2024
Сообщения
17
Объясни ещё раз как-нибудь
Типо пишешь 2 числа - мин, макс уников и тебе выдается период времени, когда эти уники были набраны?
Если да, то рекурсией достаешь элемент, обрезаешь до уников и проверяешь есть ли такие числа в тексте
Придется узнавать период ещё одной рекурсией, которая будет выдавать числа от мин до макс типо: 10 - 15: 10 11 12 13 14 15, добавляя к мин числу +1, пока не будет макс
По-другому никак
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
327
Объясни ещё раз как-нибудь
Типо пишешь 2 числа - мин, макс уников и тебе выдается период времени, когда эти уники были набраны?[/code]
нет
пишешь мин-макс уников, и тебе пишутся даты, в которые впадает условие уников

в целом ты почти нужное придумал, только надо немного упростить
 

GromoverGets

Эксперт
Регистрация
2 Май 2023
Сообщения
243
Возможно когда-нибудь @_Mr_ded_ вас попросит скинуть "в какой период сколько уников у тебя было", а ты такой "эыээ..."
Это важно для крупных игр (поскольку в нашем комьюнити есть люди, которые ценят историю популярности режимов), по этому сегодня покажу простенькую систему логирования уников для вашей игры


Форматирование (BB-код):
Событие игрока - Вход
    Присв переменную - Установить вр. в в. даты (date) // Вернёт значение 'гггг-мм-дд чч:мин:сек.мс'
    Присв переменную - Разделить текст на элементы (date.split, date, пусто) // Разделяем дату на пробел
    Если переменная - Не равно (^date.save != date.splitඞ0) // Проверяем совпадение сохранённой даты
        Если переменная - Не существует (date.array ⎘ඞ499) // После "ඞ" ставим ваш лимит записей, можно не делать
            Присв переменную - Установить (^date.save = date.splitඞ0)
            Присв переменную - Объединить текст (date.formated = date.splitඞ0 + ЯБЛОКО@уник.посетители $разделение_пробелом)
            Массивы - Добавить в конец (^date.array ⎘ .положить date.formated)
 
            // Добавлена запись, пример: '2024-07-26 1599'
            // Где слева - дата, справа - уники

// Проверка логов
Событие игрока - Событие чата
    Если переменная - Текст содержит (ЯБЛОКО@сообщение .содержит "@uniqlog")
        Игровое действие - Отменить событие
        Если игрок - Имеет права ($Белый_список)
            Присв переменную - Разделить текст (%player%_message, ЯБЛОКО@сообщение, пусто)
 
            // Поиск записи по айди
            Если переменная - Равно (%player%_messageඞ1 == "id")
                Присв переменную - Парсить число (%player%_uniqlog.id .из %player%_messageඞ2)
                Массивы - Получить элемент (^date.array ⎘, %player%_uniqlog.id, %player%_uniqlog.log)
                Действие игрока - Отправить ("Запись под id ", %player%_uniqlog.id, ": ", %player%_uniqlog.log)

            // Использование: '@uniqlog id 10' - поиск с айди 10
 
            // Поиск записей по содержанию текста, например по дате, или месяцу
            Если переменная - Равно (%player%_messageඞ1 == "date")
                Присв переменную - Установить (%player%_uniqlog.target = %player%_messageඞ2)
                Присв переменную - Установить (%player%_uniqlog.index = 0)
                Присв переменную - Установить (%player%_uniqlog.result = "&f") // Пустой текст
                Массивы - Получить размер (^date.array ⎘, %player%_uniqlog.len)
                Вызвать функцию (uniqlog.date.for $синхронный_запуск)

              // Использование: `@uniglog date 2024-07-` - поиск за июль 2024


Функция (uniqlog.date.for)
    Присв переменную - Прибавить (%player%_uniqlog.index += 1)
 
    Если переменная - Сравнить число (%player%_uniqlog.index <= %player%_uniqlog.len)
        Массивы - Получить элемент (^date.array ⎘, %player%_uniqlog.index, %player%_uniqlog.elem)
        Если переменная - Текст содержит (%player%_uniqlog.elem .содержит %player%_uniqlog.target $все_переключатели_нажать)
            Присв переменную - Объединить ($новые_строки %player%_uniqlog.result = %player%_uniqlog.result + %player%_uniqlog.elem)
 
   Иначе
        Действие игрока - Отправить сообщение ("Найденные записи: ", %player%_uniqlog.result)
]"Абв"текст
123число
ЯБЛОКО@абвигровое значение
^Сохр. массив или переменная (ставить его в коде НЕ НУЖНО!)
Абвдинамическая переменная
^Абвсохр. динамическая переменная
Абвмассив
Абвඞ123несохр. переменная, с элементом несохр. массива
^Абв ⎘сохр. массив
Абв⎘ඞ123несохр. переменная с элементом сохр. массива
.контекстконтекст некоторых действий (Например: абв .объединить вба -> абввба)
Пустопустой параметр
$Абвпараметр, переключатель

// Абв. Абв
комментарий

Код добавляет лог с униками.
В событии входа мы проверяем день в году, равен ли он прошлой записи, если нет - создаётся в массиве запись в формате "дата+уники".
В событии чата создан инструмент для поиска записей по айди, и по содержанию записи

Код нереально простой, всего 3 строки, а добавляет интересную особенность

По простым подсчётам в /build'е код занимает мало сохранённых переменных, 1 в любом случае, и +1 за каждую запись

Можно добавить новые инструменты, вот вам идея: крд принимает 2 аргумента, где указывается минимальныое и максимальное допустимое значение уников, чтобы оно попало в сообщение. Кто напишет как это делается получит 5к золота, жду точный код

кароче езз код, делал цвета с телефона 2 часа, пж оценку
Предлагаю докинуть проверку на то, если предыдущий элемент массива == новому, чтобы не забивать лишний раз его
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
327
Предлагаю докинуть проверку на то, если предыдущий элемент массива == новому, чтобы не забивать лишний раз его
ну, это и не произойдёт

есть специальная проверка "Если переменная ^date.save != date.splitඞ0"
что же это значит
у нас есть дата, предположим "2024-07-28"
в событии входа мы получаем текущую дату, к примеру "2024-07-28 14:16:55.001"
то что идет после пробела - это время, нам это не интересно
разделяем текст, получаем первый элемент: "2024-07-28"
в обиход идёт проверка "Если переменная ^date.save != date.splitඞ0"
если срабатывает -> ^date.save = date.splitඞ0, после уже создаётся запись с униками в массиве

!!!А ЗНАЧИТ!!! запись создаётся не больше, чем раз в день

и смысла от проверки последнего элемента нет, как и говорилось записываться будет не более чем раз в день (а значит запись всегда будет разная), поскольку дата, в которую последний раз была создана запись сохраняется и сверяется
 

legendaleto

Участник
Регистрация
31 Янв 2024
Сообщения
17
нет
пишешь мин-макс уников, и тебе пишутся даты, в которые впадает условие уников
В принципе я это и сказал только по другому
Сообщение объединено:

в целом ты почти нужное придумал, только надо немного упростить
Без 2 рекурсии некуда потому что еще нет способа быстро прокрутить все числа от x-z
А если ты про не рекурсию, то тут уже хз что упрощать
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
327
В принципе я это и сказал только по другому
Сообщение объединено:


Без 2 рекурсии некуда потому что еще нет способа быстро прокрутить все числа от x-z
А если ты про не рекурсию, то тут уже хз что упрощать
там всего 1 рекурсия нужна, протягиваем все элементы, разделяем текст, получаем второй элемент, парсим, если в диапозоне - добавляем в сообщение...
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
327
Ну, а как диапазон узнаешь?
есть команда @uniqlog range <мин> <макс>
прохожусь по всем элементам, разделяя текст на пробел, получаю второй элемент, затем делаю парсинг числа, после проверяю если уники в указанном диапозоне
 

legendaleto

Участник
Регистрация
31 Янв 2024
Сообщения
17
есть команда @uniqlog range <мин> <макс>
прохожусь по всем элементам, разделяя текст на пробел, получаю второй элемент, затем делаю парсинг числа, после проверяю если уники в указанном диапозоне
А, ой, я не увидел эту команду у тебя в коде и думал, что это рекурсия отвечает за что-то другое
 
Сверху