"Личный цикл" - Помогите

andrey67

Новичок
Регистрация
8 Июн 2023
Сообщения
21
Привет всем, для моей игры мне нужна такая штука, которая инвидидуально для каждого игрока, когда он умирает, считает от 5 до 0 и респавнит его. Потом он ещё раз умирает и его снова таким образом респавнит. Загвоздка в "инвидидуальности", если я буду делать так, что цикл просто считает и респавнит ВСЕХ кто умер, то моя игра будет дизбалансной. Как можно сделать этот волшебный цикл?
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
Привет всем, для моей игры мне нужна такая штука, которая инвидидуально для каждого игрока, когда он умирает, считает от 5 до 0 и респавнит его. Потом он ещё раз умирает и его снова таким образом респавнит. Загвоздка в "инвидидуальности", если я буду делать так, что цикл просто считает и респавнит ВСЕХ кто умер, то моя игра будет дизбалансной. Как можно сделать этот волшебный цикл?
Насколько я знаю, цикл запускается лично от лица каждого игрока. То есть как в джаве. Если что просто переменную с цифрой делай %player%Number.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
я хз, у меня это не работало
Что именно не работало-то? Насколько я знаю, запуск функций и циклов зависит от выборки: если выбрать "Все игроки" то цикл запустится от лица всех игроков(Вроде бы 1 игрок - 1 цикл, а не общий для всех). Так в чем проблема поставить в переменную с прибавлением %selected%(%player%? %default%? Решай)? Бтв стандартно переменные имеют модификатор static, да?

UPD: А в чем проблема после смерти "задержать" код поставив "Ждать"? И после 5 секунд воскрешать игрока... Кстати, тебе придётся использовать мой код на обнаружение смерти, либо же после смерти игрока ждать 1 тик, потом переводить его в гм 3 и через 5 секунд переводить назад в гм 0... Но легче сделать обнаружение смерти.
 

onn512

Эксперт
Регистрация
2 Май 2023
Сообщения
123
Привет всем, для моей игры мне нужна такая штука, которая инвидидуально для каждого игрока, когда он умирает, считает от 5 до 0 и респавнит его. Потом он ещё раз умирает и его снова таким образом респавнит. Загвоздка в "инвидидуальности", если я буду делать так, что цикл просто считает и респавнит ВСЕХ кто умер, то моя игра будет дизбалансной. Как можно сделать этот волшебный цикл?
Код:
Событие игрока(Вход):
    Начать цикл(time)
  
Событие игрока(Смерть игрока):
    Установить(%player%_respawn_cooldown = 5)
    Режим игры(Наблюдатель)
  
Цикл(time, 20 тиков)
    Выбрать игроков по сравнить число(%selected%_respawn_cooldown > 0)
    Отнять(%selected%_respawn_cooldown -= 1)
    Титл(%selected%_respawn_cooldown) [Выборка]
    Если переменная(%selected%_respawn_cooldown <= 0):
        Телепорт(Координаты точки возрождения) [Выборка]
        Режим игры(Выживание/Приключение) [Выборка]
 

andrey67

Новичок
Регистрация
8 Июн 2023
Сообщения
21
Код:
Событие игрока(Вход):
    Начать цикл(time)
 
Событие игрока(Смерть игрока):
    Установить(%player%_respawn_cooldown = 5)
    Режим игры(Наблюдатель)
 
Цикл(time, 20 тиков)
    Выбрать игроков по сравнить число(%selected%_respawn_cooldown > 0)
    Отнять(%selected%_respawn_cooldown -= 1)
    Титл(%selected%_respawn_cooldown) [Выборка]
    Если переменная(%selected%_respawn_cooldown <= 0):
        Телепорт(Координаты точки возрождения) [Выборка]
        Режим игры(Выживание/Приключение) [Выборка]
если умерло сразу несколько игроков, он будет считать по -2
Сообщение объединено:

