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

Получение ответа от нанороботов

Вопрос

как можно получить значения возвращаемые командой например getHealth() и записать их в таблицу, ну или в несколько переменных? и поподробнее пж

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

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


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

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

как можно получить значения возвращаемые командой например getHealth() и записать их в таблицу, ну или в несколько переменных? и поподробнее пж

local health = getHealth()

local tab = {health}

local health1 = health

 

Я правильно тебя понял?

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


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

Если функция возвращает несколько значений:
 

function f()
  return 1, 2, 3, "Hello", "world"
end

То можно сохранить возвращаемые значения в несколько переменных, просто приравняв их к возвращаемому значению функции:
 

local number1, number2, number3, greetings1, greetings2 = f()

Или можно засунуть их в таблицу:
 

local result = { f() }

В таблице они расположатся по порядку под числовыми индексами, начиная с 1. То есть result[1] будет равен 1, result[4] будет равен "Hello" и т.п.

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

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


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

по моему не так, вот кусок гайда

  • getHealth():String,Number,Number. Значит, возвращает количество здоровья (текущее и максимальное). Чтобы не отвлекаться в дальнейшем, скажу сразу, что взвращаются данные так же через модем, через тот самый указанный порт. Так что не забудьте открыть его (modem.open(PORT)) и указать получение данных через event.pull("modem_message"). Формат данных: "modem_message", "адрес сетевухи на текущем компе", "адрес наноботов", порт, расстояние, "nanomachines", возвращаемые данные.... В данной функции возвращаемые данные: "health", 15, 20, где 15 — текущее, а 20 — максимальное состояния здоровья.

http://computercraft.ru/blog/3/entry-436-oc-tutorial-tutorial-po-nanobotam/

 

 

но я как всегда не понял, как это должно выглядеть в целом[

 

 

я так понимаю, что это должно выглядить примерно вот так

component.modem.broadcast(1, "nanomachines", getHealth())

но вот куда пойдёт вывод, хрен его знает [[

 

и как убрать серое выделение некоторых слов? а то мешается

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

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


Ссылка на сообщение
Поделиться на других сайтах
я так понимаю, что это должно выглядить примерно вот так component.modem.broadcast(1, "nanomachines", getHealth()) но вот куда пойдёт вывод, хрен его знает [[   и как убрать серое выделение некоторых слов? а то мешается

 

для сброса форматирования при составлении поста используй ластик (вторая иконка в первой строке)

 

А с нанитами попробуй так

type, currentHP, maxHP = component.modem.broadcast(1, "nanomachines", "getHealth")
print('Текущее знач. HP: '..currentHP)
print('Макс. знач. HP: '..maxHP)

по идее должно работать. Но это в частном случае. Судя по кусочку гайда, который ты где-то вырезал, то запрос к нанитам, видимо, возвращает первым значением какой-то стринг. Эти стринги можно, и наверно нужно проверять на всякий пожарный. И потом уже смотреть, что там еще вернулось и вернулось ли вообще, так как могут быть разные запросы к нанитам, ошибки и прочее.

например так:

data = {component.modem.broadcast(1, "nanomachines", command)}
if type(data) == 'table' then
 if data[1] == 'health' then
   currentHP = data[2]
 elseif data[1] == 'hunger'
   currentHunger = data[2]
 -- и т.д. и прочее
 end
end

но это все лабуда. Лучше поищи на форуме гайды по нанороботам. Fingercomp и Totoro и др. игроки писали когда-то эпические гайды по ним. И просмотри еще на досуге сам язык луа, операторы, базовые конструкции, циклы какие-то и прочие какашки, уроки там какие-то и пр. Тебе тяжело понять код по моду ОС потому, что ты только минут 10 изучал луа, а потом сразу окунулся с головой в опенКомПуктерс, и при чем не в самые простые его аспекты.

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


Ссылка на сообщение
Поделиться на других сайтах
type, currentHP, maxHP = component.modem.broadcast(1, "nanomachines", "getHealth") print('Текущее знач. HP: '..currentHP) print('Макс. знач. HP: '..maxHP)

 

 

примерно так и предполагал, но там вот шо ещё написано, и из-за этого я запутался

 

 

взвращаются данные так же через модем, через тот самый указанный порт. Так что не забудьте открыть его (modem.open(PORT)) и указать получение данных через event.pull("modem_message").

 

 

ну, lua я учил по нескольким гайдам по ~20 минут, а понять скорее всего сложно потому, что практики вообще не было, из-за этого плохо помню синтаксис, ну а остальное из-за незнания стандартных библиотек

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

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


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

шот не работает [надеюсь, библиотеки можно подключать так]

2017_08_24_16_58_33.png
Screenshot_701.png
Screenshot_702.png
 
p.s. а, вроде понял, щас проверю. если не поможет, то хоть одной ошибкой будет меньше
Изменено пользователем stripwire

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


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

немного исправил [в библиотеке сделал функцию локальной], теперь так

2017_08_24_17_19_07.png

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


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

Что то не понятно, что ты настрочил)
Вообще по идеи ты отправляешь сигнал на наниты broadcast (или send если знаешь адрес нанитов), а потом ловишь ответ с помощью event.pull().
P.S. Держи мою недоделку, в ней много косяков, но надеюсь что то полезное из нее вытащишь) https://pastebin.com/qwBM1LVQ

 

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


Ссылка на сообщение
Поделиться на других сайтах
шот не работает [надеюсь, библиотеки можно подключать так]

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

Давай так, начни с того, что для начала отдельно поработай с модемом, потом с таблицами, потом с либами, на самых простых примерах убедись, что ты правильно все делаешь и что твоя либа, которая просто прибавляет А к Б, работает. Потом составь какую-то простую таблицу и поработай с ней, потом функцию....

 

А потом перейдем к нанитам :) А то ты там в либе объявил пустую таблицу, потом какие-то фанкшины непонятные напихал, отретурнил ее же, эту пустую таблицу, и ждешь, чтобы что-то работало и наниты что-то делали.

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


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

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

Давай так, начни с того, что для начала отдельно поработай с модемом, потом с таблицами, потом с либами, на самых простых примерах убедись, что ты правильно все делаешь и что твоя либа, которая просто прибавляет А к Б, работает. Потом составь какую-то простую таблицу и поработай с ней, потом функцию....

 

А потом перейдем к нанитам :) А то ты там в либе объявил пустую таблицу, потом какие-то фанкшины непонятные напихал, отретурнил ее же, эту пустую таблицу, и ждешь, чтобы что-то работало и наниты что-то делали.

ну, значит я опять не понял по гайду как делать библиотеки] да и ещё одну ошибку нашёл, ладно, будем разбираться]

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


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

