RU

DOPAMINE Библиотека для QSP Classic 5.7.0

Svartberg #1555 16.03.2022 14:22 13 comments 3644 views

Spoiler

Доброго времени суток!
Как обычно, я напоминаю, что не умер и всё еще стараюсь привнести немного вдохновения. Мои творческие изыскания привели меня к реализации множества различных механик для тех или иных проектов. За столь долгое время разработки, у меня (как и у многих) собрался большой багаж с различными наработками. Я готов поделиться ими с окружающими, чтобы они набивали меньше шишек, а также тратили меньше времени на реализацию своих амбиций. Всегда лучше воспользоваться готовым решением которое работает, нежели писать с нуля самому.
Во время не очень активной разработки своего личного проекта, я решил немного переработать свою старую библиотечку, которой пользовался довольно длительное время. В какой то момент, я настолько увлекся переработкой, что пришёл к неожиданному желанию поделиться своей работой с окружающими. Именно для этого мною было принято волевое решение переработать исходники и предоставить их всем желающим. Так на место старой и не очень удобной библиотеки Burzum, которая изобиловала большим количеством лишнего функционала, встала простая и многофункциональная библиотека Dopamine.
Кстати, совсем недавно стартовал анонс нового конкурса. Хоть я и не планирую в нем участвовать, однако готов помочь энтузиастам, желающим добиться наилучших результатов.

Хорошо, прочь длинные вступления! Сегодня я хотел бы анонсировать выход своих трудов на более широкий круг общественности. На данный момент есть несколько редакций библиотеки, однако доступной, в ближайшее время, будет только одна.

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

| | Дата выхода: 2023 г. - упрощенная версия библиотеки состоящая только из основных функций и модулей. При помощи DOPAMINE SAKURA всего за несколько минут можно настроить первоначальную загрузку проекта с необходимыми базовыми функциями сохранения и загрузки состояния, а так же настроить систему хранения объектов в массивах. А так-же удобные генераторы объектов, поиски по переменным и массивам и тд. |

| | Дата выхода: 2023 г. - это уже тяжёлая артиллерия. Полная версия библиотеки со всеми включенными функциями и модулями. Помимо функций DOPAMINE SAKURA, представляет сборник функций, направленных на различные механики, от самостоятельного инвентаря, до реализации боевой системы. Данная библиотека рекомендуется пользователям, уже знакомым с облегченной версией. |

В состав Sakura входит не очень большой список модулей. Какие то из них точно смогут помочь в разработке проекта. Среди модулей можно выделить следующие:

Spoiler
МЕНЕДЖЕР ОБНОВЛЕНИЙ Менеджер обновлений ещё одна важная вещь, которая позволяет работать библиотеки так как задумано. Без участия UPDATEIT не могут обойтись большинство модулей, рассчитанных на работу с библиотекой. Библиотека каждый определенный (для каждого модуля свой) промежуток времени, как правило пакетами, активирует функции обновления для модулей и заставляет их выполнять свои функции. Это бесконечный процесс загрузки и обновления данных, который необходим библиотеке как воздух. По сути, менеджер обновлений выступает в качестве обёртки над служебной локацией COUNTER.

| МЕНЕДЖЕР ЛОКАЦИЙ | Менеджер локаций является связующим звеном, между независимыми модулями. Он хранит, обрабатывает и передаёт данные полученные с модулей. Это позволяет упростить работу сторонних подключаемых модулей, а так же упрощает обращение к функциям многих модулей, благодаря подготовленным спецификациям работы. Если хотите, PIGEONI можно назвать артериями библиотеки, без которого всё представленное далее не сможет работать так как задумано. Менеджер предоставляет несколько основных функций, которые созвучны с названием:

$PIGEONI / $PACKAGE - функция-прослойка для GOTO и GOSUB, с помощью которых можно переходить по необходимым локациям. Если менеджер не обнаружит локацию в своих списках, он переключится на локацию “по-умолчанию”, которую вы сможете настроить самостоятельно, по своему желанию.

$PIGEONI.ADD / $PACKAGE.ADD - добавляет данные для обработки и хранения менеджеру. После чего любые совместимые с библиотекой модули, смогут обработать полученную информацию.

$PIGEONI.GET / $PACKAGE.GET - аналогично $PIGIONI.ADD, однако вместо передачи позволяет получать необходимые данные с переменных и массивов |

