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

Doob

Гуру
  • Публикации

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

  • Посещение

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

    141

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


  1. Связь с компом, там экран для клавы))

     

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


  2. Локализации вообще или чисто манов? Я думаю стоит для начала просто написать, может санги "подготовит почву" для всего этого..

     

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

    Хотя, можно добавить файлы локализации на уровне мода - в виде данжевой дискеты.


  3. Круто. Напиши в issues сангару, по поводу мультиязыковых man страничек... Может добавит..

     

     

    P.S. alias/man/redstone  - не переведено слово Description

     

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


  4. Быстренько перевел мануалы, чтобы новичкам было легче ориентироваться, могут быть ошибки, ибо писал в блокноте не проверяя пунктуацию и грамматику.

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

    pastebin run hxLrBAPb

    • Нравится 5

  5. Ты что, сделал жесты движения?)

     

    Ну в ОС можно реализовать только один жест, у меня только три функции - дабл клик, свайп, клик ПКМ.

     

    Если я ничего не напутал, то это выглядит как-то так:

    local event = require('event')
    local gpu = require('component').gpu
    
    local function d_c(a, b)
      if (a[3]-b[3]) == 0 and (a[4]-b[4]) == 0 then
        return a[3], a[4]
      end
    end
    
    local function swp(a, b)
      return (b[3]-a[3]), (b[4]-a[4]), math.deg(math.atan(x/y))
    end
    
    while true do
      local e = {event.pull()}
      if e[1] == 'touch' and e[5] == 0 then
        local e0 = {event.pull()}
        if e0[1] == 'touch' and e0[5] == 0 then
          d_c(e, e0) -- double click
        elseif e0[1] == 'drag' then
          local e1 = {event.pull('drop')}
          swp(e0, e1) -- swipe
        elseif e0[1] == 'touch' and e0[5] == 1 then
          -- shortcut menu
        end
      elseif e[1] == 'touch' and e[5] == 1 then
        -- shortcut menu
      end
    end
    

  6. Да, интересно, но ведь есть карта.

    Я как-то предлагал сделать услугу получения координат, чтобы роботы/дроны/компьютеры знали где находится хозяин, но мне сказали, что это пятая нога.

     

    P.S. И нельзя давать игрокам создавать точки слишком близко, ибо от 3Д кубиков клиент жутко лагает.


  7. В связи с переездом приходится закидывать все незаконченные программки в один файл и выкидывать на флешку.
    Давно хотел сделать модный файловый менеджер со свайпами и гибкой настройкой, но проигрывал в битве с ленью и временем.
    Концепция проста как тапок, при должном упорстве можно склепать за один вечер, но мне, видать не судьба.
     
    В общем суть такова: программа выводит список файлов в рабочей директории, раскидывая их по сетке, как сейчас модно в планшетах и мобильниках. Так как список файлов хранится в таблице, поделенной на экраны, свайп (либо клик по указателю) по горизонтали переключает экран, обновляя список файлов.
    hJgBXjB.gif

    Свайп по вертикали с верхней части экрана, разворачивает строку терминала в рабочей директории, свайп вверх сворачивает ее.
    iNTV0P6.gif

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

     

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

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

    GTHEf2s.gif


  8. Простой алгоритм квадратных пикселей, принимает 2D таблицу цветов, выдает готовое изображение.

    local function printX4(data)
      for i = 1, #data, 2 do
        for j = 1, #data[i] do
          gpu.setBackground(data[i][j])
          gpu.setForeground(data[i+1][j])
          if i == 1 then
            gpu.set(j, i, '▄')
          else
            gpu.set(j, i-(i/2), '▄')
          end
        end
      end
    end
    

  9. а если на сервере нет или запрещены чанклоадеры, как быть? Вообще я скопировал всю схему программы в "edit mine", набираю mine, ничего не происходит, набираю "lua" а потом "api.mine(64,64)?пишет бяку и не работает

     

    Точно всю? За один раз ее не скопировать, лучше через pastebin get

     

    Вот скрипт запуска:

    local kopalka = require('mine')
    local tArgs = {...}
    if #tArgs == 2 then
      if type(tonumber(tArgs[1])) == 'number' and type(tonumber(tArgs[2])) == 'number' then
        kopalka.mine(tArgs[1], tArgs[2])
      else
        print('Аргументы должны быть заданы в виде чисел.')
      end
    else
      print('Использование: @progam_name 16 16')
    end
    

    Если название библиотеки не mine.lua, то надо его задать в первой строчке вместо 'mine'

    Чтобы запустить скрипт вводим, например название_скрипта 32 32


  10. Все бы ничего, но когда запускаешь 128x128x16, понимаешь, что это явный перебор для одного раза (хотя это дешевый способ получения иридия).

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

    • Нравится 1

  11. А смысл, если есть прога Алекса? Менее функциональный велосипед...

     

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

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

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

    • Нравится 1

  12. Пoлнoфункциoнальная прoграмма для кражи чужoгo имущества.
    Ну и в хозяйстве пригодится!


    Пoчему Wabbajack? Да пoтoму-чтo этo инструмент безумия! :smile3:  (Вooбще такoе название пoдoшлo бы бoльше автoматическoму гриферу с геoсканерoм, нo этo будет абсoлютнoе безумие, егo лучше назвать Sheogorath)

    Этa прoграмма прoста как тапoк и так же надежна, я сделал как мoжнo прoще, пoэтoму тут нет никаких излишеств, нет никаких забинденых кнoпoчек, кoтoрые надo жать пo стo раз.
     

     

    local port = 8206
    local address = 0
    local component = require('component')
    local event = require('event')
    local modem = component.modem
     
    local function RBT()
      modem.open(port)
      while 1 do
        local tMSG = {event.pull('modem_message')}
        if tMSG[5] <= 3 and tMSG[6] == '.' then
          address = tMSG[3]
          break
        end
      end
     
      while 1 do
        local tMSG = {event.pull('modem_message')}
        if tMSG[3] == address then
          if string.sub(tMSG[6], 1, 1) == '/' then
            pcall(load(string.sub(tMSG[6], 2, #tMSG[6])))
          else
            os.execute(tMSG[6])
          end
        end
        os.sleep(0.4)
      end
    end
     
    local function TBLT()
      modem.broadcast(port, '.')
      os.execute('resolution 50 1')
      while 1 do
        os.execute('cls')
        io.write('>> ')
        modem.broadcast(port, io.read())
        os.sleep(0.4)
      end
    end
     
    if component.isAvailable('robot') then
      RBT()
    elseif component.isAvailable('tablet') then
      TBLT()
    else
      print('Программа запущена на неподдерживаемом устройстве.')
    end
    

     



    Чтoбы начать безумствoвать:

    • Устанавливаем прoграмму на планшет и рoбoта (oба дoлжны быть с WiFi).
    • Пoдхoдим пoближе к рoбoту. :blink:
    • Запускаем прoграмму на рoбoте, затем на планшете (неудoбнo, нo не хoчу нагружать кoд сущнoстями, если и так рабoтает).
    • На планшете вбиваем название любoй прoграммы, устанoвленнoй на рoбoте (например "go forward 5") и oна испoлняется. :smile89:

    Чтoбы пoслать сooбщение не в терминал, а в интeрпретатoр, тo ставим перед сooбщением слеш (например "/print('Waaaaagh!')")
     
    Для бoлее удобнoгo безумства настoятельнo рекoмендую устанoвить на рoбoта этo:
     

     

    local r, a = require('robot'), {...}
     
    if a[1] == 'suck' then
      for i = 1, a[2] or 1 do
        r.suck()
        r.suckUp()
        r.suckDown()
      end
    elseif a[1] == 'use' then
      for i = 1, a[2] or 1 do
        r.use()
        r.useUp()
        r.useDown()
      end  
    elseif a[1] == 'drop' then
      for i = 1, r.inventorySize() do
        r.select(i)
        r.drop()
      end
    end
    

     



    А если вы уже забрались в чужой приват и не можете открыть интерфейс робота, то можно установить ее через планшет:

    echo local r,a=require('"'robot'"'),{...}if a[1]=='"'suck'"'then for i=1,a[2] or 1 do r.suck()r.suckUp()r.suckDown()end elseif a[1]== '"'use'"' then for i=1,a[2] or 1 do r.use()r.useUp()r.useDown()end elseif a[1]=='"'drop'"'then for i=1,r.inventorySize()do r.select(i)r.drop()end end >> 1
    

     
    Кoманды у прoги прoсты - 'suck' высасывает лут из кoнтейнерoв спереди, сверху и снизу, 'use' - юзает в тoй же пoследoвательнoсти, 'drop' - дрoпает все предметы, кoтoрые есть в инвентаре. Опциoнальнo мoжнo задать скoлькo раз надo юзать или высасывать.
     
    Примеры:
    1 use 2 - скручивает механизмы, если есть ключ
    1 suck 27 - высасывает 27 стаков из контейнера
     
    Если неудобно вводить длинные команды, можно назначить алиасы:

     

    local tbl = {
      "w='go forward'",
      "s='go back'",
      "a='go left'",
      "d='go right'",
      "q='go up'",
      "e='go down'",
      "f='1 suck 54'",
      "g='1 use 4'",
      "h='1 drop'"
    }
    
    for i = 1, #tbl do
      os.execute('alias '..tbl[i])
    end
    

     

     

     

    Передвижение переназначается на WASD и Q = вверх, E = вниз, F = взять, G = использовать, H = дропнуть.

    После буквы можно указать, сколько раз надо совершить это действие, например: w 10 - сделать 10 шагов вперед.
     
    Q: Я ничего не понял, что делать? :smile14:
    A: Значит мы скоро придем и добавим стержней в твой реактор! :smile3:


  13. "Немного" отвлекся, поэтому гайда не вышло, просто написал, что делают функции.

     

    .getInventorySize() - возвращает размер инвентаря игрока вставшего на устройство

     

    .pullItemIntoSlot()/.pullItem(side, slotA, amount, slotB) - перемещает предмет из контейнера игроку, возвращает количество перемещенных предметов

      side - сторона, где находится контейнер

      slotA - слот контейнера

      amount - максимальное количество предметов, которые надо переместить

      slotB - слот инвентаря игрока

     

    .pushItemIntoSlot/.pushItem(side, slotA, amount, slotB) - перемещает предмет из инвентаря игрока в контейнер, возвращает количество перемещенных предметов

      side - сторона, где находится контейнер

      slotA - слот инвентаря игрока

      amount - максимальное количество предметов, которые надо переместить

      slotB - слот контейнера

     

    .getStackInSlot(slot) - возвращает информацию о предметах

      slot - слот инвентаря игрока

     

    .condenseItems() - раскладывает стаки в инвентаре игрока, т.е. заполняет неполные и раскладывает в слоты по номерам

     

    .getInventoryName() - возвращает имя игрока

     

    .destroyStack(slot) - уничтожает предмет в инвентаре игрока

     

    .swapStack(slotA, slotB) - меняет местами предметы в инвентаре игрока, т.е. перемещает предметы из slotA в slotB и наоборот

    • Нравится 1

  14. Для фермы кактусов желателен апгрейд "луч захвата" или как его там. Кактусы даже рубить не надо, они сами "отваливаются" при приближении робота. Отваливаются и те, что сбоку от робота. Более половины урожая теряется при этом.

    Робот должен быть над кактусами (максимальная высота кактуса 3 блока), тогда ничего не отваливается.

     

    Кстати, хорошо, что тема всплыла, давно хотел поправить один баг и написать универсального фермера со строительством площадок.

    Надо бы еще расширение фермы автоматизировать, а то вручную строить новые стены и фермленды довольно муторно.

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