Что именно не работало-то? Насколько я знаю, запуск функций и циклов зависит от выборки: если выбрать "Все игроки" то цикл запустится от лица всех игроков(Вроде бы 1 игрок - 1 цикл, а не общий для всех). Так в чем проблема поставить в переменную с прибавлением %selected%(%player%? %default%? Решай)? Бтв стандартно переменные имеют модификатор static, да?

UPD: А в чем проблема после смерти "задержать" код поставив "Ждать"? И после 5 секунд воскрешать игрока... Кстати, тебе придётся использовать мой код на обнаружение смерти, либо же после смерти игрока ждать 1 тик, потом переводить его в гм 3 и через 5 секунд переводить назад в гм 0... Но легче сделать обнаружение смерти.
в "Ждать" есть только 1 проблема, если ещё 1 игрок умрёт, то у первого не будет задержки, тоесть код после неё не сработает
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
если умерло сразу несколько игроков, он будет считать по -2
поэтому не надо слушать онна512
в "Ждать" есть только 1 проблема, если ещё 1 игрок умрёт, то у первого не будет задержки, тоесть код после неё не сработает
Тогда используй цикл.
Насколько я знаю, запуск функций и циклов зависит от выборки: если выбрать "Все игроки" то цикл запустится от лица всех игроков(Вроде бы 1 игрок - 1 цикл, а не общий для всех).
 

den107

Активный участник
Регистрация
2 Май 2023
Сообщения
22
Код:
Событие игрока(Вход):
    Начать цикл(time)
 
Событие игрока(Смерть игрока):
    Установить(%player%_respawn_cooldown = 5)
    Режим игры(Наблюдатель)
 
Цикл(time, 20 тиков)
    Выбрать игроков по сравнить число(%selected%_respawn_cooldown > 0)
    Отнять(%selected%_respawn_cooldown -= 1)
    Титл(%selected%_respawn_cooldown) [Выборка]
    Если переменная(%selected%_respawn_cooldown <= 0):
        Телепорт(Координаты точки возрождения) [Выборка]
        Режим игры(Выживание/Приключение) [Выборка]
вы че, шутите?
вот нормальный код на личный цикл, используя рекурсивные функции:

Событие игрока (вход) -> Установить переменную (%player%_online = 1) -> Вызвать функцию (playerloop)

Функция (playerloop) - > Если переменная (%player%_online равна 1) -> `последующий код, который будет выполняться` -> Выбрать игрока по умолчанию -> Ждать (время между повторным выполнением кода) -> Вызвать функцию (playerloop)

Событие игрока (выход) -> Установить переменную (%player%_online = 0)
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
Функция (playerloop) - > Если переменная (%player%_online равна 1) -> `последующий код, который будет выполняться` -> Выбрать игрока по умолчанию -> Ждать (время между повторным выполнением кода) -> Вызвать функцию (playerloop)
повторюсь, цикл работает без выборок. ну у меня работал без выборок. бтв где сурс млмода?
 

SirGromov

Новичок
Регистрация
14 Июн 2023
Сообщения
69
Бтв стандартно переменные имеют модификатор static, да?
Причем тут это? static - объявление константы, то есть, переменной, которая не меняется в ходе исполнения кода программы. Не козыряй знаниями, которых не имеешь, молодой человек.
Функция (playerloop) - > Если переменная (%player%_online равна 1) -> `последующий код, который будет выполняться` -> Выбрать игрока по умолчанию -> Ждать (время между повторным выполнением кода) -> Вызвать функцию (playerloop)
Собсна это как делать не нужно. Использование рекурсии недопустимо при условии, что цикл может длиться дольше, чем вызовется достаточно функций, чтобы достичь максимума глубины рекурсии.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
static - объявление константы
Разве константа не связка static и final? Насколько я знаю, static сделает переменную "общей" для всего класса. И про это мой вопрос, переменные в кодинге мл являются общими для всех, пока не поставишь %player%?
интернет:
"The static keyword means the value is the same for every instance of the class. The final keyword means once the variable is assigned a value it can never be changed. The combination of static final in Java is how to create a constant value."
 
Последнее редактирование:

SirGromov

