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

Taruu

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

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

  • Посещение

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

    4

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


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

    @Taruu А почему эти часы не уходят с сон хотя бы на тик? Чем оправдана такая нагрузка на сервер?

    Хм. Не доглядел. Хотя функцию для таймера я давно добавлял (прогу просто давно уже написал)
    Смотря на то как он обновляет экраны он ели ели успевает в секунду.

    Но а так то наверно все же стоит мне прикрутить переменную на задержку.... Между обновлениями экранов...


  2. Решил я сделать простые часы для декора. С реальным временем и с игровым.
    В итоге недолго почесав репу я сделал небольшую программу для Lua Bios на несколько мониторов (Копипаст но все же )
    Получилась вот такая дребедень:
     

     

     

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

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

    TimeZone выбирает часовой пояс который вы хотите.

    
    --pastebin run tqaNepSZ
    local fs = component.proxy(computer.tmpAddress())
    local gpu = component.proxy(component.list("gpu")())
    local screens = component.list('screen')
    
    local SLEEP_TIME = 0 --Время перед обновлением экрана
    local TIME_ZONE = 0 -- Добавляем часы
    local t_correction = TIME_ZONE * 3600 
    
    
    --https://oc.cil.li/topic/1596-multi-screenscreen-mirroring/
    local vgpu = {}
    setmetatable(vgpu, vgpu)
    vgpu.bind = gpu.bind
    function vgpu.__index(self, key)
      local setter = { copy = true; fill = true}
      if key:find('set') or setter[key] then
        return function(...)
          for addr in pairs(screens) do
            self.bind(addr,false)
            gpu[key](...)
          end
        end
      else
        return function(...)
          local res = {}
          for addr in pairs(screens) do
            self.bind(addr,false) --Биндим без сброса иначе экран будет прыгать
            local r = {gpu[key](...)}
            res[addr] = #r == 1 and r[1] or r
          end
          return res
        end
      end
    end
    
    
    
    function os.sleep(timeout)
        checkArg(1, timeout, "number", "nil")
        local deadline = computer.uptime() + (timeout or 0)
        repeat
          computer.pullSignal(deadline - computer.uptime())
        until computer.uptime() >= deadline
      end
    
    function floor_to_step(what,step)
        return math.floor(what/step) * step
    end
    
    local function getRealTime()
      local handel = fs.open("/time", "w")
      fs.close(handel)
      local timestamp = fs.lastModified("/time") / 1000 + t_correction
    	return os.date("%H:%M:%S %d.%m.%Y", timestamp)
    end
    
    local function getMinecraftTime()
        local timestamp = os.time()
        year = tostring(tonumber(os.date("%Y",timestamp))-1970)
        if string.len(year) < 3 then
            for i=1,4-string.len(year) do
                year="0"..year
            end
        end
        return os.date("%H:%M:%S %d.%m.", timestamp)..year
    end
    
    max = 10
    while true do
    realtime = getRealTime()
    gametime = getMinecraftTime()
    if string.len(realtime) > string.len(gametime) then
        vgpu.setResolution(string.len(realtime),2)
        max = vgpu.setResolution(max,2)
    else
        vgpu.setResolution(string.len(gametime),2)
    end
    vgpu.set(1,1,realtime)
    vgpu.set(1,2,gametime)
    os.sleep(SLEEP_TIME) --Сон как хотим так и настроем
    end

     

    Надеюсь кому то как декор зайдут...

    • Нравится 6

  3. Прям интересно стало как модно применять компы обычным юзерам в майне...
    Так еще типо провайдер и т.д что же у вас за сервер такой? Ролеплей?

    • Нравится 2

  4. Необычное решение. Могу дать совет почитать лучше discord.py так как там есть готовые обработчики команды а не через on_message.
    Так же вопрос как подключатся если ты играешь на сервере?

    Ну просто безопасности никакой нет. А если и есть свой хост с белым ip то хотя бы пароль (думаю там и ключи можно но хз как они в компах робят). по хорошему еще прием сообщений через сокет делать асинхронным что бы бот не блокировался весь и можно получать к примеру множество сообщений... ТАК же очень не советую юзать глобальные переменные, ихмо если код будет большим лучше сделать класс (есть шанс запутаться). По коду на lua не шарю но вроде норм для такого варианта.


  5. Только что, Asior сказал:

    Немного оптимизации твоей постройки. Для начала зачем использовать 1 адаптер на 1 цисцерну? По скрину видно что там прекрасно 1 адаптера на 2 цисцерны цепляется.

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

    Функции лучше использовать локальные, так же как и переменные. Шустрее работать будет.

    Зачем юзать ipairs когда все данные уже внесены в таблицу ... не понимаю.

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

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

    Превратить тот поезд, что получился, в настоящий самолет! Напильником и кувалдой, да.

    1 адаптер на одну цистерну пришлось юзать из за того как это на серве где я играю построено.

    В итоге там вообще пришлось дописывать немного код что бы он пропускал дизеля.

    Анализатор спокойно работает (тыкаешь на адаптер и все что увидел пишет)
    Думаю что стоит мне просто сделать систему с конфигом.

    Отдельно будет программа с записью данных (дизеля и т.д) и отдельно уже для просмотра. И там же у ячеек можно спрашивать сколько у них максимальное значение (вроде там можно автоматические узнать если я не ошибаюсь)
    Еще нужно сделать настройку авто поиска сигнала у редстоун контроллера ибо для точных данных нужно ставить впритык и не всегда удобно с одной стороны.
    Про ipairs не углядел как работает и чето сглупил.
    Вот только я так и не понял жрут ли память такие таблицы с функциями... А то по памяти может оказаться лучше юзать просто строки.
    Или конфиг.


  6. Первый пост. Ну все же хоть что то.


    Хочу показать свою небольшую поделку по теме инфраструктуры.
    Посмотреть и скачать ее можно тут:
    pastebin run mn7W46KJ

    Задача программы проста.

    Вывод значений энергетических ячеек из thermal expansion и заполненность резервуаров из  immersive engineering.

    Автоматическое включение двигатель если средний объем ячеек стал ниже заданного значение и заряд до 100%.

    Среднее значение по кол во ячейкам подключенным к адаптеру. Делал все через огромные table с id которые потом становятся объеками

    (эффективно ли это по памяти?) 

    Задача оказалась не так сложна как я думал и больше я завис на графике... Потыкав несколько готовых либ понял что ничего не понял (как это обычно бывает) и решил нарисовать свою графику.
    Единственное что не понял как запускать event отдельно и реагировать на него поэтому сделал пока вот так:
     

    Скрытый текст
    
    while true do
        local id, _, x, y = event.pull(5,"touch") --это не очень решение но мне хватило...
        gpu.fill(1,24,17,25," ")
        if id == "touch" then
            --gpu.set(2,25,x.." "..y)
            button_handler(x,y)
        else
            if AutoMode then
                gpu.set(2,25,"update")
                on_off_generator()
            else
                on_off_generator()
                gpu.set(2,25,"All stop!")
            end
        end
      end

     

    Надеюсь вы подскажите как это лучше решить. Буду благодарен.


    Ну и скриншотики

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

    XsHN8zRdA9lNQCe59WOX4aa9i7UxzM5Zz_flcp-a

    Hvwxjg07P3PQf5KBeX_FVznxV6W3uDO8SbarmCkwar06YvTTnBXGbxTvokFRpKVPNPqfm-1KtIdBzlehx9yVtrKewdhwFlqkv-uiK4xH6Dd8ALJJhwpXa3pg

     

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