Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал [VarScript 0.5] Использование команд

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем DPOH-VAR, 2 авг 2013.

  1. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    -----------------------------------------------------
    Разработка плагина
    Плагин на dev.bukkit.org
    -----------------------------------------------------
    Приступим!

    Исполнение команд

    Основная команда для запуска скриптов выглядит так:
    /> <набор команд>
    На данный момент существует более 600 команд (точное количество можно узнать по команде />c )
    К примеру рассмотрим команду TELEPORT.
    Справку по этой команде можно получить с помощью />c TELEPORT
    t1.png
    тут:
    alias - другие формы записи команды. т.е. мы можем использовать просто TP вместо TELEPORT
    tags - к каким тегам относится команда. О тегах - ниже.
    input - входящие параметры. Что нужно указать для исполнения команды
    output - что мы получим в результате исполнения этой команды
    Последняя строка - описание команды. Да, она всего лишь телепортирует любой объект из одного места в другое.

    команда TELEPORT требует указать два агрумента:
    1 - Entity (кого телепортируем)
    2 - Location (куда телепортируем)
    Агрументы указываются строго в указанном порядке и перед командой.
    Например:
    t1.png
    эта команда телепортирует игрока Notch к игроку frоmgаtе.
    t1.png
    а эта - телепортирует вас на 10 блоков вверх.


    Стековая система команд

    Итак, представим себе массив, в котором лежат некоторые объекты.
    [A,B,C]
    Мы можем либо добавить объект в конец массива:
    [A,B,C] + D -> [A,B,C,D]
    либо забрать последний элемент из него:
    [A,B,C] -> [A,B] + C
    другие операции с этим массивом недопустимы.
    Такой массив далее будет называться стеком.

    Рассмотрим эту запись:
    t1.png
    Она состоит из трех команд, которые исполняются последовательно.
    ME - кладет в стек игрока, который исполняет команду.
    [] + Player -> [ Player ]
    0:10:0 - кладет в стек вектор (смещение) на 10 блоков вверх.
    [ Player ] + 0:10:0 -> [ Player, 0:10:0 ]
    TELEPORT - берет из стека два объект телепортации и пункт назначения, а затем кладет обратно в стек результат.
    [ Player, 0:10:0 ] -> [] + Player + 0:10:0 ## команда читает 2 элемента
    ## происходит телепортация первого ко второму, т.е. игрока на 10 блоков вверх
    [] + Player -> [ Player ] ## команда возвращает в стек игрока
    Больше команд нет - на этом исполнение завершается.

    Таким образом получается, что эти две команды эквивалентны:
    t1.png
    t1.png
    Только во втором случае в стеке будут лежать лишние неиспользуемые строки "foo" и "bar"

    Конвертирование типов

    Опять же рассмотрим справку по команде TELEPORT
    t1.png
    типы входных значений команды - это Entity и Location.

    Когда мы вызываем команду
    t1.png
    при исполнении команды TELEPORT у нас в стеке лежат объекты типа String (строка)
    [ String, String]
    которые команда преобразует к желаемому типу.
    Преобразования (String->Entity) и (String->Location) происходят автоматически по заранее установленным правилам:
    String("Notch")->Entity : Найти игрока с именем Notch.
    String("frоmgаtе")->Location : Найти игрока с именем frоmgаtе и узнать его координаты

    Для второго примера:
    t1.png
    при телепортации в стеке лежат Player и Vector
    [ Player, Vector]
    Player->Entity : нет необходимости, т.к. Player и так является Entity
    Vector->Location : посчитать смещение от позиции игрока, который вызвал команду.

    Правил для конвертирования очень много, вплоть до таких:
    Block->ItemStack - взять предмет из материала, из которого состоит блок
    Player->ItemStack - взять предмет, который в руках у игрока
    Entity->Integer - взять идентификатор моба (EntityID)
    String->World - взять мир по названию
    Player->String - берет имя игрока
    Entity->String - берет тип моба
    И одгомная туча других.
    Integer->Entity - найти моба по указанному идентификатору

    Просмотр значений

    для просмотра значений в стеке используется команда PRINT
    t1.png
    Отсюда видно, что команда берет из стека объект совершенно любого типа, и ничего не кладет обратно. В результате она просто печатает объект на экране.
    Попробуем выполнить команду /> ME PRINT и получим что-то вроде этого:

    t1.png
    Команда полезна, когда нужно узнать, что осталось в стеке или же вывести на экран значение переменной.

    Список всех команд

    Ввиду того, что команд слишком много, они все имеют теги для поиска.
    Например, команда PRINT имеет теги stack, string, print.
    Чтобы посмотреть список всех тегов, нужно ввести команду
    />t
    t1.png
    Тут мы видим перечисление всех возможных тегов.
    Далее, чтобы найти все команды, относящиеся к выбранному тегу, нужно ввести
    />t тег
    t1.png
    Теперь на экране список всех команд, относящихся к тегу.
    И наконец, для получения справки команда
    />c команда
    t1.png
    Узнаем, что эта команда изменяет размер слизня на любой указанный.
    PS: да, я заметил опечатку на скрине выше, и уже пофиксил.

    На этом всё. Если будут какие-то замечания или дополнения - я их внесу в данный туториал.

    В теме были рассмотрены некоторые команды плагина VarScript 0.5, устройство стековой обработки команд, конвертер типов а также навигация по командам и способ получения справки.

    Далее:
    -----------------------------------------------------
    Туториал: Переменные. Чтение скрипта из файла
    -----------------------------------------------------
     
  2. Хостинг MineCraft
    <
  3. alex0007

    alex0007 Старожил Пользователь

    Баллы:
    123
    В чём смысл плагина?
     
  4. second_vynder

    second_vynder Старожил Пользователь

    Баллы:
    153
    Skype:
    my.nik.vynder
    Это essentials 2000
     
  5. superkep

    superkep Старожил Заблокирован

    Баллы:
    153
    Skype:
    O_superkep_O
    Имя в Minecraft:
    superkep
    Я нечего не понял:D Но лайк дам
     
  6. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Я не ради лайков туторы пишу, а в надежде, что кто-то разберется с плагином.
     
    Hilgert и ufes нравится это.
  7. Ccc

    Ccc Старожил Пользователь

    Баллы:
    153
    Skype:
    Dyadyasasha1234
    Имя в Minecraft:
    Dyadyasasha1234
    Что-то интересное. Не слышал о таком плагине, спасибо!
     
  8. konfyciu98

    konfyciu98 Старожил Пользователь

    Баллы:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Хммм...интересненько! Как приеду, то подробнее просмотрю плагин!
     
  9. anti344

    anti344 Активный участник

    Баллы:
    63
    Имя в Minecraft:
    anti344
    Я кааапельку разбираюсь в программировании(хорошо изучил(и продолжаю) "основы" программирования парадигмы и прочее, учу Java, начинаю учить php), и я скажу:
    Плагин невероятно, офигезно, опупительно МЕГАТУРБООХРЕНЕННЫЙ!! Спасибо автору.
     
    DPOH-VAR нравится это.
  10. AlexGL

    AlexGL Старожил Пользователь

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    О, новенькая версия.
     
  11. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Наоборот, сам Нотч почтил тебя своим визитом :D
     
    Hephest нравится это.
  12. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    fromgate,
    ОПН заключается в том, что название функции (действие или операнд) пишется после параметров. Сами параметры не меняются местами. Т.е. "5 3 -" будет как "minus(5,3)" в прямой нотации, или же "5-3" в привычном виде.

    ------------------------------------------

    Не знаю, стоит ли расширять синтаксис с выходом 1.7
    С одной стороны, появится большая куча новых классов, методов, всего прочего - было бы неплохо добавить соответствующие варскриптовые команды. Не пользоваться же ::рефлексиями
    А с другой - есть груви. Как бы я ни старался - любое решение на груви выйдет проще и изящнее. Не говоря уже о быстродействии. Даже Nashorn (менее гибкий движок) - тоже неплох.
     
    ВремяПриключений нравится это.
  13. AlexGL

    AlexGL Старожил Пользователь

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Естественно расширяй.
     
  14. Sirse

    Sirse Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    VarScript уже на данной стадии требует Wiki, имхо.
    Разобраться в плагине без хорошего систематизированного источника информации сложно, а в условиях форума вообще нереально.
     
    DPOH-VAR нравится это.
  15. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Тут ты прав.
    Но количество пользователей варскрипта пока что не покрывает затраты на создание вики.
     

Поделиться этой страницей