МЕНЕДЖЕР ДАННЫХ Менеджер данных выступает в роли общего хранилища проекта. Он хранит и обрабатывает внутри себя всю полученную информацию. И если PIGEONI можно было сравнить с артериями библиотеки, то BOX можно сравнить с большим упорядоченным складом, на котором все объекты хранятся на своих полочках. Менеджер крайне полезен, если вы планируете хранить множество данных в массивах. Он использует маркерную систему, с поддержкой хэширования ключей, благодаря чему появляется возможность хранить множество информации в компактном виде, а так же быстро получать к ней доступ.
МЕНЕДЖЕР СЕССИЙ Менеджер сессий предназначен для логирования и контроля работы множества функций библиотеки. Он вписан в ядро и обновляется вместе с ним. Поскольку он является частью скелета библиотеки, настоятельно не рекомендуется как-либо изменять данный модуль (если только вы не уверены в том, что делаете). Менеджер тесно связан с системой сохранения и загрузки состояния проекта. Они являются взаимозависимыми, как и всё ядро в целом.
ГЕНЕРАТОР УНИКАЛЬНЫХ КЛЮЧЕЙ Генератор позволяет удобно и быстро генерировать уникальные ключи для различных нужд. Он так же хранит все сгенерированые ключи в специальных массивах, для удобства поиска и взаимодействия. Функции генератора предоставляют расширений функционал по генерации ключей. Он может генерировать как системные, так и пользовательские ключи. Конструктор функции достаточно гибкий и позволит сгенерировать разные последовательности.
ГЕНЕРАТОР СЛУЧАЙНЫХ ЗНАЧЕНИЙ Данный генератор является прослойкой для функции rand. Генератор гарантирует выпадение случайного значения, в указанном промежутке, основываясь на значениях прошлых бросков. Это увеличивает шанс случайного значения путём сортировки условий. Так же генератор позволяет указать условие броска, условия можно указывать друг за другом, последовательность не важна. Стоит отметить, что генератор работает не только с числовыми значениями, но и состроковыми, а так же с различными массивами.
ПРОЧЕЕ Сюда можно внести как генератор таблиц, который позволит вам быстро сверстать необходимую таблицу. Он работает отдельно от библиотеки и выводит готовый код, который можно вставить в свой проект. Так же имеется генератор ссылок, цветовые шаблоны и тд.

Документация для каждого модуля будет прикреплена к релизной версии библиотеки. Там я постарался максимально доступно и просто объяснить как работу так и возможности применения модулей.

В качестве примера реализации:

Spoiler


Библиотека позволяет быстро реализовывать базовые потребности квестовых игр

Так ведется разработка взаимодействия с проектом уже внутри запущенного и собранного проекта. В этом может помочь админ панель, которая появится в версии Neon:

Spoiler


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

Я прекрасно понимаю, что данная затея уже заведомо провальная и практически никто не будет пользоваться возможностями библиотеки. Однако, я убежден, что именно такие действия необходимы для развития нашего сообщества. Люди должны видеть как и чем живет QSP. И мне очень важно донести понимание о возможностях движка, помимо оконных решений.

Всегда с вами, Svartberg.

Edited at 09.06.2022 19:54 (3 years ago)
Aleks Versus Moderator 16.03.2022 16:52 (3 years ago)

Это очень круто. Прям очень. :O Жду релиза. =)

Что-ж, как обычно всё идет не по плану. В связи с некоторыми обстоятельствами мне придётся отложить релиз тестовой версии Сакуры, на пару месяцев (хотя бы по тому что, я ещё не предоставил её для тестеров). К сожалению, на данный момент, я лишился последнего источника дохода и теперь приходится в срочном порядке бегать и искать новую работу. Времени на свои увлечения почти не остается. Однако, к назначенной нужно что-то да и отправить, чтобы совсем не расстраивать народ.
И этом чем то будет вполне полезная и нужная многим вещь: Конструктор таблиц.
Он относительно удобен и позволит быстро сгенерировать код для последующей работы и вставки в свой проект. Больше вам не придется самостоятельно писать тонны кода и каждый раз проверять, работает это или нет.

Spoiler

Происходит какая-то чёрная магия, не иначе :)
Вот что творит упорство в своей идеи и наличие эстетически верного вкуса.

Что-ж, пришло время для промежуточных новостей, связанных с конструктором таблиц.
Конструктор почти готов к использованию, осталось лишь подключить сохранения, а так же подготовить функционал для взаимодействия с таблицей, по типу объединения ячеек и тд.
На данный момент конструктор уже может генерировать обычную таблицу, а так же мастер-ключ для хранения информации.
Как обычно, я не успеваю сделать то, что наметил. Однако, готов поделиться исходниками того, что есть на данный момент.
Предупреждаю заранее, что это не рабочая версия. Здесь есть лишь часть кода, над которым ведётся работа. Уверен, найдётся несколько человек, желающих покопаться в коде.

