[ГАЙД] Создание огненных колец вокруг игрока (х2)

GromoverGets

Эксперт
Регистрация
2 Май 2023
Сообщения
214
Итак, недавно я наткнулся на тему, где человек кодом на креативе хотел сделать подобные партиклы. К сожалению я не нашёл способа повернуть эти два кольца на 45 градусов вокруг своей оси и сделать 4, поэтому будет только 2. Если у кого-то есть вариант как это сделать - прошу в ответы на тему.
maxresdefault-jpg.7778

Код состоит из трёх строчек кода, где первая - активатор, а остальные две - создатели для партиклов.

Строка #1 - Активатор:
Код:
[Событие игрока] Событие чата {
    [Если игрок (Имя равно)] Ваш ник {
        [Если игрок (Сообщение равно)] Ваша команда {
            [Установить (=)] %player% mobHeight = 1.8
            [Установить (/)] %player% radius = %player% mobHeight / 2
            [Уст Знач В Мест] %player% center = 🍎 Текущее местоположение, Y += %player% radius
            [Установить (=)] %player% i = 0
            [Вызвать функцию] particlesRing.XY
        }
    }
}

В этой строке мы устанавливаем базовые значения, вроде радиуса или высоты круга. Здесь mobHeight взято за 1.8, т.к. это примерная высота игрока в блоках. Партиклы будут создавать кольцо от %player% center, %player% i будет являться счётчиком угла.

Строка #2 - Создание первого круга:

Код:
[Функция] particlesRing.XY {
    Ждать (0 тиков)
    [Если переменная] %player% i < 360 {
        [Установить (Радианы)] %player% angle = %player% i
        [Установить (Косинус)] %player% angleCos = %player% angle
        [Установить (Синус)] %player% angleSin = %player% angle
        [Установить (*)] %player% x = %player% angleCos * %player% radius
        [Установить (*)] %player% y = %player% angleSin * %player% radius
        [Уст Знач В Мест] %player% spawnLoc = %player% center; X += %player% x; Y += %player% y
        [Частица] %player% spawnLoc, Количество=1, Частица=ВашаЧастица, Скорость=0
        [Установить (+=)] %player% i += 10
        [Вызвать функцию] particlesRing.XY
    } Иначе {
        [Установить (=)] %player% i = 0
        [Вызвать функцию] particlesRing.YZ
    }
}

В этой строке не буду долго распинаться, как и в следующей, ибо здесь много тригонометрии. Кому слишком интересно - гугл в одну часть экрана, код в другую.

Строка #3 - Создание перпендикулярного круга:
Код:
[Функция] particlesRing.YZ {
    Ждать (0 тиков)
    [Если переменная] %player% i < 360 {
        [Установить (Радианы)] %player% angle = %player% i
        [Установить (Косинус)] %player% angleCos = %player% angle
        [Установить (Синус)] %player% angleSin = %player% angle
        [Установить (*)] %player% z = %player% angleCos * %player% radius
        [Установить (*)] %player% y = %player% angleSin * %player% radius
        [Уст Знач В Мест] %player% spawnLoc = %player% center; Z += %player% z; Y += %player% y
        [Частица] %player% spawnLoc, Количество=1, Частица=ВашаЧастица, Скорость=0
        [Установить (+=)] %player% i += 10
        [Вызвать функцию] particlesRing.YZ
    }
}

Практически идентичная предыдущей строка с заменой названия функции, X -> Z и отсутствием иначе с вызовом след. функции.
Тем не менее, результат:
1719521945916.png1719521966345.png
 
Последнее редактирование:

astr34

Активный участник
Регистрация
16 Июл 2023
Сообщения
18
К сожалению я не нашёл способа повернуть эти два кольца на 45 градусов и сделать 4, поэтому будет только 2. Если у кого-то есть вариант это сделать - прошу в ответы на тему.

для отрисовки повернутого круга на K градусов придется считать и %player% x, и %player% z.
sin(K) и cos(K) - множители проекций на оси x и z круга, повернутого вокруг оси Y на K градусов

%player% x = sin(K) * %player% angleCos * %player% radius
%player% z = cos(K) * %player% angleCos * %player% radius

чтобы угол считался от другой оси, можно поменять sin(K) и cos(K) местами
 

GromoverGets

Эксперт
Регистрация
2 Май 2023
Сообщения
214
для отрисовки повернутого круга на K градусов придется считать и %player% x, и %player% z.
sin(K) и cos(K) - множители проекций на оси x и z круга, повернутого вокруг оси Y на K градусов

%player% x = sin(K) * %player% angleCos * %player% radius
%player% z = cos(K) * %player% angleCos * %player% radius

чтобы угол считался от другой оси, можно поменять sin(K) и cos(K) местами
Проверю чуть позже, но визуально мне кажется, что это будет создавать горизонтальное кольцо, так как Y частиц не меняется, хотя если смотреть на скриншот нам нужно повернуть их скорее на 45° вокруг своей оси и далее уже работать с перпендикуляром, меняя формулу вычисления x на z
 

astr34

Активный участник
Регистрация
16 Июл 2023
Сообщения
18
Проверю чуть позже, но визуально мне кажется, что это будет создавать горизонтальное кольцо, так как Y частиц не меняется, хотя если смотреть на скриншот нам нужно повернуть их скорее на 45° вокруг своей оси и далее уже работать с перпендикуляром, меняя формулу вычисления x на z
не, я написал только то, что нужно изменить в коде, весь остальной код остается (в т.ч и изменение Y)
 

GromoverGets

Эксперт
Регистрация
2 Май 2023
Сообщения
214
не, я написал только то, что нужно изменить в коде, весь остальной код остается (в т.ч и изменение Y)
В целом круг поворачивается, но протестировать я не смог из-за лимита вызова цепочки действий (801/800), а при ждать 1 тик они появляются не так быстро
 

astr34

Активный участник
Регистрация
16 Июл 2023
Сообщения
18
В целом круг поворачивается, но протестировать я не смог из-за лимита вызова цепочки действий (801/800), а при ждать 1 тик они появляются не так быстро
по идее, если угол поворота постоянный, то это всего +1 операция. если i сделать чуть больше, должно работать. но потреблять все равно много будет, можно рассчитать и запихать относит. местоположения спавна в массив, по нему проходить и спавнить частицы, а когда индекс будет делиться, например, на 50, ждать тик.
 
Сверху