Как сделать две команды в одном командном блоке


Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке


Лучшие новости сайта

Cтатья целиком

7

6

5

4

3

2

1

Каждый, кто занимается созданием серьезных и продвинутых карт на прохождение, должен знать команду /scoreboard и её возможности. Пригодится она и владельцам серверов. На первый взгляд команда выглядит довольно сложной, но давайте попробуем в ней разобраться.

Система счета игровых событий, как её именует русскоязычная Wiki, оперирует с тремя основными понятиями: команды (teams), игроки (players) и задачи (objectives). Если объяснять на пальцах, то scoreboard позволяет сгруппировать игроков по командам, выдать им определенные задачи и отслеживать некоторые происходящие с ними события.

Представьте себе следующую ситуацию: у нас есть есть четыре разных игрока ( назовем их условно первый, второй, третий и четвертый =D ) и мы хотим устроить небольшой PvP-турнир, в котором игроки разобьются на две команды по два человека и победит та команда, которая первая наберет 10 фрагов. Звучит как сюжет для командного шутера, и ничто нам не помешает при помощи магии scoreboard реализовать все это в Minecraft. По сути все, что мы делаем, это создаем задачу (objective) под названием Frags, создаем две команды Blue и Green, помещаем игроков по два в команду и каждому из них "выдаем" ту самую задачу Frags. Так в упрощенном виде выглядит вся процедура. Если кому-то ближе онлайн-игры, то это можно сравнить с рейдами: игроки собираются в команду и получают задачу. Механика здесь очень похожая.

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

Первое и самое главное, что может использоваться в scoreboard, это подкоманда objectives. Именно она создает виртуальные "задачи" или переменные, которые игрок выполняет автоматически и которые можно изменять вообще без участия игрока. Посмотрим на варианты её применения:

/scoreboard objectives list

Данная команда не имеет изменяющихся аргументов и просто выводит на экран список всех существующих заданий (objective), которые заданы для текущей карты.

/scoreboard objectives add < имяЗадачи > < критерий > [ отображаемоеИмя ]

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

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

Параметр критерий задает непосредственно критерии от которых зависит значение данной переменной. Стандартными критериями являются dummy, deathCount, totalKillCount, playerKillCount и health. Эти и прочие критерии, добавленные в последних версиях Minecraft, будут подробно рассмотрены чуть ниже.

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

/scoreboard objectives remove < имяЗадачи >

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

/scoreboard objectives setdisplay < слот > [ имяЗадачи ]

Приведенная команда отвечает за вывод значения переменной игрокам и принимает два параметра - обязательный параметр слот и необязательный имяЗадачи. Слотов для отображения значения существует всего три варианта: list, sidebar, belowName. Проще говоря мы можем вывести переменную на экран тремя разными способами.

Указанием в качестве слота list мы выводим значение переменной в списке игроков (по умолчанию открывается нажатием на клавишу Tab) напротив имени игрока.

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

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

Необязательный параметр имяЗадачи показывает значение какой именно переменной следует вывести на экран. Разумеется, данная задача должна существовать в игре. Если этот необязательный параметр не задан, то соответствующий слот просто будет сброшен в исходное состояние, прекращая показ значения переменных. Отмечу, что если слот уже пустой, то команда все равно будет выполнена успешно. Например нижеследующая команда прекратит вывод задачи Frags напротив ников игроков:

/scoreboard objectives setdisplay list

Возможно вас смутило то, что в самой команде отсутствует упоминание Frags? Это довольно важный момент! При очистке слота мы не указываем какую именно переменную там больше не показывать, это попросту не нужно. Какая бы переменная там не отображалась, слот в любом случае будет очищен.

Единственный глобальный недостаток, который здесь присутствует и многим создает неудобства, это отсутствие возможности вывести значение нескольких переменных одновременно. Если к данному моменту вы уже задались подобным вопросом, то увы, но ответом будет: "Только одна переменная в каждый слот!". Конечно можно использовать всяческие ухищрения, например при помощи таймера и командных блоков периодически переключать выводимые на экран переменные, однако в каждый отдельный момент времени вы можете включить вывод только трех переменных и все они будут выводиться в разных местах. Смиритесь с этим.

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

