Appo
-
Публикации
72 -
Зарегистрирован
-
Посещение
-
Победитель дней
8
Сообщения, опубликованные пользователем Appo
-
-
а можно
if require("component").inventory_controller.getInventorySize(i) ~= 0 thenили такif require("component").inventory_controller.getInventorySize(i) then?Он может стоящий рядом адаптер например сосчитать, в котором 1 слот, что в первом случае, что во втором
Если тебе лень вводить "27" можно сделать вот так:
local component = require("component") function getSideChest() for i = 0,5 do if component.inventory_controller.getInventorySize(i) == component.chest.getInventorySize() then return i end end end print(getSideChest()) -
Нужен контроллер инвентаря
function getSideChest() for i = 0,5 do if require("component").inventory_controller.getInventorySize(i) == 27 then -- Изменить число 27, если сундук другой return i end end end print(getSideChest()) -
...
Спасибо за новые знания)
local ff=io.open("/boot/98_connectScreen.lua","w")
Это именно то, чего не хватало)
-
...
Я имел ввиду OpenOS, а не MineOS.. Перепутал.
Я уже описал что происходит при запуске
Попробую объяснить что происходит при запуске программы (которая в начале поста, или в этом): - запускаю эту программу в папке /home/ - клацаю на другой монитор - монитор и клава подключается, я могу работать в ново выбранном мониторе как бы на этом этапе успех, окда, но при перезапуске системы - комп запускает OpenOS на случайном мониторе (еще не запустилась консоль) - комп запускает autorun.lua - монитор и клава подлючены - если взять второй код, то пишется слово "test", а если в первом коде запускается интерпретатор lua Ну типо и всё, консоль не запускается, кроме слова "test" ничего нету, ну или если взять первый код, то запускается lua и там можно писать, но если выйти (ctrl + d или ctrl + alt + c) то консоль всё равно не запустится!
Я не знаю какими словами обьяснять еще, просто запустите на чистом компе этот код, вы поймете о чём я говорю и в чём проблема..
-
зачем конфиг запускать. Нужно запускать программу, а уже она при запуске считывает адрес монитора из файла и линкуется к нему как-то, то есть основным монитором становиться тот, который последним был прилинкован при ПКМкликах. Так же при линковке изменения нужно сразу перезаписать в файл конфига, чтобы после перезапуска компа изменения сохранились. Ну а как еще? Ну нет больше другого способа, наверно.
Сделал как вы сказали
( усложнив путём создания другого файла, и его запуском в autorun.lua )
local component = require("component") local _,add = require("event").pull("touch") local ff=io.open("//connectScreen.lua","w") ff:write([[ local component = require("component") local add = "]]..add..[[" if not(add == component.gpu.getScreen()) then if not pcall(function() component.setPrimary("screen",add) end) then component.setPrimary("screen",component.list("screen")) end component.gpu.bind(add) os.sleep(1) component.setPrimary("keyboard",component.screen.getKeyboards()[1]) require("term").clear() os.execute("/boot/00_base.lua") print("test") end ]]) ff:close() local ff=io.open("//autorun.lua","w") ff:write([[ os.execute("//connectScreen.lua") ]]) ff:close() os.execute("//autorun.lua")Проблема осталась так же, не запускается MineOS, только если не воспользоваться этим
Но если в момент запуска компа создавать ивенты (клацать мышкой на мониторе например), тогда OpenOS запустится
Попробую объяснить что происходит при запуске программы (которая в начале поста, или в этом):
- запускаю эту программу в папке /home/
- клацаю на другой монитор
- монитор и клава подключается, я могу работать в ново выбранном мониторе
как бы на этом этапе успех, окда, но при перезапуске системы
- комп запускает OpenOS на случайном мониторе (еще не запустилась консоль)
- комп запускает autorun.lua
- монитор и клава подлючены
- если взять второй код, то пишется слово "test", а если в первом коде запускается интерпретатор lua
Ну типо и всё,
консоль не запускается, кроме слова "test" ничего нету, ну или если взять первый код, то запускается lua и там можно писать, но если выйти (ctrl + d или ctrl + alt + c) то консоль всё равно не запустится!
НО еще раз повторюсь, если при запуске компа попробывать сделать ЭТО:
Но если в момент запуска компа создавать ивенты (клацать мышкой на мониторе например), тогда OpenOS запустится
Тогда консоль на ново выбранном монике запустится.
-
Тебе нужны id мониторов? Используй component.list("screen")
Мониторы выбираются нажатием, считывается адрес этого монитора и записывается в autorun.lua, Но при перезагрузке компа есть проблема описанная выше
видимо, просто нужно создать конфиг-файл, если есть есть необходимость, чтобы после выключения и снова включения компа основным становился монитор, который был проивенчен перед этим обрядом. И там хранить адрес основного монитора, и считывать его при запуске компа.
Я используюсь как конфиг autorun.lua, в нем уже сохранена информация о подключаемом мониторе. Он конечно подключается вместе с клавой, но OpenOS не запускается после этого.. У вас есть иной способ запуска конфига?
-
Помогите разобраться..
Программа работает так:
-> вы запускаете эту программу -> нажимаете на другой монитор -> теперь это главный монитор
Но при перезапуске компьютера, запускается autorun.lua с запомненным адресом монитора, монитор подключается, но не система..
То есть для примера я добавил:
os.execute("lua") -- Для тестаИнтерпретатор запускается на новом мониторе, можно в ней работать, но если выйти из lua, то в OpenOS не получится работать
Но если в момент запуска компа создавать ивенты (клацать мышкой на мониторе например), тогда OpenOS запустится
Проблема в том, что как запустить OpenOS после перепривязки мониторов не создавая "такие" ивенты?
local component = require("component") local _,add = require("event").pull("touch") local ff=io.open("//autorun.lua","w") ff:write([[ local component = require("component") local add = "]]..add..[[" if not(add == component.gpu.getScreen()) then if not pcall(function() component.setPrimary("screen",add) end) then component.setPrimary("screen",component.list("screen")) end component.gpu.bind(add) os.sleep(1) component.setPrimary("keyboard",component.screen.getKeyboards()[1]) require("term").clear() print('Проверка подключения') -- Для теста os.execute("lua") -- Для теста end ]]) ff:close() os.execute("//autorun.lua")P.S. Пока что не учитывается несколько видеокарт
-
@@Xytabich можно кодировку выбранного символа вставить в буфер обмена Windows при наличии Debug Card
component.debug.sendToClipboard(player:string,msg:string)
Добавили такую функцию в недавних обновлениях OpenComputers
Думаю и другим будет полезно о ней знать
-
Видел такую реализацию с использованием макросов (Macro / Keybind Mod) + WorldEdit
Думаю, Вам стоит в сторону макросов копать -
откуда такая мания и одержимость неистовая покупать приваты?
Для подержания экономики на сервере, т.е. люди донатят -> хост оплачивается.
Не говоря о голосовании за проект для поднятия его в топы для превлечения людей готовых задонатить, а для того что бы люди голосовали создают экономику и например что бы купить ресурс им требуются деньги которые получаешь за голосование либо донат.
Если у вас хост оплачен на 100 лет вперед то тогда я согласен что покупка новых участков не имеет смысла.
Каким жезлом , объясните, можно управлять с компа игрового приватами, разметкой, проверкой пересечения, кто там живет, кто мембер, кто ремембер, флаги, шмаги и тп., и где а самое главное как, этот приват вообще втыкнуть изначально?Самописным плагином.
И при чем тут наш улей к выбору места привата в мире, которое понравилось игроку?Я тоже предлагаю предоставлять выбор игроку в природных условиях, но только выбор выделленных участков, а не произвольных, где игрок тыкнул пальцем.
Не понравился выделенный участок в природе,то вводишь команду и тебе показывают другой, или реализовать плагином команду с поиском участков с определённым биомом, и игрок просматривает все варианты.
Можно так весь мир поделить на тысячи участков, а их контроль и очистку сделать автоматической после месяца отсутствия игрока на сервере.
Дрисня)
Уже не первый раз вижу отсылки про какие-то покупки чанков и прочее. Это что, сейчас в тренде что ли? Или сейчас какая-то модная игра вышла, типа монополии и землевладельцы? Я чего-то не знаю?
Часть этих идей частично реализованы на разных проектах, но объединить в одну стабильную систему ещё не кто не смог (по крайней мере я не видел)
На вашем сервере я не играю. Мои предложения являются частичными и не полными. Если какая-то из моих идей на ваш взгляд не достаточно хороша, то пожалуйста укажите на неё и представьте минусы плюсы и какая по вашему мнению в них разница с вашими идеями.
Мне не интересно чем топик забит и на сколько процентов, дайте мне пожалуйста конструктивную критику.
Надеюсь я ответил на большинство ваших вопросов) -
@@Alex окей, не миры, а отдельные участки, с дополнительными местами.
Например (Скрин):
Не обязательно 3 на 3 чанка, можно больше или меньше)
Синяя зона:
Выдаётся при например выходе из спавна, или прописью команды, или ты на pim встаешь..
Если тебе не нравится участок, ты например прописываешь команду и попадаешь в новый, а этот числиться как пустой, и следующий новый игрок попадет туда.
Красные зоны:
Они покупаются за игровую валюту
Покупку предлогаю реализовать либо через комп на спавне
Например (Скрин):
Либо через плагин, где ты встаешь в не доступную зону, вводишь команду и со счета списываются деньги, и участок твой)
Предлагаю за каждую новую,покупную зону увеличивать цену.
На мой взгляд, в центре каждой красной зоны должен стоять крутой сундук с ресами, а ценность ресурсов в них должна расти в завсимости от колличества уже купленных участков
(Так можно привлекать к их покупке)
Приватить за то не нужно, эти зоны и есть приваты
Остаются проблемы с биомами, тогда я бы предложил через плагин за деньги (игровую волюту) устанавливать любой биом в участке, где ты находишься, или в чанке
Да и вообще, обращаюсь ко всем кто участвует в обсуждении, в плане предложений и прочего, почему вы не пользуетесь визуализацией своих мыслей? На мой взгляд это куда эффективнее доносит мысли чем интерпретируемый русский язык, где каждое слово может иметь по несколько значений. А предложения составленные из них, каждый человек понимает по своему.. -
@@Alex а нельзя каждому игроку свой мир дать? Т.е. есть миры игроков и мир спавна, там можно встречаться, торговать, обмениваться и т.д.. Тебя могут пригласить в свой мир, или там варп чтобы стоял, и люди свои магазины делали..
Предположим мир не бесконечный будет, допустим 4 на 4 чанков, что бы соседний выкупить нужно столько-то столько-то денег, и при покупке новых цена будет расти, это будет так сказать стимул для постройки варпов в своём мире, что-то типо петли игровой
Подумай) Я даже не знаю, будет ли сервер лагатиь из за нагрузки большого числа миров.. -
По поводу управления:
Можно было бы добавить возможность перезапуска дрона удаленно, просто например если он схватит на пути какою-то ошибку - будет печально (как было в предшествующем ивенте с роботами), то-есть обернуть основной в функцию и выполнять с отловом ошибок, если есть ошибка - перезапуск, запилить удаленный контроль прошивок и выполнять их в pcall: прошивки участники могут класть на сервер, а особая прошивка на дроне будет получать этот код с сервера, компилить и выполнять в pcall.
Также поддерживаю идею с физическими точками, так можно легко определить расстояние от дрона.
В скором времени постараюсь выложить такую прогу, готова на 70 %, включая удалённую консоль для дронов и автоматическую перезапись EEPROM и других плюх


