Данная тема нужна для меня ибо в процессе рассказа в голову приходят мысли как это сделать лучше.
Надо начать с работы над ошибками. К сожалению КБ зашли в тупик. И их надо переписать с нуля.
Надо было разделить КБ минимум на две части.
Первая: Сам блок который реагирует на события.
Вторая: Функции которые содержат в себе кучу действий, к примеру до 100 действий на одну функцию.
Реализовать можно либо через memoryhack плагин. Либо выделить 1000 действий на мир, банальный массив и выбрать какой функции сколько отрезать действий из массива. Второй вариант шляпа, но имел место быть.
Бесконечные циклы были ошибкой. Большие функции решили бы проблемы, и никаких циклов не надо.
Таймеры и отложенное выполнение блока. На самом деле я затупил. Таймеров можно было сделать намного больше если бы сразу заложить правильную структуру. Так же есть место быть отложенным вызовам. Просто надо было сделать систему планировщика событий. Который бы хранил в себе всего пару значений: Время, Блок, Игрок
Как я вижу правильную структуру КБ
1. Командный блок:
-- Тут имя блока
-- Статус [ ON/OFF ]
-- //heal
-- Условия [ 2шт. ]
-- Коллбеки [ 2шт. ]
-- Функции [ 2шт.]
-- Радиус [ В интерьере ]
Блок условий. Условия все должны быть варианта Условие И Условие И условие. Никаких ИЛИ.
Потому что хрен пойми как их группировать. Если у вас есть легкое решение. Я готов выслушать, но все равно вас пошлю за русским кораблем потому что вы как всегда не умеете прогнозировать. Сразу говорю чем я вас утоплю. Как отработает и как это группировать: Условие И Условие ИЛИ Условие ИЛИ Условие.
-- ХП игрока
-- Броня игрока
-- [ Добавить условие ]
Предположим выбрали правило ХП игрока.
-- ХП игрока
-- Больше
-- 20
На этом блок условий завершен. Перейдем к блоку коллбеки. Идея в том чтобы один блок мог реагировать на разные события. Это добавит больше вариаций использования одного и того же КБ
-- Нанес урон
-- Получил урон
-- [ Добавить коллбек ]
Блок функций. Идея в том чтобы КБ выполнял роль некого наблюдателя, который просто следил за событиями и перенаправлял задачу на какие-то функции. Это позволило бы в одном месте поменять логику и не перебирать сотни КБ. Но к функциям мы вернемся позже.
-- #4: {Ваше название функции}
-- #55: {Ваше название функции}
-- #1: {Ваше название функции}
-- [ Добавить функцию ]
А так выглядит выбор функции, предположим мы тыкнули в #4
-- #4: {Ваше название функции}
-- Отложенный вызов: Можно указать моментально или через какое-то время.
-- Тип активации: Игрок или Все игроки
Если выбран вариант "На всех игроков" появляется 2 поля:
-- Радиус действия: По всей карте, по всему интерьеру или какой-то свой радиус.
-- Принудительный вызов: Проверять игроков которые попали в радиус на условия блока или принудительно вызвать функцию на них в обход условий. * Помогите придумать нормальное название, мне оно не нравится.
И самое легкое Радиус, тоже самое что и выше:
-- Радиус: По всей карте, по всему интерьеру или какой-то свой радиус.
2. Функции. Наверное самое главное что стоит заложить сразу.
-- Название функции
-- Статус [ ON/OFF ]
-- Список действий [ 5 шт. ]
Как я вижу список действий.
-- Выдать игроку машину
-- Выдать игроку здоровье
-- Выдать игроку Броню
-- Добавить действие
--
-- След страница >>> [ 2 / 3 ]
-- <<< Пред. Страница.
Предположим тыкнули в: – Выдать игроку оружие
-- Выдать игроку машину
-- * Модель: LSPD
-- Игрок: По умолчанию
-- x: N/A
-- y: N/A
-- z: N/A
-- Угол поворота: N/A
-- Основной цвет: N/A
-- Дополнительный цвет: N/A
-- Время респауна: 0
-- Сирена: Нет
Тут надо пояснительную бригаду. Сейчас у нас тупо строка и вы заполняете это в диалог. Шляпа полная.
Каждый параметр должен быть вынесен в отдельную строку. Это читабельно и удобно.
Так же есть обязательные и не обязательные действия. Там где звёздочка обязательно для заполнения.
3. Триггер блоки
Вроде хорошие ребята, а с другой стороны их можно будет упростить до банального “Вызови КБ”. А уже КБ там решает че делать с этим вызовом, таких можно на мир сделать хоть 1000шт. Надо чето с ними подумать короче.
… To be continued