dummy Один из самых полезных типов. Главной особенностью данного типа является то, что на задачи с таким критерием не влияют никакие внутриигровые события типа смертей, здоровья и прочего. Значение переменной с таким критерием изменяется только при помощи команды. По сути этот критерий дает нам простейшую ячейку для хранения нужных нам данных и может использоваться в качестве флагов, счетчиков, хранения виртуальной валюты и прочих вещей, которые только могут придти в голову. deathCount Переменная такого типа автоматически увеличивается на 1 каждый раз когда игрок умирает. Можно использовать, например, для подсчета количества попыток перепрыгнуть по камням поток лавы или прорваться через орды нежити. playerKillCount Эта переменная будет увеличиваться на 1 каждый раз, когда получивший данную задачу игрок убивает другого игрока. По сути это "счетчик фрагов" в чистом виде, позволяющий реализовывать простейшие PvP события. totalKillCount Данная переменная как и предыдущая ведет подсчет убийств, однако помимо убийства других игроков учитывается и убийство любых мобов. Задачу такого типа можно использовать в PvE картах, например используя счетчик убитых монстров в качестве виртуальной валюты. health Значение данной переменной будет находиться в диапазоне от 0 до 20 для игрока, не переносящего никаких посторонних эффектов. По сути это значение показывает количество пунктов здоровья или, иначе говоря, количество половинчатых сердечек (1) игрока в текущий момент. Сразу после получения задания такого типа его значение может быть равно нулю для игрока, однако после первого же любого изменения здоровья значение обновляется и становится актуальным. Если игрок переносит дополнительные эффекты типа Повышение здоровья или Поглощение, то это тоже учитывается и в этом случае значение счетчика спокойно может превысить свой стандартный предел в 20 единиц. На данный момент переменные типа health это единственный вид переменных, значение которого нельзя изменить вручную. achievement. Допустимые доп.названия (как раз то самое, что мы подставляем после точки вместо звездочки и, разумеется, без кавычек) будут: "makeBread", "bakeCake", "diamondsToYou", "killCow", "portal", "buildFurnace", "buildSword", "cookFish", "enchantments", "mineWood", "openInventory", "exploreAllBiomes", "buildWorkBench", "theEnd", "blazeRod", "spawnWither", "buildBetterPickaxe", "acquireIron", "theEnd2", "bookcase", "flyPig", "ghast", "snipeSkeleton", "diamonds", "killWither", "fullBeacon", "buildHoe", "breedCow", "onARail", "overkill", "killEnemy", "potion", "buildPickaxe". Значение будет зависеть от того, сколько раз игрок получил указанное достижение, например если игрок поднял пять кусков дерева, то задача с критерием achievement.mineWood будет равна 5. stat. Данный критерий опирается на статистику игрока. Допустимые доп.названия для него: "damageDealt", "damageTaken", "leaveGame", "minecartOneCm", "swimOneCm", "walkOneCm", "horseOneCm", "pigOneCm", "flyOneCm", "boatOneCm", "fallOneCm", "climbOneCm", "diveOneCm", "fishCaught", "junkFished", "treasureFished", "playOneMinute", "playerKills", "mobKills", "animalsBred", "jump", "drop", "deaths". Счет будет увеличиваться автоматически вместе с изменением соответствующей статистики игрока. stat.craftItem. Доп.названием для данного критерия является ID предмета, крафт которого отслеживается, причем принимаются только ID предметов, которые можно скрафтить или переплавить. Значение данной переменной увеличивается в тот момент, когда отслеживаемый блок/предмет извлекается из печи, верстака или крафт-зоны инвентаря. Обратите внимание, что для некоторых предметов, таких как торт, кирка и железный слиток, существуют критерии по достижениям, которые дублируют значения этого критерия по крафту. stat.useItem. Доп.названием для критерия является ID предмета, использование которого отслеживается. Используются ID любых блоков за исключением ID из списка 0, 26, 34, 36, 55, 59, 63, 64, 68, 71, 74, 75, 83, 92, 93 ,94, 104, 105, 115, 117, 118, 124, 132, 140, 144, 149, 150 и любых блоков, не имеющих формы в виде предмета. Значение переменной с таким критерием будет увеличиваться во время "использования" предмета и здесь существуют некоторые правила:
- зачитывается использование лопаты, кирки, топора, зажигалки, ножниц и мотыги в момент, когда эти предметы теряют единицы прочности. При этом не учитывается использование и потеря единиц прочности для брони, луков, удочек и морковки-на-палочке
 - засчитывается попытка установки блока, причем даже тогда, когда блок не может быть установлен. Например, некоторые блоки имеют определенные требования, такие как тростник. Для него нужна вода и установка на определенный тип блока, однако попытка поставить тростник на любой блок также будет считаться
 - установка картин, любых вагонеток, рамок и использование спаун-яиц считается, однако не засчитывается установка лодки или создание любых сущностей типа брошенного глаза эндера, яйца, снежка, выстрела из лука, использование бутылки опыта или прочих бутылок
 - два из красителей могут быть использованы, это установка какао-бобов и использование костной муки для проращивания растений
 - помещение пластинки в проигрыватель считается её использованием
 - потребление любых продуктов, молока и зелий, а также используемых для кормления, приручения, оседлания или привязывания предметов не учитывается
 - не учитывается создание предметов, такое как превращение пустой карты в заполненную, наполнение ведра лавой, водой или молоком и тому подобное stat.breakItem. В качестве доп.критерия здесь используются ID предметов, обладающих прочностью. Значение увеличивается, когда заканчивается прочность предмета с соответствующим ID и он ломается. stat.mineBlock. Дополнительным критерием здесь является ID любого добываемого блока. Могут быть использованы любые ID за исключением 0, 7, 8, 9, 10, 11, 26, 34, 36, 51, 52, 55, 59, 63, 64, 68, 71, 74, 75, 83, 92, 93, 94, 96, 104, 105, 117, 118, 124, 132, 140, 141, 142, 144, 149, 150. Значение переменной с данным критерием будет увеличиваться в момент добычи игроком соответствующего блока. Под "добычей" подразумевается уничтожение игроком блока правильным образом, то есть таким, при котором выпадает сам блок. Исключение составляют разрушаемые блоки типа стекла. Счетчик не будет увеличиваться если игрок находится в креативном режиме но по прежнему будет срабатывать если опция doTileDrops выключена. stat.killEntity. Доп.критерием для данного случая будет название моба. Допустимые названия таковы: "Silverfish", "Ozelot", "Zombie", "Blaze", "Pig", "Creeper", "Cow", "Ghast", "Witch", "Squid", "Spider", "Villager", "Enderman", "LavaSlime", "PigZombie", "Wolf", "Sheep", "EntityHorse", "Chicken", "Slime", "Skeleton", "Bat", "MushroomCow", "CaveSpider". Значение переменной с таким критерием будет увеличиваться в случае убийства игроком указанного моба. stat.entityKilledBy. В качестве доп.критерия для этого случая будет тоже выступать название моба. Допустимыми названиями будут: "Wolf", "Ozelot", "Enderman", "Slime", "LavaSlime", "Spider", "Creeper", "Bat", "Squid", "PigZombie", "Silverfish", "Skeleton", "Witch", "EntityHorse", "Pig", "Blaze", "Sheep", "MushroomCow", "CaveSpider", "Villager", "Zombie", "Chicken", "Cow", "Ghast". Значение переменной будет увеличиваться если игрок убит указанным мобом. Следует отметить, что можно указывать имена пассивных мобов, но значение никогда увеличиваться не будет, поскольку такие мобы не могут нанести игроку вреда.

