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

Koteyk0o

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

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

  • Посещение

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

    1

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


  1. В 08.01.2023 в 09:03, dispeloff сказал:

    Копипаст из официальной документации OpenComputers Event API

    Ссылка: https://ocdoc.cil.li/api:event

     

    Чтобы получать клики только от игрока «Steve», вы должны сделать:
    local _, x, y = event.pull("touch", nil, nil, "Steve")

    Разжёвывание:

    _,   - Означает отбрасыватель или discard. Используется, когда возвращается или генирируется значение, которое не нужно.

    x, y - Переменные в которые записываются координаты, куда тыкнул игрок по монитору. В нашем случае 'nil, nil'

    После объявления переменной 'y' можно добавить запятую и объявить переменную в которую будет возвращаться ник игрока.

    "Steve" - Означает что событие "touch" будет приниматься только в том случае если у игрока ник "Steve"

     

    Пример в интерпретаторе с использованием чат бокса и события "chat_message":

    image.png.806fba242a6bc88641268e45fce57762.png

     

    С объявлением переменных:

     

    image.png.3dbe97b4c3ec252ce94fa82ed9d2e96a.png

     

    Мягко говоря в программировании я ещё нуб, по этому пояснять некоторые термины могу не точно.

    Если кто-то ищет взаимный обмен опытом, общение на тему программирование и гейм дев, вот мой дискорд: dispeloff#7807

    Ого какую тему ты раскопал))

    За эти 5 лет я успел выучить не только Lua :)

    • Нравится 1

  2. Обновлена версия для Extreme Reactors

    • Пофикшен краш проги при выгрузке чанка с реактором.
    • Строка выработки энергии показывает не только целое число, а и десятую долю. 
    • Нравится 1

  3. 11 минуту назад, uraabk сказал:

    Каждому коммутатору нужны будут диск, цп и память получается?

    Если сильно сеть не напрягать, то не обязательно.

     

    11 минуту назад, uraabk сказал:

    Но ведь если два игрока на двух компах купят одновременно что то, то отправится два файла из которых только один примется/сохранится на других пк или нет?

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

     

    1 минуту назад, uraabk сказал:

    Получается надо pim соединить с монитором и все это подключить к скрипту на компе и так для каждого монитора/pim, но разве они не будут мешать друг другу? Скрипт один, а мониторов много...

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

    Биндишь один моник к компу, отрисовываешь инфу на нем, биндишь другой моник, отрисовываешь инфу уже на нем, и так по кругу (ну или же лучше делать это не в цикле, а по каким-то эвентам)


  4. 2 минуты назад, uraabk сказал:

    Да куда там реальных)) Из ОС конечно же.

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


  5. 8 минут назад, uraabk сказал:

    как соединить компы или создать общий файл со всеми данными на каком нибудь другом пк или что то в это духе? 

    Я не совсем понял, это все происходит на компах из OC? Или на реальных компах?

    Если на компах из OC, то сериализация данных с помощью встроенной либы serialization, дальше отправка с помощью модемов по сети (через send, или broadcast, что больше подходит)

     

    • Спасибо 1

  6. 7 минут назад, aMax сказал:

    @Koteyk0o Объясню лучше. СВОЯ, значит на выбор. Свободный выбор. В любом случае я нашёл решение. 

    Объясню лучше, на будущее. OpenFM это лишь компонент для воспроизведения музыки по ссылке. СВОЮ музыку можно прикрутить откуда угодно, лишь бы была ссылка на воспроизведение. Пишешь прогу для поиска или хранения ссылок на музыку - получаешь свою музыку какую хочешь.


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

    Можно костылем пофиксить: определить разницу между сторонами north и forward, перехватывать и корректировать в ивенте сторону

    Не совсем понял. Ведь редстоун карта сейчас возвращает сторону относительно всего мира, там не только north и forward. Кодом никак не определить сторону правильно, в данный момент. Только если не перебирать стороны где появился/исчез сигнал при срабатывании эвента, но это прям костыль костыль, хотя и должно работать


  8. Редстоун карта возвращает ивент redstone_changed со стороной относительно всего мира, а не как повернут компьютер. Это баг или фича?

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

    Если раньше оно возвращало сторону относительно компьютера, то сейчас возвращает относительно всего мира.

     

    При этом, методы вроде setBundledOutput(3, 15, 255) как работали относительно стороны компьютера, так и работают.

     

    Не создавал бы эту тему, если бы авторы мода ответили на мой issue

    Потому что хочется получить ответ, это я шизанулся, или оно криво работает

     

    В общем если откатить OC на версию 1.7.2 то там все ок работает, сторону возвращает относительно всего компа. С версии OC 1.7.3 оно уже возвращает сторону относительно всего мира.

    В ченжлоге об этом ничего не сказано, так что похоже это все-таки баг.

    Цитата

        Changed: redstone_changed event for bundled signals
            Now includes the colour that changed, and only reports the old and new values for that colour

     

     

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

  9. Вставить ссылку, и включить, в чем проблема то?

    radio.stop()
    radio.setURL('https://muz14.z1.fm/0/53/hans_zimmer__benjamin_wallfisch_-_tears_in_the_rain_(zf.fm).mp3')
    radio.play()

    В новых версиях мода метод play() заменен на start()

     

    Правда мод кривой кусок говна, потому что на некоторых версиях оно нормально пашет, а на некоторых версий неправильная ссылка может вообще убить радио вплоть до перезапуска мира. А так-же некоторые ссылки оно вообще может не воспроизводить без каких либо причин.


  10. Накодил для себя монитор реактора из Extreme Reactors с поддержкой МЭ системы и хранилища из EnderIO

     

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

     

    736914996_Annotation2019-05-16132944.jpg.061248aac87f5c33e62fbcfab3bde7c6.jpg

     

    Что умеет:

    • Вывод имени реактора (Если несколько реакторов то делаете несколько таких мониторов, и по имени реакторы будет проще найти)
    • Расчет времени работы на остатке топлива (Если включена поддержка МЭ то расчет ведется с учетом йеллоурита в МЭ системе)
    • Режим хранения (В этом режиме программа будет поддерживать ВЫКЛЮЧЕННОЕ состояние реактора)
    • Время последнего включения реактора
    • Вывод мощности реактора, вывод остатка топлива в МЭ и в самом реакторе, вывод запаса энергии в батарее EnderIO
    • Поддержание нужного уровня заряда батареи реактора

     

    Что не умеет (Но возможно будет добавлено):

    • Не поддерживается несколько экранов
    • Не поддерживаются несколько реакторов
    • Не поддерживаются турбины
    • Нет управления по модему

     

    Проблемы:

    • На 1.12.2 накопитель из EnderIO не считывается адаптером как мультиблочное хранилище, поэтому выводится информация только об одном блоке накопителя (На 1.7.10 все работает)

     

    Конфиг:

    reactor_Control = true, -- Разрешить управление реактором
    reactor_Storage_Mode = false, -- Режим хранения реактора, программа всегда будет поддерживать ВЫКЛЮЧЕННОЕ состояние
    ME_Storage_Support = false, -- Поддержка внешнего хранилища (Расчет остатка времени работы с учетом топлива в хранилище, и вывод топлива в хранилище на экран)
    EIO_Capacitor_Support = false, -- Поддержка EnderIO (Вывод запаса энергии на экран)
    reactor_Percent_Off = 100, -- Процент заполнения батареи реактора при котором он автоматически выключится
    reactor_Percent_Hysteresis = 5, -- Гистерезис заполнения батареи реактора
    reactor_Name = 'Nexus-6', -- Имя реактора

     

    Установка (Версия для Extreme Reactors):

    wget https://raw.githubusercontent.com/whoisnotthere/Extreme-Reactors-Display/refs/heads/main/reactor.lua /home/reactor_Display.lua

     

    Страница на GitHub

    • Нравится 5

  11.  

     

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

    Точно, спасибо, я почему-то подумал что это отрисовка с обновлением

     

     

     

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

    Просто при загрузке проги я изменял разрешение обращаясь напрямую к gpu, а оказывается надо обращаться к буферу. Спасибо


  12. У меня возник тут достаточно туповатый вопрос. Как обновить os.time в контейнере? как я понимаю os.time выводить надо через Label, я вывожу, label присвоен контейнеру допустим с названием Time, и я допустим обновляю этот контейнер раз в секунду через Time:drawOnScreen(), но изменений я не вижу, как я понимаю я делаю что-то не так, хотелось бы узнать как это можно реализовать. 

     

    И еще у меня с либой две проблемы. На довольно старых версиях либы, когда еще GUI.list был GUI.tabBar все работало нормально, то-есть кликаешь на вкладку бара и все сразу переключается, сейчас же на вкладку надо нажимать по 2 раза, чтобы ее переключить. Баг или фича?

     

    И на мониторах с маленьким разрешением по ширине (моник третьего уровня, но из-за нужд он используется с разрешением 80*50) некоторые элементы не помещаются на экран. То-есть у GUI.alert кнопка OK уезжает куда-то за пределы экрана вправо, а палитра вообще только наполовину помещается на экран, вроде это все проблемы


  13. Программу не знаю но есть один метод

     

    Можно распечатать модель из нескольких моделей :

     

    Jbbkgw2.png

    При нажатии кнопки меняется режим редактора (С редактирования модели на "Многомодельный режим")

    cAeEofE.pngТут я разместил 2 модели

    Далее фича:

    YTyJFY5.png

    Можно включить сетку которая разделяет(визуально) модель на блоки число 16 это число на которые нужно разделить для блока в майне это число равно 16

    Для того чтобы модель получалась не кривая нужно чтобы число блоков (в пример 64 64 64) делились на 16 без остатка

     

     

    Пример модели с несколькими частями:

     

    RRhJJt5.pngМодель ракеты Falcon 9 

    mrfKVeM.png

    Её части

    Если построить эту модель она будет в высотой больше 60 блоков

    P.S я распечатываю несколько моделей и собираю в одну большую

     

     

    Супер, спасибо большое про метод, я не знал про него

    Фалкон 9 очень крутой


  14. Не подскажете какую нибудь программу редактирования 3Д моделей для дальнейшей печати на принтерах?

    MagicaVoxel имеет ограничение 126^3, что позволяет распечатывать модели всего лишь размером до 7.8^3, что немного удручает 


  15. Написал, что не подходит, а причину не указал. Почему не подходит-то? Лично я для тех же целей использую именно GUI.textBox с параметром autoWrap = true и autoHeight = true

    Действительно, сорри, как-то не обратил внимание на эти параметры

    Но вообще странно что виджеты не переносят текст при превышении ширины


  16. Идея

    Сделать перенос текста в виджете Label/Text по превышению кол-во символов по ширине

    То-есть если ширина виджета 50 пикселей, и текст не помещается в первую строку то текст начинает переносится

     

    Хотя может конечно я не знаю, может это реализовано, но в документации ничего не нашел

    TextBox не совсем подходит под это, ибо  допустим если надо сделать описание какой-то кнопки под этой кнопкой, то приходится лепить несколько лейблов ибо текст просто не помещается


  17. Никаких улучшений графика не планируется? Чтобы поддерживал отрицательные и положительные значения одновременно, типо поделить ось Y на 2 половины, или динамическое обновление графика по времени.

    И еще, как можно заставить график обновляться динамически грубо говоря.

    У меня просто по сети приходят значения, которые должны быть в графике, а получается график обновляется только при обновлении страницы с графиком


  18. У изображений функция .onTouch работает?

    Код

    radioLayout:addChild(GUI.image(55, 19, image.load('/addfm.pic'))).onTouch = function()
    GUI.error('test')
    end
    

    При нажатии на изображение ничего не происходит, совсем

    21e874ae2f.png


  19. Небольшое обновление, касающееся поставляемых по дефолту приложений и UX в целом:

    • Добавлено приложение Braille для удобного создания изображений, составленных из символов Брайля

    Было бы неплохо добавить заливку в приложение Braille, и было бы норм, а то вручную закрашивать все пиксели на большом изображении как-то ваще не круто(

    И еще, когда в этой проге рисуешь что-то, и нечаянно задеваешь элемент этой проги, то чертово окно меняет свое расположение

    И добавьте ластик, ибо без ластика ваще туго 


  20. У меня вопрос, а как можно менять контейнеры кнопкой?

    Допустим в одном контейнере куча кнопок и какое нибудь изображение, в другом контейнере список, в третьем еще что нибудь, и т.д

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

     

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


  21. Вопрос к автору темы, как с этой либой делать что либо в цикле?

    Возможно я просто немного тупой, но у меня цикл не работает

    local component = require("component")
    local term = require("term")
    local event = require("event")
    local gpu = component.gpu 
    local computer = require('computer')
    local m = component.modem 
    local screen = component.screen
    local rs = component.redstone
    local buffer = require("doubleBuffering")
    local GUI = require("GUI")
    
    local gray = 0x262525 -- серый цвет
    local white = 0xffffff -- белый цвет
    local button2 = 0x00d4ff -- цвет кнопки
    local button1 = 0x00a9ff -- цвет нажатия кнопки
    local black = 0x000000 -- черный
    local alarmbus = 1
    local signalbus = 4
    
    m.open(21) -- Открываем порт для управления
    term.clear()
    gpu.setResolution(74,50)
    
    local function onoffdisplay()
    if rs.getBundledInput(alarmbus,15) > 0 then
    	screen.turnOn()
    	else
    	screen.turnOff()
    end
    end
    
    local mainContainer = GUI.fullScreenContainer()
    mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, white))
    mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, 3, gray))
    mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, 3, gray))
    mainContainer:addChild(GUI.label(35, 2, 5, 1, white, os.date('%H:%M')))
    
    mainContainer:addChild(GUI.roundedButton(2, 6, 12, 5, button1, white, button2, white, 'Lights')).onTouch = function()
    m.broadcast(27,'lightsOnOff')
    end
    
    mainContainer:draw()
    buffer.draw(true)
    mainContainer:startEventHandling()
    

    Это код от панели управления в доме, когда на шине есть сигнал - экран включен, когда сигнала нет - выключен

    В общем если добавить в конец

    while true do
    onoffdisplay()
    end
    

    То компьютер все равно не реагирует на изменения редстоуна

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

    Возможно есть какие-то ограничения, или что-то типо того?


  22.  

    Можно разделить функцию на две:

    local function kek1()
      print('Привет') -- print надо выполнить один раз
    end
    
    local function kek2()
      if rs.getBundledInput(1,1) > 0 then
        rs.setBundledOutput(1,5,255)
      else
        rs.setBundledOutput(1,5,0)
      end
    end
     
    kek1()
    while true do
      kek2()
      os.sleep(0.5)
    end
    
    

    А можно воспользоваться флагом

    local flag=true
    
    local function kek()
      if flag then
        print('Привет') -- print надо выполнить один раз
        flag=false
      end
      if rs.getBundledInput(1,1) > 0 then
        rs.setBundledOutput(1,5,255)
      else
        rs.setBundledOutput(1,5,0)
      end
    end
     
    while true do
      kek()
      os.sleep(0.5)
    end
    

    Спасибо, как раз версия с флагом подходит

     

     А зачем огород городить? Можно же просто перед циклом воткнуть print('Привет').

    Да, но тогда print будет выводиться только после запуска проги, а не после запуска функции

    Тот код я всего лишь написал для примера

×
×
  • Создать...