Oleshe
-
Публикации
155 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные пользователем Oleshe
-
-
20 минут назад, eu_tomat сказал:А что ему мешает работать?
Не работает компьютер. По логике чанк то загруженный, но код не выполняется
21 минуту назад, eu_tomat сказал:Не понял. К чему прибавить один?
i = 0 while true do require("Component").modem.broadcast(1, "Ping", i) i = i + 1 end
22 минуты назад, eu_tomat сказал:А что мешает что-то поменять в конфиге?
Ничего. Нечего менять. Я просматривал конфиг раз 20 и ни разу не видел что-то связанное с остановкой компьютеров при выгрузке чанка с ним. Максимум что +- по нашему запросу, при выгрузке чанка оставлять статус компьютере для того что-бы при обратной загрузке чанка был такой-же. Если отрубим то он будет перезапускаться каждый раз когда загружают его чанк. (disablePersistence 339 строка)
30 минут назад, eu_tomat сказал:Что ты имеешь в виду? Что значит "компьютеров на целевой карте"? В моём понимании на целевую карту приходят сообщения. Подключить к ней несколько компьютеров возможно. Но как к ней подключить планшет? Или ты под целевой картой подразумеваешь что-то другое?
Карта мира майнкрафт. Ну мир на котором появился этот вопрос.
-
Есть компьютер, он отправляет данные серверу. Сервер должен дать ему ответ. Проблема: расстояние в 800 блоков. В теорий поставить всередине ретранслятор будет нормальная идея, но он работает только тогда, когда мы его прогружаем. Так-же он не передаёт данные другим ретрансляторам, только компьютерам(нельзя выстроить цепь ретрансляторов). Если мы возьмём туннельную карту, остаётся вопрос с сервером. Прогрузчик чанков (Если он вообще работает) не работает. Компьютер выгружается. Если мы будем спамить в канал, тогда будет норм, но когда дело доходит до разнообразия, на пример прибавить 1, то он выгружается. В конфиг файле вроде-бы ничего нельзя поменять, компьютеров будет на целевой карте+- 6, сейчас 2(планшет и пк).
-
Что если мы сделаем таблицу сколько тепла вырабатывает определённое топливо за минуту. Тогда мы сможем включать и выключать его через определённое время так, что-бы нагрев составлял на пример 94% постоянно. Ну или отмерять то, сколько он тепла отдаёт так, что-бы мы шли по условию заказа и выключали его когда 95% и включали когда 80%.
Zelenuydrakon, можно ссылку на принцип работы реактора, как его построить и чем питать? Адаптер я подключал к блоку Fusion Cоre который размером 3 на 3 блока 1-м предметом. Он вроде-бы питается жидким топливом, а вы упоминали стержни. Не состыковка.
-
В компоненте energy_device (Подключение реактора через адаптер) нету метода ни как получить тепло, ни как выключить реактор. Можно выключать реактор прекращением подачи топлива, но он продолжит работать какое-то время из-за внутреннего хранилища, а как подгадать это время под тепло- та еще загадка, ведь мы незнаем его нынешнее тепло.
Единственное что может отдать нам реактор-
Сколько энергий в нём сейчас.Сколько максимум энергий он может хранить.
Может ли он отдавать/получать энергию на данный момент из/в реактор(а).
-
Есть огрызок кода:
Скрытый текстfor e, p in pairs(obj) do if obj.raw then -- Перед этим мы ставим raw. Предохранитель на то что всё пойдёт не так. if e == 'onTocuh' or e == 'type' or e == 'raw' or e == 'path' then -- Пропускаем. Содержат либо таблицы либо функций. Нежелательно их трогать. elseif e == 'mode' and obj.type == 'button' then -- Потом вынесем в отдельную функцию. obj.raw:remove() create(obj) elseif e == 'mode' then -- Потом вынесем в отдельную функцию. Тут вообще не тот параметр кст. obj.stage = 0 obj:tick() elseif e == 'items' and obj.type == 'comboBox' then -- Потом вынесем в отдельную функцию. obj.raw:clear() for j = 1,#obj.items do local tmp = obj.raw:addItem(ocj.items[j].name,obj.items[j].active) tmp.path = obj.items[j].path tmp.index = j tmp.onTouch = function(tmp,tmp01) execute(tmp01.path,tmp.index,tmp01.index) end end elseif e == 'colorbg' then obj.raw.colors.default.background = obj[e] -- Привязываем через = elseif e == 'colorbgp' and obj.type == 'input' then obj.raw.colors.focused.background = obj[e] -- Привязываем через = elseif e == 'colorbgp' then obj.raw.colors.pressed.background = obj[e] -- Привязываем через = elseif e == 'colorfg' or e == 'colort' then obj.raw.colors.default.text = obj[e] -- Привязываем через = elseif e == 'colorfgp' and obj.type == 'input' then -- Этот .. obj.raw.colors.focused.text = obj[e] -- Привязываем через = elseif e == 'colorfgp' then -- .. первее этого т.к. имя параметра объекта у них одинаковые, но параметры в raw разные. obj.raw.colors.pressed.text = obj[e] -- Привязываем через = elseif e == 'colorph' then obj.raw.colors.placeholderText = obj[e] -- Привязываем через = elseif e == 'colorv' then obj.raw.colors.value = obj[e] -- Привязываем через = elseif e == 'colora' then obj.raw.colors.arrow.text = obj[e] -- Привязываем через = elseif e == 'colorabg' then obj.raw.colors.arrow.background = obj[e] -- Привязываем через = elseif e == 'colorp' and obj.type == 'switch' or obj.type == 'slider' and e == 'colors' or obj.type == 'progressBar' and e == 'colorp' then obj.raw.colors.active = obj[e] -- Привязываем через = elseif (e == 'colors' and obj.type == 'switch' or obj.type == 'progressBar') or obj.type == 'slider' and e == 'colorpp' or obj.type == 'progressIndicator' and e == 'colorpa' then obj.raw.colors.passive = obj[e] -- Привязываем через = elseif e == 'colorpp' and obj.type == 'switch' or obj.type == 'slider' and e == 'colorp' then obj.raw.colors.pipe = obj[e] -- Привязываем через = elseif e == 'textph' then obj.raw.placeholderText = obj[e] -- Привязываем через = elseif obj.type == 'panel' then if e == 'color' then obj.raw.colors.background = obj[e] -- Привязываем через = end elseif obj.type == 'switch' then if e == 'state' then obj.raw:setState(obj[e]) -- Потом вынесем в отдельную функцию. end elseif obj.type == 'progressIdnicator' then if e == 'colorp' then obj.raw.colors.primary = obj[e] -- Привязываем через = elseif e == 'colorp' then obj.raw.colors.secondary = obj[e] -- Привязываем через = end else obj.raw[params[e] or e] = obj[e] -- Привязываем через = то что осталось. есть таблица параметров аля x = 'localX', если параметра в таблицуе нету, значит мы используем параметр буквку в букву. end end end
Как мы видим, оно должно привязывать параметры к их эквивалентам в raw. Но, когда мы изменяем параметр объекта, параметр raw-а остаётся тем-же.
Соответственно нужно что-бы если мы изменяли параметр объекта, мы изменяли его и в raw.
Аля:
local object = {} local raw = {localX = -20} object.raw = raw object.x = 15 object.raw.localX = object.x print(object.x,object.raw.localX) -- 15 15 object.x = 0 print(object.x,object.raw.localX) -- 0 0 object.localX = 20 print(object.x,object.raw.localX) -- 20 20
Вручную каждый друг к другу привязывать не вариант т.к. их слишком много, можно объединить параметры, наставить сравнений, то через цикл оно будет само подбирать нужный вариант.
-
1
-
-
Скрытый текстfor i = 1,#scenes[e].game.screen do scenes[e].game.screen[i].raw:remove() scenes[e].game.screen[i].raw = nil -- Изменили if scenes[e].game.screen[i].type == 'animation' then OE.breakAtlas(scenes[e].game.screen[i]) end end
table.remove(table,index). Мы вводили таблицу, но без индекса. Сделал через = нил и всё заработало.
-
10 часов назад, eu_tomat сказал:А каков диапазон чисел? И каковы шансы встретить маленькие числа в сравнении с большими?
Не знаю. Большие цифры: звуковые частоты, задержка (Длинна звука) и adsr. Из маленьких цифр: наличие adsr, инструмент (Ну там-ж пилавые, квадратные, треугольникавые, круглые звуковые волны), канал, и предохранитель на то, есть ли следующая "часть".
Вот сделал +- норм сжатие. Оно превращает:2,1,2000,4000,2,1000,10,1,1000 -- с ADSR 2,2,2000,4000,2 -- Без ADSR 2,3,2000,4000,2,0,2000,0,1 -- c ADSRВ 38 байт:
�����o -- (В майне оно занимает больше символов. В AkelPad-е 3 сноса cтрок и пустые символы. Интересно.)Возможно вы найдёте путь сжать еще сильнее.
-
Нужно записать цифры и я думаю что писать их в 1 строку по символам будет лучше чем пихать таблицу через сериализацию.
Требуется сократить объем в байтах, размер итогового файла.
Придумал дополнение к ранее описанной схеме, мы не записываем 127 столько раз сколько надо для цифры, вместо него мы используем множитель для 127 (Сколько их будет) и цифру которая меньше 127, остаток. (Если надо 1000, то делим 1000 на 127, отделяем то, что после запятой и это будет 1 символом. Тот множитель который мы получили только что умножаем на 127 и отнимаем от 1000, это остаток, второй символ. 7(множитель, символ)111(остаток, символ))
-
7 часов назад, eu_tomat сказал:Какую задачу ты пытаешься решить?
У меня есть циферки, их нужно записать в файл максимально сжато, желательно. В уникоде куча символов, то-есть мы можем записать целое число в 1 символ (Числа будут в диапазоне от 0 до 40000). Я тестил это и оно работало, но когда мы выходили за пределы string.byte оно ломалось и читало не правильно, за 2 :read оно читало 1 символ. Если совместить их нельзя то сделаем так, что-бы оно записывало максимальные значение так, что-бы в итоге получилось нормальное. Что-бы не попутать в конце поставим ноль ( если на пример число 128, то мы записываем 127 и 1. Если число 129, то запишем 127 и 2. Если число 1007 то записываем 127 7 раз, а в конце 118. Еще не делал, так-что это пока теория. Пойду сделаю.
-
7 часов назад, ECS сказал:Из символа в байты:
local char = unicode.char(128) local bytes = {char:byte(1, #char)} print(table.unpack(bytes)) > 194 128
Мы получаем 2 числа, а нужно одно. Возьмём число побольше, на пример 1007, получиться {207,175},. Как из них получить 1 цифру, ту-же 1007 которую мы и вкладывали?
-
Предположим у нас есть цифра 128. Мы попускаем её через unicode.char и получаем символ. Этот символ мы пропускаем через string.byte и вот не задача, начиная с 127 уникодовского символа оно выдаёт 194. Если мы попустим 130 а не 128, мы получим 194.
Как сделать так что-бы цифры сохранялись без огромных циклов в символ и обратно? -
Скрытый текст
😋🥰
Скрытый текстlocal function destantion(point1,point2) return math.sqrt((point1[1]-point2[1])^2+(point1[2]-point2[2])^2) end workspace.eventHandler = function(_,_,...) local args= {...} if args[1] == 'touch' then object = workspace:addChild(GUI.object(args[3], args[4], light.radius*2, light.radius*2)) object.draw = function(object) local tmp for xx = 0,light.radius*2 do for yy = 0,light.radius do local was = {screen.get(object.x+xx,object.y+yy)} local radius = destantion({object.x + light.radius, object.y + light.radius/2}, {object.x+xx,object.y+yy}) screen.set( object.x + xx, object.y + yy, color.blend(was[1], light.color, -((light.intensivity / math.max(1, radius ^ 2))-1)), -- -((light.intensivity / math.max(1, radius ^ 2))-1) - Обратное от полученого числа. Если 1 то 0, 0.25 то 0.75, 0.47 то 0.53. Сделано т.к. оно наоборот засасывало цвет в центр, а не высвобождало его. color.blend(was[2], light.color, -((light.intensivity / math.max(1, radius ^ 2))-1)), was[3] ) end end end workspace:draw() end end
Получил что-то похожее на круг. Теперь интенсивность решает, но радиус перестал. Cтранно красит середину.
Забавно что при повторных кликах "освещение" растёт у каждой точки, даже ранее поставленной. При этом центр становиться чёрным. Пробовал сделать через штуку которая 1234 в 0.5 для того что-бы цвет пофиксить, но оно выдавало в конченом счёте..: бесконечность.
Буквально бесконечность.
Не знаю что теперь с этим делать. надо-бы в алго с прозрачностью итоговый радиус присобачить, но не знаю куда его тут поставить :р
8 часов назад, ProgramCrafter сказал:P.S. Хочу потом увидеть программу, где это будет использоваться.
Здесь присобачим как объект света. Подумаем как сделать ограниченное поле освещения, весь фарш и готово. Мы-ж объекты можем там таскать туда-сюда, изменять их на ходу. Удобно вроде сделал. Недавно кстати появились сцены как в унити, но лучше пока с ними не гулять, а то зарежут. В них лучше использовать только базовые объекты (Всё кроме анимации и файлов, скрипты норм работают), остальные хз как поведут. Добавить объект легче чем создать. Но и там бывают траблы... Этот трабл кстати появился из-за идеи всё упаковывать, что касается определённых сцен (Файлы скрипты, локализация) отдельно друг от друга: в архив. То-же будет и в экспорте. Еще будут "общие файлы" которые будут доступны во всех сценах.
Наверное больше подробностей, чем ожидалось.
-
Скрытый текстlocal function save(path) gamepath = path OE.gamepath = gamepath if not path then return false end fs.makeDirectory('/Temporary/ProjectSave') local idk = {} for e = 1,#scenes do local idk1 ={} for i = 1,#scenes[e].game.storage do table.insert(idk1,'/Temporary/ProjectSave/' ..fs.name(scenes[e].game.storage[i].path)) fs.copy(scenes[e].game.storage[i].path,'/Temporary/ProjectSave/' ..fs.name(scenes[e].game.storage[i].path)) end for i = 1,#scenes[e].game.scripts do table.insert(idk1,'/Temporary/ProjectSave/' ..fs.name(scenes[e].game.scripts[i].path)) fs.copy(scenes[e].game.scripts[i].path,'/Temporary/ProjectSave/'..fs.name(scenes[e].game.scripts[i].path)) end table.remove(OE.ABN) for i = 1,#scenes[e].game.screen do scenes[e].game.screen[i].raw:remove() -- удаляем table.remove(scenes[e].game.screen[i].raw) -- удаляем вообще print(scenes[1].game.screen[1].raw) -- отладка, видим что не удаляеться. if scenes[e].game.screen[i].type == 'animation' then OE.breakAtlas(scenes[e].game.screen[i]) -- удаляет функций к анимациям end end OE.cleanBuffers() table.insert(idk,string.gsub('/Temporary/ProjectSave/'..scenes[e].name,'.part','')..'.part') compressor.pack(string.gsub('/Temporary/ProjectSave/'..scenes[e].name,'.part','')..'.part',idk1) end -- fs.writeTable('/Temporary/ProjectSave/Game.dat',scenes) -- Выдаёт ошибку not enough memory. По теорий: потому-что там функций. Для тестов отрубли. compressor.pack(string.gsub(path,'.proj','')..'.proj',idk) adapting() OE.draw() -- Только сдесь и выдаёться raw обратно, но оно позже записи в файл end
Ни в одной из функций не прописано что-бы в raw появлялись функций. Мы вообще её сносим и тут-же смотрим:
.
Таблица есть, функций присутствуют.
xdd какой-то
-
1
-
-
В 08.07.2023 в 22:56, ProgramCrafter сказал:Взять тир3 видеокарту и монитор.
Я не знаю и не видел людей которые используют т2 монитор для MineOS. Надеюсь и не увижу.
В 08.07.2023 в 22:56, ProgramCrafter сказал:.. зависимости от [квадрата] расстояния от центра. ..
Как это сделать? Вообще не представляю. Ну, как мы узнаем какая прозрачность нам нужна от квадрата расстояния? Попустить получившуюся цифру через штуку которая делает из 123790 0.543?
Вот, это если радиусы в квадрат.
Скрытый текстlocal GUI = require("GUI") local screen = require("Screen") local color = require('color') -------------------------------------------------------------------------------- function round(num) return math.ceil(num) end local workspace = GUI.workspace() -------------------------------------------------------------------------------- light = {intensivity=5,radius = 30,color = 0xFF0000} local object local function idk(x,step) return (x-step)/(light.radius^2-step) -- квадратик end workspace.eventHandler = function(_,_,...) local args= {...} if args[1] == 'touch' then object = workspace:addChild(GUI.object(args[3], args[4], 50, 10)) object.draw = function(object) local x,y = object.x, object.y local alr= {} for xx = 0,light.radius*2+object.x+1 do alr[xx] = {} for yy = 0,light.radius*2+object.y+1 do alr[xx][yy] = false end end function set(x,y,intensivity) local x,y = round(x), round(y) local was = {screen.get(x,y)} if x > light.radius*2 +object.x+1 then return end if not alr[x][y] then screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3]) alr[x][y] = true end end local step = light.intensivity/light.radius for radius = 0, light.radius do local calc = radius ^ 2 --квадратик local balance = calc local last = 0 for angle = 1,math.max(5,math.ceil(180*radius/light.radius)) do if last ~= balance then print(idk(balance,step),balance,step,calc) end last = balance set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/2+y,idk(balance,step)) end end end workspace:draw() end end workspace:draw() workspace:start()Интенсивность так-же не на что не влияет :/. Отличается тем что середина стала пухлее. Может я что-то не так считаю, не знаю.
-
12 часа назад, ProgramCrafter сказал:for angle = 1,math.max(5,math.ceil(180*radius/light.radius)) do
Практически исправлено.
Радиус 30
Радиус 10
В 10-м радиусе видно что оно всё еще концентрируется.
Попробовал сделать сначала "карту" того что у нас есть, если мы уже ставили пиксель на это место мы скипнем set тем самым не повторяясь. Производительность по памяти немного будет плакать.
Радиус 30 интенсивность 10
Интенсивность 1 (Реально)
Интенсивность до сих пор не на что не влияет. Есть линий которые не краситься.
18 часов назад, Oleshe сказал:Должно-быть: чем больше интенсивность, тем больше должно убавляться света на радиус.
Код:
Скрытый текстobject.draw = function(object) local x,y = object.x, object.y local alr= {} -- "карта" пикселей for xx = 1,light.radius+object.x do alr[xx] = {} for yy = 1,light.radius+object.y do alr[xx][yy] = false -- Заполняем "карту" пикселей end end function set(x,y,intensivity) local x,y = round(x), round(y) local was = {screen.get(x,y)} if not alr[x][y] then -- Если не закрасили screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3]) alr[x][y] = true -- Закрасили end end local step = light.intensivity/light.radius for radius = 0, light.radius do local calc = radius * step local balance = calc local last = 0 for angle = 1,math.max(5,math.ceil(180*radius/light.radius)) do if last ~= balance then print(idk(balance,step),balance,step,calc) end last = balance set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/2+y,idk(balance,step)) end end end
И как кстати сделать больше изменений интенсивности на пиксель что-бы переход был плавнее.7
-
У меня есть наработка, идея: у нас есть список с 3 параметрами, цвет света, радиус (длинна) света и интенсивность.
Код:
Скрытый текстlocal GUI = require("GUI") local screen = require("Screen") local color = require('color') -------------------------------------------------------------------------------- function round(num) return math.ceil(num) end local workspace = GUI.workspace() -------------------------------------------------------------------------------- light = {intensivity=0.1,radius = 30,color = 0xFF0000} local object local function idk(x,step) return (x-step)/(light.intensivity-step) -- Что-бы значение интенсивности колебалось от 0 до 1, а не было 20 end workspace.eventHandler = function(_,_,...) local args= {...} if args[1] == 'touch' then -- При клике создадим объект object = workspace:addChild(GUI.object(args[3], args[4], 50, 10)) object.draw = function(object) local x,y = object.x, object.y function set(x,y,intensivity) local x,y = round(x), round(y) local was = {screen.get(x,y)} -- Получаем цвета старого пикселя .. screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3]) -- .. и миксуем его с нашим end local step = light.intensivity/light.radius -- шаг на 1 радиус, что-бы интенсивность света в конце +- была ровна 0 for radius = 0, light.radius do local calc = radius * step -- Как-бы мерием сколько мы прошли, что-бы понять интенсивность света на этом этапе local balance = calc -- Раньше сдесь было доп условие, оно не нужно. Пока-что так. local last = 0 -- Затычка для будущего момета с отладкой for angle = 1,180 do -- Чем меньше, тем меньше "лучей" мы пустим. Полагаю большое количество не имеет смысла. if last ~= balance then -- - - - -- Отладка print(idk(balance,step),balance,step,calc) -- Отладка end -- - - - - -- Отладка last = balance -- - - - - -- Отладка set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/1.5+y,idk(balance,step)) -- Ставим пиксели, высоту делим на 1.5 для более мене круга. Интересно как оно себя поведёт. end end end workspace:draw() end end workspace:draw() workspace:start()
Пример к коду, недостаток angle в цикле. Недостаток "лучей" для круга. А еще красиво.
Радиус 10
Радиус 30
Проблема: Как бы ты не изменял интенсивность, результат тот-же. Не правильно считает центр, он заливается сплошным цветом вместо градиента.
Должно-быть: чем больше интенсивность, тем больше должно убавляться света на радиус. Я не знаю что я делаю не так что-б результат получался одинаковым любом случаи. Вся интенсивность почему-то концентрируется в центре. Жэнтэльмены, помогите узнать что я делаю не так.
-
1 час назад, BenniShifer919 сказал:Почему все используют OpenComputers, а не CC: Tweaked?
У него больше возможностей, мои причины почему я на OC:
- Модульность. Да, он сложнее в сборке, но ты можешь собрать тот компьютер который подходит тебе под определённую задачу.
- Обилие предметов. Когда в СС только компьютер и черепаха (по памяти), в ОС дроны, микроконтроллеры, гео анализатор, карта красного камня, адаптер (Взаимодействие с другими модами), и т.п.
- У него нету сильных недостатков перед СС, наоборот он более продвинутый, имхо.
1 час назад, BenniShifer919 сказал:- Он активно обновляется(Если мы говорим о Tweaked версии)
Оба мода в разработке. Аргумент то прав но обновляться оба мода.
1 час назад, BenniShifer919 сказал:(Не бросайтесь говном пожалуйста, просто я действительно не вижу весомых причин, чтобы сидеть только на OC)
Мы пытаемся быть интеллигентным сообществом, поэтому лучше было-бы написать помидорами.
Оба моды сильны в определённых аспектах, и не вижу причины опускать или завышать кого-либо. Один работает 1.12.2, другой на 1.19.*. Они взаимозаменяемы, просто кто-то начал с одного мода , а переходить на другой желания нету. Я не вижу вязкой причины переходить на СС, имхо ОС лучше. Каждый решает сам что ему использовать.
Думаю что победит дружба, так-как выяснять разницу почему один мод лучше другого это как спросить: что лучше интел или амуде?-
2
-
Большое обновление "Контент 02"
Это будет последнее обновление в отдельном сообщений потому-что наверное и модератором надоел да и ветку засоряю, хотя кому еще писать.
Добавлено:
Граф. элементы:
Объект анимации. С ним было интересно повозиться и вот он есть. Процесс сетапа:
Выбираем в меню как обычный объект, и выбираем atlas.pic, тот атлас который мы будем использовать для анимаций. Сам атлас:
Это мой тип атласа. В атласе должна быть нумерация кадров. По типу: Atlas:setImage(1,1,image.load('/Image.pic'),'FRAME_NUMBER')
У самого объекта есть 2 функций:
tick() -- Следующий кадр
checkNext() -- Проверяет следующий кадр, является ли он последним.
Библиотека:
Добавлен OE.playAnimation(object, speed). Проигрывает анимацию object объекта со speed скоростью. Оно использует "многопоточность" которую мы прибили в прошлом обновлений.Добавлен clearCashe(), clearImageCashe(object.name) и clearScriptCashe(object.name). Первая очищает весь кэш, вторые 2 очищают кэш для определённого объекта. В clearImageCashe(object.name) объектом является объект в game.screen так-как оно хранит картинку для этого объекта.
Оптимизация:
Граф. элементы:Изображения в кэше, диск не будет каждый раз работать когда надо будет добавить одну и ту-же пикчу.
Скрипты:Так-же как и с изображениями, только скрипты.
Тут мои идеи закончились. Пишите сюда, или в лс что-бы вы хотели поменять, прояснить, зарепортить, добавить. -
Большое обновление "Скрипты"
Добавлено:
Библиотека:
Добавлено несколько функций:
Скрытый текстOE.getStorage()
OE.getScreen()OE.getScripts()
OE.getStorage(data)
OE.getObject(data)OE.getScript(data)
Это группа get которая возвращает всё логически от имени. В data у нас либо имя объекта, либо таблица объекта, либо имя объекта.
Так-же у нас появилась OE.regScript(script,mode,interval,endTime,name) и OE.unregScript(name). Они прибивают скрипт к потоку от безымянного объекта который приделан к окну. Mode это режим, их 3: "execute", 'string", "function", загрузить из файла объекта скрипта, из строки и из функций. Script это сама функция на пример. Интервал и endTime это интервал выполнения и конец выполнения через n секунд. Если endTime будет меньше нуля, -1 на пример, то цикл выполнения будет вечен (Пока окно не закроется). UnregScript принудительно удаляет скрипт из выполнения потока.
Помните Instance из патча? Он полностью доделан. Порядок входящих параметров такой-же какой и в параметрах и можно создать вообще любые граф. объекты. На пример:OE.Instence.new('panel',1,1,10,10,0x989898,true) --OE.Instence.new(type,x,y,width,height,color,visible)
Еще есть Instance.remove(data). Data точно такая-же как и с get кластером. Удаляет объект с экрана.
Граф. элементы:
В очередной раз изменён алго счёта позиций названия окна.
В планах сделать кэш подгружаемых объектов таких как те-же скрипты или изображения и сделать анимационный объект: атлас-анимация. Вырезаем-вставляем. Подкидывайте идеи..-
1
-
-
Патч 01
Не добавлено в инсталятор.
Исправлено:
Граф. элементы:
Когда мы изменяли на пример стадию ползунка или переключателя она не отражалась в таблице объекта.
Кнопки закрыть-свернуть при экспорте не отображались.
Добавлено:
Взрывоопасно:
В библиотеку OE добавлен Instance в котором есть Instance.new(type:string, ...), в нём работает только панель, текст, кнопка и прогрессБар, и то не факт. Далее мы его доработаем и добавим Instance.remove(object or objectIndex or objectName:table or number or string) находит объект и удаляет его подтирая за ним. Взрывоопасно потому-что это пока-что огрызок, но патч сделать надо из-за косяков с граф. эл.
Общее:
Локализация:
Теперь она стала гибче: если перед патчем нам нужно было имя объекта для его локализаций, то сейчас имя параметра локализаций идёт после {loc}. Пример:object.text = '{loc} testLocalization' game.localization.testLocalization = 'Hello world!'Имя локализаций одним словом после пробела после {loc}.
-
1
-
-
4 часа назад, WheatComp сказал:Сначала поставил, чтобы было что проверять, а затем проверил.
Смотри: когда ты добавляешь компонент, он уже в компьютере, его не надо определять там что-то с ним делать, система разберётся сразу когда ты его вставишь.
Здесь мы обозначаем модем, предполагается что он уже есть, хотя это не так. Уже после того как мы определили мы проверяем есть ли он, то-есть он у нас либо будет либо ошибка что его нету.
На то и "No primaty 'modem' available" потому-что системе нечего регистрировать как модем и нечего дать программе.
В компьютере нету модема что-бы его дать программе, а isAvailable проверяет есть ли он, то-есть мы проверяем есть ли он, и если есть то уже определяем его. Типа:local cmp = require('copmonent') if cmp.isAvailable('modem') then local modem = cmp.modem print('Есть :)') else print('Нету :(') end
-
11 час назад, WheatComp сказал:local component = require("component") local modem = component.modem if component.isAvailable("modem") == true then ...
Ты ставишь компонент модема перед тем как проверить есть ли он.
А почему ты используешь примари? component.invoke(addrs, functionName, ...) <-- обращается именно к компоненту addrs, имя функций пишешь в строковом варианте, например:
local address = '0ab' local cmp = require('component') local address = cmp.get(address) --Получаем полный адрес из скороченого, обезательно local sides = require('sides') cmp.invoke(address,'setOutput',sides.up,5) print(cmp.invoke(address,'getOutput',sides.north)) cmp.invoke(address,'setOutput',sides.down,12)
-
1
-
-
Супер полезная программа. Единственное хотелось бы видеть загрузку файлов с Pastebin-а. А так очень даже молодец. За то что разобрался с Internet API вообще респект.
-
Небольшое обновление "Оптимизация 01"
Общие:
Помните размер мэйна 110+- Кб? Теперь 80 !1! Установщик уже готов, а код а за-аплоужен.
В репозиторий гитхаба в Applications был добавлен Install.app который содержит исходники инсталятора. Кроме data_NN потому-что там ничего интересно, просто код или кучка файлов в архиве с заумным названием.