Чтобы закрыть тему с задачами/переменными надо сказать о самом главном. Вся эта механика была бы бесполезна, если бы не было возможности проверять значения переменных для конкретных игроков. К счастью такая возможность есть и осталось вам о ней узнать. Проверять значения переменных можно командными блоками, указывая имена задач в дополнительных параметрах селектора testfor. В тех самых, что пишутся в квадратных скобках после макроподстановок @p или @a. Дополнительные параметры могут быть двух типов:

score_имяЗадачи >=X
score_имяЗадачи >_min=X

Первый тип селектора проверяет наличия у игрока задачи имяЗадачи с количеством очков не больше Х. Второй тип селектора проверяет наличие у игрока задачи имяЗадачи с количеством очков не меньше Х. Эти селекторы можно применять и совместно, например для задачи Frags со счетчиком убийств можно определять игроков, которые убили как минимум одного, но не более трех человек:

/testfor  @a[score_Frags=3,score_Frags_min=1]

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

/testfor  @a[score_Frags=5,score_Frags_min=5]

Продемонстрирую все сказанное выше на еще одном простом примере.

Допустим у нас есть карта на прохождение с квестами на командных блоках. Игрок приходит в определенную область и получает квест на добычу 20 блоков камня для местного каменщика. Давайте попробуем такую ситуацию реализовать.

