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

Робот пропускает движения.

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

Проверил в простом варианте сегодня движения. Циклов 100 наверно сделал туда сюда на 10 блоков. Ничего робот уже не пропускает (я по крайней мере не выявил косяков), катаясь в воздухе. Видимо была проблема в версии (обновил с тех пор, с 23 апреля) и OS новая.  Скорее всего там был косяк.

 

При посте первом, 23 апреля, когда  BarBoss написал, да, уже на втором или третьем развороте робот начал стопориться и не выполнял 10 движений в форе.

 

Но реально, если перед роботом ничего нет, он должен треснуть, но выполнить 10 перемещений в цикле

for i=1 , 10 do
   robot.forward()
end

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

 

По идее, метод robot.forward() должен начать и закончить перемещение (или вернуть nil и причину [string],  если не может робота переместить) и только тогда отдать управление дальше программе. Как бы там даже сервак не лагал и прочее, пропусков не должно быть.

 

И их сейчас по состоянию на 15.05.2015, 01:00 по МСК я не обнаружил.

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


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

Что довольно странно, но делал программки на MC 1.8 с последним OC и встретил этот баг, решил проверить на 1.7.10 - аналогично.
К примеру в этом коде:

robot.swingDown()
robot.down()
robot.swingDown()
robot.up()

стабильно игнорится вторая строчка, при чем другие движения/взаимодействия работают довольно четко, но в паре с функцией swing происходят ошибки (иногда даже путает слоты инвентаря). Слипы не помогают, что делать?  :smile14:  Переписать robot API?

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

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


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

Создаём файл /lib/robo.lua, например, и пишем что-то типа этого (не тестил, будет ли работать):

local robot = require("robot")
local attempts = 5 -- Указыавет, сколько следует сделать попыток выполнить данное действие


local function tryToDo(func)
  local success = false
  for i = 1, attempts, 1 do
    if not func() == true then
      os.sleep(0.5)
    else
      success = true
      break
    end
  end
  return success
end

local funcsToOverride = {"down", "up", "turnLeft", "turnRight", "forward", "swing"} -- просто заполняем список функциями для перезаписи на стабильные версии
for i = 1, #funcsToOverride, 1 do
  robot[funcsToOverride[i]] = function()
      local success = false
      for i = 1, attempts, 1 do
        if not robot[funcsToOverride[i]]() == true then
        os.sleep(0.5)
      else
        success = true
        break
      end
    end
  return success


    end
end
return robot
Изменено пользователем Fingercomp

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


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

 

Создаём файл /lib/robo.lua, например, и пишем что-то типа этого (не тестил, будет ли работать):

local robot = require("robot")
local attempts = 5 -- Указыавет, сколько следует сделать попыток выполнить данное действие


local function tryToDo(func)
  local success = false
  for i = 1, attempts, 1 do
    if not func() == true then
      os.sleep(0.5)
    else
      success = true
      break
    end
  end
  return success
end

local funcsToOverride = {"down", "up", "turnLeft", "turnRight", "forward", "swing"} -- просто заполняем список функциями для перезаписи на стабильные версии
for i = 1, #funcsToOverride, 1 do
  robot[funcsToOverride[i]] = function()
      local success = false
      for i = 1, attempts, 1 do
        if not robot[funcsToOverride[i]]() == true then
        os.sleep(0.5)
      else
        success = true
        break
      end
    end
  return success


    end
end
return robot

То, что надо! Ща затестим...

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

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


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

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

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


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

надо ОЗУ больше (помню эту проблему, и как над ней с тоторо мучались)

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


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

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

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

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

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

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

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

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

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


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