Debian4OpenComputers - ASCII лого Debian
в Программы новичков
Опубликовано: · Изменено пользователем Oleshe
Поместил код в спойлер
Предлагаю сделать так, что-бы оно показывало актуальные значения, а не предпологаемые:
local comp = require("Computer") local cmp = require("Component") local line = "---------------------------------------------------" print("Debian GNU/Linux") print("Debian4OpenComputers Loader") print("(C) 2020 by maxutka99 & maks12345(TheMiksHacker") os.sleep(0.7) print(line) print(" _,met$$$$$gg.") print(" ,g$$$$$$$$$$$$$$$P.") print(" ,g$$PX LLKY$$. K") print(" ,$$PX `$$$.") print("',$$P ,ggs. `$$b:") print("`d$$P ,$PPL . $$$") print(" $$P d$' , $$P") print(" $$: $$. - ,d$$'") print(" $$; Y$b._ _,d$PL") print(" Y$$. ... Y$$$$P L") print(" S$$b K-.__") print(" XY$$") print(" LY$$.") print(" K$$b.") print(" LY$$b.") print(" XLY$b._") print(" ----") print(line) os.sleep(0.7) print("root@OpenComputers") os.sleep(0.7) print(line) print("OS: OpenOS") print("EFI: "..cmp.eeprom.getLabel()) print("Kernel: "..comp.getArchitecture()) print("Uptime: "..comp.uptime()..' sec.') print("Authors of Loader: maxutka99 & maks12345") comp.beep()