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

Выкладка ресурсов в сундук

Вопрос

Есть программа, которая заставляет копать робота 3х3 "змейкой".

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

Как это сделать? Нужно знать же положение робота относительно сундука? Или просто принудительно довести его до угла дыры и поднять вверх? А может принудительно поднять и проверять каждый блок геолайзером (сундук ли это :D)?

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


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

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

  • 0

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

function moveup()
memlevel = level
while level > 0 do
 level = level - 1
 rt.up()
end
end

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


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

Когда-то давно, я просто переопределил все навигационные команды робота (forward, up, down, повороты) своими функциями, которые записывали изменение координат робота.

Была просто локальная переменна pos = {x = 0, y = 0, z = 0} которая хранила положение робота.

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

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


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

Как вариант: http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/ (хотя, я этим убожеством никогда не пользовался, привык все писать с нуля)

А чтобы определить, является ли блок сундуком: inventory_controller.getInventorySize(сторона)

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

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


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

Как вариант: http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/ (хотя, я этим убожеством никогда не пользовался, привык все писать с нуля)

А чтобы определить, является ли блок сундуком: inventory_controller.getInventorySize(сторона)

Вот это вещь! Ее реально будет прикрутить. Особенно тогда, когда все написано за тебя)

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

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


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

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

 

 

local component = require('component')
local robot = component.robot
local x, y, z, d = 0, 0, 0, 0 -- S = 0, W = 1, N = 2, E = 3 [+x = E, -x = W, +z = S, -z = N]

local tMove = {
  function() x = x - 1 end,
  function() z = z - 1 end,
  function() x = x + 1 end,
  [0] = function() z = z + 1 end
}

local function move(side) -- 0, 1, 3
  while robot.swing(side) do
  end
  if robot.move(side) then
    if side == 0 then
      y = y - 1
    elseif side == 1 then
      y = y + 1
    elseif side == 3 then
      tMove[d]()
    end
  end
end

local function turn(cc)
  if not cc then
    cc = false
  end
  if robot.turn(cc) then
    if cc then
      d = (d + 1) % 4
    else
      d = (d - 1) % 4
    end
  end
end

local function sturn(dT)
  while d ~= dT do
    if d == 0 and dT == 1 or d == 1 and dT == 2 or d == 2 and dT == 3 or d == 3 and dT == 0 then
      turn(true)
    else
      turn()
    end
  end
end

local function gotot(xt, yt, zt)
  -- X
  if x < xt and d ~= 3 then
    sturn(3)
  elseif x > xt and d ~= 1 then
    sturn(1)
  end
  while x ~= xt do
    move(3)
   end
  -- Z
  if z < zt and d ~= 0 then
    sturn(0)
  elseif z > zt and d ~= 2 then
    sturn(2)
  end
  while z ~= zt do
    move(3)
  end
  -- Y
  while y ~= yt do
    if y < yt then
      move(1)
    elseif y > yt then
      move(0)
    end
  end
end

 

 

gotot - переход на заданные координаты

move - обычное движение сквозь породу (0 - вниз, 1 - вверх, 3 - вперед)

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

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


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

Как вариант: http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/ (хотя, я этим убожеством никогда не пользовался, привык все писать с нуля)

А чтобы определить, является ли блок сундуком: inventory_controller.getInventorySize(сторона)

 

 

Вот это вещь! Ее реально будет прикрутить. Особенно тогда, когда все написано за тебя)

 

Господь с вами, забудьте вы за эти координаты и не считайте их, как в древних черепадликах. Юзайте навигатор человеческий, который Санги просто с небес дал и благо пока нечего не отрезал и не понерфил там, не добралась туда еще его ручища-нерфилка  :)

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


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

Господь с вами, забудьте вы за эти координаты и не считайте их, как в древних черепадликах. Юзайте навигатор человеческий, который Санги просто с небес дал и благо пока нечего не отрезал и не понерфил там, не дошла туда еще его ручища-нерфилка

Господь-то с нами, но не ты ли, Alex, регулярно печалишься о недостатке слотов для апгрейдов робота, и кому как ни тебе понять желание заменить аппаратные апгрейды программными средствами? Благо, для счета координат требуется совсем не много кода.

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

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


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

 

 

Господь с вами

 

 

YaGSiTmCRTs.jpg

hqdefault.jpg

 

 

