API Robot (OpenComputers)

Тема в разделе "Руководства", создана пользователем Jerubrin, 18 июн 2014.

  1. Jerubrin

    Jerubrin
    Архитектор
    231
    157
    293
    Перевод API Robot. Прошу не судить строго, а помочь найти ошибки и не точности перевода. В ближайшее время постаряюсь перевести все API по моду OpenComputers.

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

    robot.level(): number
    Возвращает текущий уровень робота, дробная часть означает процент движения робота на пути к другому уровню. Например 1.5 означает, что робот на первом уровне и на 50% продвинулся ко второму уровню.

    robot.name(): string
    Возвращает текущее имя робота (может быть изменено с помощью наковальни).

    robot.detect(): boolean, string
    Проверяет, на ноличие припятствия впереди робота. Возвращает true, если есть препятствие блокирующие движение робота вперед, иначе – false. Второе возвращаемое значение спецификации того, что находится перед роботом, может быть одно из значений:
    entity (препятствие), solid (твердое), replaceable (заменяемое), liquid (жидкое)и air (воздух).
    Первые 2 будут блокировать движение робота, последующие – нет.
    В случае возвращения entity – это может быть живое препятствие, такое как игрок или моб, либо вагонетка.

    robot.detectUp(): boolean, string
    Как и robot.detect, только для блока находящегося над роботом.

    robot.detectDown(): boolean, string

    Как и robot.detect, только для блока находящегося под роботом.

    robot.select([slot: number]): number
    Выбирает слот инвентаря с указанным индексом (slot), который является целым числом в интервале [1, 16]. Нумерация слотов начинается с верхнего левого угла и следует с лева направо, сверху вниз. Т.е. верхний левый слот ровняется 1, верхний правый – 4, нижний левый – 13, нижний правый – 16. При попытке выбрать несуществующий индекс – выдает ошибку. Возвращает новый выбранный слот. Может быть выполнен без аргументов для возвращения текущего выбранного слота.

    robot.count([slot: number]): number
    Возвращает число объектов в указанном слоте инвентаря. Если параметр не задан, то возвращает количество объектов в текущем выбранном слоте инвентаря.

    Robot.space([slot: number]): number
    Возвращает, сколько объектов можно положить в данный слот, с учетом тех, что что уже находятся в инвентаре (для примера, ведра стакуются по 16, если в слоте находятся 2 ведра, то возвратится значение 14). Если параметр не задан, то возвращает сколько объектов можно положить в текущий выбранный слот инвентаря.

    robot.compareTo(slot: number): boolean
    Сравнивает объект в текущем выбранном слоте с объектом в слоте заданном в параметре (slot), возвращает true, если оба объекта идентичны (т.е. количество объектов в стаке не учитывается), false– в противном случае.

    robot.transferTo(slot: number[, count: number]): boolean
    Перемещает объекты из выбранного слота в заданный. Если задано количество (count), то будет перемещено только заданное количество объектов. Возвращает true, если один или несколько объектов были перемещены (но не обязательно, что все!), false – если не удалось переместить ни одного объекта.
    Обратите внимание, что если слот назначения не пустой, а количество перемещаемых объектов либо не задано, либо больше количества, которое доступно в слоте, то это может привести к смешиванию.

    robot.compare(): boolean
    Сравнивает блок выбранный в инвентаре с блоком находящимся перед роботом. Возвращает true, если блоки совпадают, иначе – false.

    robot.compareUp(): boolean
    Как и robot.compare, только для блока сверху, над роботом.

    robot.compareDown(): boolean
    Как и robot.compare, только для блока снизу, под роботом.

    robot.drop([count: number]): boolean
    Выбрасывает из выбранного слота объекты. Если заданно количество (count), то выбрасывает заданное количество объектов. Если перед роботом будет находится объект имеющий инвентарь, например такой как сундук, он попытается переложить объекты в этот инвентарь. Если перед роботом не будет ничего – он просто выбросит объекты. Возвращает true если один или более объектов было выброшено, false – в противном случае. Если инвентарь перед роботом будет полон, то объекты не будут выброшены и будет возвращено значение false.
    Так-же работает для вагонетки с сундуком или воронкой.

    robot.dropUp([count: number]): boolean
    Так-же как и robot.drop, только перекладывает в инвентарь или выбрасывает объекты в блок сверху.

    robot.dropDown([count: number]): boolean
    Так-же как и robot.drop, только перекладывает в инвентарь или выбрасывает объекты в блок снизу.

    robot.place([side: number[, sneaky: boolean]]): boolean
    Устанавливает блок выбранный в инвентаре перед роботом. Если блок был установлен – возвращает true, иначе false.
    Параметр side определяет сторону на которую необходимо установить объект, если параметр не задан робот попытается установить объект на все поверхности. Это используется если объект может иметь разную ориентацию. Например, если установить факел, c параметром sides.left, то факел будет установлен на “стену“ слева от робота (если возможно), а sides.right – на “стену“ справа.
    Параметр sneaky определяет, должен ли робот подкрадываться при установке объекта, может быть необходим для некоторых модов.
    Важно: у куба находящегося перед роботом должна быть хотя-бы одна поверхность, чтобы он мог установить блок, т.е. робот не может ставить блоки в воздухе, он нуждается в некоторой «зацепки», так-же как это необходимо игроку. Если вам нужно чтобы робот мог устанавливать блоки в воздухе (как это могут черепахи из ComputerCraft), то проверьте config, там есть необходимые параметры.

    robot.placeUp([side: number[, sneaky: boolean]]): boolean
    Как и robot.place, только устанавливает блок над роботом.

    robot.placeDown([side: number[, sneaky: boolean]]): boolean
    Как и robot.place, только устанавливает блок под роботом.

    robot.suck([count: number]): boolean
    Собирает объекты по максимуму в выбранный стек. Или в первый свободный слот после выбранного. Возвращает true, если один или больее объектов удалось объединить, false – в противном случае.
    Если перед роботом будет находится объект имеющий инвентарь, например такой как сундук, то он попытается взять объекты из этого инвентаря. Если заданно количество (count), то робот будет брать заданное количество объектов.
    Так-же работает для вагонетки с сундуком или воронкой.
    Если перед роботом нет объекта с инвенторем, то робот будет пытаться подобрать объекты разбросанные вокруг себя, при этом параметр count будет проигнорирован.

    robot.suckUp([count: number]): boolean
    То-же, что и robot.suck, только для объектов находящимся в инвентаре или разбросаным над роботом.

    robot.suckDown([count: number]): boolean
    То-же, что и robot.suck, только для объектов находящимся в инвентаре или разбросаным под роботом.

    robot.durability(): number or nil, string
    Если робот оборудован инструментом, эта функция может быть использована для проверки целостности инструмента. Возвращается оставшуюся целостность инструмента, если таковая имеется, возвращает nil и причину в противном случае.

    robot.swing([side: number]): boolean[, string]
    Заставляет робота выполнить «левый щелчок», при этом используется оборудованный инструмент, если он имеется. Результат этого действия зависит от того, что находится перед роботом. Возвращает true и описание если что-то было разрушено или поражено, в противном случае false и причину.
    Параметр side определяет поверхность к которой робот пытается применить щелчок. Если параметр опущен – робот попытается применить команду ко всем сторонам. Это позволяет, при необходимости, дать больше контроля над направлением щелчка.
    Возвращаемая последовательность может содержать одно из:
    entity – когда робот атаковал препятствие.
    block – когда робот попытался разрушить блок.
    fire – если робот погасил какой-то огонь.
    air – если перед роботом ничего не находилось

    robot.swingUp([side: number]): boolean[, string]
    То-же, что и robot.swing но с использованием области над роботом

    robot.swingDown([side: number]): boolean[, string]
    То-же, что и robot.swing но с использованием области под роботом

    robot.use([side: number[, sneaky: boolean[, duration: number]]]): boolean[, string]
    Заставляет робота выполнить "щелчок правой кнопкой", при этом используя оборудованный инструмент, если он имеется. . Результат этого действия зависит от того, что находится перед роботом. Возвращает true и описание если что-то произошло, в противном случае false и причину.
    Параметр side определяет поверхность к которой робот пытается применить щелчок. Если параметр опущен – робот попытается применить команду ко всем сторонам. Это позволяет, при необходимости, дать больше контроля над направлением щелчка. Например для задания направления выпускаемой из лука стрелы.
    Параметр sneacky определяет, должен ли робот подкрадываться при исполнении функции. Например, это может быть применимо если необходимо установить блок на объект щелчок по которому правой кнопкой может его использовать (например открытие сундука).
    Параметр duration может быть использован для задания продолжительности использования. Например, это может быть использовано для достаточной натяжки стрелы на лук. Заметим, что это так-же влияет на принудительную паузу после вызова, т.е. если использовать объект 10 секунд, то робот выдержит паузу в несколько секунд.
    Возвращаемая строка может содержать:
    block_activated, если объект перед роботом был активирован, например рычаг был переключен или нажата кнопка.
    item_placed, когда объект был «размещен» в мире. Это может означать как размещение блока, так и размещение объекта в существующем блоке, например использование костной муки.
    item_interacted, если инструмент был использован на каком-то объекте, например ножницы на овце.
    item_used, если инструмент использовался без цели, например стрельба из лука.
    air, если инструмент не был использован и не может быть использован без цели.

    robot.useUp([side: number[, sneaky: boolean[, duration: number]]]): boolean[, string]
    То-же, что и robot.use, только c использованием области над роботом.

    robot.useDown([side: number[, sneaky: boolean[, duration: number]]]): boolean[, string]
    То-же, что и robot.use, только c использованием области под роботом.

    robot.forward(): boolean[, string]
    Делает попытку передвинуть на блок вперед. Возвращает true, если перемещение удалось, nil и причину в противном случае. Причины совпадают с блокирующими причинами в функции robot.detect.

    robot.back(): boolean[, string]
    Как robot.forward, но делает попытку переместиться на блок позади него.

    robot.up(): boolean[, string]
    Как robot.forward, но делает попытку переместиться на блок над ним.

    robot.down(): boolean[, string]
    Как robot.forward, но делает попытку переместиться на блок под ним.

    robot.turnLeft()
    Поворачивает робота на 90 градусов влево.

    robot.turnRight()
    Поворачивает робота на 90 градусов влево.

    robot.turnAround()
    Разворачивает робота на 180 градусов.
     
    Pizza, Annabuilder, Lomik и 3 другим нравится это.
  2. damix_pro

    damix_pro
    Архитектор
    370
    149
    313
    А нельзя получить ID блока перед роботом? Или хотя бы ID предмета в слоте?
     
  3. Jerubrin

    Jerubrin
    Архитектор
    231
    157
    293
    Напрямую получить ID не получится, можно использовать robot.compareTo
     
  4. damix_pro

    damix_pro
    Архитектор
    370
    149
    313
    Отстой..
     
  5. Wulwsten

    Wulwsten
    Архитектор
    3.432
    1.492
    443
    А ты думал. ТАм всего 3 строки , переключение на нужный предмет в инвентаре робота, сравнение, переключение в исходное.
     
    Jerubrin нравится это.
  6. shiboy

    shiboy
    Подрядчик
    6
    0
    236
    А что-нибудь сделать с инструментом, кроме как robot.durability нельзя? Если вручить роботу электрическую прилу, например, он ей браво машет, но восстановить заряд никак не получается.
     
  7. Wulwsten

    Wulwsten
    Архитектор
    3.432
    1.492
    443
    Напрчмую нет. Сожно сделать подсчет, когда сдыхает заряд и отправлять на подзарядку и робота и пилу [smile]
     
  8. Annabuilder

    Annabuilder
    Архитектор
    127
    117
    303
    Есть ли возможность роботом чинить вещи поломанные - нагрудники, шлемы и т.д.? Верстак вижу как апдейт робота, а использование верстака в API - не вижу.
     
  9. Wulwsten

    Wulwsten
    Архитектор
    3.432
    1.492
    443
    В его апи и не увидишь. Это для ванильнрго робота. Надо искать инстр. Для использования верстака.
     
  10. zarix

    zarix
    Подрядчик
    38
    6
    208
    а мне надо чтоб робот электропилой убивал монстров это что надо блоков перед ним убрать чтоб он не дотягивался и не разрушал и это надо вписать команду robot.swing([side: number]): boolean[, string]
    я правильно понял?если нет то прошу объяснить а то я полнейший нуб в этой части..
     
  11. Cherna_a

    Cherna_a
    Подрядчик
    33
    16
    208
    Просто robot.swing() и он ломает блок только ели он вплотную перед ним.
     
  12. zarix

    zarix
    Подрядчик
    38
    6
    208
    мне не надо чтоб он блок ломал-_-надо чтоб монстров убивал когда они падали по качалке вниз
     
  13. squirrel

    squirrel
    Заслуженный градостроитель
    3.239
    3.320
    558
    А есть ли гарантия что после того как робот убьет монстра - с него дропнутся ресы?
     
  14. Cherna_a

    Cherna_a
    Подрядчик
    33
    16
    208
    Выдай роботу меч и он будет убивать. Дроп с убитых роботом мобов идёт напрямую в инвентарь робота.
     
    Wulwsten нравится это.
  15. squirrel

    squirrel
    Заслуженный градостроитель
    3.239
    3.320
    558
    Крутяк))