Jump to content
Admin

Заказ №30: "Маршрутизация метро"

Recommended Posts

Основное направление разработки на данный момент:

Описание на GitHub | Вспомогательная таблица

 

 


 

 

Добавил новый заказ.
Планируется передать проработку маршрутов и написание конкретных команд - на аутсорс игрокам.

 

Оплата за схему развязок = 6 стеков изумрудных блоков

Оплата за подготовку отдельной развязки = 1 стек изумрудных блоков

 

Список станций тут.

 

В качестве награды, как минимум - CSLf8v7.png

 

Схема линий, станций и развязок:

efkBknA.jpg

 

 

Развязки, маршруты, команды:

Спойлер

 

При текущем подходе [для экономии командных блоков при проверке проезжающего игрока] используется "маршрут по умолчанию = на спаун": это означает, что все стрелки по умолчанию ведут на спаун.

Из-за этого необходимо выполнять сброс стрелки после проезда игрока.

 

 

При подготовке команд:

  • сначала идут команды в командных блоках: последовательность - сверху (от нажимных рельс) вниз
  • в конце должна быть команда сброса конкретной стрелки в исходное положение

 

Коды направлений рельс:

  • 0: Север-Юг (Юг-Север)
  • 1: Запад-Восток (Восток-Запад).
  • 6: Юг-Восток (Восток-Юг).
  • 7: Юг-Запад (Запад-Юг).
  • 8: Север-Запад (Запад-Север).
  • 9: Север-Восток (Восток-Север).

 

Последний вариант с деревом квадрантов

Спойлер

 

Про КБ выдачи названия станции в чат и ассоциации номер -> адрес в отдельную группу КБ  тут

Список развязок и станций с адресами  тут

Схема дерева квадрантов и станций и развязок на нем  тут

 

У нас 61 развязка и 43 станции (не считая новый спаун)

Глубина вложенности дерева - 5 уровней.

Но я немного читерил - те развязки, которые находятся близко, но у самой границы квадранта, я разносил в разные ячейки, дабы не увеличивать глубину дерева. 

 

C1Q34ep.png

Описание команд развязки тут

 

 

 

 

Старый вариант

Спойлер

 

 

1b8YBqs.jpg

 

Стрелка 1



/execute @p[r=20,score_MetroSt_min=2,score_MetroSt=2] ~ ~ ~ /setblock 44 33 -100 rail 0
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=15] ~ ~ ~ /setblock 44 33 -100 rail 0
/execute @p[r=20,score_MetroSt_min=24,score_MetroSt=26] ~ ~ ~ /setblock 44 33 -100 rail 0
/execute @p[r=20,score_MetroSt_min=32,score_MetroSt=42] ~ ~ ~ /setblock 44 33 -100 rail 0

/setblock 44 33 -100 rail 7 

Стрелка 3



/execute @p[r=20,score_MetroSt_min=1,score_MetroSt=43] ~ ~ ~ /setblock 41 33 -91 rail 9

/setblock 41 33 -91 rail 0 

 

Стрелка 2



/execute @p[r=20,score_MetroSt_min=1,score_MetroSt=1] ~ ~ ~ /setblock 41 33 -96 rail 8
/execute @p[r=20,score_MetroSt_min=3,score_MetroSt=6] ~ ~ ~ /setblock 41 33 -96 rail 8
/execute @p[r=20,score_MetroSt_min=16,score_MetroSt=23] ~ ~ ~ /setblock 41 33 -96 rail 8
/execute @p[r=20,score_MetroSt_min=27,score_MetroSt=31] ~ ~ ~ /setblock 41 33 -96 rail 8
/execute @p[r=20,score_MetroSt_min=43,score_MetroSt=43] ~ ~ ~ /setblock 41 33 -96 rail 8

/setblock 41 33 -96 rail 0  

 

 

Share this post


Link to post
Share on other sites

Давай так: я бы тоже не хотел, чтобы ты занимался всем-всем + вроде бы, есть игроки, которым это тоже интересно.