Spoiler

Ссылка на Google.Drive: DopDopTable 0.2

Из последних новостей:

У меня появилось немного времени. Закончил работу над составлением Мастер-ключа, для компактного сохранения информации и передачи данных другим пользователям. Мастер-ключ представляет собой 20-значные блоки с зашифрованными данными, с позицией 1 чар на 85 значений.

(Более подробно о работе Мастер ключа, ниже)

Spoiler

Для сохранения большого объема однотипной информации, был создан небольшой конвертор. Он переводит информацию таблиц в специализированные блоки. Каждый блок определяет 3 типа данных: таблица, строка, ячейка.

Большая часть блока состоит из конвертированных значений типа: 1 char на 85 значений. Это не относится к определениям ширины таблицы или ячейки, а так же hex-кода цвета. Поскольку перевести их в более компактный формат, не представляется возможным.

В качестве примера, можно рассмотреть таблицу 3 на 3:

<table border = 1 width = 100%>
    <tr>
        <td align = left><<$ddt.table_box['1:1']>></td>
        <td align = center valign=bottom><<$ddt.table_box['2:1']>></td>
        <td align = left><<$ddt.table_box['3:1']>></td>
    </tr>
    <tr>
        <td align = left><<$ddt.table_box['1:2']>></td>
        <td align = left width=60%><<$ddt.table_box['2:2']>></td>
        <td align = left><<$ddt.table_box['3:2']>></td>
    </tr>
    <tr align = center>
        <td><<$ddt.table_box['1:2']>></td>
        <td><<$ddt.table_box['2:2']>></td>
        <td color=#a19a9a><<$ddt.table_box['3:2']>></td>
    </tr>
</table>

Как можно заметить, некоторые части имеют отличные от других значения. Чтобы не сохранять всю информацию таблицы, Мастер-ключ фиксирует только отличные значения. Это значит, что шаблонные параметры (заданные редактором) он пропускает, поскольку вся информации о построении шаблонной таблицы уже есть в заголовке Мастер-ключа.

Мастер-ключ же генерируется в два этапа. Первым этапом идёт составление блоков для каждого значения.

У представленной таблицы идут следующие блоки:

0T22000k0100 R00k D000k0000 D00130000 D002k0000 R01k D010k0000 D011k00601 D012k0000 R02a D020k0000 D021k0000 D022k0000#a19a9a

Это слепок всей таблицы. Можно заметить, что у ячеек и строк есть схожие параметры. Их можно убрать из итоговой сборки, поскольку шаблонная информация и так сгенерируется при распаковке.

Здесь можно обратить внимание так же на первый блок. Первым блоком всегда идёт общая информация о таблице. Она маркируется символом “T”, сразу после указания id таблицы (в сохранённом проекте может быть несколько таблиц). Далее идёт общая информация о таблице: кол-во ячеек, ширина таблицы и тд. После этого блока идёт информация о всех ячейках и строках. Информации может быть довольно много.

После того как вся информация будет составлена, начнётся второй этап, который заключается в объединении всё информации и удалении ненужной.

У представленной таблицы идёт следующие блоки:

0T22000k0100 D00130000 D011k00601 R02a D022k0000#a19a9a

После того как генератор убрал всё лишнее, остается дело за малым, скомпонавать этот код для более удобного преставления пользователю. Чтобы ему было проще копировать.

После второго этапа, ключ предстает в следующем формате:

-0T22000k0100D0013000 -0D011k00601R02aD022k -0000#a19a9a

Готово! Мастер-ключ сгенерировался и теперь занимает в разы меньше места. Его удобно копировать и так же удобно хранить в самой программе.

Я так же планирую составить отдельный модуль для распоковки данных, который вы сможете подключить к своему проекту. Останется только лишь скопировать этот мастер ключ в конвертор, в вашем проекте и всё. Таблица будет работать.

Таже имеется обычный формат копирования уже полностью сгенерированой таблице.

Осталось дописать распаковщик Мастер-ключа. Это должно занять меньше времени. Ещё осталось много работы над составлением таблицы-конструктора и возможностей взаимодействия с ней.

Из основных возможностей конструктора можно выделить две три функции:

  • Вкладки для работы с разными таблицами;
  • Объединение ячеек таблицы;
  • Настройка каждой ячейки, строки и самой таблицы.

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

Стоит учитывать, что конструктор не позволит вам редактировать переменные в ячейках. Он лишь генерирует их и предоставляет удобный доступ для взаимодействия после копирования таблицы.

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

Немного скринов:

Spoiler



