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

Chebuya

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

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

  • Посещение

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

    72

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


  1. В 28.12.2019 в 15:15, Fingercomp сказал:

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

    Сейчас можно раскрафчивать EEPROM, делая из него EEPROM, потом копируя с другим. 

     

    • Нравится 1
    • Спасибо 1

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

    ...

    Что за extra_reboot? Это какой-то кастомный ивент? Ты делаешь где-то computer.pushSignal("extra_reboot")?

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

     

    P.S По поводу кода - если редстоун-сигнал принимает какая-либо из редстоун-плат, то есть сигнал redstone_changed. По быстрому написал код, не проверял, но работать должен.

    local event = require("event")
    local computer = require("computer")
    local redstone = require("component").redstone
    local rebootSide = 2 --Сторона с которой идёт приём сигнала https://minecraft-ru.gamepedia.com/OpenComputers/Sides_API
    
    local function reboot(address, side)
    	if side == reboootSide then 
    		if redstone.getInput(reboootSide) > 0 then 
    			computer.shutdown(true) --Перезагружаем компьютер P.S true означает перезагрузку, computer.shutdown() - просто выключение.
    		end
    	end
    end
    
    event.listen("redstone_changed", reboot)

     

     

    • Нравится 1

  3. Небольшое обновление

     

    Программа переделана на EEPROM. Минимальный билд робота: 

    vSRorHs.png

     

    Добавил пару функций: 

    • eject
    • addpoint

    Eject извлекает бумагу/настройщик по его имени. Addpoint добавляет предмет, который лежит рядом с роботом. Если это настройщик или бумага - предмет остаётся в роботе. Если остальное - выплёвывает под себя. 

     

    Прошивка робота(одной командой):

    wget https://github.com/BrightYC/Other/blob/master/telepad.lua telepad.lua && flash -q telepad.lua telepad.lua

     

    По поводу конфига - ejectSide - сторона, с которой выплёвывается предмет при извлечении.  

     

     

     

    • Нравится 1

  4. Всем привет. 

     

    Написал небольшую программу для автоматизации телепорта из EnderIO.

    В роботе должны присутствовать:

    • Улучшение "Чат"
    • Улучшение "Контроллер инвентаря"
    • Улучшение "Инвентарь"(Больше - лучше, с 4 инвентарями будет доступно 64 точки)
    • Плата на красном камне(Любой уровень)

     

    Собственно, сама программа: https://github.com/BrightYC/Other/blob/master/telepad.lua

     

    В программе можно настроить 

    • symbol(Префикс команд)
    • whiteList(Другие игроки не смогут использовать телепорт)
    • side(Сторона телепорта - верх, низ, спереди)
    • bufferSide(Нужно только для версий выше 1.7, там вместо настройщиков нужно класть в инвентарь телепорта распечатку, а достать оттуда распечатку невозможно, хотя получить имя предмета - можно, поэтому ставим буфер/сундук с трубой)
    • version(Версия работы - selector для 1.7, paper - для версий выше)

     

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

    1. Берём настройщик координат(Если у вас версия выше 1.7 - нужно будет прихватить бумагу)
    2. Тыкаете(пкм) в то место, где хотите поставить точку. Если у вас 1.7 - можете идти домой(P.S для назначения уникального имени на 1.7 нужно переименовать настройщик в наковальне). Если нет - у вас открывается интерфейс, где можно назначить имя точки.
    3. Кладём в робота.
    4. Пишем в чате ?update
    5. Пишем ?list и проверяем наличие точки.

     

    Итог - копия плагина MyWarp(чат-команды практически заимствованы оттуда), доступно до 64 "варпов", немного дописав можно приделать доп. инвентарь, тогда количество точек стремится к бесконечности.

     

    Видеодемонстрация: 

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

     

     

    • Нравится 7
    • Спасибо 1

  5. 27 минут назад, eu_tomat сказал:

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

     

    1 час назад, BrightYC сказал:

    А для чего вообще вейкапы нужны в штатной работе?

    Робот, упавший с TLWY - нештатная ситуация. Тут вполне хватит 2 команд 

    >lua
    >component.modem.broadcast(1, '')

    И всё. Робот пробужен. 


  6. 1 час назад, eu_tomat сказал:

    ...

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

     


  7. 9 минут назад, Totoro сказал:

    Ты можешь воспользоваться Serialization API чтобы распечатать табличку в читаемом виде.

    
    local s = require('serialization')
    
    local x = { a = 10, b = "hello" }
    print(s.serialize(x))

     

    А если сделать так - print(s.serialize(x, true)), тогда таблица выйдет в более читаемом виде, как в интерпретаторе. Но конечно там контент урежется немного.

    • Нравится 1

  8. Только что, Doob сказал:

    Было бы здорово если все было так просто. На одном сервере я прочитал исходники админского магазина и нашел их на пастбине.

    Сервер многое не сообщает клиентам, но протокол открытый. Немного покопавшись, можно заставить сервер делать удивительные вещи.

    Какого магазина? В смысле моего? Там же без ключа в любом случае не получится ничего сделать. Да и магаз же лежит в открытую на гитхабе, зачем искать где-то на пастебине?

     

     


  9. 8 минут назад, Doob сказал:

    Никакой дыры нет. Все очевидно, если примерно понимать, как работает компьютер.

     

    Что-то OBS после обновы стал туго писать несколько окон, но общий принцип, думаю ясен.

    Это же одиночная игра. С какой стати серверу посылать состояние компов? Нужно только клавиатуру/монитор.


  10. 15 минут назад, Doob сказал:

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

    Есть один способ защититься. Надо сделать шлюз для связи с интернетом в отдельном мире, куда не имеет доступ ни один игрок. Туда от магазина прокинуть мост туннельными картами. Хотя, я не уверен, что из персонального измерения нельзя вытащить информацию.

    Каким образом из памяти игры прочитать ключ? @vx13 призываю тебя, @NEO так же обсуждали эту тему


  11. 2 часа назад, Doob сказал:

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

    Самый надежный способ хранить информацию - на жестком диске в игровом сервере.

    Каким образом? Я не понимаю о чём ты. Как он модифицирует свой счёт?

    P.S Приведи реальный пример, я не в курсе каким образом можно достать данные с жёсткого диска не имея к нему прямого доступа. Ключ хранится на жёстком диске - каким образом игрок может вытащить ключ? Есть реальный метод, или это теория?

    P.P.S Был у меня сервер в игровом мире, это неудобно. Всякие отзывы и прочее при вайпе потом фиг достанешь, это не практично. 


  12. 4 часа назад, lLoki сказал:

    ну она както работает у игроков в магазинах 

    "както" - либо у них там чанклодер стоит, либо счёт идет только при прогруженном чанке. Ну или у кого-нибудь там доступ к админке, не знаю.


  13. 8 часов назад, lLoki сказал:

    у каво есть такой скрипт чтоб там писало когда последний раз заходил в игру игрок  2090063845_.thumb.png.cbb03efffb79e6d40e106b229725cbb3.png

    Такая программа должна работать в прогруженных чанках 24/7. В ином случае, это невозможно сделать.


  14. Ну, надеюсь точно доделал. 

     

    Доделал почти всё что хотел. Из новинок: 

    • Возможность выбрать режим поиска(весь инвентарь/1 слот)
    • Запуск с EEPROM(никаких зависимостей, программа целиком и полностью на голом HDD)
    • Админ-панель. Ну, чтож, теперь "админы" в программе указываются в EEPROM, ибо для обновления/запуска программы требуется знать, кто же администратор. В админ-панели можно банить игроков, обновлять базу данных предметов, вводить терминал в режим тех-работ, удалить ключ с диска.
    • Небольшая переделка интерфейса, так же теперь игроки при первом логине ОБЯЗАНЫ прочитать "помощь"(Это отсеивает игроков, которые не понимают что это вообще такое)
    • Ключ не указывается в программе, его теперь нужно вставлять через буфер обмена. Сохраняется на жёстком диске по пути в корне диска key.lua
    • Немного адекватнее стал конфиг.
    • Добавил openperipheral selector, позволяет показывать предмет, который пользователь выбрал.

    И еще куча всяких вещей, вроде того что скроллбар работает с мышью.

    К слову, теперь установить программу можно вроде как проще. Прошиваем EEPROM, и она автоматически скачивает программу с репозитория. Обновить можно будет комбинацией клавиш CTRL+D.

     

    Появилась утилита автоматического экспорта. Позволяет автоматически экспортировать предметы, если в таблице items указать параметр needed. Будет поддерживать это кол-во в мэ сети, но нужен мост между основной мэ-сетью и сетью магазина. Buffer - это сколько предметов должно быть в сети, чтобы можно было экспортировать предмет(Необязательный параметр). Для работы этого экспорта нужна деревянная мотыга в сети. Даже не спрашивайте зачем :smile3:

     

    Пачка скриншотов:

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

    TOZD4gX.png
    nPZ48P1.png

    S9HY10L.png

    2f4HnlV.png

    YqMtrgd.png

     

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

  15. 6 часов назад, Kingdom сказал:

    Здравствуйте.

    Такой вот вопрос. Есть механизм из мода IndustrialCraft 2 experimental, в нём делаются формы для алмазного бура и шахтёрного лазера. Можно ли автоматизировать крафт этих форм, благодаря роботам из OpenComputers?

    Не-а. Никак. Увы. Пробовал адаптером подцепить, не работает. А роботы по гуишкам не умеют лазить.


  16. 15 минут назад, eu_tomat сказал:

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

    От неё можно избавится?:blink: Ну разве что чёрный фон 


  17. 4 часа назад, eu_tomat сказал:

    Такой код по идее должен жрать очень мало ресурсов.

    Мне непонятно зачем гнаться за "должен жрать очень мало ресурсов".  Ибо дефолтная сейчас заставка MineOS лагодромит в разы больше, чем если какой-то микроконтроллер будет дёргать фс раз в полторы секунды.


  18. 52 минуты назад, eu_tomat сказал:

    Как вам идея в качестве лагомерки использовать замеры computer.uptime() при циклическом выполнении этого кода?

    
    for i=1,3 do
      computer.pullSignal(0)
    end
    computer.pullSignal(0.01)
    t = computer.uptime()

    Такой код по идее должен жрать очень мало ресурсов.

    Проблема в том, что os.time, что computer.uptime возвращает майновское время. Во время низкого тпс'а тикать начнёт медленнее - соответственно computer.uptime при стабильных 20 тиках в секунду и 10-15 тпс будет одинаков. Нужно сравнивать реальное время, только так можно определить тпс. 


  19. 1 минуту назад, eu_tomat сказал:

    Да, код немного кривоват, склонен к завышению TPS, имеет неконтролируемое дрожание

    Давно его делал, что поделать. 

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

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

    Ну тут увы дороги расходятся. Я бы не стал дожимать до последнего. 


  20. 8 часов назад, NEO сказал:

    Конечно неинтересен. Майн выдохся что ясно всем, чего в реакторе нового можно найти спустя кучу лет после выхода мода?

     

    3 минуты назад, NEO сказал:

    Предлагаю написать продвинутый симулятор реактора.

    :D


  21. 1 минуту назад, eu_tomat сказал:

    Реактор должен продолжать работу не смотря ни на что. Насколько мне это удастся в той или иной схеме, это другой вопрос. Часть из обсуждённых схем не будет стабильной даже при 20 TPS.

    Моё мнение - вырубать реактор при ТПС ниже допустимого. Нашёл старенький код, позволяющий определить кол-во тиков в секунду. 

    local c, fs = require("component"), require("filesystem")
    local gpu = c.gpu
    local TC, RO, RN, RD, TPS = 2, 0, 0, 0
    
    gpu.setForeground(0x99b2f2)
    gpu.set(1, 2, "TPS Сервера:")
    local function time()
        local f = io.open("/tmp/TF", "w")
        f:write("test")
        f:close()
        return(fs.lastModified("/tmp/TF"))
    end
    
    while true do
        RO = time()
        os.sleep(TC) 
        RN = time()
        RD = RN - RO
        TPS = 20000 * TC / RD
        TPS = string.sub(TPS, 1, 5)
        nTPS = tonumber(TPS)
        gpu.set(13, 2, "     ")
        if nTPS <= 10 then
            gpu.setForeground(0xcc4c4c)
        elseif nTPS <= 15 then
            gpu.setForeground(0xf2b233)
        elseif nTPS > 15 then 
            gpu.setForeground(0x7fcc19)
        end
        gpu.set(13, 2, TPS)
    end

    Когда тпс в норме - включаем реактор. На лаги майна лучше не надеяться. 


  22. 11 минуту назад, eu_tomat сказал:

    Но при использовании беспроводной сети возникает вопрос: кто включит погасший микроконтроллер?

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

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