Как сделать код, на ожидание игры

Lavas653

Активный участник
Регистрация
3 Май 2023
Сообщения
30
Мне надо сделать когда игрок пкм по придмету "начать игру" эму этот предмет изменился на "ожидание игры" и надо сделать чтобы было 2 игроков а когда "1 игрок" игра не запускалась а когда есть "2 игрок" игра запускалась 10 секунд до старта и тп (и набор игрок без лимитный)
 
Последнее редактирование:

TimePlay

Новичок
Регистрация
3 Май 2023
Сообщения
91
ну предметы можно сделать по простому:
Событие игрока (правый клик) > если игрок держит предмет (вступить в игру) [установить предметы (ожидание иггры) > Установить переменную (%default%_countPlayersWaiting = 0) > Выбрать игроков по условию (имеет предмет (ожидание игры)) > Прибавить (%default%_countPlayersWaiting, 1) > Выбрать игрока по умолчанию > написать в чат сообщение ("&a%default% &fвступил в очередь на игру. &7(",%default%_countPlayersWaiting,"&7/2)"]

и технологии запуска игр у всех очень разные! я делаю через один надёжный цикл и переменную game
Цикл (game, 20) > Установить переменную (playersInWaiting = 0), Установить переменную (playersInGame = 0) > Выбрать игроков по условию (имеет предмет (ожидание игры)) > Прибавить (playersInWaiting, 1) > Выбрать игроков по условию (имеет предмет (ну какой-то предмет для игры)) > Прибавить (playersInGame, 1) > Выбрать случайного игрока >
Если переменная (game = 0 то есть ожидание 2 игроков) [Если переменная (playersInWaiting >= 2)[ Установить переменную (game = 1) > Установить переменную (startTimer = 10) > Написать в чат ("Игра началась!!!") (все)] ]
Если переменная (game = 1 то есть уже набор игроков) [ Если переменная (playersInWaiting >= 2) [ Если переменная (startTimer >= 1) [Написать в чат ("до начала игры ", startTimer) > Отнять (startTimer, 1)] иначе [НАЧАТЬ ИГРУ, Установить переменную (game = 2), Установить переменную (gameTimer = 120)] ] иначе [
ЗАКОНЧИТЬ ИГРУ (мало игроков до начала) > Установить переменную (game = 0)]
Если переменная (game = 2 то есть уже сама игра) [ Если переменная (playerInGame) >= 2 [Если переменная gameTimer >= 1 [Показать в экшнбаре (gameTimer) > Отнять (gameTimer, 1)] иначе [ЗАКОНЧИТЬ ИГРУ (таймер закончился), Установить переменную (game = 0)] ] иначе [ЗАКОНЧИТЬ ИГРУ (игроков нет), Установить переменную (game = 0)] ]


объяснение: цикл game, тиков 20, узнаёт сколько игроков в ожидании playerInWaiting и сколько в игре playersInGame, дальше проверяет игру
если игра (0) ждёт двух игроков для старта, то если игроков в ожидании больше или равно двух, то начинаем полностью ждать игроков, делаем game на 1, и таймер на startTimer 10
дальше если игра (1) уже идёт набор, то если игроков в ожидании больше или равно двух, и если таймер старта не закончился, то отнимаем таймер. Если же таймер закончился, тогда начинаем игру. Однако если же игроков в ожидании меньше двух, то послать его и переключиться на game = 0, потомучто недостаточно игроков.
если игра (2) и есть игроки и есть таймер, то отнимаем таймер. Если таймер закончился, то заканчиваем игру. Если игроков вообще нет, то закначиваем игру. И переключаемся на game = 0.

однако начать игру и закончить игру сделаешь уже сам, ну функциями. там надо будет у тех кого есть предмет (вступить в игру) убрать этот предмет, у тех кого предмет (ожидание игры) то телепортировать, дать ресурсы и убрать этот предмет. ну и тех кто в игре когда надо то телепортировать очистить и всё такое..

если сможешь, то попробуй этот код сверху! возможно тебе подскажут снизу что-то более простое.. наверное..
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
Шо то ты тут намудрил, @TimePlay. Начнём код с начала:
ну предметы можно сделать по простому:
Событие игрока (правый клик) > если игрок держит предмет (вступить в игру) [установить предметы (ожидание иггры) > Установить переменную (%default%_countPlayersWaiting = 0) > Выбрать игроков по условию (имеет предмет (ожидание игры)) > Прибавить (%default%_countPlayersWaiting, 1) > Выбрать игрока по умолчанию > написать в чат сообщение ("&a%default% &fвступил в очередь на игру. &7(",%default%_countPlayersWaiting,"&7/2)"]
Можно было бы сделать проще: просто прибавлять +1 к переменной когда игрок нажимает на "Вступить в игру". Так как мы заменяем ему предмет - два раза войти он не сможет. То есть вместо твоих костыльных выборок и прибавлений, можно обойтись одним блоком. Ну и я ещё делал если, то есть в "Если игрок держит предмет" я ставил "Если значение playersInGame = 5" и там я начинал выполнение цикла с отсчётом до начала игры. Особо пока что не читал твой цикл, но я делаю как: у меня единый таймер(ну так как задержка на 20 тиков), и я просто делаю сколько нужно итераций: допустим, отсчёт 15 секунд, я ставлю в этом "Если значение playerInGame = 5" "установить значение переменной iter = 16", и в цикле делаю "Если iter < 1 -> останавливаем цикл"
и технологии запуска игр у всех очень разные! я делаю через один надёжный цикл и переменную game
В этом ты прав, каждый делает по своему, но хотел бы написать более короткий и лёгкий для понимая способ.
Цикл (game, 20) > Установить переменную (playersInWaiting = 0), Установить переменную (playersInGame = 0) > Выбрать игроков по условию (имеет предмет (ожидание игры)) > Прибавить (playersInWaiting, 1) > Выбрать игроков по условию (имеет предмет (ну какой-то предмет для игры)) > Прибавить (playersInGame, 1) > Выбрать случайного игрока >
Если переменная (game = 0 то есть ожидание 2 игроков) [Если переменная (playersInWaiting >= 2)[ Установить переменную (game = 1) > Установить переменную (startTimer = 10) > Написать в чат ("Игра началась!!!") (все)] ]
Если переменная (game = 1 то есть уже набор игроков) [ Если переменная (playersInWaiting >= 2) [ Если переменная (startTimer >= 1) [Написать в чат ("до начала игры ", startTimer) > Отнять (startTimer, 1)] иначе [НАЧАТЬ ИГРУ, Установить переменную (game = 2), Установить переменную (gameTimer = 120)] ] иначе [
ЗАКОНЧИТЬ ИГРУ (мало игроков до начала) > Установить переменную (game = 0)]
Если переменная (game = 2 то есть уже сама игра) [ Если переменная (playerInGame) >= 2 [Если переменная gameTimer >= 1 [Показать в экшнбаре (gameTimer) > Отнять (gameTimer, 1)] иначе [ЗАКОНЧИТЬ ИГРУ (таймер закончился), Установить переменную (game = 0)] ] иначе [ЗАКОНЧИТЬ ИГРУ (игроков нет), Установить переменную (game = 0)] ]
То есть ты делаешь те же самые костыльные выборки на ~10 блоков кода... Почему бы просто не сделать с моими итерациями "Присвоить значение переменной -= iter", затем выводить в чат/экшнбар/титл значение iter и когда iter > 1(То есть таймер истек) - начинать игру? Насчет того, что 1 игрок может выйти из очереди - делаем при выходе игрока остановку цикла.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
538
Наоборот, iter < 1 (такое же для остановки цикла есть, туда запихнуть тоже можно, наверно)
Да да, спасибо за исправление.
Сначала нужно будет вычитать из playerInGame 1, а потом ставить условие playerInGame < 5 тогда.
Можно в цикле поставить условие еще. В любом случае, это не ошибка, я специально не писал про условие, потому что код итак понятный и до него можно догадаться.
 

Ksigma

Участник
Регистрация
21 Авг 2024
Сообщения
7
Да да, спасибо за исправление.

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