Как сделать урон от линии частиц?

KOHCEPBAHT

Новичок
Регистрация
28 Май 2023
Сообщения
4
Я делаю нормальное оружие и столкнулся с этой проблемой, я не знаю как частица может наносить урон. В теории можно выделить область от начала до целевого блока и если игрок стоит рядом, то урон, но как?
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
551
Я делаю нормальное оружие и столкнулся с этой проблемой, я не знаю как частица может наносить урон. В теории можно выделить область от начала до целевого блока и если игрок стоит рядом, то урон, но как?
Ох, дружище, не в ту тему ты полез. Я еще год назад делал подобное, и у меня все стояло на цикличной функции. Я проверял каждый блок от игрока и до местоположения целевого блока. Насчет выделения области... А как ты хочешь это сделать? "Если стоит рядом" идет через радиус, он не подойдет

UPD: А, понял, что ты делаешь огнестрельное оружие. Я делал типа лазерной пушки, то есть была одна линия частиц. Как сделать тебе... Ну можно попробовать костыль со снежком/яйцом и спавнить частицы так, чтобы снежок не было видно. Но тогда тебе надо очень быстро вызывать функцию, а это приведет сам понимаешь к чему. А как ты вообще собираешься перемещать "пулю"? Циклом добавлять +1 к координате и создавать новую частицу по этим кордам? Тогда будет "рваная" анимация. Но если ты все таки собираешься вот так вот перещать пулю - просто проверяешь координату с пулей, находится ли там игрок. Это делаешь через "Находится рядом"(Выборкой), ты правильно подумал. С числами радиуса поэкспериментируй, может нецелые надо.

А еще ты столкнешься с фантастической проблемой: если игрок смотрит на 220 блок, а сам находится на 210 - надо прибавлять к координате 1, чтобы дойти до 220. А если блок на 200 - ты должен наоборот отнимать от 210 по 1. И так тебе надо проверки на x в обе стороны и на z в обе стороны) А можно и на Y запилить, ну так, на всякий.

UPD2: Молодец, что попытался что-то придумать.
 
Последнее редактирование:

SashaLab7

Эксперт
Регистрация
3 Май 2023
Сообщения
95
Я делаю нормальное оружие и столкнулся с этой проблемой, я не знаю как частица может наносить урон. В теории можно выделить область от начала до целевого блока и если игрок стоит рядом, то урон, но как?
Немного другой путь к решению этой проблемы. Оружия работают как и векторные (чуть кривее), только код в 2-3 раза короче. (Поищите баги, вполне могут быть)

Код:

Функция (blast) → Установить значение в местоположение (%player%_A) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Установить значение в местоположение (%player%_B) (Местоположение целевого блока) () () (0.5) <Относительный +=> (0.5) <Относительный +=> (0.5) <Относительный +=> → Создать линию из частиц (Частица по вашему вкусу) (%player%_A) (%player%_B) → Получить расстояние между 2 местоположениями (%player%_vector_width) (%player%_A) (%player%_B) → Отнять (%player%_vector_width) - (1) → Выбрать игроков по имя НЕ равно (%default%) → Установить значение в местоположение (%selected%_B) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Получить расстояние между 2 местоположениями (%selected%_place_width.a) (%player%_A) (%selected%_B) → Получить расстояние между 2 местоположениями (%selected%_place_width.b) (%selected%_B) (%player%_B) → Установить + (%selected%_summ_round) (%selected%_place_width.a) (%selected%_place_width.b) → Установить - (%selected%_summ) (%selected%_summ_round) (%player%_vector_width; 0.6) → Выбрать игроков по сравнить числа -0.5 =< (%selected%_summ) <= 0.5 → [Если игрок имя НЕ равно (%default%) {Выборка} → Урон (1) {Выборка}]

Значения:

%player%_A; %player%_B; %player%_vector_width; %selected%_B; %selected%_place_width.a; %selected%_place_width.b; %selected%_summ_round; %selected%_summ - Динамические переменные (Не сохранены)

В тексте код выглядит ужасно, вот скрин кода:
1686840177875.png

Чтобы совершить сам выстрел, нужно вложить функцию, пример:
1686840420694.png
Код можно доработать, добавив аргументы частиц и урона при выстреле, это очень просто.
 

R700LC

Новичок
Регистрация
8 Дек 2023
Сообщения
1
Немного другой путь к решению этой проблемы. Оружия работают как и векторные (чуть кривее), только код в 2-3 раза короче. (Поищите баги, вполне могут быть)

Код:

Функция (blast) → Установить значение в местоположение (%player%_A) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Установить значение в местоположение (%player%_B) (Местоположение целевого блока) () () (0.5) <Относительный +=> (0.5) <Относительный +=> (0.5) <Относительный +=> → Создать линию из частиц (Частица по вашему вкусу) (%player%_A) (%player%_B) → Получить расстояние между 2 местоположениями (%player%_vector_width) (%player%_A) (%player%_B) → Отнять (%player%_vector_width) - (1) → Выбрать игроков по имя НЕ равно (%default%) → Установить значение в местоположение (%selected%_B) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Получить расстояние между 2 местоположениями (%selected%_place_width.a) (%player%_A) (%selected%_B) → Получить расстояние между 2 местоположениями (%selected%_place_width.b) (%selected%_B) (%player%_B) → Установить + (%selected%_summ_round) (%selected%_place_width.a) (%selected%_place_width.b) → Установить - (%selected%_summ) (%selected%_summ_round) (%player%_vector_width; 0.6) → Выбрать игроков по сравнить числа -0.5 =< (%selected%_summ) <= 0.5 → [Если игрок имя НЕ равно (%default%) {Выборка} → Урон (1) {Выборка}]

