Перейти к содержимому
  • 0
bob558

Основы Stargate

Вопрос

Здравствуйте!

 

Подскажите, как с помощью опенкомпутера соединить две или три воротины из мода Stargate?

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

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


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

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

Трое врат одновременно не соединить, но присоединиться сначала к одним, а потом к другим легко и просто

local event = require("event")
local stargate = require("component").stargate

status, info = stargate.dial('0000-000-sa') --возвращает true/false при подключении и в info ошибку если что-то пошло не так
a={}
while a[1] ~= 'touch' do --просто выводит все о чем информируют врата
  a={event.pull()}
  for i=1,#a do 
    print(a[i]) 
  end 
end
stargate.disconnect() --отрубает врата
Есть еще опция передачи сообщения между вратами (но нужна подгрузка с обоих сторон врат), закрытие/открытие ирис, проверка уровня топлива, проверка расхода топлива для перехода через врата и много иных опций. Можете сами пощелкать их и почитать, или при помощи программы kak-uznat-metody-komponentov-v-os

Или вручную

>lua
>=component.stargate
(море информации)
>=component.stargate.disconnect
(инфа по нужной функции)
кстати обрати внимание на тему что автоматически рекоментудется StarGate control panel Изменено пользователем Asior

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


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

Большое спасибо, за мысли !

Сейчас разбираюсь с информацией от врат.

 

Вот простой код, который соеденяет на 30 сеунд врата:

local comp = require("component")
local sg = comp.stargate
local term = require("term")


function main()
  term.clear()
  print("Введите адрес врат: ")
  local address = io.read()
  sg.dial(address)
  os.sleep(30)
  sg.disconnect()
end


while true do
 main()
end

StarGate control panel  смотрел, но там все завязано на keypad. Я хотел сам устанавливать адреса врат.

Изменено пользователем bob558

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


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

Эта программа попадалась на глаза. Программа сложная, я не смог разобраться

Изменено пользователем bob558

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


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

Столкнулся с ошибкой при открытии врат

 

SnimokPNG_3643901_26298549.jpg

 

Вот код программы:

 

https://pastebin.com/zRPU24PU

 

Интересно: что этот код открытия врат без обвязки работает великолепно:

 

local comp = require("component")
local sg = comp.stargate
local term = require("term")
local gpu=require('component').gpu
local key_net = 'W9MX-YD7-MF'

function main()
  term.clear()  
  local address = key_net
  sg.dial(address)
  os.sleep(10) -- время когда ворота открыты
  sg.disconnect()
end

while true do
 main()
end

В чем может быть проблема?

Изменено пользователем bob558

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


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

 

Столкнулся с ошибкой при открытии врат

В чем может быть проблема?

 

 

В 73-й строке ты объявляешь функцию sg:

local function sg()

И она начинает конфликтовать с переменной sg которая хранит прокси компонента ворот.

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


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

Totoro, огромное спасибо!!!

Забыл обратить на это внимание и был конфликт!  

Спасибо! Не первый раз выручаешь!!

 

Попровил код, поменял имя функции.

 

Теперь программа просто не видит врата старгейта. Установил принт "соединение?" после вероятного подключения к вратам, но соединения нет.

 

https://pastebin.com/1ErD2ymz

 

Ошибок не выдает, в то же время и  соединения нет :(((

Не могу понять где я что не так сделал.

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


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

Дело в том, что переменная address создается в функции touch, вне функции она не видна, поэтому ее следует объявить в начале программы, тогда она будет видна для всех функций.

 

Код слишком громоздкий, адреса/кнопки лучше как-нибудь упаковать отдельно, отрисовку рамок можно сделать за две операции gpu.fill.

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


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

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

В коде

  1.   stargate.dial(address)
  2.   gpu.set(20, 23, "соединение?"); os.sleep(0.5); gpu.set(20, 23, "                ") -- отладка
  3.   os.sleep(2) -- время когда врата открыты
  4.   stargate.disconnect()

 

Я проставил  os.sleep(2думал, врата stargate.dial(address) открываются и потом работает 2-х секундный слип  . Оказалось, во время слипа и происходит открытие врат. Поэтому для слипа нужно устанавливать  как минимум 20-30 секунд. 

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


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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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


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