так, понял зачем нужны переменные "_", но по моему остаются старые сообщения, как их чистить?

Screenshot_715.png

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


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

Блин, откуда у тебя в эмуляторе могут быть нанороботы? :facepalm:

да, да, знаю, прост для начала тут тесчу

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


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

по моему остаются старые сообщения, как их чистить?

Где они остаются?

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


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

Где они остаются?

а, не, ошибся...

Screenshot_718.png

извените...

пока вопросов нету, позже затесчу на нанороботах в майне и узнаю, работает или нет

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


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

Если ты имеешь в виду как очистить экран, то можно так

--подключаем библиотеку
local term = require("term")

--команда очистить терминал
term.clear()

А если переменную 

local _,_,_,_,_,h1,h2,h3 = e.pull("modem_message")

то можно её не очищать , данные в ней заменятся при следующем ответе на сообщение модема, на то она и переменная

 

И ты мог бы код не в виде скриншота вставлять, а виде кода. В сообщении есть кнопочка с надписью КОД

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


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

Если ты имеешь в виду как очистить экран, то можно так

--подключаем библиотеку
local term = require("term")

--команда очистить терминал
term.clear()

А если переменную 

local _,_,_,_,_,h1,h2,h3 = e.pull("modem_message")

то можно её не очищать , данные в ней заменятся при следующем ответе на сообщение модема, на то она и переменная

 

И ты мог бы код не в виде скриншота вставлять, а виде кода. В сообщении есть кнопочка с надписью КОД

на счёт очистки переменных я думал, что в e.pull(modem_massage) остаётся старый вывод и тоже пишится в переменные, а потом новый

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


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

чёт не работайт

2017_08_26_10_35_46.png

local e = require("event")
local component = require("component")
local term = require("term")
local modem = component.modem
modem.open(1)
modem.broadcast(1,"nanomachines", "setResponsePort", 1)
modem.broadcast(1,"nanomachines", getHealth)
local a,b,c,d,f,g,h,h1,h2,h3 = e.pull("modem_message")
print(a)
print(b)
print(c)
print(d)
print(f)
print(g)
print(h)
print(h1)
print(h2)
print(h3)

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


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

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

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

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

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

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

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

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

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


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