Aleks Versus Moderator 03.05.2022 12:34 (3 years ago)

Через @ ведь можно функции вызывать только в 5.8.0. Ты уже на другую версию библиотеки переориентировался?

Aleks Versus, я знаю. Сейчас я пилю для 5.7, попутно подстраивая к 5.8. Чуть больше работы, но потом ненужно будет переводить готовый.

Никто не ждал, а я вернулся с новостями, которых небыло месяц с небольшим. Что поделать. Длительное ожидание происходит не просто так. Времени не очень много, а желания сделать что-то хорошо… Очень даже много. Сейчас, в свободное время я помогаю Hrono с реализацией небольшого приложения для создания ссылочных каталогов. Он позволяет хранить ссылки на папки и файлы в приложении и открывать их через него. Сверстал дизайн, немного сменил концепцию. Переписал код, доработал некоторые функции и добавил ворох своих. Быстрый поиск по названию, меткам и тд. Каждый блок может хранить неограниченное кол-во ссылок со своими локальными метками путями и тд. Так же подкрутил интеграцию с библиотекой Dopamine. Куда без этого.
Довольно простое и нужное приложение, особенно для тех, у кого огромное кол-во папок. Естественно, поставить всё это на рельсы классического купса - небыстрая задача. Но, могу сказать, что результатом я вполне доволен.
Вот парочку скриншотов с ещё не доделаной версии.
Заложил основу для простого перевода на любые языки. Переводите как хотите, по-умолчанию русский и английский. Динамичное изменение изображений и шрифтов по нажатию пары кнопок в настройках проекта (но свою ответственность за корректное отображение я снимаю). Ещё добавил светлый и тёмный варианты дизайна. Менять можно по нажатию одного свича. Очень удобно, быстро и когда нужно, глаза не добивает. Ну и конечно, как я мог забыть про обработку ошибок и возможность впиндюрить свой код. Постарался покрыть обработкой ошибок старт проекта. Можете не беспокоиться и вручивать свои улучшения.

Spoiler







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

Лютый ты мужик, Svartberg. В хорошем смысле)
А так, классических успехов в продолжении полезного начинания.

Ещё один небольшой пак скринов с примером того, что можно относительно быстро сделать при помощи библиотеки Dopamine для QSP 5.7.0 (при условии, что у вас есть необходимые паки изображений, конечно же). При помощи DopDopTable возможности по созданию интерфейсов заметно вырастают. Поскольку пользователю больше не придётся самому вручную писать весь код для таблиц. Очень удобно. А менеджер ссылок (про который я расскажу в другой раз) поможет начинающим авторам своять структуру ссылок и использовать их возможности по максимому. Не утруждая себя при этом правильным составлением ссылок.

Spoiler







Oliver, спасибо, спасибо. “Активно” работаю, как обычно.

Что-ж, работа продолжается. Очень медленно, но продолжается.
Я обдумываю, тестирую и вновь обдумываю то, как будет работать та или иная функция в библиотеке. Это занимает очень много времени. Как обычно, много времени у меня нет. Как и у всех нас. Моя продуктивность на уровне плинтуса.
Выпускать библиотеку в том виде, в котором мне хочется, это значит, ещё кучу времени ничего не публиковать. Тучу времени уёдет на ожидание результатов стороннего тестирования.

Поэтому, я решил, что лучше сконцентрируюсь на независимых блоках библиотеки по отдельности. Буду выпускать их просто отдельно. Чтобы пока работал над следующим блоком, хоть кто-то поюзал и проверил насколько это вообще жизнеспособно.

И как раз одним из первых блоков, над которым я работаю это работа с массивами. Разделил её работу на категории, наконец разобрался в том, что это вообще должно быть и какие функции должна исполнять эта часть либы.
Понял, что без нее в принципе бесполезно что-то делать дальше, поскольку работа с массивами сейчас задействуется абсолютно везде. Концепция Box для Дофамина уже оказалась не такой, как планировалось. Я думаю, много кто задумывался над тем как компоновать всю информацию в массивах. Я предоставлю своё видение работы одномерного массива для qsp.

Я не обещаю, что это самый быстрый вариант. Я не обещаю, что это самый удобный вариант работы с массивами. Я говорю, что так работает библиотека. Так удобно мне, если удобно мне, значит будет удобно кому-то ещё. Новая концепция представит ряд готовых функций, которые сократят написание кода в несколько раз. Они простые и работают как нужно. Это тот максимум, который я могу дать другим на текущем этапе своих знаний.

Собственно говоря, это мой текущий апогей работы с не очень удобными массивами купса.

Log in or Register to post comments.