В первую очередь нам, разумеется, понадобится соответствующая задача, которая будет отслеживать сколько камней добыл игрок. По прибытии игрока в определенную точку, по нажатию кнопки/плиты или прочим образом эту задачу мы должны выдать игроку, а затем в месте "сдачи" квеста нужно проверять добыл ли уже игрок необходимые ресурсы. Ну и теперь, когда примерный план действий ясен, приведу сами команды.

Создаем переменную, следящую за сбором камня, и назовем её MineTheStone:

/scoreboard objectives add  MineTheStone  stat.mineBlock.1

Теперь нам нужно выдать её игроку. Допустим, что игрок для взятия квеста нажимает кнопку, от которой сигнал поступает к командному блоку. Выдаем игроку, стоящему у кнопки (скажем, по координатам в радиусе 10 от командного блока) нашу созданную задачу и устанавливаем стартовый счетчик в ноль.

/scoreboard players set @p[r=10] MineTheStone 0

Как, мы еще не изучили подкоманду players? Не беда, сделаем это позднее. Сейчас вам достаточно просто знать, что мы только что выдали игроку квест и установили счетчик в ноль. Разумеется, будет удобнее если игрок увидит сколько он уже собрал камня, поэтому выведем на экран справа (то есть на sidebar) соответствующую таблицу.

/scoreboard objectives setdisplay  sidebar  MineTheStone

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

/testfor  @p[r=10,score_MineTheStone_min=20]

Эта команда при поступлении на командный блок сигнала будет определять есть ли в радиусе 10 блоков игрок у которого значение переменной MineTheStone (то есть, по сути, количество собранного камня) минимум равно 20. Если такой игрок есть, то на выходе компаратора данный командный блок выдаст сигнал и мы сможем сделать необходимые действия, например выдать награду в виде нескольких уровней опыта, сбросить квест и скрыть более ненужный счетчик камня:

/xp  5L  @p[r=10,score_MineTheStone_min=20]
/scoreboard players reset  @p[r=10,score_MineTheStone_min=20]
/scoreboard objectives setdisplay  sidebar

Ну что же, мы разобрались с самым главным и, как мне кажется, к этому моменту вы уже должны иметь представление о том, что из себя представляет scoreboard в общих чертах. Перейдем к двум чуть менее важным, но не менее полезным её частям. И начнем мы, пожалуй, с механизма управления игроками, а точнее тем, как можно воздействовать непосредственно на задачи, полученные отдельными игроками. Приступаем к разбору команд.

/scoreboard players list [ игрок ]

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

/scoreboard players set < игрок > < имяЗадачи > < счет >

У этой команды есть только обязательные параметры и работает она следующим образом: выбирается игрок и переменной имяЗадачи у этого игрока устанавливается значение счет. Проще говоря мы выбираем игрока или игроков, удовлетворяющих условию игрок, которое может быть и в виде условного выражения а не только ника, и этим игрокам задаем указанное число в качестве текущего значения. Если у игрока еще не было указанной задачи, то он её получает и, таким образом, эта команда неявно является командой "выдачи" задачи игроку. Разумеется для успешного выполнения команды подходящие игроки должны быть найдены и задача с названием имяЗадачи так же должна существовать. В данный момент в игре присутствует баг, который не дает устанавливать значение счетчика задачи игрокам, которые не присутствуют в игре. Допустимые значения параметра счет от 0 до 2147483647.

/scoreboard players add < игрок > < имяЗадачи > < счет >

Эта команда практически полностью копирует поведение предыдущей команды с той лишь разницей, что вписанное как счет число прибавляется к текущему значению переменной имяЗадачи. Обратите внимание, что ноль прибавлять нельзя, поэтому допустимые значения для параметра счет будут от 1 до 2147483647.

/scoreboard players remove < игрок > < имяЗадачи > < счет >

Эта подкоманда полностью копирует поведение add за одним исключением - указанное в параметре счет значение вычитается из текущего значения переменной имяЗадачи. Ограничения здесь точно такие же от 1 до 2147483647. Для меня до сих пор остается загадкой, почему английское remove, что означает буквально удалять или убирать, использовано для этой команды. Куда больше подошло бы классическое sub везде использующееся для сокращения записи "вычитание", однако разработчикам виднее, а нам придется запомнить что эта команда всего лишь вычитает число из значения, а не убирает квест.

