Oleshe
-
Публикации
155 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные пользователем Oleshe
-
-
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
-
-
13 часа назад, IgnorGTO сказал:Я тут немного подумал над сокращением
а так будут правильно ?
Да, че нет то. Это еще лучше, более коротко. Я правда не понимаю зачем после ифа елсе? если оно не напечатало это уже значит что не подошло по условию. А так молодец.
-
1
-
-
История, параграф 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
-
-
Ну, немного затупил, с кем не бывает.
Теперь я удостоверился что работает, весь код:
Скрытый текст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
-
-
Зачем ты делаешь функций, которые вызываются 1 раз? для био предлагаю сделать проще:
for i = 1,#userlist doif 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
-
-
Прога:
Скрытый текстwhile true do a = {require('event').pull('bioReader')} print('Адрес считывателя: '..a[2]..' '..'вроде айди игрока: '..a[3]) end
Специально максимально укоротил, если надо могу и расписать.
-
1
-
-
Проблема опять была решена в дискорде)
Имелось в картинке то что вот на нашей плазме оно начало рисоваться, а другие части плазмы (мониторы) не трогались.
Помог FingerComp с логикой пикселей. -
6 часов назад, IgnorGTO сказал:Просто считать uid пользователя не как не получается сделать это на версии 1.12.2
Запятые бы ставил... Ну тоесть ты запускаешь программу, тыкаешь на блок и выводит на экран uid і конец?
-
1
-
-
Так, в дискорде мы значительно продвинулись дальше, сюда я пришел потаму-что у , но появился новый баг.
Паста: https://pastebin.com/iiiUuNGR
Оно обрисовывает картинку только на том мониторе с которого это началось,
(с право часть от прошлых экспериментов)
-
25 минут назад, IgnorGTO сказал:BiometricReader
В чем должен быть смысл кода?
-
1
-
-
7 часов назад, ECS сказал:А питания хватает? Была похожая ситуация, когда некоторые мониторы отключались из-за подключения лишь одного энерговхода
Я использую творческий системник, у него же неограниченная энергия. Как говорилось ранее другие программы могу работать с ним, он работоспособен. Пиксели там менять задний фон и т.д.
-
Есть пикча, её нужно поместить на мониторы 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-й монитор хотя видит его, даже сторонние проги его видят.
Как жить?
-
Проверил я, теория провалилась, оно изменяет когда ставит пиксель.
-
В тот момент когда мы биндим карточку к другому монитору, их 6 на 5. Вроде, через минут 30 проверю, сейчас нету доступа к майну. Оно какбы делает пиксели, линия уходит на следущий монитор, биндим его опять на этот шобы новая линяя пошла, и тут разрешение сбрасывается, линия исчезает. Её легко заметить на черной полоске которую обрезала 50 высота.
-
14 минуты назад, eu_tomat сказал:Кто оно?
Не знаю, может MineOs может сам OpenComputers, такое вроде происходит и с OpenOs.
-
Я ставлю пиксели на мониторе с разрешением 126 на 63, квадрат, а оно превращает его обратно в 160 на 50, прямоугол да еще и стирает те пиксели которые мы отрисовали. Можно ли это отключить или это системно?
-
-
Просто нужен шаблон ИИ у которого есть 2 входа и 2 выхода что-бы все было прокомментировано дабы сам мог наращивать слои. Я имею представление об ИИ но сделать его в компах, да еще и превратить питон в луа... А так как обычно уже почти все есть имеет смысл спросить. Повторюсь, нужен просто шаблон дабы он мог считать 2 входа (скажем привет и пока) и 2 ответа (вероятность того что сейчас подойдёт сказать привет или пока).. Еще нужно что-бы она сама обучалась, ведь "словарь" будет пополняться. Хоть это скорее и заказ но вопрос то - есть ли такое или хотя-бы похожее дабы можно было переделать? Пожалуйста.
-
Мне понадобились функций библиотеки из 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
-
-
-
4 часа назад, Doktor_Windws11 сказал:Я не могу найти вирус.
В смысле вирус? Что мы подразумеваем под вирусом? Здесь вирусы не нужны, что он тебе сделает? Заставит комп лагать? Их же легко вычислить, а против любого "вируса" можно переустановить EEPROM или систему. Это занимает мало времени и всегда помогает. Единственное что может убить мир с компами, это прописать stdout = {}. Компы будут ругаться на то чего нету, их можно запустить с дискеты но с диска он будет выпендриваться. Да и большинство вирусов ты сам качаешь да бы посмотреть что будет и каждый раз разочаровываешься. Вирус можно сделать но зачем он? красть файлы кода?
-
Что содержит переменная chest? Зачем emLost? почему функция может вернуть только true, а где false? Можно целый код, а не его отрывок?
-
1
-
1
-
-
Хаю хай и это машинка в стиле ретро.
Видео не будет потому-что, сами испытайте вот.
Говно код:
Скрытый текст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 тир монитора.
Управляется на стрелки, если врезаться игра кринжанёт и выкинет обратно в терминал.
Возможно если кому-то надо будет сделаем разнообразность трассы и карты (трибун). -
В принципе уже того достаточно, просто разжую как оно происходит.
----
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
-

BiometricReader
в Компоненты
Опубликовано: · Изменено пользователем Oleshe
Да, опять придумал как сделать короче. Хорош.
Ну, я тоже ;Р. пазл бы сошелся если бы знал что за bj.