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

serafim

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

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

  • Посещение

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

    46

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


  1. Анимированные текстуры из этого изменённого мода выглядят симпатично.

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

    {
      label = "Квантовый генератор",
      shapes = {
        {0,15,0,16,16,16,texture = "advancedsolarpanel:qgen_top"},
        {0,0,0,1,15,16,texture = "advancedsolarpanel:qgen_a_side"},
        {1,0,0,15,15,1,texture = "advancedsolarpanel:qgen_a_side"},
        {1,0,15,15,15,16,texture = "advancedsolarpanel:qgen_a_side"},
        {15,0,0,16,15,16,texture = "advancedsolarpanel:qgen_a_side"},
        {1,0,1,15,1,15,texture = "advancedsolarpanel:qgen_bottom"},
      }
    }

     


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

    две стороны вышли нормальными, как должно быть, а остальные две — будто зеркальное отображение, цифры.

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


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

    {
     label = "Фейк",
     tooltip = "Поддельный верстак",
     shapes={
      {0,15,0,16,16,16, texture="crafting_table_top"},
      {0,0,0,16,15,1, texture="crafting_table_side"},
      {0,0,15,16,15,16, texture="crafting_table_side"},
      {0,0,1,1,15,15, texture="crafting_table_side"},
      {15,0,1,16,15,15, texture="crafting_table_side"}
     }
    }

    если есть возможность скинь .jar файл мода, на стандартном моде помощь проблематична


  4. В файлах мода у квантового генератора всего 2 текстуры, когда он активен и выключен

    Можно напечатать не описывая все стороны по отдельности

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

    {
      label = "Квантовый генератор",
      shapes = {
        { 0,0,0,16,16,16,texture = "advanced_solar_panels:blocks/quantum generator active" },
      }
    }

    hRHccwB.png


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

    Чтоб вставить тут есть кнопочка код


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

    P.S. Такой еще вопрос, как можно увеличить размер шрифта?

    Со шрифтами не всё так просто, в OS по умолчанию нет возможности их поменять.

    Один символ на экране = одной ячейке, размер ячейки можно увеличить добавив ещё мониторов увеличив площадь.

    Можно воспользоватся сторонними библиотеками и шрифтами https://computercraft.ru/topic/2336-ocbf-—-rastrovye-shrifty-dlya-opencomputers/

    Предлагаю более простой вариант отрисовки времени при помощи закрашивания ячеек.

    Код был взят отсюда https://computercraft.ru/blogs/entry/360-lua-programming-oc-finger-clock-—-stilno-udobno-i-bez-lishney-vyrviglaznosti/

     

    Отсчёт времени большими символами

    Скрытый текст
    
    local seconds = 12000 -- секунд
    
    local com = require("component")
    local gpu = com.gpu
    local w,h = gpu.getResolution()
    
    local nums = {}
    nums[0] = {"███", "█ █", "█ █", "█ █", "███"}
    nums[1] = {"██ ", " █ ", " █ ", " █ ", "███"}
    nums[2] = {"███", "  █", "███", "█  ", "███"}
    nums[3] = {"███", "  █", "███", "  █", "███"}
    nums[4] = {"█ █", "█ █", "███", "  █", "  █"}
    nums[5] = {"███", "█  ", "███", "  █", "███"}
    nums[6] = {"███", "█  ", "███", "█ █", "███"}
    nums[7] = {"███", "  █", "  █", "  █", "  █"}
    nums[8] = {"███", "█ █", "███", "█ █", "███"}
    nums[9] = {"███", "█ █", "███", "  █", "███"}
    
    local function SplitNumber(num)
      local n1, n2
      if num >= 10 then
        n1, n2 = tostring(num):match("(%d)(%d)")
        n1, n2 = tonumber(n1), tonumber(n2)
      else
        n1, n2 = 0, num
      end
      return n1, n2
    end
    
    local function DrawNumbers(hh, mm, ss)
      local n1, n2, n3, n4, n5, n6
      n1, n2 = SplitNumber(hh)
      n3, n4 = SplitNumber(mm)
      n5, n6 = SplitNumber(ss)
      for i = 1, 5, 1 do
        local lineToDraw = nums[n1][i].."  "..nums[n2][i].." : ".. nums[n3][i].."  "..nums[n4][i].." : "..nums[n5][i].."  "..nums[n6][i]
        gpu.set((w / 3), (h / 3) + i, lineToDraw)
      end
    end
    
    gpu.fill(1,1,w,h," ")
    
    while true do
      local hh, mm, ss
      for i = seconds, 1, -1 do
        mm = math.floor(i / 60)
        ss = i % 60
        hh = math.floor(mm / 60)
        mm = mm % 60
        DrawNumbers(hh, mm, ss)
        os.sleep(1)
      end
      -- выполнить код
    end

     

     

    отсчёт 1200 секунд

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

    rJ2jWuY.gif


  7. Норм :)

    В print добавь закрывающую скобку.

    Эмулятор OCEmu показывает три часа, хотя только открыл, видимо кастыли, щас на роботе гляну

     

    Всё норм, спасибо за простую реализацию

    • Нравится 1

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

    и смотреть что прошло 100500 секунд крайне не удобно, куда привычнее наблюдать в формате часов.

    Перекопав интернет на LUA ни чего не нашел, только на C# так что адаптировав оставлю примеры здесь,

    может кому и  пригодится. Добавил варианты предложенные @BrightYC

     

    Перевод секунд в формат часов

    Скрытый текст
    
    timestamp = 100500 -- любое число в секундах
    
    print(os.date("%H:%M:%S", timestamp))

     

    Скрытый текст
    
    local function sectotime(seconds)
      local m = math.floor(seconds / 60)
      local s = seconds % 60
      local h = math.floor(m / 60)
      local m = m % 60
      print("Ч: "..h.."  М: "..m.."  С: "..s)
    end
    
    sectotime(100500) -- секунд

     

     

    Показать сколько прошло времени от включения в формате часов

    Скрытый текст
    
    local computer = require("computer")
    
    print(os.date("%H:%M:%S", computer.uptime()))

     

    Скрытый текст
    
    local computer = require("computer")
    local term = require("term")
    
    local uptime = computer.uptime()
    
    local function pasttime()
      local seconds = math.ceil(computer.uptime()-uptime)
      local m = math.floor(seconds / 60)
      local s = seconds % 60
      local h = math.floor(m / 60)
      local m = m % 60
      term.write("Ч: "..h.."  М: "..m.."  С: "..s)
    end
    
    term.clear()
    while true do
      pasttime()
      os.sleep(1)
      term.clearLine()
    end

     

     

    Отсчет времени в формате часов

    Скрытый текст
    
    local term = require("term")
    local seconds = 120 --секунды
    
    term.clear()
    for i = seconds, 1, -1 do
      term.write(os.date("%H:%M:%S", i))
      os.sleep(1)
      term.clearLine()
    end
    term.clear()
    print("время вышло")

     

    Скрытый текст
    
    local term = require("term")
    
    local function countdown(seconds)
      term.clear()
      for i = seconds, 1, -1 do
        local m = math.floor(i / 60)
        local s = i % 60
        local h = math.floor(m / 60)
        local m = m % 60
        term.write("осталось  ".."Ч: "..h.."  М: "..m.."  С: "..s)
        os.sleep(1)
        term.clearLine()
      end
      term.clear()
    end
    
    countdown(120) -- секунды
    print("время вышло")

     

     

    • Одобряю 1

  9. @BrightYC посмотри как работает код:

     

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

    Скрытый текст
    
    строка 270  energy = robot.durability() -- получить уровень износа/разряда инструмента
    строка 271  while energy == robot.durability() do -- пока не обнаружена разница
    строка 272    robot.place(3) -- установить блок
    строка 273    robot.swing(3) -- разрушить блок
    строка 274  end
    строка 275  W_R = energy-robot.durability() -- записать результат

     

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

    Скрытый текст
    
    строка 78  check = function(forcibly) -- проверка инструмента, батареи, удаление меток
    строка 79  if steps%32 == 0 or forcibly then -- если пройдено 32 шага или включен принудительный режим
    строка 80    local delta = math.abs(X)+math.abs(Y)+math.abs(Z)+64 -- определить расстояние
    строка 81    local cx, cy, cz = X, Y, Z -- сохранить текущие координаты
    строка 82    if robot.durability()/W_R < delta then -- если инструмент изношен
    строка 83      report('tool is worn')
    строка 84      home(true) -- отправиться домой
    строка 85    end

     

    если заряда не достаточно то отправляется на стартовую точку для обслуживания

    Скрытый текст
    
    строка 405  home = function(forcibly) -- переход к начальной точке и сброс лута

     

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

     

    поиск в сундуке такого же инструмента с износом(или зарядом) более 30 процентов,

    если в сундуке нет подходящего, то ищем рядом зарядник и пытаемся зарядить инструмент,

    если зарядился продолжаем копать, если нет то ждём новый инструмент

    Скрытый текст
    
    строка 539  while robot.durability() < 0.3 do
    строка 540    report('need a new tool')
    строка 541    sleep(30)
    строка 542  end

     

     

    • Нравится 2

  10. Добавил в программу контроля реактора немного функционала:  

     

    Проверку на то что конденсатор был заменён. 

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

     

    Проверки при старте программы:

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

     

    В очередной раз переделал логику на оптимальную(по крайне мере пока)

     

    Провёл оптимизацию кода насколько хватило терпения

     

    Если в работе программы заметите ошибки или недоработки, пишите, по возможности исправлю


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

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

     

    @BrightYC  простенький код  в довесок к твоему

    local full = false
    local x_max, y_max = gpu.maxResolution()
    
    [44] = function() full = not full if full then gpu.setResolution(1, 1) else gpu.setResolution(x_max,y_max) info() end end,
    -- 44 = кнопка Z

     


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

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

    ek3HYGk.png

    Если не секрет, что должно получится ?

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

    KkYf6QW.png

     


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

    В приоритете выгрузка лута

    Скрытый текст
    
    --[[открытие коробок утильсырья
    
    в судук над роботом ложим коробки
    лут будет скидывать в низ
    ]]--
    
    local com = require("component")
    local term = require("term")
    
    local box,drop = 0,0
    
    if not com.isAvailable("robot") then
      print("только роботы могут использовать эту программу")
      os.exit()
    end
    local r = require('robot')
    
    if not com.isAvailable("inventory_controller") then
      print("для работы нужен контроллер инвентаря")
      os.exit()
    end
    local i_c = require('component').inventory_controller
    
    local function unload()
      print("складываю лут...")
      for i = 2, r.inventorySize() do
        if r.count(i) > 0 then
          drop = drop + r.count(i)
          r.select(i)
          if not r.dropDown() then
            print("в сундуке нет места :(")
            os.exit()
          end
        end
      end
      r.select(1)
    end
    
    while true do
      term.clear()
      print("всего открыто коробок  "..box)
      print("всего скинуто лута     "..math.ceil(drop).."\n")
      if r.count(1) > 0 or r.suckUp(64) then
        r.select(1)
        i_c.equip()
        r.select(2)
        print("открываю коробки...")
        while r.use() do
          box = box + 1
          if r.count(r.inventorySize()-2) > 0 then
            unload()
          end
        end
        unload()
      else
        print("нет коробок, жду...")
        os.sleep(10)
      end
    end

     

     


  14. контроль реактора IC2(1.7.10) с модом OpenPeripheral:  pastebin get kxgfyM9 r

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

    сборка под OpenPeripheral только в таком виде

    eRb0iAx.png

    UqrFVkC.png

    y42OiO7.png

     

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    программа контроля реактора IC2(1.7.10) с конденсаторами:   pastebin get kfRBNS0w r

    программа контроля реактора IC2(1.12.2) с конденсаторами:   pastebin get nneD0Mv5 r

     

    Можно использовать любую схему расположения компонентов в реакторе,

    также любое расположение управляющих блоков, всё автоматически настраивается !

     

    Использовать только с реактором IC2 типа "звёздочка"  (реактор в центре + 6 реакторных камер вокруг)

     


    Видео с примером сборки

     

    наиболее эффективная схема предложена @eu_tomat на странице 9

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

    SXbeOu8.png

    OW27suK.png

    пример сборки предложен @Asior на странице 1

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

    IpCvvSw.png

    мой пример сборки с дополнительной защитой от перегрева

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

    nfp42Pp.png

    d3zProE.png

     

    автокравт конденсаторов IC2 на роботе:  pastebin get WgcCKBFn c

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

    x545jGA.gif

     

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