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

Asummonster

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

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

  • Посещение

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

    12

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


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

    @Asummonster я частенько вижу реакцию "в шоке" под своими постами, но мне ни разу не удалось понять, что она означает. Вот, скажи: выставляя реакцию "в шоке", какую мысль ты хочешь донести до автора поста и до его читателей? Что именно тебя шокирует? Ты с чем-то не согласен? Или согласен, но считаешь неприемлемым высказывать это? Или согласен, но не ожидал такого решения? Или наоборот, решение для тебя настолько очевидным, что тебя шокирует его обсуждение? Ты хочешь видеть подобные посты чаще, или наоборот, реже?

    Шокирует глубина погружения в каждый вопрос, который ты берёшься разбирать. Поразительно. Восхитительно. Давай ещё.


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

    к микроконтроллеру подключено 2 редстоун контроллера.

    как присвоить переменным red1, red2 прокси этих редстоун-контроллеров?(какая переменная к какому контроллеру - не важно)

    local RedstoneControllers = {}
    for address in component.list("redstone") do
    	table.insert(RedstoneControllers, component.proxy(address))
    end

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

    • Нравится 3

  3. В 22.04.2020 в 22:42, ECS сказал:

    В каком приложении или при каких условиях? Клиент на винде, линуксе? Поставил оську с юзером "Тест", добавил ещё одного "Мяу-мяу", и всё в порядке...

    Сервер на линуксе, что-то там неприятное происходит

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

    unknown.png

    unknown.png?width=1026&height=354

     


  4. 38 минут назад, ECS сказал:

    Увы, это всё же разные ОС, и имеют хоть и схожие, но различные API. Простые скрипты по типу установки уровня редстоун-сигнала от I/O-блока вряд ли будут отличаться, а вот отображение или чтение пользовательских данных уже могут сильно разниться, т.к. опенось имеет консольную систему ввода-вывода, а майнось - графическую. Я всё же повторю свой вопрос, ибо ответа не узрел: какого функционала опеноси тебе не хватает в майноси? Какого рода программы/API ты считаешь нужным перенести? И в чем заключается сложность изучения API майноси?

    Может стоит сделать некий "режим совместимости" с OpenOS программами и запускать их как консольные приложения, с виртуальным доступом к некоторым компонентам, типа gpu?

    • Нравится 1

  5. 7 часов назад, hohserg сказал:

    Есть возможность добавить в MineOS стандартные либы OpenOS?

    Хотелось бы serialization

    Чего же нет? Спокойно перенеслась и работает. На дискету себе сохрани её из openos и скопируй в /Libraries, или с гитхаба скачай


  6. В 25.06.2015 в 12:43, Totoro сказал:

     

    Монстер, у меня голограмма 48х32х48 весит всего 18,5 Кб. И это без сжатия, которе предлагал Зеро.

    Так что - апргейдить! Однозначно апгрейдить!  :)

    Пришло время...
    Не идеально, конечно, но стало лучше

    • Одобряю 2

  7. 2 часа назад, Alex сказал:

    ага) жесть какая-то. Ладно бы там, если бы прекратили поддержку мода или еще какая-то беда, или баги в новых версиях.

     

    А так оска то стремительно улучшается по сей день по сути с каждой новой версией, что-то исправляется, новый контент и прочее. Странно, что 3 года уже там сидят на том сервере на 1.6. Это же бред какой-то...

    А для кого его обновлять там?:D Уверен, что на том сервере большинство игроков если и использует ОК, то только что бы коблогенераторы делать на роботах))


  8. 27 минут назад, Alex сказал:

    а где это ты в черепашек играешь?) сингл? Или это серверок какой-то чей-то? Таум даже есть.

    Захостил себе сервер что бы с друзьями поиграть)

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


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

    Интересный костыль, необычный. Я в давние времена, когда OpenComputers ещё был диковинкой, не найдя других способов обмена сообщениями с ComputerCraft, костылил его с помощью ванильного редстоуна.

     

    Но сейчас существует и бескостыльнй способ обмена сообщениями между OpenComputers и ComputerCraft с помощью блока коммутатора.

    Кхех, спасибо)

    Кто бы знал. Я думал, что раз кк модем к ок адаптеру не подключается, то шансов на передачу данных по сети нет.


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

    В процессе игры мне понадобилось осуществлять связь между компьютером OC и CC. Так как я не нашёл адекватного способа передачи данных, то придумал костыль. Костыль заключается в передаче данных (на данный момент — строк, если нужно будет передавать что-то другое, то допишу) через... установку и чтение цвета золотого монитора. Код: 

    Скрытый текст
    
    local CCOCB = {}
    local tochar = string.char
    local tobyte = string.byte
    local monitor = peripheral and peripheral.find("monitor") or (require("component").isAvailable("computercraft_advanced_monitor") and require("component").computercraft_advanced_monitor or error("Для работы моста требуется подключить золотой монитор."))
    local Charset = {
      ["0"] = 0x1,
      ["1"] = 0x2,
      ["2"] = 0x4,
      ["3"] = 0x8,
      ["4"] = 0x10,
      ["5"] = 0x20,
      ["6"] = 0x40,
      ["7"] = 0x80,
      ["8"] = 0x100,
      ["9"] = 0x200,
      ["a"] = 0x400,
      ["b"] = 0x800,
      ["c"] = 0x1000,
      ["d"] = 0x2000,
      ["e"] = 0x4000,
      ["f"] = 0x8000,
    }
    local BackCharset = {
      [0x8000] = "f",
      [0x4000] = "e",
      [0x2000] = "d",
      [0x1000] = "c",
      [0x800] = "b",
      [0x400] = "a",
      [0x200] = "9",
      [0x100] = "8",
      [0x80] = "7",
      [0x40] = "6",
      [0x20] = "5",
      [0x10] = "4",
      [0x8] = "3",
      [0x4] = "2",
      [0x2] = "1",
      [0x1] = "0",
    }
    local function DecToHex(value)
        local hex = ''
        while(value > 0)do
          local index = math.fmod(value, 16) + 1
          value = math.floor(value / 16)
          hex = string.sub('0123456789ABCDEF', index, index) .. hex
        end
      return (string.len((hex~="" and hex or 0))==2) and string.lower((hex~="" and hex or 0)) or "0"..string.lower((hex~="" and hex or 0))
    end
    local function HexToColor(hexchar)
      return Charset[hexchar]
    end
    local function ColorToHex(color)
      return BackCharset[color]
    end
    local function getFGHex()
      return ColorToHex(monitor.getTextColor())
    end
    local function setFGHex(hex)
      monitor.setTextColor(HexToColor(hex))
    end
    local function getBGHex()
      return ColorToHex(monitor.getBackgroundColor())
    end
    local function setBGHex(hex)
      monitor.setBackgroundColor(HexToColor(hex))
    end
    local function pair()
      setFGHex("c")
      setBGHex("c")
      os.sleep(0.1)
      if getFGHex()=="e" then
        mfg = false
      else
        mfg = true
      end
      local canskip = false
      repeat
        if mfg then
          setFGHex("e")
          if getBGHex()=="e" or getBGHex()=="2" then
            canskip = true
          end
        else
          setBGHex("e")
          if getFGHex()=="e" or getFGHex()=="2" then
            canskip = true
          end
        end
        os.sleep(0)
      until canskip
    end
    function CCOCB.WriteChar(char, isByte)
      local bytecode
      if not isByte then
        bytecode = tobyte(char)
      else
        bytecode = char
      end
      local hexcode = DecToHex(bytecode)
      monitor.setBackgroundColor(HexToColor(string.sub(hexcode, 1,1)))
      monitor.setTextColor(HexToColor(string.sub(hexcode, 2,2)))
    end
    function CCOCB.ReadChar(isByte)
      local hexcode = ColorToHex(monitor.getBackgroundColor())..ColorToHex(monitor.getTextColor())
      local bytecode = tonumber("0x"..hexcode)
      return (not isByte) and tochar(bytecode) or bytecode
    end
    function CCOCB.WriteString(str)
      pair()
      repeat
        if str~="" then
          local hexcode = DecToHex(tobyte(string.sub(str, 1, 1)))
          repeat
            if ColorToHex(monitor.getBackgroundColor())=="2" then
              monitor.setTextColor(HexToColor(string.sub(hexcode, 1, 1)))
              monitor.setBackgroundColor(HexToColor("1"))
              hexcode = string.sub(hexcode, 2)
            end
            os.sleep(0)
          until hexcode==""
          str = string.sub(str, 2)
        end
      until str=="" and ColorToHex(monitor.getBackgroundColor())=="2"
      CCOCB.WriteChar(255, true)
    end
    function CCOCB.ReadString()
      local buscode = 0
      local char_buffer = ""
      local buffer = ""
      pair()
      monitor.setBackgroundColor(HexToColor("2"))
      repeat
        buscode = CCOCB.ReadChar(true)
        if ColorToHex(monitor.getBackgroundColor())=="1" then
          char_buffer = char_buffer .. ColorToHex(monitor.getTextColor())
          monitor.setBackgroundColor(HexToColor("2"))
          if string.len(char_buffer)==2 then
            buffer = buffer .. tochar(tonumber("0x"..char_buffer))
            char_buffer = ""
          end
        end
        os.sleep(0)
      until buscode == 255
      return buffer
    end
    if peripheral then
      OCBUS = CCOCB
    else
      return CCOCB
    end

     

    Использование:

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

    Для OpenComputers: require(path)
    Для Computercraft: dofile(path)
      будет доступно как OCBUS

    .WriteChar(string sym)
    .ReadChar() : string sym

    .WriteString(string data)
    .ReadString() : string data

     

    Последовательность вызова WriteString и ReadString не важна, они не завершатся пока не выполнят свою задачу

    Демонстрация:

    Скрытый текст
    Скачать видео
    Скачать видео
    Скачать видео
    Скачать видео

     

    Надеюсь, что кому-то это может пригодиться.

    • Нравится 5
    • Одобряю 2

  11. 1 минуту назад, Premier_Prince сказал:

    Огромное человеческое спасибо! Все работает!

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


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

    @Asummonster и кстати, для той задачи, которая в заказе для управления рэдом в чужом привате, лучше было бы, имхо не кнопки "светящиеся" хотеть заказчику две штуки, которые работают в режиме вкл/выклк (типа отключение рэда при повторном нажатии он хотел), а строки с чекбаксами

    Типа так:
    [x] -  реактор

    [x] - дверь

    [ ] - люк

    ...

     

    Это сделает гуи проще визуально понятнее, и програмка будет более масштабируемая для любых задач (если рэд. сигнал подавать редстон-камнями ОС)

     

    Хотите гуи библиотеку в моём исполнении?))


  13. В 24.03.2020 в 12:05, Alex сказал:

    в смысле должно?:) не проверял. Скрина нет?

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

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

    XRENZap.png

    две кнопки имеются))


  14. local event = require("event")
    local component = require("component")
    local unicode = require("unicode")
    local gpu = component.gpu
    local red = component.isAvailable("restone") and component.redstone or error("Redstone component is unavailable")
    local floor = math.floor
    local TOP = 1
    local BOTTOM = 0
    local SignalTop, SignalBottom
    local Buttons = {}
    local function CreateButton(x, y, w, h, bgc, fgc, text, callback)
        local obgc = gpu.getBackground()
        local ofgc = gpu.getForeground()
        gpu.setBackground(bgc)
        gpu.setForeground(fgc)
        gpu.fill(x, y, w, h, " ")
        gpu.set(floor(x+(w/2)-unicode.len(text)/2), floor(y+h/2, text), text)
        table.insert(Buttons, {
            xmi = x,
            ymi = y,
            xma = x+w,
            yma = y+h,
            cb = callback
        })
        gpu.setBackground(obgc)
        gpu.setForeground(ofgc)
    end
    local function CheckButtonPress(x, y)
        for _, button in ipairs(Buttons) do
            if (x>=button.xmi) and (x<=button.xma) then
                if (y>=button.ymi) and (y<=button.yma) then
                    button.cb(x, y)
                end
            end
        end
    end
    
    local ScrW, ScrH = gpu.getResolution()
    
    
    CreateButton(floor(ScrW/6), floor(ScrH/2), 18, 3, 0x646464, 0xbebebe, "Top", function()
        SignalTop = not SignalTop
        red.setOutput(TOP, SignalTop and 15 or 0)
    end)
    CreateButton(ScrW - floor(ScrW/6) - 18, floor(ScrH/2), 18, 3, 0x646464, 0xbebebe, "Bottom", function()
        SignalBottom = not SignalBottom
        red.setOutput(BOTTOM, SignalBottom and 15 or 0)
    end)
    while true do
        local _, _, x, y = event.pull("touch")
        CheckButtonPress(x, y)
    end

    Нуу....
    Должно работать, наверное...

    • Нравится 2

  15. 4 часа назад, Totoro сказал:

    @Asummonster в качестве утешения могу сказать две вещи.

    1) Есть хоткей Ctrl + Shift + T. Он открывает обратно только что закрытую вкладку.

    2) Я могу сделать в новой версии оцелота такую настройку пользовательскую - чтобы оно спрашивало перед закрытием.

    :)

    Про хоткей знаю, но спасибо)
    За какой-то чекбокс в углу экрана, который будет мешать закрыть страницу, буду очень благодарен)


  16. Ocelot online очень удобен, премного благодарен за проделанную работу.

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

    window.onbeforeunload = function() {
        return "stop";
    };

    , что бы страница не закрывалась при нажатии Ctrl + W. Не всегда успеваю себя поймать на мысли, что закрытие редактора производится иначе.

    • Нравится 1

  17.  

     

    local event = require("event")
    local component = require("component")
    local computer=require("computer")
    local gpu = component.gpu
    need_mouse=true
    local monitor_address=component.gpu.getScreen()
    local fake_user="AlexCC"
    local keys=require("keyboard").keys
    local lmckey, rmckey = "pageUp", "pageDown"
    local gpuW, gpuH = gpu.getResolution()
    local mouseX, mouseY = 1, 1
    local start_key, stop_key = "f10", "f12"
    local move_keys={up=keys.up, down=keys.down, left=keys.numpaddiv, right=keys.numpadsub}
    lastsym=gpu.get(mouseX, mouseY)
    local cursor_texture="⇧"
    local binds={
        [keys[lmckey]]=function() if need_mouse then computer.pushSignal("touch", monitor_address, mouseX, mouseY, 0, fake_user) end end,
        [keys[lmckey]]=function() if need_mouse then computer.pushSignal("touch", monitor_address, mouseX, mouseY, 1, fake_user) end end,
        [keys[start_key]]=function() need_mouse=true lastsym=gpu.get(mouseX, mouseY) end,
        [keys[stop_key]]=function() need_mouse=false end,
        [keys.f8]=function() if need_mouse then if mouseY>1 then gpu.set(mouseX, mouseY, lastsym) mouseY=mouseY-1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
        [keys.f9]=function() if need_mouse then if mouseY<gpuH then gpu.set(mouseX, mouseY, lastsym) mouseY=mouseY+1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
        [keys.f5]=function() if need_mouse then if mouseX>1 then gpu.set(mouseX, mouseY, lastsym) mouseX=mouseX-1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end,
        [keys.f7]=function() if need_mouse then if mouseX<gpuW then gpu.set(mouseX, mouseY, lastsym) mouseX=mouseX+1 lastsym=gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, cursor_texture) end end end
    }
    local function init(_, _, _, key_pushed)
         if binds[key_pushed] then binds[key_pushed]() end
    end
     
    event.listen("key_down", init)
    

     

     

    pageUp - ЛКМ

    pageDown - ПКМ

    F8 вверх

    F9 вниз

    F5 влево

    F7 враво

    F10 включить, F12 выключить

    • Нравится 1

  18. Ты же понимаешь, что event.listen не создаёт новый поток?
    OpenOSь всё время слушает ивенты, внутри /lib/event.lua есть специальная таблица listeners, каждый происходящий ивент она сравнивает со значениями в таблице, и запускает определённую функцию. Хочешь многопоточности - используй thread Зер0

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