Поэтому предлагаю тебе только помогать это организовывать, если найдётся желающий (Джинен?) подготовить это на бумаге.

Дракон уже помогает с подготовкой места под эти схемы. Оцелот и я сможем это всё закодировать в игре.

 

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

Мой вариант позволяет переделывать все развязки и пульты постепенно. Твой вариант требует одномоментной переделки всех действующих пультов и развязок.

Если всё будет подготовленно на бумаге заранее, то проблем не будет - можно будет найти пару часов на это и сделать разом.

 

 

P.S.: надеюсь, что ты проводил хорошие тесты, а не просто выложил теорию, которая по каким-либо причинам вдруг не сработает ))))

Edited by Admin

Share this post


Link to post
Share on other sites

P.S.: надеюсь, что ты проводил хорошие тесты, а не просто выложил теорию, которая по каким-либо причинам вдруг не сработает ))))

На макете, который я выкладывал в первый раз (который упрощен) я катался, вроде, много раз - все работало.

Осилить повторение всего метро сервера в одиночке не смог. Но если надо, можно вместе продумать варианты тестов, соорудить еще один макет и откатать его.

И тут есть ряд недостатков. Например, если развязка "не знает" путь, то вагонетка будет кататься по кругу до посинения. Но такой случай - явный косяк настройки.

Edited by RedTeapot

Share this post


Link to post
Share on other sites

А ещё - катание по кругу из-за косяка - позволяет продолжить путь, поставив вагонетку в нужном направлении и в будущем исправить косяк, пожаловавшись на форуме )

Share this post


Link to post
Share on other sites

Так, прежде, чем мы примем решение о выборе системы маршрутизации на основе дерева квадрантов, нам необходимо определиться с тем, как будет происходить выбор станции.

В первую очередь, должно быть удобно использовать метро игрокам и особенно новичкам - выбор станции должен быть максимально простым и интуитивно понятным.

Грубо говоря, игрок должен зайти впервые в метро и кликнув пару-тройку раз по кнопкам понять - на какую станцию он поедет (на всё про всё 5-10 сек для самых неопытных).

 

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

 

Теперь надо понять - как же выбирается станция при маршрутизации на основе дерева квадрантов? :)

Мне кажется, что это ад )))

 

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

 

 + ещё Оцелот что-то хорохорился, что у него какой-то свой подход к маршрутизации... Оцелот, что-нибудь распишешь?

Share this post


Link to post
Share on other sites

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

В общем, наверное, с этой темой не супер.

У меня пока есть два варианта:

Первый. В каждом столбце жмем кнопку, соответствующую цифре в номере станции в данной позиции. Например, для станции 1-0-3-2 нам надо в первом столбике нажать 1, во втором - 0, в третьем - 3, в четвертом - 2.

Типа такого:

AHfPIsb.png

Второй. В каждом столбце кнопками "+" и "-" устанавливаем значение каждого разряда равному цифре. Для станции 1-0-3-2 это будет 1 нажатие первой кнопки "+", 0 нажатий второй кнопки "+", 3 нажатия третьей кнопки "+" и 2 нажатия четвертой кнопки "+". Минусы нужны на случай, если игрок переборщил немного и хочет уменьшить циферку на единицу.

Типа такого:

LpFgTJG.png

Ну и есть еще более эктремальный вариант - не делать кнопки "-" вообще, а при нажатии на "+", когда в данной переменной уже установлена 3, устанавливать 0. То есть,цифры выбирать по кругу: 0 -> 1 -> 2 -> 3 -> 0 -> ...

Как-то так.

Но печаль в том, что я понятия не имею, как показывать названия станций. Кстати, можно поинтересоваться, как отображение названий сделано сейчас?

Share this post


Link to post
Share on other sites

Сейчас всё просто и с лёгким флёром гениальности - тык :)

 

В принципе, твои пульты норм и даже клёвые, но это прям оч. какая-то мудрёная система...

Примерно тоже самое, что кодить на табличках по 4 команды за раз и давать игрокам пользоваться этим.

 

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

Share this post


