Вы используете устаревший браузер

Ваш браузер устарел, и поэтому некоторые важные функции этого сайта могут не работать. Пожалуйста, обновитесь до более современного браузера. :(

Система турелей. 1.14.4. Датапаки. Турель-дробовик.

Датапаки 1.14.4
    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Всем доброго времени суток! У меня возникла проблема с организацией функции для турели-дробовика:
    Дробовик стреляет несколькими патронами, при этом стрелы спавнятся только в том случае, если луч 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
    (сброс таймера перезарядки).

    Заранее большое спасибо!!

    #1 | 12 апреля 2021 - 18:42

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    .
    Сообщение отредактировал forkstudio 14 апреля 2021 - 08:42

    #2 | 13 апреля 2021 - 13:46

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    .
    Сообщение отредактировал forkstudio 14 апреля 2021 - 08:43

    #3 | 14 апреля 2021 - 08:42

    Caman86
    не в сети

    ТруЪ Олдфаги-с

    Звание: Чоткий паря

    Трофеев: 12

    Сообщений: 1943

    Симпатий: 329

    forkstudio,
    Если я не тупой и не слепой, то ты не поворачиваешь сами стрелы. Там везде ^ ^1.6 ^1.1, без учёт смещения координат.

    Мои сборки:
    MystMag (1.12.2)
    ReachForTheStars (1.12.2)
    TechGears (1.16.5)

    #4 | 14 апреля 2021 - 12:36

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    А причём тут стрелы? Заданием моушена стрелам занимаются функции fire, а в этой функции они лишь спавнятся. ^ ^1.6 ^1.1 - это лишь настройка высоты и дальности спавна, чтобы стенд не мешал полёту стрелы.
    Как только доберусь домой, прикреплю визуализацию проблемы, я, вероятно, непонятно описал, скидав всё, как обычно, в одно предложение.

    #5 | 14 апреля 2021 - 13:17

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    [Визуализация проблемы]
    Все три positioned рейкаста отображают луч в одной линии, при повороте между ними.


    Ещё раз протестировал на последовательность - всё в порядке с задержками. Вот только стрелы летят криво, как будто стенд сначала разворачивает на 20 градусов, потом прямо, а затем на -40. Но я отключил слежку турели за мобом. И она начала каждую итерацию смещать взгляд на те сраные -40 градусов, вообще игнорируя первое смещение, хоть туда 40 (должна стоять на месте), хоть 100 градусов введи. Самый прикол в том, что если появляется моб, то стрелы летят по всем трём траекториям, учитывая значения всех поворотов. И снова какая-то непонятная дичь, учитывая предыдущий свой "опыт", самое время просто удалить функцию и написать заново.

    #6 | 14 апреля 2021 - 14:42

    Caman86
    не в сети

    ТруЪ Олдфаги-с

    Звание: Чоткий паря

    Трофеев: 12

    Сообщений: 1943

    Симпатий: 329

    forkstudio,
    А что тебе надо-то? Я прост не впираю что ты хочешь сделать.

    Мои сборки:
    MystMag (1.12.2)
    ReachForTheStars (1.12.2)
    TechGears (1.16.5)

    #7 | 14 апреля 2021 - 18:07

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    Турель-дробовик с горизонтальным разбросом (перед каждым следующим выстрелом турель-дробовик поворачивается на некоторый градус). Но чтобы он не стрелял в кого не надо, по пути каждой стрелы нужно пройтись positioned-рейкастом, который решает, спавнить её, либо не спавнить. Проще говоря - есть на пути моб - спавним стрелу, нету моба - не спавним. Есть моб, но рядом игрок - не спавним.
    Сообщение отредактировал forkstudio 15 апреля 2021 - 03:26

    #8 | 15 апреля 2021 - 03:20

    Caman86
    не в сети

    ТруЪ Олдфаги-с

    Звание: Чоткий паря

    Трофеев: 12

    Сообщений: 1943

    Симпатий: 329

    forkstudio,
    И что работает не так, как запланировано и что конкретно не так?

    Мои сборки:
    MystMag (1.12.2)
    ReachForTheStars (1.12.2)
    TechGears (1.16.5)

    #9 | 15 апреля 2021 - 10:33

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    описано же подробно в самом первом сообщении

    #10 | 15 апреля 2021 - 10:40

    Caman86
    не в сети

    ТруЪ Олдфаги-с

    Звание: Чоткий паря

    Трофеев: 12

    Сообщений: 1943

    Симпатий: 329

    forkstudio,
    После черт знает какого перечитывания понял. Ты разбрасываешь(телепортируешь) стрелу в любом случае - тебе нужно поставить условие телепорта. Тип не просто телепорт, а execute if score... teleport.
    forkstudio нравится это сообщение.

    Мои сборки:
    MystMag (1.12.2)
    ReachForTheStars (1.12.2)
    TechGears (1.16.5)

    #11 | 15 апреля 2021 - 14:43

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    Наверное под "стрелой" имеется в виду стенд (турель). (Функция запускается относительно этого стенда, и имеет свой отдельный "запускатор", который при отсутсвии поблизости мобов эту функцию вообще запускать не будет)
    А как я проверю, есть в том направлении цель (моб), если я турель не буду поворачивать?
    Однако, спасибо за идею, я попробую сопоставить ротейшен стенда и positioned смещение для каждого рейкаста, чтобы они даже без поворота проверяли условия в нужных направлениях. Костыли, но что поделать.
    Сообщение отредактировал forkstudio 15 апреля 2021 - 16:31

    #12 | 15 апреля 2021 - 16:28

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    Оно работает! Но есть проблемы с взаимодействием facing'а и rotation'а. В дробной части ротейшена после изменения взгляда какой-то хаос, хоть генератор рандомных чисел делай. От поворота самого стенда откажусь, сделаю сразу отдельные функции и для получения вектора, с вычетом градуса внутри их самих. Но так и не понял, почему первоначальный вариант не работает. axez
    Сообщение отредактировал forkstudio 15 апреля 2021 - 17:46

    #13 | 15 апреля 2021 - 17:45

    Caman86
    не в сети

    ТруЪ Олдфаги-с

    Звание: Чоткий паря

    Трофеев: 12

    Сообщений: 1943

    Симпатий: 329

    forkstudio,
    Ты после проверки на то, где сущность, поворачивал стенд в любом случае, даже если сущность была в том же месте. Условие помогло сделать так, что если сущность в том же месте, ты не поворачиваешь стенд. Вот как-то так.

    Мои сборки:
    MystMag (1.12.2)
    ReachForTheStars (1.12.2)
    TechGears (1.16.5)

    #14 | 16 апреля 2021 - 02:14

    forkstudio
    не в сети

    Посетители

    Звание: Пользователь, просто пользователь

    Трофеев: 5

    Сообщений: 116

    Симпатий: 12

    Caman86,
    Все равно не понял. Стенд то в любом случае поворачивается. А если там есть сущность - то происходит выстрел, нет - не происходит.
    По сути, весь код имеет вид:

    Рассчитать вектор
    Проверить цель
    Если цель обнаружена: выстрел
    Поворот
    Рассчитать вектор
    Проверить цель
    Если цель обнаружена: выстрел
    Поворот
    Рассчитать вектор
    Проверить цель
    Если цель обнаружена: выстрел
    Уменьшение обоймы
    Сброс таймера перезарядки

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

    #15 | 16 апреля 2021 - 03:55

Статистика форума

Создано тем
14345
Написано сообщений
871722
Пользователей
377814
Новый участник
Unknown Man_2

Администраторы | Главные редакторы | Модератор | Дедушки | Журналисты | HENTAI BOY | Goldфаги | Журналисты-олдфаги | ТруЪ Олдфаги-с | ТруЪ Плагинщик | Олдфаги | true Художник | Модератор бездны | Картоделы | XXXL ПХЛ | Просто хорошие люди | Посетители | Новички

Последние сообщения с форума

Название темы
Статистика
Последнее сообщение

Просмотров: 92

Ответов: 1

Просмотров: 85

Ответов: 1

Просмотров: 254

Ответов: 7