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

quarry карьер

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

 

В 29.12.2020 в 04:58, eu_tomat сказал:

В следующий раз мы используем кирку 204 раз, затем 184 раза, затем 166 и т.д. Чем ниже остаток прочности, тем чаще выполняется его проверка

Зачем так сложно? Есть же излюбленный программистами способ - деление на два.

Берем предрассчитанную прочность кирки, когда счетчик насчитает половину использований, вызовем проверку robot.durability(), следующий раз вызовем через оставшуюся половину, и т. д.

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


Ссылка на сообщение
Поделиться на других сайтах
6 минут назад, Doob сказал:

Зачем так сложно?

Почему сложно-то? Я же не предлагаю работать именно с этими фиксированными числами, а иллюстрирую пример с железной киркой. От эксперимента к эксперименту эти числа будут отличаться в силу случайности износа при использовании. По факту же мы с тобой оба предлагаем одинаковое решение, но я даже на два не делю. Какое число я получил от robot.durability(), столько же раз использую инструмент до следующей проверки.

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


Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, van2614 сказал:

Изменил 10 на 100 на 435 строке. Перестал ложно возвращаться с непреодолимым препятствием. Играю на сервере и думаю, что дело в лагах.

Я рад что это помогло, и то что ты поделился решением с остальными, но думаю не всё так просто.

Робот это часть сервера, если сервер лагает (пропускает тики) , то и робот тоже.

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

 

@van2614 Если не сложно, можешь поменять значение с 10 на 1 и понаблюдать куда именно он там упирается,

скриншот приветствуется

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

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


Ссылка на сообщение
Поделиться на других сайтах
  1. 37 минут назад, serafim сказал:

    Если не сложно, можешь поменять значение с 10 на 1 и понаблюдать куда именно он там упирается,

    скриншот приветствуется

    Дело в чанках. Как только он заходит в чанк, где никого нет сразу разворачивается. Если же перебежать вместе с ним- идет дальше. Но это не всегда, бывает проходит, и если прошел начало с вероятность 90% дойдет до конца, даже если в чанке никого. И еще заметил, что по пустоте он передвигается гораздо медленнее, если рядом нет никого. Копает примерно одинаково.

1.jpg

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


Ссылка на сообщение
Поделиться на других сайтах
27 минут назад, van2614 сказал:

Как только он заходит в чанк, где никого нет сразу разворачивается

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

Выдержка из вики

Скрытый текст

Количество активных чанков вокруг игрока в одиночной игре определяется дальностью прорисовки:

от 25 на минимальной (2 чанка) до 4225 на максимальной (32 чанка).

В многопользовательском режиме чанки по умолчанию загружаются в радиусе 10 от игрока (21*21 чанк).

Радиус может быть сконфигурирован от 2 до 16, в зависимости от мощности оборудования и скорости подключения

 

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, serafim сказал:

Если не сложно, можешь поменять значение с 10 на 1 и понаблюдать куда именно он там упирается,

А ещё интересно было бы посмотреть, что именно там возвращают robot.forward() и robot.swing(). В случае неудачи обычно возвращается ещё и её причина.

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


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, eu_tomat сказал:

интересно было бы посмотреть, что именно там возвращают robot.forward() и robot.swing(). В случае неудачи обычно возвращается ещё и её причина.

В принципе можно добавить в код, но не знаю насколько полезна будит эта инфа

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


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

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

что то типа причина возврата: entity, block и т.д.

 

@van2614 если можешь, обнови прогу и отправь в соседний чанк чтоб робот вернулся с ошибкой,

думаю многим будет интересно что там происходит, а может и найдём решение

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


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

Хотелось бы еще что бы он сам инструмент заряжал поставить рядом мфэх и он его заряжал.

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

изображение_2020-12-31_003807.png

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


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

причина возврата: already moving (уже движется) ,занятно

 

8 минут назад, van2614 сказал:

Хотелось бы еще что бы он сам инструмент заряжал поставить рядом мфэх и он его заряжал.

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

14 минуты назад, van2614 сказал:

угольный генератор очень медленный

без генератора робот в лучшем случае прокопает пару слоёв и сдохнет

15 минут назад, van2614 сказал:

поставил рядом зарядочную станцию- намного лучше. Пока выгружает вещи уже почти полностью зарядился

Успевает зарядится только стандартная батарея на 20500 по умолчанию.

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

Ранее была функция зарядки при наличии зарядчика, выпилил за ненадобностью, но могу прикруть обратно.

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


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, serafim сказал:

причина возврата: already moving (уже движется) ,занятно

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

Robot.scala:

    if (agent.isAnimatingMove) {
      // This shouldn't really happen due to delays being enforced, but just to
      // be on the safe side...
      result(Unit, "already moving")

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

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


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, eu_tomat сказал:

причина возврата: already moving (уже движется) ,занятно

Нужна обёртка вокруг функции component.robot.move, которая будет перехватывать эту ошибку и повторять перемещение.

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, vx13 сказал:

Нужна обёртка вокруг функции component.robot.move, которая будет перехватывать эту ошибку и повторять перемещение.

Да, теперь-то, когда проблема была локализована, стало понятно, что надо не swing() выполнять, а повторить forward().

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, vx13 сказал:

Нужна обёртка вокруг функции component.robot.move

При получении ошибки "already moving" обнуляем счётчик попыток движения

 

обнова залита, ссылка таже

теперь едим не взирая на баг сервера

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


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, serafim сказал:

При получении ошибки "already moving" обнуляем счётчик попыток движения

Это решит проблему возврата робота, но останется:

20 часов назад, van2614 сказал:

И еще заметил, что по пустоте он передвигается гораздо медленнее, если рядом нет никого. Копает примерно одинаково.

 

7 минут назад, eu_tomat сказал:

стало понятно, что надо не swing() выполнять, а повторить forward().

 

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, vx13 сказал:

И еще заметил, что по пустоте он передвигается гораздо медленнее, если рядом нет никого. Копает примерно одинаково.

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

2 минуты назад, vx13 сказал:

стало понятно, что надо не swing() выполнять, а повторить forward().

там через robot.detect() движение, именно так он и будет себя вести

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


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

А goTo? там проверок нет. В коде есть обёртки для методов поворота. Так что добавление обёртки для методов перемещения напрашивается само собой.

 

 

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


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, vx13 сказал:

А goTo? там проверок нет. В коде есть обёртки для методов поворота. Так что добавление обёртки для методов перемещения напрашивается само собой.

ну может быть, но подозреваю что функция goto() распухнет раза в два

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


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

Так для этого и нужна обёртка, проверять на ошибку "already moving" в одном месте. Как-то так:

function robotMove(side)
  --здесь вызываем component.robot.move()
  -- повторяем в случае ошибки "already moving"
end

function robotForward()
  return robotMove(sides.front)
end

...

 

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


Ссылка на сообщение
Поделиться на других сайтах
// This shouldn't really happen due to delays being enforced, but just to

// be on the safe side...

Что-то с сервером накрутили.

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


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

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

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

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

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

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

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

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

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


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