Программное обеспечение вики, MediaWiki, обновлено до версии 1.33. Подробная информация об этом обновлении доступна на Справочной вики Gamepedia. В связи с обновлением возможны некоторые технические неполадки.

We are currently performing an upgrade to our software. This upgrade will bring MediaWiki from version 1.31 to 1.33. While the upgrade is being performed on your wiki it will be in read-only mode. For more information check here.

OpenComputers/Сигналы

Материал из Minecraft Wiki
Перейти к: навигация, поиск

Сигналы — это сообщения, которые посылаются компьютеру внешними источниками. Они используются во многих ситуациях.


Сигнал всегда содержит название. Кроме него он может содержать некоторое количество простых параметров.


Сигнал можно получить и обработать функцией computer.pullSignal() (Computer API), или, что более удобно, функцией event.pull() (Event API). Вторая функция предпочтительней, так как сигналы также распространяются как события (events), с которыми работают многие системные функции (поиск «главного» компонента, например).


Пример[править | править код]

Эта программа принимает сообщение модема:

local event = require("event")
local _, localNetworkCard, remoteAddress, port, distance, payload = event.pull("modem_message")
print("Received data '" .. tostring(payload) .. "' from address " .. remoteAddress ..
      " on network card " .. localNetworkCard .. " on port " .. port .. ".")
if distance > 0 then
  print("Message was sent from " .. distance .. " blocks away.")
end


Сигналы различных компонентов[править | править код]

Сигналы описаны в формате name(arg: type, ...). Это означает, что вы должны принимать их так: {{{1}}}.


Компьютер[править | править код]

  • component_added(address: string, componentType: string)

Сигнал посылает компьютер или робот, когда к нему присоединяется новый компонент.

    • address — адрес нового компонента.
    • componentType — тип нового компонента. (Например, redstone или gpu.)

Примечание: не используйте это событие, если возможно. Обрабатывайте сигнал component_available. Этот сигнал используется библиотекой Component API при добавлении «основного» компонента, или при переназначении «основного» компонента.


  • component_removed(address: string, componentType: string)

Сигнал посылает компьютер или робот, когда какой-либо компонент отсоединен.

    • address — адрес нового компонента.
    • componentType — тип удаленного компонента. (Например, redstone или gpu.)

Примечание: не используйте это событие, если возможно. Обрабатывайте сигнал component_unavailable. Этот сигнал используется библиотекой Component API при удалении «основного» компонента.


  • component_available(componentType: string)

Этот сигнал посылает библиотека компонентов, когда добавлен или изменён «главный» компонент. Используйте его вместо component_added, чтобы избежать конфликтов с библиотекой компонентов.


  • component_unavailable(componentType: string)

Этот сигнал посылает библиотека компонентов, когда отсоединен или удален «главный» компонент. Используйте его вместо component_removed, чтобы избежать конфликтов с библиотекой компонентов.


  • term_available()

Сигнал посылает библиотека терминала, когда становятся доступны видеокарта и монитор. Удобно использовать для того, чтобы определить когда становится возможно вывести текст на экран.


  • term_unavailable()

Сигнал посылает библиотека терминала, когда становятся недоступны видеокарта или монитор. Удобно использовать для того, чтобы определить когда становится невозможно вывести текст на экран.


Монитор[править | править код]

  • screen_resize(screenAddress: string, newWidth: number, newHeight: number)

Сигнал посылает монитор, когда меняется его разрешение. Например, когда его вручную изменили при помощи GPU API.

    • address — адрес монитора, который послал сигнал.


  • touch(screenAddress: string, x: number, y: number, button: number, playerName: string)

Сигнал посылается мониторами второго или третьего уровней, когда пользователь щелкает мышью по экрану. Это означает левый щелчок мыши когда открыт интерфейс экрана (когда к нему присоединена клавиатура) или правый щелчок мыши на мониторе из игрового мира (когда клавиатура не присоединена).

    • address — адрес монитора, который послал сигнал.
    • x и y — координаты точки щелчка в экранных координатах (которые используются функциями term.setCursor или gpu.set).
    • playerName — имя пользователя, который сделал щелчок.

Примечание: в будущем возможно появится функция, которая позволит отключить распознавание пользователя (если вы считаете, что это слишком… не реалистично). Однако это удобно при создания программ для большого количества пользователей.

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


  • drag(screenAddress: string, x: number, y: number, button: number, playerName: string)

Этот сигнал практически эквивалентен сигналу touch. Различие в том, что сигнал drag «принадлежит» сигналу touch, посланному до этого. То есть он регистрирует продолжающееся движение мышки с нажатой кнопкой.


  • drop(screenAddress: string, x: number, y: number, button: number, playerName: string)