/scoreboard players reset < игрок >

А вот и весьма странная команда для "снятия" квестов с игрока. Указывая обязательный параметр игрок так же как и в предыдущих командах, мы полностью удаляем все задачи, которые были прикреплены к игроку. То есть отсутствует возможность убирать какие-то отдельные задачи, будьте внимательны! Данная команда будет успешно выполняться всегда, даже если у игрока уже нет поставленных задач.

Итак, мы разобрались с тем, как создавать задачи, выдавать их игрокам, проверять прогресс их выполнения и даже задавать напрямую их значения. Осталось дело за малым - разобраться с системой команд, которая также присутствует в команде scoreboard. Да, здесь как раз получается интересная игра слов, но под системой команд я подразумеваю механизм управления тем, как мы можем объединять игроков по какому-либо признаку. При этом у каждой команды есть как ее имя, по которому идут проверки, так и её название, а также цвет и некоторые опции. Давайте попробуем разобраться во всей этой путанице, опций здесь довольно много, так что приступим по порядку.

/scoreboard teams list [ имяКоманды ]

Как должно быть понятно из названия, это информационная подкоманда и её выполнение выводит на экран список всех существующих команд игроков с их отображаемыми именами и количеством состоящих в них игроков. Если в качестве дополнительного параметра указать конкретное имяКоманды, то будет выведена информация по конкретной команде, включая поименный список находящихся в ней игроков. Обратите внимание, что при вызове с дополнительным параметром команда должна не только существовать, но и содержать хотя бы одного игрока.

/scoreboard teams add < имяКоманды > [ отображаемоеИмяКоманды... ]

Приведенная подкоманда добавляет в игру новую команду с названием имяКоманды. Именно по названию впоследствии и нужно работать с данной командой. Если передан дополнительный параметр отображаемоеИмяКоманды, то будет задано имя для вывода в шапке sidebar. Длина параметра имяКоманды составляет 16 символов, а вот отображаемоеИмяКоманды может содержать до 32 символов.

/scoreboard teams remove < имяКоманды >

А вот и то, о чем я говорил. Не смотря на то, что название подкоманды remove, она действительно полностью удаляет упоминание о команде из игры. Будьте внимательны, не путайте с players remove! Единственным обязательным параметром является имя удаляемой команды и для успешного выполнения она, разумеется, должна присутствовать в игре.

/scoreboard teams empty < имяКоманды >

Эта подкоманда нам поможет если нет необходимости удалять команду а просто нужно выгнать из нее всех игроков. Обязательный параметр опять же ссылается на имя существующей команды и для успешного выполнения в команде должен присутствовать хотя бы один игрок.

/scoreboard teams join < имяКоманды > [ игроки... ]

Одна из самых часто используемых подкоманд - добавление игроков в указанную команду. Передается один обязательный параметр с именем команды, в которую вступает игрок или игроки. Если дополнительный параметр не задан, то к команде присоединится игрок, запустивший эту строчку. Если же задан дополнительный параметр в виде прямого указания или фильтра, то все указанные в нем игроки вступят в указанную команду. Следует отметить, что вступающие игроки могут до этого находиться в любой команде или вообще не существовать. Также обратите внимание, что в конкретный момент времени игрок может принадлежать только к одной команде!

/scoreboard teams leave [ игроки... ]

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

/scoreboard teams option < имяКоманды > < color | friendlyfire | seeFriendlyInvisibles > < значение >

Выполнение приведенной выше команды позволит нам задавать параметры указанной команде игроков. Все три параметра являются обязательными. Указывается имяКоманды для которой меняются параметры, далее имя параметра (color, friendlyfire или seeFriendlyInvisibles) и его новое значение (обычно true или false). Значение true означает что опция включена, а false - выключена. Чтобы было нагляднее, давайте рассмотрим все три вариации по отдельности.

/scoreboard teams option < имяКоманды > color < значение >

Задает цвет для указанной команды. Цвет будет применяться к именам находящихся в команде игроков, их никам над головами персонажей, на панели sidebar справа и в списке игроков по клавише Tab. Допустимое значение для цвета может быть любым из следующего списка: "black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow" и "white". Отмечу, что есть еще одно допустимое значение, а именно "reset". Это значение сбрасывает все цветовые настройки и игроки команды в чате и прочих местах отображаются как обычно.