Новичок
Регистрация
14 Июн 2023
Сообщения
69
Разве константа не связка static и final? Насколько я знаю, static сделает переменную "общей" для всего класса. И про это мой вопрос, переменные в кодинге мл являются общими для всех, пока не поставишь %player%?
интернет:
"The static keyword means the value is the same for every instance of the class. The final keyword means once the variable is assigned a value it can never be changed. The combination of static final in Java is how to create a constant value."
К статической функции/переменной ты не обратишься из нестатического класса, поэтому и не изменишь ее (если конечно не использовать инстанции). Знания без практики не значат ничего, увы.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
К статической функции/переменной ты не обратишься из нестатического класса, поэтому и не изменишь ее (если конечно не использовать инстанции).
Хм, интересно... В любом случае, спасибо за информацию.
 

den107

Активный участник
Регистрация
2 Май 2023
Сообщения
22
повторюсь, цикл работает без выборок. ну у меня работал без выборок. бтв где сурс млмода?
бтв сурс млмода я выложил
если хочешь посмотреть на кринж код мода, сурсы на гитхабе найдешь
Сообщение объединено:

Причем тут это? static - объявление константы, то есть, переменной, которая не меняется в ходе исполнения кода программы. Не козыряй знаниями, которых не имеешь, молодой человек.

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

Copter533

Участник
Регистрация
24 Июн 2023
Сообщения
42
Есть простое адекватное решение, оно походит на решение @onn512, но он не учёл что разрабы МЛ пока писали выборки были в необычном состоянии и поэтому условия в выборке работают не корректо и их нельзя использовать (результат будет не предсказуемым)

Вот моё решение (Код онна, но исправленный)
Форматирование (BB-код):
Событие игрока(Вход):
    Начать цикл(timer)
 
Событие игрока(Смерть игрока):
    Установить(%player%_respawn_cooldown = 6)
    Режим игры(Наблюдатель)
    Титл("%cВЫ УМЕРЛИ")
 
Цикл(timer, 20 тиков)
    Выбрать игроков по условию, сравнить число (%selected%_respawn_cooldown > 0)
    Отнять(%selected%_respawn_cooldown -= 1)
    Деление(%selected%-tone = %selected%_respawn_cooldown / 5)
    Вычитание(%selected%-tone = 1 - %selected%-tone - (-1))
    Объединение текстов(%selected%-temp = "Возрождение через" + %selected%_respawn_cooldown + "сек." ; Раздел. пробелом)
    Титл("%cВЫ УМЕРЛИ", %selected%-temp, 21, 0, 0) [Выборка]
    Звук("block.note.chime", Тональность = %selected%-tone)

    Выбрать игроков по условию, переменная равна(%selected%_respawn_cooldown == 0):
    Установить(%selected%_respawn_cooldown = -1)
    Телепорт(Координаты точки возрождения)
    Режим игры(Выживание/Приключение)
    Титл("&eВЫ СНОВА ЖИВЫ!", "", 10, 0, 10)
    Звук("entity.player.levelup")

Также прилагаю ссылку на демонстрацию (Посмотри там есть ещё 1 вариант для чётких ребят):
 

Copter533

Участник
Регистрация
24 Июн 2023
Сообщения
42
BONUS
Код на запрет наблюдателем выпадать из мира (без видео):

Форматирование (BB-код):
Событие игрока, Перемещение:
    Получить координату места ( %player%-y = Y из Местоположение игрока )
    Если переменная (%player%-y == 0) {
        Телепортировать ( Местоположение игрока )
        Запустить вверх (1)
    }
Сообщение объединено:

К статической функции/переменной ты не обратишься из нестатического класса, поэтому и не изменишь ее (если конечно не использовать инстанции). Знания без практики не значат ничего, увы.
ПРОСНИСЬ!!! Ты на МЛ, тут не код а ^_^ в рот ^_^!
 

andrey67

Новичок
Регистрация
8 Июн 2023
Сообщения
21
Фига тут дескуссия, но я сделал респавн по другому, поэтому уже не нужно
 
Сверху