Этот сигнал будет послан только в том случае, если перед ним был послан сигнал drag. Сигнал обозначает, что пользователь отпустил кнопку мыши.


  • scroll(screenAddress: string, x: number, y: number, direction: number, playerName: string)

Этот сигнал посылают мониторы второго и третьего уровня, когда игрок использует колесико мыши в интерфейсе монитора.

    • address — адрес монитора, который послал сигнал.
    • x и y — экранные координаты (как и в событии touch) в которых находился курсор мыши.
    • direction — направление «скролла». Положительное значение означает «вверх», а отрицательное — «вниз». (Эти значения могут поменяться, в зависимости от операционной системы и настроек драйверов мыши).
    • playerName — имя пользователя, который вызвал событие.


  • walk(screenAddress: string, x: number, y: number[, playerName: string])

Сигнал посылают мониторы второго и третьего уровня, когда по ним ходит игрок или другое существо.

    • address — адрес монитора, который послал сигнал.
    • x и y — координаты блока в мультиблочном мониторе. Учтите, что в отличие от touch это событие может быть вызвано даже теми блоками экрана, которые ничего не отображают при текущем расширении.
    • playerName — имя пользователя, который вызвал событие.


Клавиатура[править | править код]

  • key_down(keyboardAddress: string, char: number, code: number, playerName: string)

Сигнал посылает клавиатура, когда пользователь нажимает кнопку в интерфейсе монитора. Сигнал может повторяться, если пользователь не отпускает её.

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


  • key_up(keyboardAddress: string, char: number, code: number, playerName: string)

Этот сигнал посылает клавиатура, когда пользователь отпустил кнопку в интерфейсе монитора.

Примечание: несмотря на то, что все ситуации, когда пользователь отходит от монитора, не отпустив зажатую кнопку, отслеживаются модификацией, могут возникнуть уникальные ситуации, когда это событие не будет послано.

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


  • clipboard(keyboardAddress: string, value: string, playerName: string)

Это событие посылает клавиатура, когда пользователь вставляет текст из буфера обмена (⇧ Shift+Insert или серединная кнопка мыши). Учтите, что максимальная длина вставляемого текста ограничена (см. файл конфигурации).

Важно: этот сигнал посылается только пользователями, которые зарегистрированы на компьютере (см. Computer API). Или тогда, когда ни одного пользователя не зарегистрировано (когда все пользователи имеют доступ к компьютеру).


Красный контроллер и Красная плата[править | править код]

  • redstone_changed(address: string, side: number)

Сигнал посылается компонентом, который работает с красным камнем, когда входящий сигнал красного камня изменяется.

    • address — адрес красного контроллера, или компьютера с красной платой, который послал сигнал.
    • side — константа, которая обозначает сторону (см. Sides API), принимающую изменившийся сигнал. Для контроллера это абсолютная сторона (относительно игрового мира), для компьютера — сторона относительно его передней панели.


Сетевая плата или Беспроводная сетевая плата[править | править код]

  • modem_message(receiverAddress: string, senderAddress: string, port: number, distance: number, ...)

Сигнал посылает сетевая плата (включая беспроводные), при получении пакета на открытый порт.

    • receiverAddress — адрес сетевой платы, которая приняла сообщение.
    • senderAddress — адрес отправителя сообщения.

Примечание: адрес отправителя может не совпадать с адресом сетевой платы, которая его отправила, если по пути пакет прошел через один или несколько роутеров (коммутатор или точку доступа).

    • port — порт на который было принято сообщение.
    • distance — расстояние до беспроводной платы, которая отправила сообщение. Для проводных плат расстояние всегда равно нулю.

Остальные параметры — это собственно данные пакета, отправленного функцией modem.send() или modem.broadcast().


Робот[править | править код]

  • inventory_changed(slot: number)

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

Если пользователь вручную заменяет содержимое ячейки (например, палки на факелы), будет послано два сигнала — один, когда старый предмет был удален из слота, второй — когда новый предмет бы положен в слот.

Если робот меняет местами содержимое двух слотов командой robot.transferTo(), будет послано четыре сигнала. По два сигнала на каждый слот.

Этот сигнал работает только непосредственно с инвентарем. Он не учитывает слоты для инструмента, карты, дискеты и апгрейда.


Датчик движения[править | править код]

  • motion(address: string, x: number, y:number, z:number, player: string)

Событие создает проходящее в области видимости датчика живое существо. Последний параметр — ник игрока или название существа.