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

Mihis

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

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

  • Посещение

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

    2

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


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

    увы, на этой версии майна лазер не работает, такое ощущение что робот его над собой держит

    на 1.7.10 без проблем

    от направления лазера проблема не зависит. А пуля лазера - сущность?


  2. Решил я написать майнер, тот что с лазером из IC2, который много раз видел. Но столкнулся с проблемой: моя программа по-разному выполняется на сервере и в одиночном мире.

     

    Команда выстрела (вниз)

    local robot = require("component").robot
    robot.use(0)

     

    На сервере (OpenComputers 1.7.5.192)

    при выстреле робот самоуничтожается (точнее он ломает себя, как блок)

     

    В одиночном мире (OpenComputers 1.7.5.192, но так же тестировалось 1.7.5.213)

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

     P.S. А в каком режиме дожен быть лазезр? Я тестировал на Mining и Long-Range


     


  3. 1 минуту назад, Flays сказал:

    @Mihis  А что означают подчёркивание? 

    event_name, _, _, port, _, message

    эти аргументы будут проигнорированы (чтобы лишние переменные не объявлять)


    Если их убрать, то там будут совмем другие данные

     

     

     


  4. 14 часа назад, Flays сказал:

    @Mihis Спасибо большое, а можно ли будет как-то обойти ожидание запроса сообщение или нет? 

     

     

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

     

    Описание функций event: https://ocdoc.cil.li/api:event

     

    Пример:

    local event = require("event")
    
    -- Функция, которая будет выполнена при получении события
    local function handleEvent(event_name, _, _, port, _, message)
      if (event_name) then -- иногда event_name может иметь значение nil, если долго не было события
        -- десериализируем табличку (message)
      end
    end
    
    local listener_id = event.listen("modem_message", handleEvent)
      
    if (listener_id) == false then
      -- выполняется, если неудалось зарегистрировать обработчик
      
      print("failed to register listener")
      return -- завершаем программу
    end
    
    -- Что-нибудь делаем
    print("Hello! How are you")
    
    -- Завершаем программу: отменяем обработчик
    event.cancel(listener_id)

     

    • Одобряю 1

  5. 1 час назад, Flays сказал:

    Драсте, решил тут написать две программки. И мне нужно чтоб один пк отправлял другому пк таблицу, но как это сделать я так и не разобрался. Подскажите кто ни будь пожалуйста. Заранее спасибо)

     

    Все написанное ниже относится к OpenComputers

     

    Модемы не умеют передавать таблицы, но для транспортировки таблицы можно сериализовать (таблица => строка), а при получении десериализовать (строка => таблица).

     

    Описание функций модема: https://ocdoc.cil.li/component:modem

     

    Описание функций сериализации: https://ocdoc.cil.li/api:serialization

     

    Пример передающей части

    local modem = require("component").modem -- получаем модем
    local serialize = require("serialization").serialize -- получаем метод, для сериализации данных (таблица => строка)
    
    local port = 123 -- порт, по которому будет производиться передача данных
    local my_table = {} -- какая-то таблица, которую мы будем передавать
    
    -- сералиализуем таблицу (приводим из таблицы в строку)
    local ser_table = serialize(my_table)
    
    -- открываем порт
    modem.open(port)
    
    -- сералиализуем таблицу (приводим из таблицы в строку)
    local message = serialize(my_table)
    
    -- отправляем таблицу (использовать только 1 из этих функций)
    modem.send(RECEIVER_ADDR, port, message) -- от 1 устройства к 1 устройству, где RECEIVER_ADDR - это адрес модема получателя
    -- или
    modem.broadcast(port, message) -- от 1 устройства к множеству устройств

     

    Пример принимающей части

    local modem = require("component").modem -- получаем модем
    local event = require("event")
    local unserialize = require("serialization").unserialize -- получаем метод, для десериализации данных (строка => таблица)
    
    local port = 123 -- порт, по которому будет производиться прием данных
    
    -- открываем порт
    modem.open(port)
    
    local _, _, _, port, _, message = event.pull("modem_message") -- ожидаем сообщения от другого устройства
    local my_table = unserialize(message) -- десериализуем полученные данные (приводим из строки в таблицу)
    
    -- Теперь тут мы можем что-нибудь делать с этой таблицей (my_table)

     


  6. В 30.12.2020 в 13:47, kaka888 сказал:

    Команды можно считывать, я даже когда-то писал такую прогу.
    Это реализуется через internet.request(URL логов сервера) при условии, что логи твоего сервера находятся в публичном доступе.

    Больше на дыру в сервере похоже, чем на считывание чата.

    • Нравится 1

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

    Ты шариш что оно делает?. Просто если заменять на него тебе прийдется их сделать +100500 ибо в 1 оч мало вещей лезет

     

    Если учитывать, его [Database Upgrade] крафт и емкость, то дешевле просто писать в файл на диск или рейд.


  8. Жду когда в OpenComputers заменят "distance" на "rssi" (который будет вычисляться из окружающих блоков и сущностей, силы сигнала и рандомных шумов) в событии "modem_message". А также уберут апгрейд навигации.

     

    Welcome to Hell!


  9. В 22.09.2020 в 14:12, eu_tomat сказал:

    Оказывается, можно, но для этого мне пришлось полностью очистить чёрный список IP-адресов в конфиге. Это очень странно и небезопасно.

     

    Все записи в списке имели отношение к сетям IPv4, а каких-то специальных настроек IPv6 в OpenComputers.cfg я не обнаружил.

     

    Мне интересен именно IPv6

     

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