Link to post
Share on other sites

В идеале игрок должен выбирать станцию, а код присваиваться сам.

А что, если выдавать каким-нибудь образом ссылки в чат, нажатие на которые установит эти пять переменных? Так вообще возможно? Хм... И все равно тогда возвращаемся к переделыванию всех станций при добавлении станций... Хотя станций меньше, чем развязок. Попробую подумать, в общем, в этом направлении. Или, может, кто чего подскажет.

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

UPD2: А еще можно сделать ассоциацию какой-нибудь нумерации от 0 до 40 к значениям этих пяти переменных... Но это как-то громоздко, так как нельзя в одном КБ устанавливать значения нескольких переменных за раз.

Edited by RedTeapot

Share this post


Link to post
Share on other sites

А может все переменные, обозначающие уровни вложенности, запихнуть в одну? Первая цифра - номер первого квадранта, вторая - второго, и т.д. Получится что-то вроде 0130. Но поскольку игра превратит это в 130, полагаю, нужно поставить перед всем этим, например, единицу.

Я это и предлагал, только принцип нумерации секторов карты другой был.

Share this post


Link to post
Share on other sites
Достижения

А может все переменные, обозначающие уровни вложенности, запихнуть в одну? Первая цифра - номер первого квадранта, вторая - второго, и т.д. Получится что-то вроде 0130. Но поскольку игра превратит это в 130, полагаю, нужно поставить перед всем этим, например, единицу.

Я это и предлагал, только принцип нумерации секторов карты другой был.

Проблема в том, что надо вычленять отдельные разряды. Я уже с этим почти разобрался, но пока выходит не слишком удобно... Но вполне выходит раскладывать одну переменную на несколько поразрядно.

Но проблему перебора всех станций это не ретак как будут диапазоны, где станций нет - например, когда любой из разрядов равен чему-то от 5 до 9.

Можно попробовать нагородить привязку номера станции (от 0 до, например, 40) -> значение одной закодированной переменной -> значения пяти переменных...

P. S. Ох уж этот словарный запас мой...

UPD: Сейчас я использую такую конструкцию для вычленения каждого из разрядов:

6o6BYgb.png

Синие КБ (цикличные) выполняют команду вида

/scoreboard players remove @e[score_metro_st_encoded_min=1000,score_metro_st_encoded=9999] metro_st_encoded 1000
Зеленые КБ-цепочки при успешном выполнении команды в синем КБ прибавляют единичку к соответствующей переменной.

Только перед этим надо не забывать все сбрасывать.

Edited by RedTeapot

Share this post


Link to post
Share on other sites

Я тоже в да только один приемлемый вариант: привязать коды этой системы дерева квадрантов - у удобоваримым и уже расписанным номерам станций.

А далее придумывать систему присвоения переменных в зависимости от кода. Возможно, придумаем более удобную систему ну крайний станций, чтобы удобнее это обрабатывалось.

Для этого необходимо расписать таблицу соответствия номеров и названий станций - кодам в системе дерева квадрантов.

= определиться с необходимой глубиной вложенности.э и всеми остальными нюансами.

Share this post


Link to post
Share on other sites

Я ещё пока не до конца вкурил это, но выглядит убедительно.

Если:

  • продумывание маршрута = расписывание команд только до следующей развязки
  • все команды тупо генерятся скриптом по заданным параметрам
  • добавление новых станций не требует переделки всех развязок

 

То имеет смысл остановиться на этом варианте  :)

 

Кто-нибудь из игроков, разбирающихся в таких сложных задачах по настройке схем и кб, может прокомментировать предложенный Чайником вариант?

 

Джинен, понятна ли тебе эта схема? Будет ли тебе интересно подготовить все команды для всех развязок?

Чайник, ты просто участвуешь в этом - чисто из интереса? Или ты хотел бы сам всё закодить?

Оцелот, твое мнение тоже интересно  :)

 
Я пока тоже не до конца вкуриваю, я еще в поездке. Через пару дней будем дома и попробую посмотреть. Пока у меня распечатаны только данные для старого варианта, там вроде все понятно, но при добавлении новой станции придется переделывать все развязки, что не кул. Зато стандартные пульты управления, да. 
 