Значения:

%player%_A; %player%_B; %player%_vector_width; %selected%_B; %selected%_place_width.a; %selected%_place_width.b; %selected%_summ_round; %selected%_summ - Динамические переменные (Не сохранены)

В тексте код выглядит ужасно, вот скрин кода:

Чтобы совершить сам выстрел, нужно вложить функцию, пример:
Код можно доработать, добавив аргументы частиц и урона при выстреле, это очень просто.
это я тот R700LC ты говорил написать на форуме,вот я и написал
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
358
Немного другой путь к решению этой проблемы. Оружия работают как и векторные (чуть кривее), только код в 2-3 раза короче. (Поищите баги, вполне могут быть)

Код:

Функция (blast) → Установить значение в местоположение (%player%_A) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Установить значение в местоположение (%player%_B) (Местоположение целевого блока) () () (0.5) <Относительный +=> (0.5) <Относительный +=> (0.5) <Относительный +=> → Создать линию из частиц (Частица по вашему вкусу) (%player%_A) (%player%_B) → Получить расстояние между 2 местоположениями (%player%_vector_width) (%player%_A) (%player%_B) → Отнять (%player%_vector_width) - (1) → Выбрать игроков по имя НЕ равно (%default%) → Установить значение в местоположение (%selected%_B) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Получить расстояние между 2 местоположениями (%selected%_place_width.a) (%player%_A) (%selected%_B) → Получить расстояние между 2 местоположениями (%selected%_place_width.b) (%selected%_B) (%player%_B) → Установить + (%selected%_summ_round) (%selected%_place_width.a) (%selected%_place_width.b) → Установить - (%selected%_summ) (%selected%_summ_round) (%player%_vector_width; 0.6) → Выбрать игроков по сравнить числа -0.5 =< (%selected%_summ) <= 0.5 → [Если игрок имя НЕ равно (%default%) {Выборка} → Урон (1) {Выборка}]

Значения:

%player%_A; %player%_B; %player%_vector_width; %selected%_B; %selected%_place_width.a; %selected%_place_width.b; %selected%_summ_round; %selected%_summ - Динамические переменные (Не сохранены)

В тексте код выглядит ужасно, вот скрин кода:

Чтобы совершить сам выстрел, нужно вложить функцию, пример:
Код можно доработать, добавив аргументы частиц и урона при выстреле, это очень просто.
в своё время такие и делал, только после добавления тригонометрии сделал нормальный рейкаст
 

finalER2000

Активный участник
Регистрация
29 Май 2023
Сообщения
13
Немного другой путь к решению этой проблемы. Оружия работают как и векторные (чуть кривее), только код в 2-3 раза короче. (Поищите баги, вполне могут быть)

Код:

Функция (blast) → Установить значение в местоположение (%player%_A) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Установить значение в местоположение (%player%_B) (Местоположение целевого блока) () () (0.5) <Относительный +=> (0.5) <Относительный +=> (0.5) <Относительный +=> → Создать линию из частиц (Частица по вашему вкусу) (%player%_A) (%player%_B) → Получить расстояние между 2 местоположениями (%player%_vector_width) (%player%_A) (%player%_B) → Отнять (%player%_vector_width) - (1) → Выбрать игроков по имя НЕ равно (%default%) → Установить значение в местоположение (%selected%_B) (Текущее местоположение) () () () (Y=1) <Относительный +=> () → Получить расстояние между 2 местоположениями (%selected%_place_width.a) (%player%_A) (%selected%_B) → Получить расстояние между 2 местоположениями (%selected%_place_width.b) (%selected%_B) (%player%_B) → Установить + (%selected%_summ_round) (%selected%_place_width.a) (%selected%_place_width.b) → Установить - (%selected%_summ) (%selected%_summ_round) (%player%_vector_width; 0.6) → Выбрать игроков по сравнить числа -0.5 =< (%selected%_summ) <= 0.5 → [Если игрок имя НЕ равно (%default%) {Выборка} → Урон (1) {Выборка}]

Значения:

%player%_A; %player%_B; %player%_vector_width; %selected%_B; %selected%_place_width.a; %selected%_place_width.b; %selected%_summ_round; %selected%_summ - Динамические переменные (Не сохранены)

В тексте код выглядит ужасно, вот скрин кода:

Чтобы совершить сам выстрел, нужно вложить функцию, пример:
Код можно доработать, добавив аргументы частиц и урона при выстреле, это очень просто.
кстати вот я сижу и думаю как выяснить что пуля попала именно в блок, тоесть можно ли на конце линии сделать взрыв
 
Сверху