-
Рекомендую использовать следующий код, основанный на модифицированном алгоритме Питера Ширли и предназначенный специально для низкопроизводительных машин (значительно быстрее, чем классический алгоритм Брезенхема):
Не нашел в интернете алгоритм Питера Ширли, да и его в целом, выскакивает какой-то музыкант) Можно узнать где вы нашли его алгоритм? Хотя бы ссылку или книгу, может у него и другие эффективные алгоритмы есть.
Спасибо за советы, приму к сведению и постараюсь применить их в новой версии кода

-
Один человек реализовал вставку В буфер обмена Windows через дебаг карту, только я не знаю как именно.. Но это тоже не плохая подсказка)
,
-
А какая причина мерцания? Я не заметил.
Переменную size в первой строке программы измените на большее 4, тогда начнется мерцание некоторых линий..
И делай, пожалуйста, выход из программы по нажатию какой либо клавиши.
Окей, сделаю на Esc
-------
Спасибо за примеры

-
Допустим у нас есть файл Prog.
Что бы перезаписать код под этим же именем мы вводим в консоль несколько команд:rm Prog
edit Prog
Колёсико мыши,Сtrl + S, Ctrl + W
Prog
Я же предлагаю программу с написанием лишь одной команды в консоль:
q Prog
Установка:
pastebin get KpdzfS2G q
Код:local shell = require("shell") local fs = require("filesystem") local args = shell.parse(...) if args[1] == nil then print('Ошибка ввода, укажите название программы -> q [программа]') os.exit() end if not fs.exists('/home/'..args[1]) then print('Файл не найден') os.exit() end os.execute('rm '..args[1]) os.execute('edit '..args[1]) os.execute(args[1])
p.s. Есть вариант улучшить программу, создав свой редактор, и сделав вставку из буфера обмена Windows автоматической (если это вообще можно сделать). Пишите ваши предложения
-
2
-
-
Можно использовать как заставку

