Всем доброго времени суток! У меня возникла проблема с организацией функции для турели-дробовика:
Дробовик стреляет несколькими патронами, при этом стрелы спавнятся только в том случае, если луч positioned-рейкаста коснётся моба с тегом (чтобы турель "видела" преграды, и чтоб в игрока не прилетело). Т.е если моб один - то и стрела вылетит только одна.
Разброс снарядов есть константа и задаётся только по горизонтали градусом поворота стенда (стенд и есть сама турель), после запуска предыдущего снаряда, задания ему вектора полёта.
В чём проблема: positioned-рейкаст запускается исключительно с исходного ротейшена, в то время как вектор вычисляется нормально, учитывая тот самый поворот между выстрелами. Т.е моб один - а летят все три стрелы, две из которых в него не попадут. Если визуализировать функцию positioned-рейкаста с помощью партиклов, то все три запуска строят одну и ту же линию, до моба. Но стрелы летят нормально, с разбросом. При этом на каждый запуск pos-рейкаста я поставил разные функции с разными переменными (rcd(0-2) в коде), чтобы исключить конфликты, в самих функциях проблем нет, я их тысячу раз проверил. С задержками проблем тоже быть не должно, всё запускается и выдаёт результат последовательно, как надо. Сброс временных переменных также в порядке.
Как можно устранить данную проблему?
Код:
function dos:turel/vrc/get_vec
function dos:turel/prc/rcd0/start
execute if score @s start = 1 const run summon arrow ^ ^1.6 ^1.1 {Tags:["temp"],life:1195s} (start - результат проверки pos-рейкаста)
execute if score @s start = 1 const run execute as @e[type=arrow,tag=temp,sort=nearest,limit=1] run function dos:turel/loop/fire/f13 (да, это 13я по счёту турель).
teleport @s ~ ~ ~ ~20 ~ (если задавать фейсингом (с помощью "^ ^ ^") - ничего не изменится)
function dos:turel/vrc/get_vec
function dos:turel/prc/rcd1/start
execute if score @s start2 = 1 const run summon arrow ^ ^1.6 ^1.1 {Tags:["temp"],life:1195s}
execute if score @s start2 = 1 const run execute as @e[type=arrow,tag=temp,sort=nearest,limit=1] run function dos:turel/loop/fire/f13
teleport @s ~ ~ ~ ~-40 ~
function dos:turel/vrc/get_vec
function dos:turel/prc/rcd2/start
execute if score @s start3 = 1 const run summon arrow ^ ^1.6 ^1.1 {Tags:["temp"],life:1195s}
execute if score @s start3 = 1 const run execute as @e[type=arrow,tag=temp,sort=nearest,limit=1] run function dos:turel/loop/fire/f13
scoreboard players operation @s clip -= 1 const (уменьшение обоймы)
scoreboard players set @s turtimer 0
(сброс таймера перезарядки).
Заранее большое спасибо!!