Лучше конечно же освобождать лишний слот для деталей. К тому же разобраться немного с математикой координат всегда на пользу.

А то что не кто не использует в своих программах дефолтное улучшение, так с таким же успехом никто не использует улучшение поршня и прочие запрещённые улучшения. И что? Не кто не жалуется.

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


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

Лучше конечно же освобождать лишний слот для деталей. К тому же разобраться немного с математикой координат всегда на пользу.

А то что не кто не использует в своих программах дефолтное улучшение, так с таким же успехом никто не использует улучшение поршня и прочие запрещённые улучшения. И что? Не кто не жалуется.

ты просто не в теме и не представляешь возможностей навигатора и по сути получения реальных координат мира и универсальных спавнпоитов и точек каких-то у робота, баз зарядки, разгрузки и прочего в радиусе 2048 блоков на максимальной мапе в навигаторе. Катайся дальше и плюсуй по единичке  x и z , а переставив робота в майнерсе или в домике, сиди и на бумажке вычисляй относительный сдвиг стационарных локаций или вводи их как-то в память роботу=)

 

Ну а в робота запихай что-то более нужное, например карту частиц из комПуктерТроникса :)

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


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

 

 

и от этого начав захлебываться в собственном коде, в конце концов задумается и о пользе отступов и об оптимизации
Все будет, спокуха  :lol:  

 

 

 

Юзайте навигатор человеческий

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

rtDHt83.png

То выход - либо как-то использовать вэйпоинты, либо программно единички добавлять.

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


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

Робот катается в квадрате 4096 на 4096 на максимальной мапе и центром 0 0 относительно этой карты, которую ты сгенерил ванильную. Нужно просто центр мира совместить с картой робота один раз (внести поправку). Высоту он определяет абсолютную.

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


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

не представляешь возможностей навигатора и по сути получения реальных координат мира и универсальных спавнпоитов и точек каких-то у робота, баз зарядки, разгрузки и прочего в радиусе 2048 блоков на максимальной мапе в навигаторе. Катайся дальше и плюсуй по единичке  x и z , а переставив робота в майнерсе или в домике, сиди и на бумажке вычисляй относительный сдвиг стационарных локаций или вводи их как-то в память роботу=)

1) Координаты навигатора тоже относительные в радиусе 2048;

2) Программное плюсование координат необременительно даже по единичке;

3) Координаты стационарных локаций в память робота тоже нужно как-то вводить;

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

Достаточным будет лишь задать роботу стартовые координаты. Но он их забудет при выключении – это единственный недостаток программной навигации.

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


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

@@eu_tomat, хозяин барин, как говорится, считай, считай)

 

П.С. Только почему-то у вас роботы в лаву улетают или в бедрок,если движение пропустят и прочее. И что ты хочешь доказать? Что навигатор не нужен? )) Ну не юзай тогда квант и лазер, и гет и сетКурсор(), просто считай его позицию, и запоминай, когда что-то принтишь=). Геолайзер, навигатор, контроллер и ЧЛ-ка с рэдкартой и связью - это основные органы робота, копальщика конечно или какого-то полезного робота, а не коблогенераторщика)  

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


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

И что ты хочешь доказать? Что навигатор не нужен?

Всё нужно: и аппаратный навигатор и программный. Выбор решения зависит от условий задачи.

забудьте вы за эти координаты и не считайте их

Помните и считайте, если требуется.

 

Во-первых, ты сам не раз говорил о нехватке слотов под апргрейды, а программная навигация немного ослабит остроту твоей проблемы.

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

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

Трудности новичков вроде застревания робота в бедроке, остановки в лаве или ухода за пределы карты мало зависят от способа навигации, если та реализована правильно. А что, собственно, там реализовывать? Строк 20 несложного кода.

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


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

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

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

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

 

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

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

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

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


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

Интересно наблюдать, как автор темы ставит свой же ответ лучшим  :)

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Интересно наблюдать, как автор темы ставит свой же ответ лучшим  :)

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

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


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

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

Проблема в порочном алгоритме:

1) Задай вопрос;

2) Получи ответ;

3) Упрости решение, подстроив его под свой алгоритм;

4) Назови своё решение лучшим.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Проблема в порочном алгоритме:1) Задай вопрос;2) Получи ответ;3) Упрости решение, подстроив его под свой алгоритм;4) Назови своё решение лучшим.

:) Я очень люблю себя

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


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

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

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

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

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

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

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

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

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


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