Если есть время попробовать, то вот некоторые команды (первую развязку еще не переделали физически на четыре линии? Там бедрок ломать, так что только админы смогут)
 
Развязка 1 (координаты для переделанной, если еще не, то нужно корректировать)

Стрелка 1 (направление на север)
/execute @p[r=20,score_MetroSt_min=2,score_MetroSt=2] ~ ~ ~ /setblock 45 33 -98 rail 9
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=14] ~ ~ ~ /setblock 45 33 -98 rail 9
/execute @p[r=20,score_MetroSt_min=24,score_MetroSt=26] ~ ~ ~ /setblock 45 33 -98 rail 9
/execute @p[r=20,score_MetroSt_min=37,score_MetroSt=42] ~ ~ ~ /setblock 45 33 -98 rail 9

/setblock 45 33 -98 rail 1 

Стрелка 2 (направление на запад)
/execute @p[r=20,score_MetroSt_min=1,score_MetroSt=1] ~ ~ ~ /setblock 41 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=3,score_MetroSt=6] ~ ~ ~ /setblock 41 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=15,score_MetroSt=23] ~ ~ ~ /setblock 41 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=27,score_MetroSt=36] ~ ~ ~ /setblock 41 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=43,score_MetroSt=43] ~ ~ ~ /setblock 41 33 -95 rail 8

/setblock 41 33 -95 rail 0

Стрелка 3 (на юг, старый спаун, пока не работает новый, вместо первого нуля надо писать -1)
/execute @p[r=20,score_MetroSt_min=0,score_MetroSt=0] ~ ~ ~ /setblock 44 33 -91 rail 7

/setblock 44 33 -91 rail 1

Стрелка 4 (на новый спаун, пока новый спаун не работает, первую команду вообще не нужно писать)
/execute @p[r=20,score_MetroSt_min=-1,score_MetroSt=-1] ~ ~ ~ /setblock 48 33 -94 rail 6

/setblock 48 33 -94 rail 0

 

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

Edited by JinenryokuFu

Share this post


Link to post
Share on other sites
Достижения

Итак, сделал список развязок и станций с адресами. Доступен тут.

А еще я сделал вот такую штуку.

 

У нас же 61 развязка и 43 станции (не считая новый спаун) ?

Глубина вложенности дерева - 5 уровней.

Но я немного читерил - те развязки, которые находятся близко, но у самой границы квадранта, я разносил в разные ячейки, дабы не увеличивать глубину дерева.

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

Edited by RedTeapot

Share this post


Link to post
Share on other sites

Любопытная фигня))). Надо будет внимательнее посмотреть. Идея понятная, только с командами для кб надо определиться. 

 

Пока по старой схеме примерно так:

Развязка 2
Стрелка I 
/execute @p[r=20,score_MetroSt_min=2,score_MetroSt=2] ~ ~ ~ /setblock 145 33 -143 rail 1

/setblock 145 33 -143 rail 8 

Стрелка II
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=14] ~ ~ ~ /setblock 141 33 -146 rail 9
/execute @p[r=20,score_MetroSt_min=24,score_MetroSt=26] ~ ~ ~ /setblock 141 33 -146 rail 9
/execute @p[r=20,score_MetroSt_min=37,score_MetroSt=42] ~ ~ ~ /setblock 141 33 -146 rail 9

/setblock 141 33 -146 rail 1

Стрелка III
/execute @p[r=20,score_MetroSt_min=2,score_MetroSt=2] ~ ~ ~ /setblock 136 33 -146 rail 1
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=15] ~ ~ ~ /setblock 136 33 -146 rail 1
/execute @p[r=20,score_MetroSt_min=24,score_MetroSt=26] ~ ~ ~ /setblock 136 33 -146 rail 1
/execute @p[r=20,score_MetroSt_min=32,score_MetroSt=42] ~ ~ ~ /setblock 136 33 -146 rail 1

