Вот код на векторное оружие, она работает по шагам, а точнее рейкастингом:
(Сделал меньше размер текста, чтобы код уместился)
Функция { Текст{"Raycast"} } -> [
Если значение { Сравнить числа [Динамическая переменная{ray_step} <= Число{40}] } -> [ // 40 шагов * 0.5 = 20 блоков
Установить переменную { Векторы: Установить длину вектора [Динамическая переменная{vec_step}, Динамическая переменная{vec_dir}, Динамическая переменная{ray_step} * Число{0.5}] } -> // Шаг луча
Установить переменную { Местоположения: Установить (+) [Динамическая переменная{ray_pos}, Игровое значения{Местоположения: Текущее местоположение}, Динамическая переменная{vec_step}] } ->
Выбрать объект { Если существо: Находится рядом [Число{0.5}, Динамическая переменная{ray_pos}] } -> // Проверяем сущности в радиусе 0.5
Если существо { Имя равно [Учитывать регистр: Нет, Учитывать цвета: Нет, Текста: %player%] } [НЕ] -> [ // Исключаем стреляющего
Действие игрока { Параметры: Урон [Число{4}] [Выбранный] } -> // Урон 4 HP
Действие игрока { Параметры: Дать эффект зелья [Отображать частицы: Вкл., Замена эффекта: На новый, Число{3}, Число{1}, Эффекты зелья{"fire_resistance"}] [Выбранный] } -> // Горение 3 сек
Действие игрока { Коммуникация: Проиграть звук [Текст{"entity.generic.explode"}, Число{0.5}, Число{1}] [Выбранный] } ->
Действие игрока { Частицы: Отобразить сферу из частиц [Эффект частицы{"smoke_normal"}, Динамическая переменная{ray_pos}, Число{0.5}, Число{10}] [Выбранный] } ->
Игровое действие { Утиллиты кода: Остановить цикл [Текст{"RaycastLoop"}] } -> // Останавливаем при попадании
]
Установить переменную { Числа: Прибавить (+=) [Динамическая переменная{ray_step}, Число{1}] } ->
Цикл { Текст{"RaycastLoop"}, Число{0} } -> [ // Следующий шаг
Вызвать функцию { Текст{"Raycast"} } ->
]
]
]
События игрока { Взаимодействие с миром: Правый клик по сущности } -> [
Если игрок { Инвентарь и предметы: Держит предмет [Игнор кол-во: Вкл., Игнор прочности: Вкл., Игнор названия: Вкл., Игнор описания: Вкл., В какой руке: В основной, Название предметов: blaze_rod] } [Игрок по умолчанию] -> [
Если игрок { Инвентарь и предметы: Предмет имеет задержку [Предмет: blaze_rod] } [НЕ] [Игрок по умолчанию] -> [
Установить переменную { Векторы: Создать вектор из направления взгляда [Динамическая переменная{vec_dir}, Игровое значения{Местоположения: Направление взгляда}] } ->
Установить переменную { Числа: Установить (=) [Динамическая переменная{ray_step}, Число{0}] } -> // Сбрасываем шаг
Цикл { Текст{"RaycastLoop"}, Число{0} } -> [ // Запускаем рейкаст
Вызвать функцию { Текст{"Raycast"} } ->
]
Действие игрока { Частицы: Отобразить луч из частиц [Тип отображения: По расстоянию, Эффект частицы{"flame"}, Игровое значения{Местоположения: Текущее местоположение}, Динамическая переменная{vec_dir} * Число{20}, Число{0.1}] } -> // Визуал луча
Игровое действие { Управление инвентарём: Установить задержку предмета [Предмет: blaze_rod, Число{10}] } -> // Кулдаун
] Иначе -> [
Действие игрока { Коммуникация: Отправить сообщение [Разд. текста: Без разделение, Текст{"Оружие перезаряжается!"}] } ->
]
]
]
События игрока { Взаимодействие с миром: Правый клик по воздуху } -> [
Если игрок { Инвентарь и предметы: Держит предмет [Игнор кол-во: Вкл., Игнор прочности: Вкл., Игнор названия: Вкл., Игнор описания: Вкл., В какой руке: В основной, Название предметов: blaze_rod] } [Игрок по умолчанию] -> [
Если игрок { Инвентарь и предметы: Предмет имеет задержку [Предмет: blaze_rod] } [НЕ] [Игрок по умолчанию] -> [
Установить переменную { Векторы: Создать вектор из направления взгляда [Динамическая переменная{vec_dir}, Игровое значения{Местоположения: Направление взгляда}] } ->
Установить переменную { Числа: Установить (=) [Динамическая переменная{ray_step}, Число{0}] } ->
Цикл { Текст{"RaycastLoop"}, Число{0} } -> [
Вызвать функцию { Текст{"Raycast"} } ->
]
Действие игрока { Частицы: Отобразить луч из частиц [Тип отображения: По расстоянию, Эффект частицы{"flame"}, Игровое значения{Местоположения: Текущее местоположение}, Динамическая переменная{vec_dir} * Число{20}, Число{0.1}] } ->
Игровое действие { Управление инвентарём: Установить задержку предмета [Предмет: blaze_rod, Число{10}] } ->
] Иначе -> [
Действие игрока { Коммуникация: Отправить сообщение [Разд. текста: Без разделение, Текст{"Оружие перезаряжается!"}] } ->
]
]
]