Случайные видео
Управляемый плоский RND-генератор 1.5+ [Уроки по Minecraft]
Пример вертикальной версии генератора произвольных сигналов
#12/12.5: Белки следят за тобой! [Let's Play Miasmata]
Предатели бывают даже среди братьев наших меньших
Как сдвинуть блок на 2 вверх [Уроки по Minecraft]
Вертикальный сдвиг и возврат блока на 2 позиции
#20: Меж двух огней [Let's Play This War of Mine]
Пощупать удачу за интересные места в попытке исправить свои же дурацкие ...
Задержка на командных блоках в 1.5+ [Уроки по Minecraft]
Механизм реализации очень длительной и точной задержки
Селекторы игроков @a, @p, @r
Большинство используемых в Minecraft команд принимают в качестве параметров ник игрока, то есть как бы нацеливаются на определенного человека. Разумеется, это не всегда удобно, а при постройке серьезных механизмов или создания мини-игр так и вовсе неприемлемо. К счастью начиная с версии Minecraft 1.4.2 появилась такая штука, как селекторы. По сути это прописанный особым образом набор условий, который позволяет команде самой определить подходящего игрока и сработать именно на него. Селекторы достаточно просты в запоминании и понимании, так что не будем тянуть время и перейдем непосредственно к ним.
Как же на самом деле выглядят селекторы? Достаточно просто: вместо ника игрока там где это необходимо мы подставляем один из трех вариантов: @a, @p или @r. Что же они означают?
Селектор Описание
@a В качестве целей для команды будут выбраны все подходящие по условиям игроки. Если условия не заданы, то команда будет применена ко всем игрокам.
@p В качестве цели данный селектор выберет ближайшего игрока. Если вам лень писать свой ник в какой-то команде, которую вы вбиваете в консоль, то смело пишите вместо него этот селектор. Поскольку команда отдана вами, то ближайшим игроком будете вы сами.
@r В качестве целей для команды будут выбраны произвольные игроки. Обычно данный селектор используется с дополнительными ограничениями.
Чтобы эти селекторы стали чуть понятнее, давайте я продемонстрирую это на примере раздачи халявы. Допустим у нас есть карта на прохождение и когда игроки достигают определенной точки, то они получают вознаграждение, например десять уровней опыта. Предположим также, что нам заранее известна точка, в которой размещена наша награда, пусть это будет древний идол или что-то подобное. Поскольку мы не можем заранее знать с какими никами игроки будут играть в нашу карту, мы используем селекторы и можем сделать три следующих варианта.
/xp 10L @a[r=20]
Все игроки в момент выдачи награды находящиеся в радиусе 20 блоков от идола получат по 10 уровней опыта.
/xp 10L @p[r=20]
Один игрок, находящийся ближе всего к нашему идолу и попадающий в зону радиусом 20 блоков получит награду.
/xp 10L @r[r=20,c=3]
Трое произвольных игроков из всех присутствующих в радиусе двадцати блоков от идола получат награду.
В этом начинает появляться определенный смысл, не так ли? Однако первое что бросается в глаза во всех этих командах, это что-то дописанное в квадратных скобках сразу после селектора. Ну что же, давайте поговорим и об этом. Если сразу за селектором расположены квадратные скобки (никакого пробела после @a, @p или @r!), то в них можно указать дополнительные условия, по которым будет производиться поиск игроков. Условий этих достаточно много и они в большинстве случаев покрывают все наши нужды. Запись условий ведется в квадратных скобках после селектора, где мы через запятую перечисляем пары условие=значение.
То есть запись будет принимать вид типа:
@<селектор>[<аргумент1>=значение1, <агрумент2>=значение2,...,<аргументN>=значениеN]
Посмотрим какие у нас есть варианты.
Условие Описание
x Когда у нас ведется поиск игроков, то отсчет пойдет от точки с такой координатой x. По умолчанию отсчет идет от игрока, который вызвал команду, или от координат командного блока, в котором команда была вызвана.
y Когда у нас ведется поиск игроков, то отсчет пойдет от точки с такой координатой y.
z Когда у нас ведется поиск игроков, то отсчет пойдет от точки с такой координатой z.
r Максимальный радиус поиска игроков относительно начальной точки. По умолчанию радиус не ограничен. В качестве примера если мы используем селектор @p, то он найдет ближайшего игрока, а если мы подставим селектор @p[r=16], то будет произведен поиск ближайшего игрока в радиусе 16 блоков от стартовой точки. Таким образом при наличии игроков на сервере первый селектор всегда даст результат, а второй только если какой-то игрок достаточно близко к указанной точке.
rm Минимальный радиус поиска игроков, данный параметр дополняет предыдущий, действуя по схожему принципу, но формируя мертвую зону вокруг стартовой точки. То есть мы ищем игроков по принципу "не ближе чем rm блоков от стартовой точки".
m Этот параметр позволяет искать игроков с определенным игровым режимом, используется довольно редко. Допустимые значения для данного параметра следующие:
-1 : игрок с любым игровым режимом
 0 : игрок в режиме выживания (Survival)
 1 : игрок в креативном режиме (Creative)
 2 : игрок в режиме приключений (Adventure)
c Данный параметр отвечает за ограничение количества выбираемых игроков для тех команд, которые могут применяться сразу к нескольким игрокам. Очевидно, что данный параметр не может принимать значение 0, поскольку тогда он не найдет ни одного игрока. Положительные значения ограничивают количество, причем выбираться будут игроки первые по списку. Если значение отрицательное то будут выбраны последние в списке игроки. Например селектор @a[r=20,c=5] выберет 5 игроков из находящихся ближе всего к точке отсчета в радиусе 20 блоков.
l Определяет максимальный уровень игрока, не может принимать значение 0 и отрицательные значения. Можно использовать для ограничения по уровню, например не пропускать в комнату со столом зачаровывания игроков больше 20 уровня. Обратите внимание, что название параметра это латинская строчная буква L, а вовсе не заглавная буква i.
lm Определяет минимальный уровень игрока, не может принимать значение 0 и отрицательные значения. Если используется совместно с предыдущим параметром и задано то же самое значение, то это позволяет выбрать игрока четко определенного уровня. Например можно выбрать из всех доступных игроков только игроков с уровнем десять: @a[lm=10,l=10
score_<задача> Определяет максимальное значение переменной для задачи с соответствующим именем. Например выборка всех игроков с количеством фрагов задачи Frags не больше пяти будет выглядеть так:
@a[score_Frags=5]
score_<задача>_min То же, что и предыдущий фильтр, только ищет игроков у которых значение задачи минимум равно указанному числу.
team Определяет всех игроков, входящих в определенную команду. В качестве параметра передается имя команды. Если имя не задано, то будут выбраны игроки не состоящие в командах, а если перед именем после знака = будет стоять восклицательный знак, то будут выбраны игроки не входящие в указанную команду.
name Находит игроков с указанным именем. Если в качестве параметра перед ником игрока после знака = будет стоять восклицательный знак, то будет искать всех игроков кроме указанного в параметре.
Вот такой получается небольшой, но достаточно удобный список дополнительных параметров. Разумеется никто нам не мешает использовать их совместно, что еще больше расширяет сферу применения данного подхода к выбору игроков. Еще пара замечаний по поводу использования этого подхода. Между параметрами в квадратных скобках не должны стоять пробелы! Если нам требуется указать в начале стартовые координаты и максимальный радиус поиска, то можно опустить указание названий параметров. Таким образом следующие две записи будут равнозначны:
/testfor @a[x=10,y=75,z=128,r=20,team=!Red]
/testfor @a[10,75,128,20,team=!Red]
Комбинируя описанные выше параметры поиска и комплексные команды типа scoreboard можно создавать очень сложные механизмы с весьма разнообразными эффектами. Надеюсь, что данная статья хоть немного прояснила вам как это делается и теперь надписи типа @a[...bla-bla...] больше не будут вас пугать. Удачи в постройке ваших механизмов и карт! =) 
Наверх