Установка:
pastebin run U0pK04Rp
Код:
local size = 4 -- Больше 4 начинается мерцание некоторых линий local x0,y0 = 160,50 local component = require("component") local gpu = component.gpu local term = require('term') function line(x1,y1,x2,y2) x= x1 y= y1 for i = 1 , math.floor( ( (x2-x1 )^2+( y1-y2 )^2)^0.5) do gpu.set(math.floor(x),math.floor(y),'█') rad = math.atan2(y1-y2,x2-x1) x = x + math.cos(rad) y = y - math.sin(rad) end end local t = {} function rnd() if math.random(0,1) == 0 then return -1 else return 1 end end for i = 1, size do t[i] = {['x'] = math.random(1,120),['y'] = math.random(1,50),['dx'] = rnd(),['dy'] = rnd()} end term.clear() while true do for i = 1, size do t[i].x = t[i].x + t[i].dx t[i].y = t[i].y + t[i].dy if t[i].x > x0 then t[i].dx = -1 end if t[i].y > y0 then t[i].dy = -1 end if t[i].x < 1 then t[i].dx = 1 end if t[i].y < 1 then t[i].dy = 1 end end for i = 1, size-1 do line(t[i].x,t[i].y,t[i+1].x,t[i+1].y) end line(t[1].x,t[1].y,t[size].x,t[size].y) os.sleep(0.001) term.clear() end
p.s.
Посоветуйте пожалуйста, как избавится от мерцание при отрисовке линий, когда их более 4. Пробывал эти же пиксели замазывать, но так только хуже, term.clear() решает.
А так же, как реализовать пиксели в пол символа? Если не трудно, скиньте пожалуйста код где это реализовано что бы можно было понять как это работает, заранее спасибо)-
6
-
-
Круто.
Я бы пиксель сделал квадратным.
А еще за пикселем можно гаснущий след рисовать.
Отличная идея, попробую реализовать) В ближайшее время обновлю пост
---------------------
UPD : когда пройдет депресняк, попробую дописать)
-
1
-
-
По приколу написал прогу с демонстрацией физический свойств, по типу игры Angry Birds
Использование:
зажать -> тащить -> отпустить левую кнопку мыши
Установка:
Код:
-- Можно тыкать на экран, запуская пиксель как птичку в Angry Birds local koef = 2 -- коэффициент стартового запуска local component = require("component") local gpu = component.gpu local term = require('term') local event = require('event') local h = {['x'] = 20,['y'] = 30,['dx'] = 5,['dy'] = -3} local xm,ym = gpu.getResolution() function line(x1,y1,x2,y2) x= x1 y= y1 for i = 1 , math.floor( ( (x2-x1 )^2+( y1-y2 )^2)^0.5) do gpu.set(math.floor(x),math.floor(y),'█') rad = math.atan2(y1-y2,x2-x1) x = x + math.cos(rad) y = y - math.sin(rad) end end function fiz(usl,dxx,dyy,xx,yy) if usl then h.dx = h.dx * dxx h.dy = h.dy * dyy h.x = xx h.y = yy end end term.clear() while true do local e1 = {event.pull(0.05)} gpu.set(math.floor(h.x),math.floor(h.y),' ') if e1[1] == 'touch' then local e2 repeat e2 = {event.pull()} if e2[1] == 'drag' then term.clear() line(e1[3],e1[4],e2[3],e2[4]) end if (e2[1] == 'touch') then break end gpu.set(1,1,'dx '..tostring((e1[3] - e2[3])/koef)) gpu.set(1,2,'dy '..tostring((e1[4] - e2[4])/koef)) until e2[1] == 'drop' term.clear() if e2[1] == 'drop' then h.x = e1[3] h.y = e1[4] h.dx = (e1[3] - e2[3])/koef h.dy = (e1[4] - e2[4])/koef end end h.dx = h.dx h.dy = h.dy + 0.45 h.x = h.x + h.dx h.y = h.y + h.dy fiz(h.y > ym,0.9,-0.85,h.x,ym) -- низ fiz(h.y < 0 ,0.9,-0.85,h.x,0) -- верх fiz(h.x > xm,-0.85,0.9,xm,h.y) -- право fiz(h.x < 0 ,-0.85,0.9 ,0,h.y) -- лево gpu.set(math.floor(h.x),math.floor(h.y),'█') gpu.set(1,1,'dx '..tostring(h.dx)) gpu.set(1,2,'dy '..tostring(h.dy)) end-
7
-



Как определить с какой стороны установлен сундук возле адаптера
в Разные (отсортировать)
Опубликовано:
function getSideChest(size) for i = 0,5 do if require("component").inventory_controller.getInventorySize(i) == size then return i end end end print( getSideChest(27) )