Перейти к публикации
Форум - ComputerCraft
BrightYC

Робот Управление роботом в фоне

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

Всем привет.Решил наконец-то написать свою первую программу.

На байт я не претендую,но всё же.

Установка:

UPD: Очень прошу,не гриферить очень часто,иначе из-за вас роботов везде запретят

Создаём файл со скрытым расширением(Перед названием файла прописываем точку) и запихиваем ее в /bin(Так надёжнее)

Редактируем файл .shrc и вписываем туда название вашего файла(К примеру .robot) 

Всё!Вы великолепны-программа сама запускается и никогда не закроется.Если робот начал исполнять сразу 2 команды-перезагрузите робота командой R.А открыть Управление можно открыть клавишей T,закрытие программы-V.Всё остальное найдете уже в программе.

Видео:

https://youtu.be/PKBDCgEQeH8

 

UPD:Забыл сказать,если в программе которая работает как основная нету os.sleep или какого-нибудь таймера простоя - программа будет работать только после завершения.

UsICF38.png

Изменено пользователем BrightYC
  • Like 5

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


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

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

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


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

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

Да,спасибо.Вообще я хотел сделать копипасту управления робота Алекса,но после вчерашнего бага с картой у меня начала происходить всякая ерунда,я даже гуишку начал делать тогда.Ещё хотел сделать эмуляцию модема через интернет карту или по возможности использовать туннельную карту.Чтобы наверняка им управлять.Либо если нету модема то начать двигаться прямо вперед если нету игрока(useradd'ом проверять) и потом уже добавить модем и вернуть робота на место.На счёт смены инструментов-я совсем забыл что так можно,ибо в апи с роботом не было этого,а это контроллер инвентаря).Передачу данных не думаю что сложно прикрутить.Кстати-главная проблема передачи-у меня почему-то передавалось сразу 2 сообщения,из-за этого я выпилил прочность предмета в руке и заряд батареи.Как-нибудь переделаю.Кстати,вроде пока писал уже примерно знаю как передавать данные и принтить их.Но главная проблема пожалуй,это какие-то баги на карте-OpenComputers начинает передавать данные с модемов по 2 раза.Не знаю из-за чего это происходит.

 

UPD:Это лишь начало гуишки,когда я доделывал был заряд,управление,прочность

WDsJpqK.png

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

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


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

роботом то нам хочется управлять секретно.

Хм,а разве я и так им не управляю секретно?Никаких команд в терминале нет,ничего вроде нет,переменных глобальных тоже нет.Всё скрытно,если игрок не какой-нибудь задрот и не будет проверять .shrc

 

UPD:Дошло,чтобы не было никаких ошибок с работой,сейчас запилю)

Изменено пользователем BrightYC
  • Like 1

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


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

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

> Tablet.lua 45

И еще одна фишка, почитай вот эту тему, Как включить компьютер если заняты руки можно добавить разрешение на удаленный запуск.
Так-же совсем забыли про редстоун, а как робот будет хозяина то запускать в дом?
Вообще, как я думаю надо собрать своего рода универсальную программу, тоесть в роботе будет полная база по подключению тех или иных устройств, а на планшете доступ к ним. Например, в роботе есть красная плата, он передает данные на планшет, что такая карта есть и на планшете появляются опции разрешающие работу с ней. Или наоборот, красной платы нет, значит и опции для работы с ней вообще не нужны, следовательно не показываем их пользователю и все.
Это конечно сложно, придется пересмотреть всю систему приема/передачи данных, но в разы удобнее.
Далее рекомендую ознакомиться с темами:
http://computercraft.ru/topic/982-biblioteka-dlia-raboty-s-mobilnym-mostom-klien/
http://computercraft.ru/topic/2028-internet-modem-dlia-openos-cherez-irc/
Это должно помочь в управлении роботом не только через wifi.
Может добавить еще опцию управления роботом через шелл? Вот один из вариантов реализации такого
http://computercraft.ru/topic/744-planshetnoe-upravlenie-robotom/
Или вот, можно вытащить из управления дроном, там вообще чисто на шелле управление
https://hastebin.com/etulijoyox.cs
P.S. Не обновляй код на пастебине, просто под описанием темы добавь список версий, в спойлеры внеси, что добавил/пофиксил. Так будет интереснее наблюдать за прогрессом развития программы.

