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

NEO

Пользователи
  • Публикации

    1 436
  • Зарегистрирован

  • Посещение

  • Победитель дней

    78

Сообщения, опубликованные пользователем NEO


  1. 9 минут назад, eu_tomat сказал:

    А в каком файле и какой параметр следует поменять?

    Я поискал по всем файлам фразы code/encofing, и не нашёл никаких конфигов. Только в jar-файлах что-то нашлось.

    Эм... сам файл на диске закодирован в ISO 8859-1.


  2. 1 час назад, vx13 сказал:

    Никакие чанки не загружаются при отправке сообщения. В isUnobstructed перед получением блока вызывается функция blockExists, которая проверяет загружен ли чанк по указанным координатам.

     

    Вот код функции World::blockExists:
     

    /** * Returns whether a block exists at world coordinates x, y, z */ public boolean blockExists(int p_72899_1_, int p_72899_2_, int p_72899_3_) { return p_72899_2_ >= 0 && p_72899_2_ < 256 ? this.chunkExists(p_72899_1_ >> 4, p_72899_3_ >> 4) : false; }

    World::chunkExists:

    /** * Returns whether a chunk exists at chunk coordinates x, y */ protected boolean chunkExists(int p_72916_1_, int p_72916_2_) { return this.chunkProvider.chunkExists(p_72916_1_, p_72916_2_); }

    вот реализация chunkExists в классе ChunkProviderServer (экземпляр именно этого класса хранится в поле chunkProvider класса WorldServer, который и представляет мир на сервере):

    /** * Checks to see if a chunk exists at x, y */ public boolean chunkExists(int p_73149_1_, int p_73149_2_) { return this.loadedChunkHashMap.containsItem(ChunkCoordIntPair.chunkXZ2Int(p_73149_1_, p_73149_2_)); }

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

    Квантовая запутанность наглядно.


  3. 1 час назад, eu_tomat сказал:

    @Disc2 О каких каскадах ты говоришь? Предлагаешь в чанках, загруженных с помощью беспроводной передачи, разместить дополнительные приёмники и передатчики, загружающие новые чанки?

     

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

    Нецелесообразно лишь предполагать, лучше заглянуть в код.

    • Против 1

  4. 9 часов назад, eu_tomat сказал:

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

     

    Игрок считает загруженным тот чанк, в котором протекают какие-то игровые процессы. Требуется ли загрузка чанка именно в этом смысле, для того чтобы прочитать плотность блока? Скорее всего, нет. Тогда и выгрузка не требуется. А иначе можно было бы с помощью двух чанклодеров поддерживать активными не 18 чанков, а 38.

     

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

     

    Или как оно работает в Майнкрафте?

    Допустим никаких процессов не протекает, но периодическое чтение диска данный процесс требует, если не проверять на "видимость" между ЭВМ.


  5. 12 часа назад, eu_tomat сказал:

    Действительно, есть помеха от блоков.

     

    Физика интересная. Сигнал распространяется по прямой линии в канале сечением 3x3. Суммарная помеха вычисляется из плотностей нескольких случайно выбранных блоков в этом канале. Может, например, оказаться, что всё это блоки воздуха. Или наоборот, самые плотные блоки. Любой из блоков может быть выбран повторно, что ещё сильнее увеличивает разброс средней плотности.

     

    Ошибки в моём эксперименте:

    • Я выполнил единственную передачу и она оказалась успешной. Последующие могли быть и не столь удачными.
    • Я заложил камнями отрезок от компьютера до компьютера, но это не весь канал а лишь одна девятая его часть. Это снизило вероятность неудачи.
    • Я использовал обычный камень. Думаю, алмазная руда смогла бы внести более серьёзную помеху.

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


  6. 11 час назад, Bumer_32 сказал:

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

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


  7. 15 часов назад, eu_tomat сказал:

    Если провести аналогию с реальностью, то дети в песочнице строили домики и лепили куличики.

     

    Один из них построил домик. Спрашивает других: можно ли сделать лучше. Другие оценивают. Кто-то спрашивает: а это зачем, оно же тут лишнее. Другой говорит, нет, не лишнее, и наоборот, так даже лучше. Другие тоже заинтересовались. Обсудили, нашли лучший вариант, какой смогли, и довольные разошлись по домам.

     

    Через два дня домик смыло дождём. Но дети с радостью вспоминали опыт коллективного творчества: они обязательно применят его в своих взрослых проектах. И только вечно недовольная старуха Шапокляк злобно шептала: всё тлен, всё тлен...

    Есть основательные предположения что лучший домик или куличик всего навсего сломают те у кого не получилось. Ожидаема реакция на твоё стремление к улучшению.


  8. io.read занимает поток исполнения тем что ожиданиет событие и нажатие Enter, в твоём случае тебе нужно отдельно обрабатывать событие key_down и modem_message - тогда появится видимость многопоточности или использовать библиотеку thread. Да, код в тег обернуть бы, а лучше на пастбин аплоднуть.

    • Одобряю 1

  9. 9 часов назад, eu_tomat сказал:

    Реактор производит вычисления с компонентами один раз в секунду. Это событие можно назвать реакторным тиком. Можешь предложить лучший термин.

     

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

     

    Эти утверждения основаны на экспериментальных данных.

    Познавательно выходит. Забыл про этот кусок кода:

    if (this.updateTicker++ % this.getTickRate() != 0) {
    return;
    }

    Таки да.

    Интересный момент, всякий раз updateTimer инициализируется не нулем, а псевдослучайным числом в диапазоне от 0 до 20. Из этого следует что первый реакторный тик случайно происходит.

    • Нравится 1

  10. 4 часа назад, eu_tomat сказал:

    реакторный тик

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


  11. 6 минут назад, Fingercomp сказал:

    Вот полное решение.

    
    local function processEscapes(str)
      return (str:gsub("\\u{(%x+)}", function(hex) return utf8.char(tonumber(hex, 16)) end)
      	:gsub("\\(%d%d?%d?)", function(dec) return string.char(tonumber(dec, 10)) end)
      	:gsub("\\x(%x%x)", function(hex) return string.char(tonumber(hex, 16)) end)
      	:gsub("\\z%s*", "") -- skip whitespace
        :gsub("\\\n", "\n")
        :gsub("\\([abfnrtv\\\"'])", {
          a = "\a",
          b = "\b",
          f = "\f",
          n = "\n",
          r = "\r",
          t = "\t",
          v = "\v",
          ["\\"] = "\\",
          ['"'] = '"',
          ["'"] = "'",
        }))
        :gsub("\\(.)", function(c) error("invalid escape sequence: \\" .. c) end)
    end

    P. S. Форум убивает форматирование, не спрашивая меня.

    Половинку луа лексера скопировал. :D

    • Спасибо 1

  12. 23 минуты назад, miner7 сказал:

    @NEO , да, неправильно описал задачу, тут конкретно string. Есть ли вариант с ним?

    Как я понял тебе нужно заменить \{char} на управляющий байт?

    local someText = "Lorem ipsum \\n dolor sit amet"
    local result = someText:gsub("\\(%w)", {
        a = "\a",
        b = "\b",
        f = "\f",
        n = "\n",
        r = "\r",
        t = "\t",
        v = "\v",
    })

    На данный момент я имею такое решение.

    • Спасибо 2

  13. 20 минут назад, miner7 сказал:

    @NEO , спасибо, а можно, пожалуйста, пример использования?) Подставлял вместо someText свою строку, выход идентичен входу.

    https://www.lua.org/cgi-bin/demo

    local someText = "Lorem ipsum \\\\n dolor sit amet"
    print(someText)
    print(string.gsub(someText, "\\\\(%w)", "\\%1"))

    Вывод

    Цитата

    Lorem ipsum \\n dolor sit amet
    Lorem ipsum \n dolor sit amet    1

     

    • Спасибо 1

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

    Сеанс телепатии прошёл неудачно. Я счёл вводные данные ошибочными.

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

     

    Это ошибка, или так и задумано?

    local reguser = "1.10a4d55a8d778e5022fab701977c5d840bbc486d0,d8f4590320e1343a915b6394170650a8f35d6926,8888"

    local reguser = "1.10a4d55a8d778e5022fab701977c5d840bbc486d0,d8f4590320e1343a915b6394170650a8f35d6926,8888"

     

     

     

    Коварно придуманный протокол шифрования и сжатия, 2 в 1.

    • Спасибо 1

  15. В 24.07.2021 в 17:32, AndySingularity сказал:

    Продвинутый пользователь как вы действительно может использовать эмуляторы и прочее. Мы с вами можем программировать хоть в vim. Но речь не о продвинутых пользователях, а о новичках, которые знать не знают про оцелот. Они учатся программировать не ради самого программирования. Новички хотят сделать на мониторе крестики-нолики, чтобы их оценили друзья. Они хотят сделать робота, который бы за них копал или ещё что-то. Они учатся ради прикладного игрового интереса. Вот почему условия программирования в выживания важны.

    Как я понимаю, в планировании и удобстве нет нужды? Креатив в майне не новоявленный. Если хочется накодить игру - всегда лучше зайти в сингл с креативом и удобным редактором. Если у индивида есть желание ковырять луа, то узнать о более удобных методах довольно тривиально. Таким образом разница сводится к минимуму, для тех кто путается в трёх соснах - разработчики оц добавили команду oc_sc.

    • Нравится 1
    • Ха-ха 1
×
×
  • Создать...