О системе

LUA ToastBuilder - кастомизируемая система уведомлений для WarCraft 3, написанная на Lua. Она поддерживает личные очереди для каждого игрока, умное слияние однотипных сообщений и замену устаревших тостов по общему ключу. Также доступны прогресс-бары (в том числе сегментированные) с плавной анимацией, звуковое сопровождение и гибкая настройка стилей в отдельном модуле - всё это позволяет избавиться от спама и сделать игровой интерфейс информативным, динамичным, лаконичным.

Вводное

Для своей карты "Divine Roguelike" навайбкодил несколько новых систем. Буду постепенно их выкладывать, если кому интересно.
Я адекватно оцениваю свои скилы, и понимаю, что без вайбкода я бы такого не сделал. Поэтому если обнаружите ошибки, риски для синхронизации, неоптимальные пути - дайте об этом знать, пожалуйста. Я со своей стороны в меру своих навыков постарался свести к минимуму зависимость от синхронности, возможость утечек и т. д..
Из-за ошибок в моём проекте на XGM, я не могу обновлять карту в её родном посте. Я писал в поддержку. Но мне не ответили. Поэтому вместо ссылки на проект я выложу последнюю версию карты прямо сюда (она открытая).

Особенности

Кастомизируемый механизм уведомлений, среди особенностей:
  1. Очередь ожидания. Новые уведомления не отображаются, пока очередь не освободится. У каждого игрока своя личная очередь. Допустимо смешивание личных и общих уведомлений.
  2. Слияние однотипных уведомлений. Например, два уведомления "+50 опыта" и "+100 опыта" полученные за короткое время сливаются в "+150 опыта".
  3. Замена уведомлений общего потока. Например, при быстром убийстве квестовых волков уведомление "убито 1/3 волков" заменится уведомлением "убито 2/3 волков", а затем заменится уведомлением "квест выполнен", а затем "награда за квест". Все эти тосты объединены одним общим ключём, который позволяет не держать на экране спам устаревшей информации. Достигается комбинацией тоста key=AnyQuest (строка, хэндл или объект), + replace = true
  4. Ожидание уведомлений общего потока. Тост с указанным ключём не отобразится пока игркоу отображаются другие уведомления с этим ключём. Например единомоментно можно создать два уведомления "вы вошли в опасную зону", "уровень противников и лута повышен", которые отобразятся друг за другом, но не одновременно. У разных игроков эти тосты могут отобразиться в разное время, если, например, у них были какие-то локальные тосты или если забита очередь. Достигается комбинацией key="extraDanger" + replace = true (тост заменит тотс с аналогичным key) + waitKey = true (но перед добавлением или заменой тост дождётся пока другой тост с тем же key не исчезнет), + (опционально) waitKeyFade = true (вместо того, чтобы ждать полного исчезновение предыдущего тоста, он будет ждать когда предыдущий тост только запустит анимацию исчезновения и в этот момент его заменит),
  5. Прогресс-бары на уведомлениях. Сплошные и сегментированные. Задаётся на уровне стилей. Например, к тосту "убито 3 из 7 волков" можно присобачить сегментированный прогресс-бар, которые состоит на самом деле из 7 мини-прогресс баров, 3 из которых заполнены. При желании можно заполнить нецелое количество. Например "пройдено 50% волны 2/3" можно заполнить сегментированный прогресс-бар на 2.5, в этом случае 2 бара заполнятся полностью, а 3-й бар будет заполнен наполовину.
  6. Плавная анимация заполнения баров при замене тостов. Если тосты друг друга заменяют, и у них отличаются значения текущего прогресс-бара - то в новом тосте бар заполнится постепенно от предыдущего значения. Хорошо работает в том числе и при многократном спаме однотипных уведомлений (например, если за раз убить 7 волков - то прогресс красиво заполнится от 1-го до 7-го).
  7. Прочие красивые анимации. Например, при замене тоста - его иконка всплывает.
  8. Звуковое сопровождение - для разных стилей можно настроить разные звуки появления. Например, "квест получен", "предупреждение" и т. д.
  9. Стили тостов и константы настраиваются в отдельном модуле. Можно создавать свои стили тостов и вызывать их.
  10. 10-го пункта нет, просто не хотелось останавливаться на цифре 9.

Пример:

Скрипты системы тостов находятся в двух обязательных файлах:
ToastsConfig.lua
Toasts.lua
(именно в таком порядке)
Затем следуют скрипты самой карты, которая использует эту систему. В частности "RoguelikeToasts.lua" содержит удобные спецефичные функции для использования в данной карте. Их можно разобрать как пример. В них переиспользуются {} чтобы свести к минимуму динамичное создание таблиц во время игры.

Примеры вызова тостов:

   local testQuest = {} -- квест-заглушка

    local toastOptions = {
      style = "taskUpdated",
      key = testQuest,
      replace = true, -- заменит уже существующие тосты квеста TestQuest
      duration = 4, -- время жизни тоста с момента его отображения или замены
      icon = "ReplaceableTextures\\CommandButtons\\BTNTimberWolf.blp",
      title = "Просьба одной курицы",
      text = "Убито волков 1/7",
      progressCurrent = 1,
      progressMax = 7
    }

      Toasts.show(toastOptions)