Изменено пользователем Asior
  • Like 2

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


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

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

> Tablet.lua 45

И еще одна фишка, почитай вот эту тему, Как включить компьютер если заняты руки можно добавить разрешение на удаленный запуск.

Может добавить еще опцию управления роботом через шелл? Вот один из вариантов реализации такого

П.с всё что ты сказал-постараюсь сделать.Порт хотел сделать,да забыл.И зачем управление с шелла?Так вот,к сути.Чтобы реализовать всё что ты сказал-мне нужно принимать данные не как данные,а как переменные с комментариями.К примеру я отсылаю modem.broadcast(port,data1,data2,data3) и принять нужно как data1,data2,data3, а не как одно сообщение.В этом главная проблема и я не знаю как это реализовать.Подкиньте идею.

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

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


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

П.с пока не умею пользоваться таблицами,но кажется уже понял как избавиться от куча if и elseif 

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


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

Мои впечатления от кода:

 

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

 

Функции drop(), dropUp() и dropDown() вряд ли работают так как это было задумано:

local function drop()
    for i = 1, size do
        robot.drop()
        robot.select(i)
    end
robot.select(i)
robot.drop()
robot.select(1)
end
Бессмысленно пищать динамиком о недостатке энергии при удаленном управлении:

    if energy <= 1500 then
    computer.beep()
end
Нужно сообщать эту информацию на планшет, а уже он сможет издавать звук или сигнализировать о проблеме иным путём.

 

Не ясно, что делает эта одиноко стоящая конструкция: math.floor(energy)

 

П.с пока не умею пользоваться таблицами,но кажется уже понял как избавиться от куча if и elseif

Длинная конструкция типа этой:

    if code == 17 then
robot.forward()
    elseif code == 30 then
robot.turnLeft()
    elseif code == 32 then
robot.turnRight()
...
перемещается в таблицу примерно таким образом:

local cmd = {
	[17] = robot.forward,
	[32] = robot.turnRight,
...
}
...
if cmd[code] then
  cmd[code]()
end

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


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

Мои впечатления от кода:

 

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

 

Функции drop(), dropUp() и dropDown() вряд ли работают так как это было задумано:

Бессмысленно пищать динамиком о недостатке энергии при удаленном управлении:

if energy <= 1500 then
    computer.beep()
end

Упс,я у себя этот код обновил,а на пастебине-нет.

Всё остальное-да,спасибо

math.floor округляет,но это я делал не для этого.Тоже забыл

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

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


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

 

 

И зачем управление с шелла?

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

  • Like 2

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


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

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

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

1) безопасно выполнить принятый код и отослать результат на пульт;

2) добавить принятый код как постоянную команду с назначенным номером;

3) удалить команду с определенным номером или сразу все для очистки памяти;

4) безопасно выполнить команду с определенным номером (что отчасти реализовано) и отослать результат выполнения на пульт.

 

А можно вообще обойтись только первым пунктом.

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

http://computercraft.ru/topic/833-bios-net-dlia-tcentralizovannogo-upravleniia-setiu-kont/

Он, конечно, не в фоне работал, но тут важен принцип функционирования.

  • Like 2

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


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

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

Я же в ирке обсуждал,значит уже начал делать))

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


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

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

1) безопасно выполнить принятый код и отослать результат на пульт;

2) добавить принятый код как постоянную команду с назначенным номером;

3) удалить команду с определенным номером или сразу все для очистки памяти;

4) безопасно выполнить команду с определенным номером (что отчасти реализовано) и отослать результат выполнения на пульт.

 

А можно вообще обойтись только первым пунктом.

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