/setblock 136 33 -146 rail 6

=========================================

 
Развязка 3 (вторая ведет на Досю, остальные против часовой стрелки по аналогии с трехвариантными)
Стрелка I 
/execute @p[r=20,score_MetroSt_min=-1,score_MetroSt=0] ~ ~ ~ /setblock -39 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=2,score_MetroSt=2] ~ ~ ~ /setblock -39 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=14] ~ ~ ~ /setblock -39 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=24,score_MetroSt=25] ~ ~ ~ /setblock -39 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=38,score_MetroSt=41] ~ ~ ~ /setblock -39 33 -94 rail 6

/setblock -39 33 -94 rail 0

Стрелка II
/execute @p[r=20,score_MetroSt_min=1,score_MetroSt=1] ~ ~ ~ /setblock -42 33 -98 rail 9

/setblock -42 33 -98 rail 1

Стрелка III
/execute @p[r=20,score_MetroSt_min=4,score_MetroSt=6] ~ ~ ~ /setblock -46 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=18,score_MetroSt=23] ~ ~ ~ /setblock -46 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=27,score_MetroSt=28] ~ ~ ~ /setblock -46 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=31,score_MetroSt=31] ~ ~ ~ /setblock -46 33 -95 rail 8
/execute @p[r=20,score_MetroSt_min=42,score_MetroSt=43] ~ ~ ~ /setblock -46 33 -95 rail 8

/setblock -46 33 -95 rail 0 

Стрелка IV
/execute @p[r=20,score_MetroSt_min=3,score_MetroSt=3] ~ ~ ~ /setblock -43 33 -91 rail 7
/execute @p[r=20,score_MetroSt_min=15,score_MetroSt=17] ~ ~ ~ /setblock -43 33 -91 rail 7
/execute @p[r=20,score_MetroSt_min=26,score_MetroSt=26] ~ ~ ~ /setblock -43 33 -91 rail 7
/execute @p[r=20,score_MetroSt_min=29,score_MetroSt=30] ~ ~ ~ /setblock -43 33 -91 rail 7
/execute @p[r=20,score_MetroSt_min=32,score_MetroSt=37] ~ ~ ~ /setblock -43 33 -91 rail 7

/setblock -43 33 -91 rail 1
==========================
 
Развязка 4
Стрелка I 
/execute @p[r=20,score_MetroSt_min=3,score_MetroSt=3] ~ ~ ~ /setblock -43 33 407 rail 0
/execute @p[r=20,score_MetroSt_min=5,score_MetroSt=6] ~ ~ ~ /setblock -43 33 407 rail 0
/execute @p[r=20,score_MetroSt_min=16,score_MetroSt=20] ~ ~ ~ /setblock -43 33 407 rail 0
/execute @p[r=20,score_MetroSt_min=28,score_MetroSt=31] ~ ~ ~ /setblock -43 33 407 rail 0

/setblock -43 33 407 rail 9 

Стрелка II
/execute @p[r=20,score_MetroSt_min=14,score_MetroSt=15] ~ ~ ~ /setblock -40 33 403 rail 6
/execute @p[r=20,score_MetroSt_min=26,score_MetroSt=26] ~ ~ ~ /setblock -40 33 403 rail 6
/execute @p[r=20,score_MetroSt_min=32,score_MetroSt=40] ~ ~ ~ /setblock -40 33 403 rail 6

/setblock 141 33 -146 rail 0

Стрелка III
/execute @p[r=20,score_MetroSt_min=-1,score_MetroSt=2] ~ ~ ~ /setblock -40 33 398 rail 0
/execute @p[r=20,score_MetroSt_min=4,score_MetroSt=4] ~ ~ ~ /setblock -40 33 398 rail 0
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=13] ~ ~ ~ /setblock -40 33 398 rail 0
/execute @p[r=20,score_MetroSt_min=21,score_MetroSt=25] ~ ~ ~ /setblock -40 33 398 rail 0
/execute @p[r=20,score_MetroSt_min=27,score_MetroSt=27] ~ ~ ~ /setblock -40 33 398 rail 0
/execute @p[r=20,score_MetroSt_min=41,score_MetroSt=43] ~ ~ ~ /setblock -40 33 398 rail 0

