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

Oleshe

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

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

  • Посещение

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

    12

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


  1. 13 минуты назад, IgnorGTO сказал:
    
    dorslist={
    	['Био-1']="дверь-1",
      	['Био-2']="дверь-1",
      	['Био-1']="дверь-2",
      	['Био-2']="дверь-2",
    }

    Думал так попробовать так как у 1 двери стоит 2 био

    Да, опять придумал как сделать короче. Хорош.

     

    13 минуты назад, IgnorGTO сказал:
    
    dorslist={
    	{'био-1', ',bj-2'}='дверь-1',
      	{'био-1', ',bj-2'}='дверь-2',
    }

    но не совсем понял как с ним работать

    Ну, я тоже ;Р. пазл бы сошелся если бы знал что за bj.

    • Нравится 1

  2. 3 часа назад, IgnorGTO сказал:

    спасибо за помощь теперь буду думать над конструкцией добавления 2 и более дверей

    А че там думать? Есть список содержащий наше количество дверей (их адреса) с биосчитывателями также. Аля:
    Если этот адрес равен 1-му био значит открываем ту то дверь, если адрес равен 2-му био значит открываем другую дверь.
    local bio = {'123','sus'} -- первые 3 буквы адреса

    local doors= {'666','103'} -- первые 3 буквы адреса

    a= {'4fh498fj276goj3f'} -- адрес био входа евента

    for i = 1, #bio do -- для каждого биосканера

      if bio == a then -- если мы нажали на один из них

        cmp.invoke(cmp.get(doors),'toggle') -- обращаемся к соответствующему контроллеру двери

      end

    end
    а в данном случаи не уид игрока, а адрес био, он даётся при событий. cmp.invoke обращается именно к компоненту с n-ным адресов, cmp.get получаем полный адрес по сокращенному. В "таком" случаи 1-й био сканер должен находиться на 1-й позиций списка, как и его дверь, так-же со 2-ми. Эта конструкция универсальна, добавляй всего сколько хочешь.

    • Спасибо 1

  3. 13 часа назад, IgnorGTO сказал:

    Я тут немного подумал над сокращением

    а так будут правильно ?

    Да, че нет то. Это еще лучше, более коротко. Я правда не понимаю зачем после ифа елсе? если оно не напечатало это уже значит что не подошло по условию. А так молодец.

    • Нравится 1

  4. История, параграф 1, страница 3 детки:

    Сидел я сидел, а потом приспичило сделать игру, а "в сыром виде" (обычным путём) это превращается в мешанину. Вчера начел сегодня закончил делать программy OpenGames которая схожа (относительно) на редакторы по типу сроблокса и тому подобных.

    -- "Что это за чудо?" Это программа которая может делать другие программы, у нас есть почти все что нужно, оно будет обновляться по мере надобности.

    Сейчас у нас есть: кнопка, инпут, свитч, текст, картинка. Они храниться в таблице, прямо полностью, что относительно сокращает вес приложения. Не храняться в списке все стороне файлы, картинки и скрипты, только их он будет подгружать, и то если они числиться в списке :).
    Для отрисовки картины нашей программы нужна библиотека opengames, которая хоть и задаёт 1 глобальную функцию, на у вы попробуйте запихнуть функцию в 1 строку с \n. Все работает до ужаса просто и на костылях. Файл редактора весит 30 Кб из-за костыля "копировать-вставить". Это мы исправим позже :).

    Все проекты можно сохранить в, угадайте, проект. Его так-же можно обратно загрузить. Проэкт это просто "составные" программы, сохраняем изображения скрипты и глав. таблицу в одном месте. В экспорте оно буквально создаёт приложение, его структуру и иконку.

    Ну, так-как объясняю я плохо, вот видео как я сделал упаковщик файла в 1 сторону. Можно сделать и что-бы несколько файлов, распаковать архив, но мы же пример делаем так-что ладно.
    Видео: 

    Паста редактора: https://pastebin.com/88yRPHfz
    Паста либы: https://pastebin.com/HqzGAKwk

    Гитхаб: https://github.com/0leshe/OpenGames/tree/main

    При должном терпений можно сделать не плохой продукт. В будущем плонирую "простое создание скриптов" по типу скрэтч и добавление новых элементов гуи, и конечно сжать файл а то 30 кб это много.
    Жду тех самых гуру которые будут писать что можно было сделать так, а тут вот так и вообще. Моя отмазка: оно на стадий разработки, есть еще идеи которые можно сделать по типу параметров окна но это будет позже, сначало делаем задумку а потом украшаем её. - Жак Фреска.

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

  5. Ну, немного затупил, с кем не бывает.

    Теперь я удостоверился что работает, весь код:

    Скрытый текст
    
    print("Server started :", os.date("%a-%b-%Y %H:%M:%S"))
    local rd = require("component").os_rolldoorcontroller
    local database = {
    	"7e4132ac-0f0d-3e7a-b74d-015640e6419c7d",
    	"62416a97-e5e2-3172-95de-d0564698a36875",
    	"62416a97-e5e2-3172-95de-d0564446326874"
    }
    local userlist={
    	["7e4132ac-0f0d-3e7a-b74d-015640e6419c7d"] = "Саша",
    	["62416a97-e5e2-3172-95de-d0564698a36875"]= "Артур",
    	["62416a97-e5e2-3172-95de-d0564446326874"] ="Женя"
    }
    while true do
      local a = {require('event').pull('bioReader')}
      for i = 1, #database do
        if database[i] == a[3] then
          user = userlist[database[i]]
          rd.toggle()
          os.sleep(3)
          rd.toggle()
        end
      end
      print('Пользователь:',user,'ID:',a[3],'OPEN',os.date("%a-%b-%Y %H:%M:%S"))
    end

     

    вроде

    • Спасибо 1

  6. Зачем ты делаешь функций, которые вызываются 1 раз? для био предлагаю сделать проще:
    for i = 1,#userlist do

      if userlist == a[3] then

        door()

      end

    end

     

    А для print использовать наши параметры, и не переназначать на пустые переменные.
    print('Пользователь: '..userlist[a[3]]..' ID: '..a[3]..' Открылось в: '.. os.date('%a-%b-%Y %H:%M:%S'))

    Закомментированный старт() занимает место на диске, тебе-же она не нужна тебя уже есть био()

    Я только заметил какой-же узер лист плохой:
    local userlist = {

      ["7e4132ac-0f0d-3e7a-b74d-015640e6419c7d"] = 'Саша',

      ["62416a97-e5e2-3172-95de-d0564698a36875"] = 'Артур',

      ["62416a97-e5e2-3172-95de-d0564446326874"] = 'Женя'

    }

    тогда userlist[addres] = name, мы сможем сразу по адресу получить имя.

    • Спасибо 1

  7. 6 часов назад, IgnorGTO сказал:

    Просто считать uid пользователя не как не получается сделать это на версии 1.12.2

    Запятые бы ставил... Ну тоесть ты запускаешь программу, тыкаешь на блок и выводит на экран uid і конец?

    • Нравится 1

  8. Так, в дискорде мы значительно продвинулись дальше, сюда я пришел потаму-что у , но появился новый баг.
    Паста: https://pastebin.com/iiiUuNGR
    Оно обрисовывает картинку только на том мониторе с которого это началось,

    image.png

    (с право часть от прошлых экспериментов)


  9. 7 часов назад, ECS сказал:

    А питания хватает? Была похожая ситуация, когда некоторые мониторы отключались из-за подключения лишь одного энерговхода

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


  10. Есть пикча, её нужно поместить на мониторы 126 на 63, мониторы 6 ширина 5 вертикаль. Я знаю что ECS уже делал подобную программу. Но она не подходит в 3-х моментах, как она ведёт себя если картинка не на полный экран? 2-й Это не библиотека, из этого вытекает 3-тий пикча ставиться на 1 1, возможно это можно изменить но нужно что-бы это значение было динамичное.

    Что я получил:
     

    Скрытый текст
    
    local multiplescreen = {}
    local curmon = '557'
    local gpu = require('component').gpu
    local image = require('image')
    local monitors = {'a05','b77','6d1','917','7a6','7b1','17a','10d','de3','a92','000','0fd','47e','ca0','0d7','b29','d35','b4b','b1e','902','4fc','4b8','31f','82a','05b','d4f','4ee','79b','518','c7a'}
    function round(num)
        return num + (2 ^ 52 + 2 ^ 51) - (2 ^ 52 + 2 ^ 51)
    end
    function get(address,CT) -- позаимствовано у OpenOs
      for c in require('component').list(CT,true) do
        if c:sub(1,address:len()) == address then
           return c
        end
      end
    end
    function multiplescreen.getMonitor(x,y)
      local i = 126
      while i < x do
        i = i + i
      end
      local xx = round(i / 126)
      local i= 63
      while i < y do
        i = i + i
      end
      local yy = round(i / 63) -- все вот это ранее это определяем какой моник мыы должны использовать
      i = 0
      e = 0
      x = 0
      toend = {}
      s = 0
      while x < 126*6 do
        x = x + 126
        i = i + 1
        toend[i] = {}
        y = 0
        e = 0
        while y < 63 * 5 do
          y = y + 63
          e = e + 1
          s = s + 1
          toend[i][e] = monitors[s]
        end
      end
      if curmon ~= toend[xx][yy] then -- проверяем надобность биндить
        gpu.setResolution(126,63)
        gpu.bind(get(toend[xx][yy]),false) -- фолсе вторым аргументом, все как надо
        gpu.setResolution(126,63)
        curmon = toend[xx][yy]
      end
      return toend[xx][yy]
    end
    local function set(...)
      local idk = {...}
      multiplescreen.getMonitor(idk[1],idk[2]) -- биндимся на нужный монитор
      while idk[1] > 126 do
        idk[1] = idk[1] - 126
      end
      while idk[2] > 63 do
        idk[2] = idk[2] - 63
      end
      gpu.setForeground(idk[4])
      gpu.setBackground(idk[3])
      return gpu.set(idk[1],idk[2],idk[5])
    end
    function multiplescreen.draw(x1,y1,path)
      if type(path) == 'string' then
         imagee =  image.load(path)
         print('load')
      else
        local imagee = path
      end
      local w = imagee[1]
      local h = imagee[2]
      for x = 1,w do
        for y = 1,h do
          local bg,fg,_,symbol = image.get(imagee,x,y)
          print(bg,fg,symbol)
          set(x1+x-1,y1+y-1,bg,fg,symbol)
        end
      end
      gpu.setResolution(126,63)
      gpu.bind(get('557'))
    end
    multiplescreen.draw(100,50,'/BG.pic') -- тест пикча
    return multiplescreen-- задумано как библия

     

    Вопрос: почему оно скипает 3-й монитор хотя видит его, даже сторонние проги его видят. 

    image.png.18a9b4b9fafe23395c87ad619de0067b.png

    Как жить?


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


  12. Я ставлю пиксели на мониторе с разрешением 126 на 63, квадрат, а оно превращает его обратно в 160 на 50, прямоугол да еще и стирает те пиксели которые мы отрисовали. Можно ли это отключить или это системно?


  13. Просто нужен шаблон ИИ у которого есть 2 входа и 2 выхода что-бы все было прокомментировано дабы сам мог наращивать слои. Я имею представление об ИИ но сделать его в компах, да еще и превратить питон в луа... А так как обычно уже почти все есть имеет смысл спросить. Повторюсь, нужен просто шаблон дабы он мог считать 2 входа (скажем привет и пока) и 2 ответа (вероятность того что сейчас подойдёт сказать привет или пока).. Еще нужно что-бы она сама обучалась, ведь "словарь" будет пополняться. Хоть это скорее и заказ но вопрос то - есть ли такое или хотя-бы похожее дабы можно было переделать? Пожалуйста.


  14. Мне понадобились функций библиотеки из python numpy, поэтому настрадавшись я сделал тот-же функционал но на луа.

    nl.array(a,b,c) -- создаёт список из заданных нами переменных

    nl.dot(array,array) -- перемножает одну таблицу на другую и плюсует все что в них осталось

    nl.exp(array or number) -- экспонента всех элементов таблицы или экспонента числа, с ней и настрадался

    Я не знаю какие еще функций там есть, если вам будет надо я добавлю.

    Прописка:  pastebin get QiHTzdQ8 /lib/numlua.lua

    Результат в питоне и здесь отличаться на сотнях тысячных!! (148.4131591 а у нас 148.41315908646)

    • Нравится 1

  15. 4 часа назад, Doktor_Windws11 сказал:

    Я не могу найти вирус.

    В смысле вирус? Что мы подразумеваем под вирусом? Здесь вирусы не нужны, что он тебе сделает? Заставит комп лагать? Их же легко вычислить, а против любого "вируса" можно переустановить EEPROM или систему. Это занимает мало времени и всегда помогает. Единственное что может убить мир с компами, это прописать stdout = {}. Компы будут ругаться на то чего нету, их можно запустить с дискеты но с диска он будет выпендриваться. Да и большинство вирусов ты сам качаешь да бы посмотреть что будет и каждый раз разочаровываешься. Вирус можно сделать но зачем он? красть файлы кода?


  16. Хаю хай и это машинка в стиле ретро.

    Видео не будет потому-что, сами испытайте вот.

    Говно код:

    Скрытый текст
    
    local cmp = require('component')
    local unicode = require('unicode')
    local event = require('event')
    local key = require('keyboard').isKeyDown
    local gpu = cmp.gpu
    local x = 35
    local y = 10
    local range = 30
    local rangex = 10
    
    while true do
      gpu.set(x,y,' ')
      gpu.copy(1,1,160,160,0,1)
      gpu.fill(1,1,160,1,' ')
      if range > rangex then
        if range > 0 then
           range = range - 1
        else
           rangex = rangex + 1
        end
      else
        if range < rangex then
          if range < 160 then
             range = range + 1
          else
             rangex = rangex - 1
          end
        else
          rangex = math.random(range-20,range+20)
        end
      end
      gpu.fill(1,1,range,1,unicode.char(0x28FF))
      gpu.fill(range+20,1,160,1,unicode.char(0x28FF))
      if key(203) == true then
         x =x - 1
      end
      if key(200) == true then
         y = y - 1
      end
      if key(205) == true then
         x = x + 1
      end
      if key(208) == true then
         y = y + 1
      end
      char,_ = gpu.get(x,y)
      if char == unicode.char(0x28FF) then
        require('term').clear()
        return false
      else
        gpu.set(x,y,unicode.char(0xEC11))
      end
      os.sleep(0.1)
    end
    os.execute('/bin/sh.lua')
    require('term').clear()

     

    Копируйте вставляйте в файл запускайте, сделано на мега коленке.

    Нужен 3 тир монитора.

    Управляется на стрелки, если врезаться игра кринжанёт и выкинет обратно в терминал.
    Возможно если кому-то надо будет сделаем разнообразность трассы и карты (трибун).


  17. В принципе уже того достаточно, просто разжую как оно происходит.

    ----
    require('component').,invoke(addres:string, function:string,...)   -- Функция либы позволяет обращаться к компонентам по адресу.

    ----

    Адрес понятно адрес нашего супер компонента.

    --

    функтион(литерали(literally)) это функция, пример:
    rs.setOutput(sides.north, ...)

    cmp.invoke('228','setOutput',sides.north)

    --

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

    --

    Пример: последовательное включение выключение фонариков на красном камне, они на блоке контроллера с верху.

    Скрытый текст

     

    
    local cmp = require('component') -- либа компонента
    local sides = require('sides') -- либа сторон, как ни странно хранит стороны света, их цифекри
    local invoke = cmp.invoke -- "ярлык" дабы не писать такую большую строку
    local rslist = {cmp.get('228'),cmp.get('666')} -- 2 аддреса компонентов красного камня, вводите свои
    -- cmp.get(addres:string) -- получаем адрес компонента по его не полной части
    local turn = false -- очередь, включается лево-право
    while true do -- цикл, прерывается Ctrl+Alt+c
      os.sleep(1) -- Ожидание
      print('Oп, как могу') -- ххахахехахех
      if turn == true then -- смотрим какая сторона
        local turn = false -- дабы стороны менялись
        invoke(rslist[1],'setOutput',sides.up,0) -- выключаем одно ..
        invoke(rslist[2],'setOutput',sides.up,1) -- .. и включаем другое
      else -- "или"
        -- всё то-же но на оборот
        local turn = true
        invoke(rslist[2],'setOutput',sides.up,0)
        invoke(rslist[1],'setOutput',sides.up,1)
      end
    end -- концы циклов
    --конец!!!1!11

     

    Пример: спам 2-мя (не ограничено) беспроводными картами на 1-й порт

    Скрытый текст
    
    local invoke = require('component').invoke
    local modemlist = {'su5','404'}
    for i = 1, #modemlist do -- Преобразовываем сокращённые адреса к полным
      modemlist[i] = require('component').get(modemlist[i])
    end
    for i = 1, #modemlist do -- открываем порты на всех картах
      invoke(modemlist[i],'open',1)
    end
    while true do
      os.sleep(0.01)
      for i = 1, #modemlist do -- отправляем
        invoke(modemlist[i],'broadcast',1,require('unicode').char(0x263B)) -- require('unicode').char(ColorCode:HEX) -- Символ из таблицы символов, на форуме она есть можешь глянуть
      end
    end

     

    Возможно не работает т.к. писалось на скорую руку и не проверялось, но на вид должно :)

    На скорость спама (не перерывами, а активным времени) влияет CallBugets из конфиг файла, выкручиваешь на 999 и все летает.

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

    Здесь я разжевал, как можно буквально в пару строк обращается к определённому компоненту.

    Если появился вопрос можешь задать мне в лс или дискорд, я каждый день чекаю сайт, но сначала лучше смотри википедию (https://minecraft.fandom.com/ru/wiki/OpenComputers/Component_API#Интерфейс), там есть компоненты библиотеки и т.д.

    • Нравится 1
×
×
  • Создать...