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

Zer0Galaxy

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

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

  • Посещение

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

    189

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


  1. Конечно не число, а строка. Тебе нужно эту строку в число преобразовать. Просто tonumber не поможет, поскольку а представляет собой не число, а арифметическое выражение. Можешь сделать функцию для разбора арифметических выражений. А можешь воспользоваться функцией loadstring

    a="1+2+4"
    n=loadstring("return "..a)()
    rs.setBundledOutput("right",n)
    

  2. Нео, сделаешь такой роутер?

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

    Сейчас Крутой работает над интернет-сервисом, я думаю над DNS. Со временем сделаем WEB-сервер, напишем браузер, может тогда спрос на ОН-платы появится.


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


  4. Хотеть!! Вот это то, чем я бы пользовался.

    Боюсь, не смогу реализовать всё сразу. Рассчитываю на помощь. 

     

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

    Планирую реализовывать платы через банк. Но на то нужна воля банкиров.

     

    >>Можно было сказать, я бы добавил в свою тему. 

     

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


  5. На сервере Information Technology начинает работу глобальная сеть OpenNet. В отличии от децентрализованной сети CraftNet, новая сеть построена на компактно расположенных серверах. Связь клиента с одним из серверов осуществляется при помощи пары связанных плат, одна из которых установлена в сервер, другая находится у клиента. Каждый сервер способен обслуживать до трех клиентов. Таким образом связь защищена от прослушивания, а покрытие Сети полностью охватывает все доступные миры сервера Information Technology.
     
    Что может и чего не может сеть OpenNet?
    Если вы думаете, что подключившись к Сети вы получите все мыслимые и немыслимые блага, то вы ошибаетесь. Сеть это просто средство обмена информацией между двумя и более компьютерами. Как будут запрограммированы эти компьютеры и какого рода информацией будут обмениваться, зависит только от вас (ну и от меня, в какой-то мере)
     
    Что необходимо, чтобы подключиться к сети OpenNet?
    Во-первых, ОС-компьютер с установленной операционной системой.
    Во-вторых, библиотека opennet.lua, которую можно найти под спойлером

     

    local component=require("component")
    local event = require("event")
    
    local opennet = {}
    local ONcard
    local LocalIP
    
    function opennet.getIP()
      if not component.isAvailable("tunnel") then
        ONcard=nil
        return nil, "OpenNet-карта не обнаружена"
      end
      ONcard=component.tunnel
      local ok,err=ONcard.send("", "", "getip")
      if not ok then  return ok, err  end
      local ev, addr, _, mess
      repeat
        ev, addr, _, _, _, LocalIP, _, mess = event.pull(3,"modem_message")
        if not ev then
          return nil, "Нет ответа от proxy-сервера"
        end
      until addr == ONcard.address and mess=="setip"
      return LocalIP
    end
    
    function opennet.send(recIP, ... )
      if not ONcard then
        return nil, "OpenNet-карта не инициализирована"
      end
      return ONcard.send(recIP, LocalIP, ...)
    end
    
    function opennet.receive(timeout)
      local ev
      repeat
        ev = {event.pull(timeout,"modem_message")}
        if not ev[1] then return nil end
      until ev[2] == ONcard.address
      return table.unpack(ev,7)
    end
    
    function opennet.sendrec(recIP, ... )
      local ok,err=opennet.send(recIP, ... )
      if ok then
        return opennet.receive(3)
      else
        return ok,err
      end
    end
    -----------------------------------------------------------------------
    return opennet 

     

     

    или скачать при помощи команды 

    pastebin get VYqtYAXL opennet.lua

    В-третьих, OpenNet-плата.

     
    Где взять OpenNet-плату?
    Количество плат, которые могут быть подключены к Сети, ограничено. Поэтому, массовых раздач я устраивать не собираюсь. Людям, которые проявили себя в программировании, я готов предоставить платы при личной встрече на сервере. Остальным, возможно, придется приобретать их в банке. Очень рассчитываю при этом на помощь наших банкиров: Тоторо и Алекса.
     
    Какие функции предоставляет библиотека opennet?
    getIP() - осуществляет инициализацию компьютера в Сети. В случае удачной инициализации, возвращает IP-адрес компьютера. В случае ошибки, возвращает два значения: nil и строку, содержащую информацию об ошибке. Следует отметить, что IP-адрес статический. Это значит, что при помощи одной ON-платы вы всегда получите один и тот же IP-адрес. Но это не избавляет от необходимости вызывать getIP всякий раз в начале работы с Сетью.
    send(recIP, ... ) - отправляет данные на адрес recIP. Одним пакетом можно отправить несколько значений, которые должны быть числами, строками и/или логическими величинами. Суммарный объем данных, отправляемых в одном пакете, не должен превышать 8 кБ. Функция возвращает true, в случае удачной отправки или nil и сообщение об ошибке, в противном случае. Если функция вернула true, это означает, что данные были отправлены, но еще не означает, что они были приняты получателем.
    receive([timeout]) - ожидает приема данных. Если задан параметр timeout, время ожидания ограничивается. В случае приема данных, возвращает первым значением адрес отправителя, затем - принятые значения. В случае таймаута, возвращает nil.
    sendrec(recIP, ... ) - это просто объединение функций send и receive. Отправляет данные и возвращает полученный ответ. Очень удобно при работе из интерактивного интерпретатора.
     
    А можно пример работы с библиотекой?
    Пожалуйста.
    На принимающем компьютере выполним следующие команды:

    post-7-0-57831800-1429194347_thumb.png
    После этого компьютер переходит в режим ожидания. Запомним (или, в моем случае, запишем) IP-адрес. На другом компьютере выполним команды для передачи данных на этот адрес:

    post-7-0-56661800-1429194356_thumb.png
    Теперь посмотрим на принимающий:

    post-7-0-57967900-1429194363_thumb.png
    К стати, если отправить данные на несуществующий адрес, в ответ от сервера будет получено сообщение:
    post-7-0-80097600-1429194370_thumb.png

    Каковы перспективы развития Сети?
    1. Для начала планирую сделать DNS-сервер, чтобы можно было отправлять данные на удобочитаемые имена.(реализовано)
    2. Создание чата, в котором школьники смогут материться не рискуя навлечь на себя гнев администрации (реализовано).
    3. Организация доступа к OpenNet через обычную сеть путем установки роутеров в местах проживания игроков. (реализовано)
    4. WEB-сервера с полезной или просто интересной информацией. Благо теперь на русском (требуется наполнение web-страниц).
    5. Служба pastebin для доступа к известному ресурсу в условиях отсутствия интернет-платы (реализовано)
    6. Да и много еще чего.

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

  6.  

    Внутренние методы СС Textutils.serialize не подходили, из за медленного оператора ".." , который добавлял в итоговую строку символы.

    Поискав готовые решения на сайте lua-users, я нашел подходящий код для сохранения таблиц в файл, и переписал его под работу со строкой.

    Но ведь там же сплошь и рядом конкатенация. Ты сравнивал по производительности с serialize?


  7. Как работает система событий в CraftOS?

    Когда возникает какое либо событие (тикает таймер, нажимается клавиша, приходит пакет по сети и т.д.), оно становится в очередь событий. Существует функция os.pullEvent, которая вытаскивает первое событие из очереди и возвращает его программе. Функция эта имеет параметр фильтр. Если этот параметр не пустой, pullEvent вытаскивает из очереди события, пока не вытащит совпадающее с фильтром. Все не совпавшие события будут потеряны.

    К примеру функция sleep ждет события "timer", а функция read - "char" и "key". Это значит, что пока эти функции не завершат свою работу, rednet-пакеты будут теряться.

    Как этого избежать?

    Способ №1: Нужно обрабатывать все события, которые нужно обработать. Т.е. вызываешь pullEvent без параметра (а не sleep или read) и в зависимости от того какое пришло событие делаешь те или иные действия.

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

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


  8. Достаточно сделать отдельный поток, который бы слушал сеть, обрабатывал принятый пакет и снова погружался в rednet.receive. Два игрока все равно не смогут послать пакеты одновременно, как бы не старались.


  9. В каком случае вызывается функция executeCMD ?

    Главное, чтобы между вызовами функций addPlayer не было промежуточных sleep-ов или ожидания других событий. Тогда пакеты от разных игроков не будут теряться. В крайнем случае воспользуйся многопоточностью, так чтобы один поток постоянно находился в режиме прослушивания сети.


  10.  

     

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

    Где то о-очень глубоко.

    Что ни говори, а КК гораздо проще в освоении чем ОС и более интуитивно понятный. А лагульку много на чем можно сделать. Взять хотя бы WiFi-бомбу имени Семоро или заборы из BC-труб.


  11.  

     

    Тобишь, на входе - таблица ID и цены, верно? А на выходе - общая цена и список сырья?

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

     

     

    Кто будет заполнять первоначальную таблицу сырья?

    Пользователь. Разные пользователи по разному могут оценивать свое сырье.

     

    >>Как должно производится добавление новых продуктов в таблицу - гуи или в текстовом редакторе?

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

     

    >>Я готов взяться, я готов взяться, правда, будет 2 условия.

    Каких?


  12. Описание: требуется разработать программу, позволяющую рассчитывать стоимость предметов мира Minecraft на основании стоимости компонентов, используемых при крафте этих предметов. Стоимость, рассчитанную программой, можно учитывать при покупке/продаже/обмене, а так же при подготовке к созданию сложных объектов.

     

    Оплата - по договоренности.

     

    Поддерживаемое оборудование: ПК ОС, монитор 2-го или 3-его уровня.

     

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

     

    Вопросы и предложения оставляйте в этой теме.


  13. Не совсем понял функции мамки. Она просто собирает детенышей в сундук, откуда их надо доставать руками и расставлять по местам. Не лучше ли что бы они после разгрузки сами возвращались на новую позицию. Координату позиции рассчитать не сложно.

    И еще. В процессе копания черепахи выполняют много лишних разворотов. Можно сделать так: при движении вниз черепаха копает под собой и перед собой. Внизу разворачивается на 180, перемещается на шаг вперед и движется в верх, копая над собой и перед собой. Таким образом выкапывается четыре столба вместо трех и выполняется всего один разворот.


  14. Дим, а как он, мне интересно, кинет в привате в сундук вещи, и тем более заберет? 

    Кинуть в трубу можно. Ах! У нас труб уже нет. Да, тут надо думать. User707, когда будешь тестить в сингле, учитывай какие моды стоят на сервере.

     

     

    А время там тикает от 30 секунд до 0, например, и пишется, мол, "Петя думает"

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


  15. И как мы поймем, кто кинул предмет?

    Вася кидает шкуру мамонта коровы в левый сундук и жмет кнопку "Предложить". Робот поворачивается влево и вытаскивает шкуру себе в инвентарь. Петя кладет стак алмазов в правый сундук и тоже давит кнопку "Предложить". После того как игрок выполнил операцию "Предложить", его оппоненту выдается информация о том, что ему предлагают и в каком количестве. После того как выполнено два предложения, становятся доступны кнопки "Подтвердить". Если оба нажимают "подтвердить", робот осуществляет обмен. Если кто то нажал "Отменить", робот возвращает предметы в тот сундук откуда взял.

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