/setblock -40 33 398 rail 7 
Развязка 5
Стрелка I 
/execute @p[r=20,score_MetroSt_min=3,score_MetroSt=3] ~ ~ ~ /setblock -38 33 519 rail 1

/setblock -38 33 519 rail 8

Стрелка II
/execute @p[r=20,score_MetroSt_min=-1,score_MetroSt=2] ~ ~ ~ /setblock -42 33 516 rail 9
/execute @p[r=20,score_MetroSt_min=4,score_MetroSt=4] ~ ~ ~ /setblock -42 33 516 rail 9
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=15] ~ ~ ~ /setblock -42 33 516 rail 9
/execute @p[r=20,score_MetroSt_min=21,score_MetroSt=26] ~ ~ ~ /setblock -42 33 516 rail 9
/execute @p[r=20,score_MetroSt_min=34,score_MetroSt=43] ~ ~ ~ /setblock -42 33 516 rail 9

/setblock -42 33 516 rail 1

Стрелка III
/execute @p[r=20,score_MetroSt_min=5,score_MetroSt=6] ~ ~ ~ /setblock -47 33 516 rail 1
/execute @p[r=20,score_MetroSt_min=16,score_MetroSt=20] ~ ~ ~ /setblock -47 33 516 rail 1
/execute @p[r=20,score_MetroSt_min=28,score_MetroSt=33] ~ ~ ~ /setblock -47 33 516 rail 1

/setblock -47 33 516 rail 6

==================================

 
Развязка 6 
Стрелка I 
/execute @p[r=20,score_MetroSt_min=5,score_MetroSt=6] ~ ~ ~ /setblock -595 33 -99 rail 0
/execute @p[r=20,score_MetroSt_min=16,score_MetroSt=20] ~ ~ ~ /setblock -595 33 -99 rail 0
/execute @p[r=20,score_MetroSt_min=28,score_MetroSt=31] ~ ~ ~ /setblock -595 33 -99 rail 0
/execute @p[r=20,score_MetroSt_min=43,score_MetroSt=43] ~ ~ ~ /setblock -595 33 -99 rail 0

/setblock -595 33 -99 rail 9 

Стрелка II
/execute @p[r=20,score_MetroSt_min=-1,score_MetroSt=3] ~ ~ ~ /setblock -592 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=7,score_MetroSt=11] ~ ~ ~ /setblock -592 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=13,score_MetroSt=15] ~ ~ ~ /setblock -592 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=25,score_MetroSt=26] ~ ~ ~ /setblock -592 33 -94 rail 6
/execute @p[r=20,score_MetroSt_min=32,score_MetroSt=40] ~ ~ ~ /setblock -592 33 -94 rail 6

/setblock -592 33 -94 rail 0

Стрелка III
/execute @p[r=20,score_MetroSt_min=4,score_MetroSt=4] ~ ~ ~ /setblock -592 33 -90 rail 0
/execute @p[r=20,score_MetroSt_min=12,score_MetroSt=12] ~ ~ ~ /setblock -592 33 -90 rail 0
/execute @p[r=20,score_MetroSt_min=21,score_MetroSt=24] ~ ~ ~ /setblock -592 33 -90 rail 0
/execute @p[r=20,score_MetroSt_min=27,score_MetroSt=27] ~ ~ ~ /setblock -592 33 -90 rail 0
/execute @p[r=20,score_MetroSt_min=41,score_MetroSt=42] ~ ~ ~ /setblock -592 33 -90 rail 0

/setblock -592 33 -90 rail 7 

=======================================

 

Просчитаны еще несколько, только глаза закрываются забивать их в шаблон)), чтобы не напортачить, выложу их позже, если вообще понадобится). 

Share this post


Link to post
Share on other sites
Достижения

Джинен, прежде, чем продолжать, давай сначала определимся с тем - по какой системе мы работаем.