/scoreboard teams option < имяКоманды > friendlyfire < true | false >

Флаг frienlyfire задает режим PvP для указанной команды. По умолчанию данный флаг всегда установлен в true, что означает обычный режим игры. Если установить его в false, то находящиеся в одной команде игроки больше не будут повреждать своих товарищей по команде при помощи рукопашных атак, стрельбы из лука, метательных бутылок и прочих наносящих повреждения вещей. Однако при этом у игроков все еще есть возможность "наградить" товарищей по команде негативными эффектами.

/scoreboard teams option < имяКоманды > seeFriendlyInvisibles < true | false >

Очень интересная с точки зрения реализации PvP и командных игр настройка, которая позволяет игрокам видеть невидимых товарищей по команде в качестве полупрозрачных фигур. По умолчанию данная опция установлена в false, при установке в true этот режим будет активирован.

На этом варианты использования подкоманд для управления объединением игроков в команды закончены. Осталось лишь упомянуть о способе, которым можно проверять наличие или отсутствие игрока в команде. Разумеется речь идет о дополнительных селекторах. В качестве селекторов можно использовать team=имяКоманды или team=!имяКоманды. Первый проверяет наличие игрока в команде с именем имяКоманды а второй, соответственно, проверяет отсутствие игрока в указанной команде. Например:

/testfor @a[r=10,team=Hunters]

Команда проверит в радиусе 10 блоков от командного блока наличие игроков, входящих в команду Hunters. Если в качестве имени команды ничего не задавать, то будет проверяться отсутствие игрока в любых командах.

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

Для начала определимся с тем, что нам понадобится. Как следует из условия, у нас будут две команды игроков, причем желательно сделать так, чтобы можно было убивать только игроков другой команды. Поскольку это чистое PvP, то считать мы будем только убийство других игроков. Команды назовем Blue и Green, и пусть игроки у нас будут соответствующих цветов. Ничего не забыли? Ах, да... Поставим лимит фрагов в 10. Команда, в которой кто-то из игроков наберет 10 фрагов, выигрывает. Я знаю, что это не стандартные условия "а-ля шутер", но на данный момент я просто не хочу грузить вас излишними подробностями и усложнять наш и так не самый элементарный пример. Итак, приступим.

Для начала создадим все необходимые нам переменные:

Создаем задачу типа playerKillCount, то есть по подсчету убийств других игроков, и назовем её тупо Kills.

/scoreboard objectives add pvpArena playerKillCount Kills

Добавляем наши команды и настраиваем их.

/scoreboard teams add  blue  Blue team
/scoreboard teams option  blue  color  dark_blue
/scoreboard teams option  blue  friendlyfire  false /scoreboard teams add  green  Green team
/scoreboard teams option  green  color  dark_green
/scoreboard teams option  green  friendlyfire  false

Выведем на экран наше табло с текущим счетом.

/scoreboard objectives setdisplay sidebar pvpArena

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

Для начала поместим по 2 игрока в каждую команду. Будем считать, что перед стартом игроки в радиусе 15 блоков от нашего командного блока.

/scoreboard teams join blue @a[team=,r=15,c=2]
/scoreboard teams join green @a[team=,r=15,c=2]

Выдаем всем нашим игрокам задание по подсчету фрагов.

/scoreboard players set @a[team=blue] pvpArena 0
/scoreboard players set @a[team=green] pvpArena 0

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

/testfor @a[team=blue,score_pvpArena_min=10]
/testfor @a[team=green,score_pvpArena_min=10]

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

/scoreboard objectives setdisplay sidebar
/scoreboard players reset @a[team=blue]
/scoreboard players reset @a[team=green]
/scoreboard teams empty blue
/scoreboard teams empty green

Разумеется на деле настоящая PvP-арена должна обладать куда более сложным функционалом, однако вариантов реализации подобных вещей очень много, да и само применение команды scoreboard далеко не ограничивается простым созданием арен для выяснения отношений. Используя эту команду можно сделать практически все от квестов до сложных механизмов. В любом случае надеюсь на то, что данная статья хоть немного помогла вам разобраться с особенностями работы данной команды. Успехов в постройке! =D

Наверх


Источник: http://www.gkrond.ru/Articles/Read/3/Komanda_scoreboard_i_eyo_vozmojnosti.html


Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Как сделать две команды в одном командном блоке

Читать далее: