Игровые команды

Тук-тук я в домике

Создавать команды в Skript очень просто.
Базовый шаблон определения команды следующий:

command /<имя команды> <аргументы>:
  aliases:
  executable by:
  usage:
  description:
  permission:
  permission message:
  cooldown: <timespan>
  cooldown message:
  cooldown bypass:
  cooldown storage: <переменная>
  trigger:
   #ваш код

Все параметры, находящиеся между самой командой и trigger - опциональны (необязательны)\

Разберем каждый раздел

Имя команды - это в сама команда. В имени команды можно использовать любой символ, кроме символа пробела. Если вы используете пробел в имени команды, текст после пробела становится аргументом. Символ косой черты (/) перед именем команды является необязательным (это не означает, что вы можете выполнять команду без косой черты).

Аргументы - это все, что пользователь пишет после команды через пробел. У аргументов может быть тип данных, например Number, Text, Player. Аргументы могут быть обязательными и опциональными, могуть иметь базовое значение, а могут не иметь:
Команда без аргументов

command /mycommand:
  trigger:а
    broadcast "Hello world!"

Команда с обязательными аргументами

command /mycommand <number> <number>:
  trigger:
    broadcast "%arg-1+arg-2%"
    #сложит два числа указанных пользователем через пробел

Команда с необязательными аргументами

command /mycommand [<text>]:
  trigger:
    if arg-1 is set:
      broadcast arg-1
    else:
      broadcast "Hello world!"
    # Выведет указанный текст, если он указан,
    # иначе 'Hello world!'

Команда с базовым значением

command /mycommand [<text="Hello world!">]:
  trigger:
      broadcast arg-1
    # Выведет указанный текст, если он указан,
    # иначе 'Hello world!'

В блоке trigger для получения значений аргументов используются следующие выражения:

[the] last arg[ument][s]
[the] arg[ument][s](-| )%number%
[the] (1st|2nd|3rd|4-90th) arg[ument][s]
[the] arg[ument][s]
[the] %type%( |-)arg[ument][( |-)%number%]
[the] arg[ument]( |-)%type%[( |-)%number%]

Нумерация аргументов происходит в том же порядке, как они указаны в самом описании команды

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

command /mycommand [<text="Hello world!">]:
  aliases: /helloworld,/hello
  trigger:

Executable by - определяет кто может выполнять данную команду, в текущих реалиях это либо игрок, либо консоль Console

command /mycommand [<text="Hello world!">]:
  executable by: console
  trigger:

Player

command /mycommand [<text="Hello world!">]:
  executable by: player
  trigger:

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

command /mycommand <text>:
  usage: Используйте: /mycommand <текст для отправки>
  trigger:

Description - описание команды, выводится при отправке команды /help, либо может быть получено при помощи Bukkit API другими плагинами.

command /mycommand <text>:
  description: отправляет всем указанное сообщение
  trigger:

Permission - право необходимое игроку для выполнения команды.

command /mycommand <text>:
  permission: mycommand.send
  trigger:

Permission message - сообщение получаемое отправителем, если у него отсутствует право на выполнение команды.

command /mycommand <text>:
  permission message: Недостаточно прав для выполнения данной команды
  trigger:

Cooldown - время восстановления для повторного использования команды. Обратите внимание, что время восстановления команд сбрасывается при остановке сервера.

command /mycommand <text>:
  cooldown: 1 hour
  trigger:

Перезарядку можно отменить, используя выражения:

(cancel|ignore) [the] [current] [command] cooldown 
un(cancel|ignore) [the] [current] [command] cooldown

Первое отменяет перезарядку команды после ее выполнения, вторая иначе, принудительно ее устанавливает.

Cooldown message - сообщение, которое будет написано отправителю, если время восстановления команды еще не прошло. Вы можете использовать выражения elapsed time и remaining time для получения времени последнего применения команды и времени до окончания перезарядки соответственно.

Cooldown bypass - право, при наличии которого у отправителя команда не будет уходить на перезарядку.

command /mycommand <text>:
  cooldown: 1 hour
  cooldown bypass: hello.bypass
  trigger:

Cooldown storage - тут указывается переменная для сохранения информации о перезарядки. Если ее указать, то перезарядка будет сохранятся даже после выключения сервера.

command /mycommand <text>:
  cooldown: 1 hour
  cooldown bypass: hello.bypass
  cooldown storage: {mycommand::%player's uuid%}
  trigger:

Trigger - в этом блоке непосредственно находится выполняемый командой код.

Примеры команд:

command /speed [<player>] [<number>]:
  permission: sk.speed
  permission message: &c→ &fНедостаточно прав для выполнения данной команды
  usage: &c→ &fИспользуйте: &c/speed &f<&cник игрока&f> &f<&cскорость&f>
  trigger:
    if (arg-1 is set):
      if (sender have permission "sk.speed.any"):
        set {_player} to arg-1        
        if (arg-2 is set):
          set {_speed} to arg-2
        else:
          set {_speed} to 1
        set {_player}'s walking speed to {_speed}/5        
        
        send "&a→ &fСкорость вашего передвижения установлена на &a%{_speed}%" to arg-1
        if {_player} is not player:
          send "&a→ &fСкорость передвижения &a%{_player}% &fустановлена на &a%{_speed}%"
        stop
    if (sender is player):
      if (arg-2 is set):
        set {_speed} to arg-2
      else:
        set {_speed} to 1
      set player's walking speed to {_speed}/5
      send "&a→ &fСкорость вашего передвижения установлена на &a%{_speed}%"
    else:
      send "&c→ &fИспользуйте: &c/speed &f<&cник игрока&f> &f<&cскорость&f>"
command /heal [<player>] [<text>]:
  permission: sk.heal
  permission message: &c→ &fНедостаточно прав для выполнения данной команды
  cooldown: 5 minutes
  cooldown message: &c→ &fПодождите перед следующим выполнением команды
  cooldown bypass: sk.heal.bypass
  trigger:
    if (arg-1 is set):
      if sender have permission "sk.heal.any":
        heal arg-1
        feed arg-1
        set {_player} to arg-1
        send "&a→ &fИгрок &a%{_player}%&f был исцелен"
        stop
    if (sender is player):
      heal player
      feed player
      send "&a→ &fВы были исцелены"
    else:
      send "&c→ &fИспользуйте: &c/heal &f<&cник игрока&f>"