Asummonster
-
Публикации
420 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные пользователем Asummonster
-
-
-
2 часа назад, GrigST сказал:к микроконтроллеру подключено 2 редстоун контроллера.
как присвоить переменным red1, red2 прокси этих редстоун-контроллеров?(какая переменная к какому контроллеру - не важно)
local RedstoneControllers = {} for address in component.list("redstone") do table.insert(RedstoneControllers, component.proxy(address)) endНо, как верно заметил @eu_tomat, микроконтроллер не может работать с внешними компонентами, разве что если использовать две редстоун карты, хотя это не несёт никакого смысла
-
3
-
-
В 22.04.2020 в 22:42, ECS сказал:В каком приложении или при каких условиях? Клиент на винде, линуксе? Поставил оську с юзером "Тест", добавил ещё одного "Мяу-мяу", и всё в порядке...
Сервер на линуксе, что-то там неприятное происходит
Скрытый текст
-
38 минут назад, ECS сказал:Увы, это всё же разные ОС, и имеют хоть и схожие, но различные API. Простые скрипты по типу установки уровня редстоун-сигнала от I/O-блока вряд ли будут отличаться, а вот отображение или чтение пользовательских данных уже могут сильно разниться, т.к. опенось имеет консольную систему ввода-вывода, а майнось - графическую. Я всё же повторю свой вопрос, ибо ответа не узрел: какого функционала опеноси тебе не хватает в майноси? Какого рода программы/API ты считаешь нужным перенести? И в чем заключается сложность изучения API майноси?
Может стоит сделать некий "режим совместимости" с OpenOS программами и запускать их как консольные приложения, с виртуальным доступом к некоторым компонентам, типа gpu?
-
1
-
-
7 часов назад, hohserg сказал:Есть возможность добавить в MineOS стандартные либы OpenOS?
Хотелось бы serialization
Чего же нет? Спокойно перенеслась и работает. На дискету себе сохрани её из openos и скопируй в /Libraries, или с гитхаба скачай
-
В 25.06.2015 в 12:43, Totoro сказал:Монстер, у меня голограмма 48х32х48 весит всего 18,5 Кб. И это без сжатия, которе предлагал Зеро.
Так что - апргейдить! Однозначно апгрейдить!
Пришло время...
Не идеально, конечно, но стало лучше-
2
-
-
2 часа назад, Alex сказал:ага) жесть какая-то. Ладно бы там, если бы прекратили поддержку мода или еще какая-то беда, или баги в новых версиях.
А так оска то стремительно улучшается по сей день по сути с каждой новой версией, что-то исправляется, новый контент и прочее. Странно, что 3 года уже там сидят на том сервере на 1.6. Это же бред какой-то...
А для кого его обновлять там?
Уверен, что на том сервере большинство игроков если и использует ОК, то только что бы коблогенераторы делать на роботах))
-
27 минут назад, Alex сказал:а где это ты в черепашек играешь?) сингл? Или это серверок какой-то чей-то? Таум даже есть.
Захостил себе сервер что бы с друзьями поиграть)
Любой, кто хочет поиграть вместе с нами может написать мне в личку, я дам айпи. У нас просто сервер без плагинов и всего такого, да и вайтлиста нет, так что на широкую публику айпи выкладывать не рискну))
-
1 час назад, eu_tomat сказал:Интересный костыль, необычный. Я в давние времена, когда OpenComputers ещё был диковинкой, не найдя других способов обмена сообщениями с ComputerCraft, костылил его с помощью ванильного редстоуна.
Но сейчас существует и бескостыльнй способ обмена сообщениями между OpenComputers и ComputerCraft с помощью блока коммутатора.
Кхех, спасибо)
Кто бы знал. Я думал, что раз кк модем к ок адаптеру не подключается, то шансов на передачу данных по сети нет.
-
Маловероятно, что сейчас кто либо продолжает использовать компьютеркрафт, но вдруг.
В процессе игры мне понадобилось осуществлять связь между компьютером 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
-
-
1 минуту назад, Premier_Prince сказал:Огромное человеческое спасибо! Все работает!
рекомендую тебе убрать клавиатуру после запуска программы, так как я не делал защиты от интерруптов и кто-то в твоём привате сможет прервать выполнение программы и что-то сделать с твоим компом.
-
3 минуты назад, Alex сказал:@Asummonster и кстати, для той задачи, которая в заказе для управления рэдом в чужом привате, лучше было бы, имхо не кнопки "светящиеся" хотеть заказчику две штуки, которые работают в режиме вкл/выклк (типа отключение рэда при повторном нажатии он хотел), а строки с чекбаксами
Типа так:
[x] - реактор[x] - дверь
[ ] - люк
...
Это сделает гуи проще визуально понятнее, и програмка будет более масштабируемая для любых задач (если рэд. сигнал подавать редстон-камнями ОС)
Хотите гуи библиотеку в моём исполнении?))
-
В 24.03.2020 в 12:05, Alex сказал:в смысле должно?
не проверял. Скрина нет?
слишком лень качать майнкрафт, запускал на OCEmu, интерфейс отрисовывается, логика работает, а вот как будет работать редстоун в игре - не знаю)(
Скрытый текст
две кнопки имеются))
-
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
-
-
4 часа назад, Totoro сказал:@Asummonster в качестве утешения могу сказать две вещи.
1) Есть хоткей Ctrl + Shift + T. Он открывает обратно только что закрытую вкладку.
2) Я могу сделать в новой версии оцелота такую настройку пользовательскую - чтобы оно спрашивало перед закрытием.
Про хоткей знаю, но спасибо)
За какой-то чекбокс в углу экрана, который будет мешать закрыть страницу, буду очень благодарен) -
Ocelot online очень удобен, премного благодарен за проделанную работу.
Иногда, конечно, происходят какие-то фантомные интеррупты, иногда сам удаляется текст, но сама возможность работать в эмуляторе OC, да ещё и просто из браузера - восхищает. Только, пожалуйста, добавь хотя бы
window.onbeforeunload = function() { return "stop"; };
, что бы страница не закрывалась при нажатии Ctrl + W. Не всегда успеваю себя поймать на мысли, что закрытие редактора производится иначе.
-
1
-
-
За ловлю покемонов на спавне штраф 200UU и 3 часа лишения свободы!
-
3
-
-
Зачем нужен ванильный сервер? На маготехнолололокрафте хотя бы компы есть.
-
4
-
-
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
-
-
-
Просто назови это не многопоточностью, а "обработка событий в OpenOS"
-
Ты же понимаешь, что event.listen не создаёт новый поток?
OpenOSь всё время слушает ивенты, внутри /lib/event.lua есть специальная таблица listeners, каждый происходящий ивент она сравнивает со значениями в таблице, и запускает определённую функцию. Хочешь многопоточности - используй thread Зер0-
1
-
-
Ого, что это на экране? Посмотреть исходники можно?На нижнем видно фпс (новая версия игры)
-
off [imput] - выключить данный вход

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