Можно забить на хитрую и сложную систему Чайника и просто спустить метро.

Share this post


Link to post
Share on other sites

EFJpLoM.png

Макет пульта станции. Видим 4 группы КБ.

3 группа: установка переменной metro_st. Эта переменная хранит номер станции (который типа от 0 до 40, но у меня в примере от 0 до 5).

4 группа: установка переменной metro_st_encoded и вывод названия станции в чат. metro_st_encoded хранит адрес станции (как 1-3-0-2) в закодированном виде. Для станции 1-3-0-2 значение переменной будет 2031 (как видим, порядок цифр инвертирован).

1 группа: сброс пяти переменных с адресом станции (разными уровнями вложенности).

2 группа: декодирование переменной metro_st_encoded в переменные адреса разного уровня вложенности.

  • Upvote 1

Share this post


Link to post
Share on other sites

Если схема кодирования номера станции рабочая, то при встрече со мной или Оцелотом надо построить действующий прототип такого пульта, например, на полигоне около квеста "Песок душ".

Если испытания пройдут успешно, то лучше реализовать такую систему - с шифрацией номеров станций на основе дерева квадрантов.

Таким образом, мы сможем обеспечить простоту добавления новых станций в будущем.

Игроки продолжат пользоваться более менее внятной системой выбора станций.

А админам будет хоть и сложнее настраивать развязки и станции, но всё-таки не на много.

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

А все остальные группы блоков являются вспомогательными и не меняют своих размеров, если условиться, что глубина вложенности = максимум 5.

Правильно?

Если так, то это очень круто - прям по принципам ООП с инкапсуляцией объектов :)

При правильной подготовке первого действующего пульта - хоть тестового на поверхности - можно будет копировать всю эту схему, исключая кнопки, тупо командой /clone, а кнопки уже разводить в нужную сторону (в зависимости от расположения станции).

Причём, теоретически, команду /clone можно выполнять по относительным координатам, просто правильно вставая на станции. Тоже самое может касаться и добавления новых кб в четвертую секцию - их можно будет просто скопировать с NBT-данными и вставлять на каждой станции.

Если всё так, то в плане настройки может оказаться, что добавлении новой станции займёт не более часа :)

Share this post


Link to post
Share on other sites

Если схема кодирования номера станции рабочая

Типа, я построил нерабочую схему и показал ради угара? Или она может не работать на сервере, работая в одиночке? (лаги, например) ?

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

А все остальные группы блоков являются вспомогательными и не меняют своих размеров, если условиться, что глубина вложенности = максимум 5.

Правильно?

Если так, то это очень круто - прям по принципам ООП с инкапсуляцией объектов :)

Да. Четвертая группа зависит от кол-ва станций. Кол-во КБ в ней равно (n * 2), где n - число станций.

Третья группа зависит от реализации панели управления (Типа, +1, +5, +20, etc).

Первая и вторая зависят только от глубины.

Edited by RedTeapot

Share this post


Link to post
Share on other sites

Хз. Я часто ошибаюсь и мне всегда нужна помощь и корректировка.

Вопрос: зачем сбрасывать переменные? Нельзя их просто задавать каждый раз?

И совсем тупой теоретический вопрос: можно ли сделать вторую группу (декодирование) единой для всех станций и игроков, например, подключив её к ЦНС? А четвёртую группу (кодирование станции)?

Если мы сможем избавиться от дублирования кода, это будет вообще космос :D

Круче будет только переключение стрелок по системе размещения станций на основе дерева квадрантов и определения местоположения игрока в этом дереве (на конкретной развязке)... )))

Share this post


Link to post
Share on other sites

Хз. Я часто ошибаюсь и мне всегда нужна помощь и корректировка.

Вопрос: зачем сбрасывать переменные? Нельзя их просто задавать каждый раз?

И совсем тупой теоретический вопрос: можно ли сделать вторую группу (декодирование) единой для всех станций и игроков, например, подключив её к ЦНС? А четвёртую группу (кодирование станции)?

