Система счёта игровых событий
Система счёта игровых событий (англ. Scoreboard) — комплексная система игровой механики, добавленная в основном для создателей карт и администраторов серверов. Может быть активирована с помощью командного блока или чата.
События
События (или цели, objective) — это комбинация из внутреннего имени, отображаемого имени и критерия, и они отслеживают количество очков для каждого игрока в виде целого числа. Может принимать значения от -2,147,483,648 до 2,147,483,647, не поддерживает десятичные дроби.
Внутреннее имя используется системой в командах как аргумент цели. Оно чувствительно к регистру и должно быть одним словом.
Отображаемое имя может быть словосочетанием и показывается всем в разных ситуациях. Оно также чувствительно к регистру.
Критерий определяет его поведение:
Критерий | Описание | Можно изменить значение? |
---|---|---|
dummy | Может быть изменено только с помощью команд. Это может быть полезно для флагов событий и валют. | Да |
deathCount | Счёт изменяется со смертью игрока. | Да |
playerKillCount | Счёт изменяется с убийством другого игрока. | Да |
totalKillCount | Счёт изменяется с убийством не только другого игрока, но и мобов. | Да |
health | Может принимать значения от 0 до 20. Может быть и больше, в зависимости от количества здоровья. Может принимать значение 0, если здоровье игрока не менялось с установки события. | Косвенно |
В следующем обновлении добавят[1] много критериев. Эти критерии используют системы статистики и достижений чтобы образовать соединения критериев[2]. В отличии от критериев выше, соединенные критерии разделяются точками ("."). Например, "stat.entityKilledBy.Zombie" должно быть соединенным критерием, значение которого увеличивается только тогда, когда игрока убивает зомби [3].
Список известных соединенных критериев:
Базовый критерий | Описание | Можно изменить значение? | Количество подкритериев |
---|---|---|---|
achievement | Соответствующие подкритерии: "makeBread", "bakeCake", "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". Его назначение пока неизвестно (возможно, проверяет выполнение достижения). | Да | Неизвестно |
stat | Основа для критерия, связанного со статистикой игрока. Соответствующие подкритерии: "damageDealt", "leaveGame", "minecartOneCm", (позже будет больше). Очки увеличиваются автоматически, как только игрок совершает действие соответствующего подкритерия. | Да | Неизвестно |
stat.craftItem | Подкритерием является номер ID блока или предмета. Увеличивается, когда игрок крафтит предмет. | Да | Неизвестно |
stat.useItem | Подкритерием является номер ID блока или предмета. Увеличивается, когда игрок использует предмет. | Да | Неизвестно |
stat.mineBlock | Подкритерием является номер ID блока или предмета. Увеличивается, когда игрок добывает предмет. | Да | Неизвестно |
stat.killEntity | Подкритерием является название сущности. Доступные имена: "Wolf", "Ozelot", "Enderman", "Slime", "LavaSlime", "Spider", "Creeper", "Bat", "Squid", "PigZombie", "Silverfish", "Skeleton", "Witch", "EntityHorse", "Pig", "Blaze", "Sheep", "MushroomCow", "CaveSpider", "Villager", "Zombie", "Chicken", "Cow", "Ghast". | Да | Неизвестно |
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". | Да | Неизвестно |
stat.drop | Основано на количестве выброшенных игроком предметов. | Нет | Неизвестно |
Счёт любого события, кроме команд только для чтения, может быть увеличен или уменьшен, или может быть установлено определённое значение.
Цели команд могут проверять счёт любого события у игрока с помощью аргументов score_name и score_name_min. В этих аргументах name — это внутреннее имя события, которое нужно проверить. score_name возвращает игроков с заданным максимальным количеством очков, тогда как score_name_min возвращает игроков с заданным минимальным количеством очков.
Например, testfor @p[score_deaths=5,score_deaths_min=1]
в командном блоке подаст сигнал компаратору на выход, если игрок умер как минимум однажды, но максимум пять раз, если "deaths" — это событие с критерием "deathCount".
Отображение
С помощью команды "scoreboard objectives setdisplay" (см. описание команды) счета игроков в разных событиях могут быть отображены в определённых местах (слотах) на экране.
Место | Описание |
---|---|
list | Показывает счёт жёлтой цифрой в списке игроков (Tab ↹). |
sidebar | Показывает счёт с правой стороны экрана. Показывает игроков в порядке убывания очков, как таблицу счёта. Во главе списка показывается отображаемое имя события. Заметьте, что игроки не в сети также показываются в списке. |
belowname | Показывает счёт с отображаемым именем события под именем игрока над его головой. Исчезает при отдалённости ~10 блоков, и когда игрок крадётся. Видимо только в мультиплеере. |
Команды
Команды (teams) — это комбинации из опций name, display name, prefix, suffix, friendly fire и списка игроков, состоящих в данной команде.
Как у событий, name и display name команды чувствительны к регистру, name — это одно слово, используемое системой, а display name может быть словосочетанием, которое может совпадать для нескольких команд.
Prefix and suffix вставляются до и после имени игрока в команде. Без использования редакторов только префиксы могут быть использованы для редактирования цвета команды, и только суффиксы могут сбросить код (знаки после имени игрока не форматируются). Префиксы и суффиксы добавляются к именам игроков в чате, активном списке игроков, на боковой панели и над их головами.
Опция friendly fire отключает урон, получаемый от игроков своей команды. Режим по умолчанию, "true", не изменяет механику PvP. Когда установлен режим "false", игрок не может причинить вред игрокам из своей команды при помощи атак ближнего боя, луков или зелий мгновенного урона.
Опция seeFriendlyInvisibles позволяет видеть невидимых игроков в своей команде.
Важно отметить, что каждый игрок может быть только в одной команде.
Командные блоки могут проверять принадлежность игрока к той или иной команде с помощью аргумента цели team
. Символ "!" может быть поставлен перед названием команды, чтобы найти игроков не в данной команде. Например, testfor @p[team=red]
в командном блоке подаст компаратору сигнал на выход, если игрок в «красной» команде. testfor @p[team=!red,team=!blue]
подаст сигнал на выход, если игрок ни в «синей», ни в «красной» команде. Если проверяется пустая команда, игра будет искать всех игроков без команды.
Возможные команды
Команда | Описание |
---|---|
scoreboard <objectives|players|teams> | Основная команда системы. |
scoreboard objectives list | Показывает доступные события (objectives) и их отображаемые имена (display names) |
scoreboard objectives add <name> <criteria> [display name...] | Создаёт новое событие со внутренним именем (internal name) name, критерием criteria и отображаемым именем display name. Без отображаемого имени display name оно поменяется на внутреннее name. Все аргументы чувствительны к регистру. |
scoreboard objectives remove <name> | Удаляет событие name из системы. Данные удаляются из списка событий, удаляются набранные игроками очки, и, если очки события отображались на экране, они больше не будут показываться. |
scoreboard objectives setdisplay <slot> [objective] | Показывает очки события objective на экране на месте slot. Доступные места отображения - "list", "sidebar" и "belowName". "list" будет показывать очки в списке игроков (по умолчанию клавиша Tab ↹), жёлтым текстом справа от имени и не будет показывать имя события. "sidebar" (боковая панель) будет показывать очки на правой стороне экрана всё время и будет показывать отображаемое имя вверху списка. Если игрок не в сети, но у него есть очки данного события, он будет отображен. "belowName" будет показывать очки в имени игрока над его головой. Заметьте, что параметр objective опциональный: если нет определённой цели, то данный слот очищается. |
scoreboard players list [playername] | Показывает игроков, считываемых системой. Опциональный параметр игрока может использоваться для отображения результатов данного игрока. |
scoreboard players set <player> <objective> <score> | Устанавливает игроку player количество очков score для события objective, переписывая предыдущий результат. |
scoreboard players add <player> <objective> <count> | Добавяет игроку player количество очков count события objective. count должен быть не менее 1. |
scoreboard players remove <player> <objective> <count> | Убавляет игроку player количество очков count события objective. count должен быть не менее 1. |
scoreboard players reset <player> | Стирает все результаты игрока player. Заметьте, что оно не сбрасывает все очки, а удаляет вообще все результаты в ССИС. Также странно, что команда не поддерживает параметры игрока похожие на '@p' - возможный баг. |
scoreboard teams list [teamname] | Показывает список команд и игроков в них. Опциональный параметр teamname может использоваться для отображения игроков данной команды. |
scoreboard teams add <name> [display name...] | Создаёт команду со внутренним именем и опциональным отображаемым именем. |
scoreboard teams remove <name> | Удаляет данную команду из ССИС. |
scoreboard teams empty <name> | Удаляет всех игроков из данной команды. |
scoreboard teams join <team> [players...] | Добавляет данного игрока (или игроков) в данную команду. Если нет определённого игрока, то в команду добавляется игрок, запустивший команду. |
scoreboard teams leave [players...] | Убирает данного игрока(игроков) из данной команды. Если нет определённого игрока, то из команды выбывает игрок, запустивший команду. |
scoreboard teams option <team> <friendlyfire|color> <value> | Базовая команда для настроек данной команды. |
scoreboard teams option <team> color <value> | Окрашивает имена игроков, состоящих в данной команде в данный цвет в чате, над головой и в сайдбаре. Значения параметра цвета "black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow" и "white". Другое значение - "reset" (форматирование по умолчанию), "obfuscated" (такой же эффект как в затемнённой части поэмы в финальных титрах), "bold", "strikethrough", "underline", and "italic". |
scoreboard teams option <team> friendlyfire <true|false> | Параметр true не влияет на механику PvP. Если установлен параметр false, то игроки не могут ранить игроков из своей команды, хотя могут причинять друг другу негативные эффекты зелий. |
scoreboard teams option <team> seeFriendlyInvisibles <true|false> | При true для игроков из своей команды (и себя в том числе) невидимые игроки будут отображаться полупрозрачными, вместо полной невидимости. |
История
Релиз | ||
---|---|---|
[[История версий/13w04a
13w05a
|
Ошибки
Внимание! Ошибки, перечисленные здесь, присутствовали в более ранних версиях. В новых версиях они исправлены!
- Если /scoreboard показывает sidebar, а вы в это время покидаете или заходите в Нижний Мир, то sidebar исчезнет и может восстановиться только если вы откроете и закроете карту, затем запустите sidebar снова.
- Когда цель (objective) на sidebar установлена, она не будет отображаться, пока вы не установите ту же цель для списка игроков и не откроете список с клавишей Tab.
- Когда командная опция friendlyfire не сохранена вместе с картой, она сбросится по умолчанию.
- Когда команда sidebar настроена показывать цель с критерием health и вы нажимаете Tab в одиночной игре, имя вашего игрока отобразится дважды.
- Когда цель с критерием health появляется в списке, постоянно будет выдаваться значение ноль.
Ошибки в 13w36a:
- Критерий stat.craftItem считает очки дважды, если результат крафта доставать с зажатым ⇧ Shift.
- Критерий stat.useItem работает некорректно.