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

Appo

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

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

  • Посещение

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

    8

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


  1. а можно

    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())
    

  2. ...

    Я имел ввиду OpenOS, а не MineOS.. Перепутал.

     

    Я уже описал что происходит при запуске

     

    Попробую объяснить что происходит при запуске программы (которая в начале поста, или в этом): - запускаю эту программу в папке /home/ - клацаю на другой монитор - монитор и клава подключается, я могу работать в ново выбранном мониторе как бы на этом этапе успех, окда, но при перезапуске системы - комп запускает OpenOS на случайном мониторе (еще не запустилась консоль) - комп запускает autorun.lua - монитор и клава подлючены - если взять второй код, то пишется слово "test", а если в первом коде запускается интерпретатор lua Ну типо и всё, консоль не запускается, кроме слова "test" ничего нету, ну или если взять первый код, то запускается lua и там можно писать, но если выйти (ctrl + d или ctrl + alt + c) то консоль всё равно не запустится!

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


  3. зачем конфиг запускать. Нужно запускать программу, а уже она при запуске считывает адрес монитора из файла и линкуется к нему как-то, то есть основным монитором становиться тот, который последним был прилинкован при ПКМкликах. Так же при линковке изменения нужно сразу перезаписать в файл конфига, чтобы после перезапуска компа изменения сохранились. Ну а как еще? Ну нет больше другого способа, наверно.

     

    Сделал как вы сказали

    ( усложнив путём создания другого файла, и его запуском в 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 запустится

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


  4. Тебе нужны id мониторов? Используй component.list("screen")

    Мониторы выбираются нажатием, считывается адрес этого монитора и записывается в autorun.lua, Но при перезагрузке компа есть проблема описанная выше

     

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

    Я используюсь как конфиг autorun.lua, в нем уже сохранена информация о подключаемом мониторе. Он конечно подключается вместе с клавой, но OpenOS не запускается после этого.. У вас есть иной способ запуска конфига?


  5. Помогите разобраться..

    Программа работает так:
       -> вы запускаете эту программу -> нажимаете на другой монитор -> теперь это главный монитор

    Но при перезапуске компьютера, запускается 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. Пока что не учитывается несколько видеокарт


  6. @@Xytabich можно кодировку выбранного символа вставить в буфер обмена Windows при наличии Debug Card

    component.debug.sendToClipboard(player:string,msg:string)

    Добавили такую функцию в недавних обновлениях OpenComputers

    Думаю и другим будет полезно о ней знать :)


  7.  

     


    откуда такая мания и одержимость неистовая покупать приваты?


    Для подержания экономики на сервере, т.е. люди донатят -> хост оплачивается.

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

    Если у вас хост оплачен на 100 лет вперед то тогда я согласен что покупка новых участков не имеет смысла.
     

     

    Каким жезлом , объясните, можно управлять с компа игрового приватами, разметкой, проверкой пересечения, кто там живет, кто мембер, кто ремембер, флаги, шмаги и тп., и где а самое главное как, этот приват вообще втыкнуть изначально?


    Самописным плагином.
     

     


    И при чем тут наш улей к выбору места привата в мире, которое понравилось игроку?


    Я тоже предлагаю предоставлять выбор игроку в природных условиях, но только выбор выделленных участков, а не произвольных, где игрок тыкнул пальцем.
    Не понравился выделенный участок в природе,то вводишь команду и тебе показывают другой, или реализовать плагином команду с поиском участков с определённым биомом, и игрок просматривает все варианты.
    Можно так весь мир поделить на тысячи участков, а их контроль и очистку сделать автоматической после месяца отсутствия игрока на сервере.
     

     


    Может вам плагин https://dev.bukkit.o...s/plotme/images установить?


    Дрисня)
     

     


    Уже не первый раз вижу отсылки про какие-то покупки чанков и прочее. Это что, сейчас в тренде что ли? Или сейчас какая-то модная игра вышла, типа монополии и землевладельцы? Я чего-то не знаю? :)


    Часть этих идей частично реализованы на разных проектах, но объединить в одну стабильную систему ещё не кто не смог (по крайней мере я не видел)

    На вашем сервере я не играю. Мои предложения являются частичными и не полными. Если какая-то из моих идей на ваш взгляд не достаточно хороша, то пожалуйста укажите на неё и представьте минусы плюсы и какая по вашему мнению в них разница с вашими идеями.
    Мне не интересно чем топик забит и на сколько процентов, дайте мне пожалуйста конструктивную критику.

    Надеюсь я ответил на большинство ваших вопросов)


  8. @@Alex окей, не миры, а отдельные участки, с дополнительными местами.

    Например (Скрин):
      

    18648406_m.jpg



    Не обязательно 3 на 3 чанка, можно больше или меньше)

    Синяя зона:

      Выдаётся при например выходе из спавна, или прописью команды, или ты на pim встаешь..
    Если тебе не нравится участок, ты например прописываешь команду и попадаешь в новый, а этот числиться как пустой, и следующий новый игрок попадет туда.

    Красные зоны:
     
      Они покупаются за игровую валюту
    Покупку предлогаю реализовать либо через комп на спавне

    Например (Скрин):

    18648407_m.jpg



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

    Предлагаю за каждую новую,покупную зону увеличивать цену.

    На мой взгляд, в центре каждой красной зоны должен стоять крутой сундук с ресами, а ценность ресурсов в них должна расти в завсимости от колличества уже купленных участков :) (Так можно привлекать к их покупке)

    Приватить за то не нужно, эти зоны и есть приваты :D 

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



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


  9. @@Alex а нельзя каждому игроку свой мир дать? Т.е. есть миры игроков и мир спавна, там можно встречаться, торговать, обмениваться и т.д.. Тебя могут пригласить в свой мир, или там варп чтобы стоял, и люди свои магазины делали..

    Предположим мир не бесконечный будет, допустим 4 на 4 чанков, что бы соседний выкупить нужно столько-то столько-то денег, и при покупке новых цена будет расти, это будет так сказать стимул для постройки варпов в своём мире, что-то типо петли игровой :D Подумай) Я даже не знаю, будет ли сервер лагатиь из за нагрузки большого числа миров..


  10. По поводу управления:

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

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

    В скором времени постараюсь выложить такую прогу, готова на 70 %, включая удалённую консоль для дронов и автоматическую перезапись EEPROM и других плюх :)

     

     

     

    fHLI4ClXCkE.jpg

     

     


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

    Не нашел в интернете алгоритм Питера Ширли, да и его в целом, выскакивает какой-то музыкант) Можно узнать где вы нашли его алгоритм? Хотя бы ссылку или книгу, может у него и другие эффективные алгоритмы есть.

     

    Спасибо за советы, приму к сведению и постараюсь применить их в новой версии кода :)


  12. А какая причина мерцания? Я не заметил.

    Переменную size в первой строке программы измените на большее 4, тогда начнется мерцание некоторых линий..

     

     

     

    И делай, пожалуйста, выход из программы по нажатию какой либо клавиши. 

    Окей, сделаю на Esc

     

    -------

     

    Спасибо за примеры :)


  13. Допустим у нас есть файл 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

  14. Можно использовать как заставку :)

    Установка:
     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

  15. Круто.

    Я бы пиксель сделал квадратным.

    А еще за пикселем можно гаснущий след рисовать.

    Отличная идея, попробую реализовать) В ближайшее время обновлю пост

     

    ---------------------

    UPD : когда пройдет депресняк, попробую дописать)

    • Нравится 1

  16. По приколу написал прогу с демонстрацией физический свойств, по типу игры Angry Birds

     

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

     зажать -> тащить -> отпустить левую кнопку мыши

     

    Установка:

     pastebin run m96mrzf9

     

    Код:

     

     

    -- Можно тыкать на экран, запуская пиксель как птичку в 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
×
×
  • Создать...