... спустя пару секунд ...

    local toastOptionsComplete = {
      style = "taskCompleted",
      key = testQuest,
      replace = true, -- заменит уже существующие тосты квеста TestQuest
      duration = 4, -- время жизни тоста с момента его отображения или замены
      icon = "ReplaceableTextures\\CommandButtons\\BTNTimberWolf.blp",
      title = "Просьба одной курицы",
      text = "Все волки убиты!",
      progressCurrent = 1,
      progressMax = 1
    }

      Toasts.show(toastOptionsComplete)

(Примечание, чтобы постоянно не пересоздавать таблицы - можете их переиспользовать, меняя параметры. Это не вызовет ошибок).
Если игрок за короткое время будет убивать двух монстров из двух разных квестов - то тосты двух квестов не будут друг друга перекрывать и их уведомления будут отображаться паралельно.
`
ОЖИДАНИЕ РЕКЛАМЫ...
19
Я в последнее время немного подустал, и в примере описал только один тип вызываемых тостов. Другие типы есть в карте-примере в папке Toasts. Но если интересует кконкретный приём (как на видео) - скажите что именно интересно - и я эти примеры заполню одними из первых, когда появятся ресурсы.
12
Cancel, Нашёл всё-таки команду себе для рогалика? Или решил забить и один сидишь делаешь?
12
Cancel, мне рогалики тоже нравятся, могу помочь с твоим, вдвоём интересней будет делать (я ещё год назад предлагал), а то я тоже сижу в одиночку карту делаю, скучно просто иногда одному становится
19
Tredor46, я, если честно, не помню. Давай в личке спишемся немного позже, я напишу
12
Давай, только личка XGM такое себе (менее удобная чем аналоги), у тебя есть дискорд там? или вк вон вроде есть, я добавлю?
39
Ужас, исправь краткое описание и удали ссылку с примера
Загруженные файлы
19
удали ссылку с примера
Какую ссылку? ссылку на карту, где система реализована? Так это же и есть пример
19
Ужас
Тебе вообще как модератору XGM нормально такими словами разбрасываться?
19
А если ты про ссылку в коде - то мне нужно на проект как-то ссылаться. Я бы сослался на проект на XGM, но на мой запрос о починке темы с моим проектом проигнорирован. Почините - буду ссылаться на неё xgm.guru/p/117/V-moey-karte-kogda-ya-nazhimayu-na-redaktirova-Ks...
39
Cancel, у тебя ресурс в кнопке, а ты взял и ссылку дублировал зачем-то
39
Тебе вообще как модератору XGM нормально такими словами разбрасываться?
Да, я показал скринштом то, что краткое описание перепутали с полным
19
Witchblade, я твоё замечение и без эмоционального окраса понял. Я впервые на XGM поделился наработкой, и первое что увидел от модератора - эпитет "ужаса". Одно дело если бы ты был обычным пользователем, другое - ты представитель администрации XGM.
У меня это отбило всякое желание здесь что-то размещать.
Я запрошу удаление поста.
39
Cancel, у меня были претензии к оформлению ресурса. Ты их исправил. Ресурс был опубликован. Какие претензии? Матов нет, оскорблений в твой адрес или твоего труда - нет. Тему можна закрыть
10
rsfghd, вроде использовал ИИ , я как-то пробовал через Gemini там полная жопа ошибка на ошибке...
28
jasonrus96, прикольно, люди больше ничего учить не будут
ну зато годных проектов станет больше
19
Пока что исследования показывают, что люди, использующие нейросети как инструмент, развивают свои навыки быстрее контрольной группы.
В будущем, лет через 10, возможно, ситуация поменяется.
28
Cancel, свои навыки или навыки пользования инструментом? Если через месяц забрать статьи у обучающегося и забрать нейронку у другого, кто быстрее и "лучше" завершит определенное задание?
28
Под статьями я подразумеваю материалы обучения
19
rsfghd, тот, что пользовался нейронкой. Это входит в исследования. Работа с нейросетями - это обоюдный процесс. Не только они учатся у профессионалов, но и люди учатся у нейронок в процессе работы. Были гипотезы, что если отнять у писателей и специалистов нейронку - они станут выполнять работу хуже и медленее контрольной группы, но произошло обратное. www.youtube.com/watch?v=TuIdcIWBG4s
А то, что у некоторых не получается с их помощью делать что-то путное - это вопрос не к нейронке, а к человеку. Ты же не будешь винить молоток в том, что ты с его помощью не смог забить гвозь. Это лишь инструмент, а не волшебная палочка.
На эту тему есть очень много исследований и статей. Рекомендую ознакомиться хоть с чем-то, перед тем, как критиковать нейросети или их пользователей, просто чтобы не строить свою логику на заблуждениях.
Лично я склоняюсь к тому, что в долгосрочной перспективе человек останется не у дел, и он деградирует, так как для него не останется когнетивных задач. Но для этого должно пройти несколько поколений. В краткосрочной перспективе ситуация иная.
Я об этом писал в статье "Комплекс Кроноса" habr.com/ru/companies/miip/articles/1051806
Иронично, что я в этой статье выразил свой страх о том, что нас заменят нейросети, и что их работа вскоре ни чем не будет уступать нашей. А в комментариях меня заподозрили, что я эту статью написал черз нейросет, лишний раз подвердив мои опасения.
2
Cancel, Так же существуют исследования, показывающие, что люди тупеют от использования нейронок. Так что тут больше зависит от выборки (или же заинтересованные лица "покупают" эти исследования с заведомо выгодным для них результатом, но тут уже скатывание в конспирологию). По всей этой теме единственный вменяемый аргумент я увидел в том, что человек, использующий нейросети, пропускает этап когнитивной нагрузки для поиска решения задачи и получает сразу готовый ответ, из-за чего в принципе теряет способность самостоятельно решать задачи. К тому же нейросети стимулируют лень и делегирование задачи (а иногда всей работы целиком).
28
Я тут случайно подслушал ваш разговор...
Это входит в исследования. Работа с нейросетями - это обоюдный процесс. Не только они учатся у профессионалов, но и люди учатся у нейронок в процессе работы. Были гипотезы, что если отнять у писателей и специалистов нейронку - они станут выполнять работу хуже и медленее контрольной группы, но произошло обратное. www.youtube.com/watch?v=TuIdcIWBG4s
Не выступаю против нейронок, и даже сам сейчас вайбкодю технодемку для варкрафта, но хочу сказать, что ссылаться на такие видео, чтобы подкрепить какой-нибудь тезис это прям очень плохая практика. Дробышевский это просто мейнстримный научпопер, а Марков — чел, который занимается развитием ИИ в коммерческой компании, то есть заинтересованная сторона. И ни одной полноценной ссылки на исследования, как на первичные источники в видео нет.
Да, я закинул стенограмму видео в нейронку, чтобы она это проверила
Разложу подробнее, что в стенограмме есть, а чего нет:
Что упомянуто с конкретными именами/датами — но это общеизвестная история науки:
  • Джон Маккарти и Дартмутский семинар (1955–1956), Тьюринг с «машинным интеллектом»
  • Уоррен Маккалок и Уолтер Питтс — первая модель искусственного нейрона
  • Хьюбел и Визел — исследования зрительной коры кошек
  • Работа Хебба 1949 года, Торндайк
  • Фрейд, «Очерки о научной психологии» (1892)
  • Рамон-и-Кахаль (1890-е)
  • Николай Рашевский
  • Лимит Бремермана, теорема Маргулуса–Левитина, предел Ландауэра
  • Deep Blue, бот Tay от Microsoft
  • Сесар Идальго — со ссылкой на его шутку про «килобайт сложности»
  • Гверн Бранвен — прогноз 2021 года о том, что крупные компании не выпустят LLM в массы
Это всё проверяемо и корректно как исторический бэкграунд области, но по теме дискуссии не помогает.
Что упомянуто по существу нашей темы — и без единой ссылки:
  • «Было несколько работ» про ChatGPT и когнитивные способности студентов — без авторов, названий, дат, журналов
  • «Одна из нашумевших, которая в MIT вышла» — без авторов и года; описано «мерили ЭЭГ, ничего не нашли, а „деградация“ свелась к похожести эссе»
  • «Ещё несколько похожих работ» — без ничего
  • «Одна из работ показала, что LLM особенно полезны для людей с низкими когнитивными способностями» — без ничего
  • Утверждение про уменьшение мозга «за последние 40 000 лет» и критику этих работ — тоже без источников
Даже бенчмарки вроде Humanity's Last Exam и ARC-AGI названы, но без ссылок на команды-разработчики или методологию.
19
Makeba, я хзотя бы на что-то ссылаюсь, вместо оголтелых тезисов, и не предлагаю ограничивать свои знания научпопом. Более того, я в своём предыдущем посте напрямую призываю искать и знакомиться с информацией.
28
я хзотя бы на что-то ссылаюсь, вместо оголтелых тезисов
Мне удобнее почитать стену текста чем смотреть часовое видео подкаст и пропустить все через уши
23
Выглядит неплохо!
"Из-за ошибок в моём проекте на XGM, я не могу обновлять карту в её родном посте. Я писал в поддержку. Но мне не ответили. Поэтому вместо ссылки на проект я выложу последнюю версию карты прямо сюда (она открытая)."
  • Можешь описать подробнее что за ошибка у тебя с обновлением карты, может я смогу помочь?
39
Ageron, баг с пропажей ресурсов, ты тут ничем не поможешь
Чтобы оставить комментарий, пожалуйста, войдите на сайт.