http://computercraft.ru/topic/833-bios-net-dlia-tcentralizovannogo-upravleniia-setiu-kont/

Он, конечно, не в фоне работал, но тут важен принцип функционирования.

Пожалуйста,хватит,мой todo лист уже рвётся,а я еще не начинал делать:D

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


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

Кхм,засорять свою тему можно вопросами-или нет?Так вот,у меня дилемма,что делать если нет модема и интернет карты?В принципе не сложно еще добавить и туннельную,но это к сути.Я придумал только так чтобы робот ломал всё до потолка если он это может,долетал сколько может вверх и останавливался.

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


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

@@Asior

Ты говорил что у тебя на робокрафте были роботы заражённые подобной программой.Если не секрет-как работала кнопка "ямка вместо дома"
 

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


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

 

 

кнопка "ямка вместо дома"
 

код программы загружался через шелл и дальше робот пер крушить все и складывать в сундук, ну что за приватом. Как я уже говорил "ямка вместо дома" не запускалась, она так и осталась в планах ушедшего в небытиё сервера. Хотя в сингле все работало как надо.

 

 

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

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

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


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

Просто красавчик. Нечего сказать.

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


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

Короче,почти добавил кастомные команды по аналогии с интерпретатором.Работает пока через раз,но работает(Позволяет исполнять команды в интерпретаторе от лица робота,не шелл)

И да,

 

 

код программы загружался через шелл и дальше робот пер крушить все и складывать в сундук, ну что за приватом. Как я уже говорил "ямка вместо дома" не запускалась, она так и осталась в планах ушедшего в небытиё сервера. Хотя в сингле все работало как надо.

 

 

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

 

Как он определял где дом?Мне интересен алгоритм того как он ломал всё,или там по аналогии с карьером?

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


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

Еще проблема есть.Если во время работы робота убрать какое-то средство связи - программа перестанет работать.Решить я эту не могу,потому что в программе нет while true do.Программа работает на доверии того что робот принимает сообщения.Но я думаю это не критично,потому что модем/интернет карту ставят во внутренний слот,так что вроде всё ок.

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

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


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

 

код программы загружался через шелл и дальше робот пер крушить все и складывать в сундук, ну что за приватом. Как я уже говорил "ямка вместо дома" не запускалась, она так и осталась в планах ушедшего в небытиё сервера. Хотя в сингле все работало как надо.

 

 

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

 

Ну,тогда туннельную не буду добавлять.Хотя это самый безопасный метод передачи данных,потому что event.pull(UPD:А вроде и нет..)работает без порта,я пока думаю что с этим можно сделать

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

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


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

 

 

Как он определял где дом?Мне интересен алгоритм того как он ломал всё,или там по аналогии с карьером?

Да как карьер он работет. Выведи к крайней угловой точке за приватом, заставь его слопать пару алмазных сундуков и поставить их (чтобы админ не засек тебя по логам), далее разворот и самый базовый карьер с указанием размера ямки, длины и ширины  

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


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

Да как карьер он работет. Выведи к крайней угловой точке за приватом, заставь его слопать пару алмазных сундуков и поставить их (чтобы админ не засек тебя по логам), далее разворот и самый базовый карьер с указанием размера ямки, длины и ширины  

Хм,ну тогда ладно.Не очень удобно,если честно.

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


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

Очистил.

Изменено пользователем BrightYC
  • Like 1

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


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

Как я понял, программа требует одного запуска, далее просто нужно включать робота после демонтажа?

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


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

Как я понял, программа требует одного запуска, далее просто нужно включать робота после демонтажа?

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

Сначала создаёшь любой файл,со скрытым расширением-к примеру .robot (Не забудь точку,это важно)

потом редактируешь файл .shrc и вставляешь туда .robot 

И всё,ты можешь управлять роботом

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

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


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

.

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

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


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

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

UPD:Нашёл,возможно буду пробовать после обновления.

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

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


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

Очистил

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

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


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

Очистил.

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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×