Если мы сможем избавиться от дублирования кода, это будет вообще космос :D

Круче будет только переключение стрелок по системе размещения станций на основе дерева квадрантов и определения местоположения игрока в этом дереве (на конкретной развязке)... )))

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

Сброс переменных - это такая особенность работы декодера. Если какой-то разряд равен нулю, то никаких действий над переменной не производится - в ней остается первоначальное значение. А там может оказаться мусор. Поэтому первоначально приходится все сбрасывать в 0.

Edited by RedTeapot

Share this post


Link to post
Share on other sites

Ок, ну хз... Одновременный выбор по идее означает только то, что сработают разные кб (наверное). А выбор одной и той же станции несколькими игроками лишь означает, что всем им присвоитмя нужное значение. Могу ошибаться - посмотрим в игре.

Share this post


Link to post
Share on other sites

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

А ведь, наверное, эти 40 КБ можно реально не ставить на каждую станцию, если запускать их циклично/включать цикл при наличии игрока на станции (как проверять?).

Кажется, даже так все здорово облегчается.

UPD: Да, я смог вынести КБ выдачи названия станции в чат и ассоциации номер -> адрес в отдельную группу КБ (типа, эта группа будет на весь мир). Но теперь в этой группе 3 КБ на станцию + усложненные селекторы. И куча цикличных КБ.

RB3iXz9.png

Итак. Первый (синий) КБ в цикле обрабатывает следующую команду (пример):

/tellraw @p[score_metro_st=0,score_metro_st_min=0,score_metro_st_flag=0] ["",{"text":"Станция 0: "},{"text":"Спавен","color":"gold"}]
То есть, если игрок выбрал станцию 0, и флаг у него не установлен, пишем ему в чат название станции.

Второй КБ:

/scoreboard players set @p[score_metro_st=0,score_metro_st_min=0,score_metro_st_flag=0] metro_st_encoded 0
Аналогично, игроку с текущей станцией и неустановленным флагом прописываем адрес станции (тут уже происходит привязка номер -> адрес).

Третий КБ:

/scoreboard players set @p[score_metro_st=0,score_metro_st_min=0,score_metro_st_flag=0] metro_st_flag 1
Устанавливаем флаг игроку с текущей станцией, если этот флаг еще не установлен.

Флаг тут нужен для того, чтоб не флудить игроку чат и не обрабатывать его постоянно.

В пульте в цепочку добавляется еще один КБ, сбрасывающий этот флаг в 0:

/scoreboard players set @p metro_st_flag 0
Таким образом, в пульте остается только декодер (не могу пока его централизовать) и кнопочки управления (+1/-1 и так далее).

Осталось протестить это в реальных условиях.

UPD2: Можно еще упростить систему, если отказаться от декодирования и при ассоциации сразу устанавливать значение этих пяти переменных.

Тогда в пульте станции останутся только кноки +1/+5/etc + по одному-два КБ к каждой.

Edited by RedTeapot

Share this post


Link to post
Share on other sites

Написал скрипт генерации команд для обработчика (не знаю, как назвать. В общем, эта штука привязывает номер станции к ее адресу).

Дабы упростить все, решил устанавливать все пять переменных в обработчике. На станции остаются только КБ, меняющие номер - +1, -1 и так далее.

Можно попробовать потестить пульт и обработчик.

В планах еще обработка соединений развязок (в таблице - использую в скрипте данные оттуда) и написание скрипта генерации команд развязок.

  • Upvote 1

Share this post


Link to post
Share on other sites

В теории всё получается очень круто )
Сорри, что сегодня не смог. К сожалению, не уверен, что в ближайшие дни получится уделить достаточно времени.

 

Но если сможешь сделать финальный скрин схемы с расписанными командами, то смогу найти время всё это установить для тестов.

Share this post


Link to post
Share on other sites

Но если сможешь сделать финальный скрин схемы с расписанными командами, то смогу найти время всё это установить для тестов.

Мне расписывать все 43 станции? Или пойдет первых штук пять для примера?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×