Перейти к содержимому
eu_tomat

Баг или фича в OC? Компьютер ловит события красной платы соседнего компьютера.

Рекомендуемые сообщения

Я, кажется, нашёл мелкий баг в OpenComputers-MC1.7.10-1.7.5.1290-universal.jar, на других версиях не проверял.

 

Спавним компьютер командой /oc_sc, в интерпретаторе Lua запускаем что-то вроде while true do print(computer.pullSignal())end и наблюдаем за поступающими событиями.

 

Вплотную к корпусу компа ставим ещё один корпус, ловим событие component_added, но это не удивительно.

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

Ставим рядом со вторым корпусом красный факел и... ловим событие redstone_changed в первом компе.

 

Компонент redstone отсутствует в списке компонентов первого компа, но событие этого компонента ловится. Второй корпус пустой, в нём нет ничего кроме красной платы.

 

Upd: Компы не обязательно ставить в смежных блоках. Соединив их кабелем, получаем тот же эффект. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще, это логично. В старых версиях тоже должно работать.

Если компонент находится в другом корпусе, у него только отключается видимость, а функционал остается. Т. е. компонент в одну сторону имеет доступ, а к нему доступа нет.

https://github.com/MightyPirates/OpenComputers/blob/master-MC1.12/src/main/scala/li/cil/oc/server/network/Component.scala

 

Меня больше смущает oc_wlan, однажды она перестала работать, хотя ничего не изменилось. Возможно, что-то с форжем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Doob сказал:

Вообще, это логично. В старых версиях тоже должно работать.

Если компонент находится в другом корпусе, у него только отключается видимость, а функционал остается. Т. е. компонент в одну сторону имеет доступ, а к нему доступа нет.

Что-то при такой логике вопросов больше чем ответов.

Да, функционал остаётся. Но разве он должен быть доступен для другого компьютера?

Тогда, может, и сетевая карта тоже должна генерировать события в другом компьютере? Но не генерирует.

И почему доступно событие от компонента без доступности самого компонента?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А что это? Баг или фича?

 

Ставим на монитор кнопку.

Нажимаем кнопку, монитор гаснет.

Нажимаем ещё раз, монитор снова показывает картинку.

Включать картинку можно не только нажатием кнопки, а также выходом из игры и повторным входом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Для таких случаев и существует Power Distributor и Relay, через них сигналы не проходят.

 

А с монитором все очевидно, он не сохраняет состояние после перезагрузки. Раньше вообще, апдейт блоков не работал в некоторых способах загрузки чанка, поэтому схемы на редстоуне приходилось постоянно пинать, чтобы прошел апдейт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, Doob сказал:

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

Да, оказалось, генерирует. Но только во включенном компьютере. А красная карта генерирует событие даже в выключенном, без процессора и памяти.

21 минуту назад, Doob сказал:

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

Теперь понятно. Логика в том, что такова механика на данный момент. И уже не так важно, для каких компонентов событие генерируется только во включенном состоянии содержащего их корпуса, а для каких даже в выключенном. Просто надо быть готовым к тому, что может прийти сообщение от компонента с другого компа в той же сети.

 

25 минут назад, Doob сказал:

А с монитором все очевидно, он не сохраняет состояние после перезагрузки. Раньше вообще, апдейт блоков не работал в некоторых способах загрузки чанка, поэтому схемы на редстоуне приходилось постоянно пинать, чтобы прошел апдейт.

С глюками обновления понятно. Но отключение и включение монитора красным сигналом разве является фичей?

 

 

Оказалось, является. Нигде не нашёл упоминания об этом в документации, но помог код tileentity/Screen.scala:

  override protected def onRedstoneInputChanged(args: RedstoneChangedEventArgs) {
    ...
        origin.buffer.setPowerState(!origin.buffer.getPowerState)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну с сигналами логика строгая.

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

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

Если комп выключен и установлено wake-up сообщение, то никаких сигналов не посылается, кроме внутреннего на корпус. Это при получении wake-up

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...