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

Alex

Администраторы
  • Публикации

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

  • Посещение

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


  1. Вчера наш идеолог и основатель проекта Рид (1Ridav кто не знает) поделился замечательной идеей создать на сервере божество (храм с божеством) которое бы влияло на мир (погода, день ночь, бури, случайные события, убийства и телепорты игроков, "манна небесная", алмазы с неба и прочее прочее), кто знаком немного с командными админблоками и Computercraft может представить, что можно творить. Божеству можно(а самое главное нужно) преподносить жертвоприношения, чтобы его задобрить. То есть будет воронка и и система обработки брошенных предметов. У божества будет плавно(иногда рандомно) меняться настроение и со временем сформируется свой характер. И вот главная фишка:

     

    Без должного внимания божество сделает игру для игроков на сервере невыносимой и с неба молнии метать начнет и хаос приносить!:p:D.

     

    Будет оно доброе или злое, решать вам!!!;)

     

    Задачка - как красиво построить какое-то животное, идола. Может с какой карты перенести из интернета? Может просто черепаху в масштабе 1:16 (1:32) с мечем построить (строили кстати уже на старом сервере)

    • Нравится 1

  2. Wiah: Могу смоделировать здание по кубикам в 3d редакторе, отрендерить в любой проекции, разделить его на понятные чертежи и выдать строителям.

    Это что-то интересное! Не понятен механизм, каким строителям, какие чертежи, можно точнее описать процесс. И как у Вас на гифке строится Зиккурат, кто его строит?

     

    Только вчера думал над вопросом постройки чего либо в майне по 3D моделям. Есть даже плагин какой-то. Эти все драконы на пол карты, замки и прочее в интернете. Кто и как их строит?

    Так вот. Вчера наш идеолог и основатель проекта Рид (1Ridav кто не знает) поделился замечательной идеей создать на сервере божество (храм с божеством) которое бы влияло на мир (погода, день ночь, бури, случайные события, убийства и телепорты игроков, "манна небесная", алмазы с неба и прочее прочее), кто знаком немного с командными админблоками и Computercraft может представить, что можно творить. Божеству можно(а самое главное нужно) преподносить жертвоприношения, чтобы его задобрить. То есть будет воронка и и система обработки брошенных предметов. У божества будет плавно(иногда рандомно) меняться настроение. И вот главная фишка:

     

    Без должного внимания божество сделает игру для игроков на сервере невыносимой и с неба молнии метать начнет и хаос приносить!:p:D.

     

    Задачка - как красиво построить какое-то животное, идола. Может с какой карты перенести из интернета?

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

    Тема про божество.


  3. Krutoy: Да, это отличная идея. Я тоже за рынок предложения\спроса, где ордеры выставляют игроки.

    Nick_Alps: Отличная идея, а почему бы не создать, грубо говоря, аукцион?

    Вооу-Вооуу парни, не мешайте все подряд в один проект. Задача этого топика - создать адекватный прайс для банка. EVE, Lineage2, WoT это все интересно. Вы молодые и полет фантазии - это хорошо. Но давайте о насущном. Нам нужен прайс для банка. Вопрос ценообразования уже описан выше. Его смысл - эквивалентный обмен товарами через банк и систему аккаунтов и денежных электронных преобразований. Подчеркиваю - эквивалентный обмен товарами! Кто давно играет в майн, тот помнит, что был когда-то мод Equivalent Exchange, в котором с помощью философских камней и алтаря какого-то одни айтемы преобразовывались в другие и обратно (у каждого предмета была "цена" сколько-то единиц очков EMC).

     

    Вот если бы не было банка, а у Васи много паутины, а ему нужны яблоки, он идет к соседу и договаривается про обмен, например: Изя, поменяй у меня паутину на яблоки. Изя говорит: Даю три яблока за твою одну паутинку. Вот и все. Это бартер, черный рынок - как хотите, назовите. Но беда в чем - "кинуть" могут, найди еще этого Изю на карте и прочее. У нас это все в банке через ваш счет. Все! Что может быть проще!? Цены немного колеблются -+. Ну и при обмене через банк Вы со 100 яблочек одно дарите банку (кассирам кушать тоже надо), плата за услуги, скажем так. Это же старо, как мир!:)

     

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

     

    Система лотов - интересная задумка, но ее можно будет сделать отдельно когда-то или как аддон к банковской системе. В любом случае та же система аккаунтов, таблица лотов игроков с ценами, покупка конкретного лота. Разница лишь в том, что лот - это вид товара фиксированного объема по фиксированной цене.

     

    Реализацию же бартерных лотов (например 100 иридий/300 алмазов) надо будет подумать, как реализовать, когда-то.;) Нубский способ - обменники ИК.

     

    Я же хотел сделать, чтобы кассиры-черепашки суетились, электронные денежки были, в сундуках в банковских хранилищах ресы лежат и прочее.

     

    П.С. Вот кстати для любителей бирж всяких видеоролик, где ребята-трейдеры демонстрируют программку для торговой системы QUIK

    , которая сообщает, когда покупать или продавать. Они приняли, что когда общие объемы продажи и покупки чего либо приблизительно равны - рынок не интересен - это 50. Если же +-20 и более % перекупленость или перепроданость какого-то товара, акции и прочего - торговая программка-робот сообщает об этом. Написан, кстати, заметьте - на Lua!:cool: Торговать, конечно, можно не только на пиках графика, но и, видимо, как я понял, на мувингах, когда цены растут или падают стремительно.

  4. Tут нечего брать за основу, как бы печально это не звучало. У них алмаз стоит 9 кусочков угля. У нас алмаз крафтится из трех стаков минимум, плюс абсидианы всякие и немерено электроэнергии. Повторюсь, что на донатных сайтах им пофиг на цены, так как пользователи только покупают что-то и за реал и ничего не продают. Они раскидали цены от 10 до 200 монет на все приблизительно, им практически не важно, что купит юзер. У меня мечта - точно посчитать, что входит в квантовою броню и вывести реальную цену.

     

    Вопрос: ресурсы, которыми ведется торговля, будут садминены или добыты игровыми средствами?

    Возможно, будет только на начальном этапе какой-то креативный объем товара. При нормальном управлении банком, должной охраной и контролем за безопасностью ПО банк будет функционировать реально отображая экономику сервера на собственном обеспечении. (Если хакеры не крякнут его;):D)

     

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

    Абсолютно верно! Админ(банкир) глянул на экраны АЕ - угля завались - алмазов нет в хранилище - взял и взвинтил цены на них. В этом вся и изюмина торговли. Можно автоматически(система должна тогда как-то знать общий запас айтема). Но лучше руками регулировать цены(зачем тогда в мире столько биржевых служащих). И писать в чат, парни - завтра скидка на иридий! Кто не успел, извините. Тем более, кто видел мои ролики, у меня банк берет цены с pastebin.com с прайса, цены можно менять, не заходя в игру. На пастебин можно принтить и количество в системе. Вот за что я борюсь.

     

    Из переписки в скайпе: Ну а вообще не вижу ничего плохого, если человек забьет банк золотом и железом (землю покупать вряд ли будем;)), и попадет в список Форбс. Что нам, жалко :D Он же себе не будет скупать 100500 квантовых сетов в банке потом за вырученые деньги. Тем более, что продать их удастся по меньшей цене. ...... Если товара вообще нет в банке, ну на нет и спроса нет, черепаха кладовщик скажет об этом покупателю и запишет об этом в логи и в консоль сервера - вывод, товар ходовой и пора бы на него поднять цену продажи и уменьшить цену покупки.

     

    П.С. Не откидываю возможности наличия в банке мазераторов, молекулярной кравтящей машины АЕ и реактора.


  5. Старожилы помнят, что до аварии на VDS у нас на сервере был банк. Он был построен и почти готов к работе после закрытия некоторых уязвимостей в ПО.

    Вот скрины, кто не застал банк на сервере:
    http://puu.sh/8Va8i/a009ad102f.jpg
    http://puu.sh/8VafM/db105507c9.jpg
    http://puu.sh/8Vajm/4f582964c4.jpg
    http://puu.sh/8VaS8/826f82a11c.jpg

    https://www.youtube.com/watch?v=XpdvatZMwCk&list=PLrGgY-Jtfx4y41YN_ltrFijEy-y9k3IQt&index=14

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

    Крайне нуждаюсь в помощи при расчете цен на предметы. Основные ресурсы для купли продажи- это ископаемые, дроп мобский, инструменты, дорогие и редкие камни, машины с безумным крафтом, солнечные панельки, броня всякая. Хватит на первое время 30-50 айтемов. Важно рассчитать соотношения цен.

    То есть, например - кусочек угля стоит 100 mcr. C него получаем 4000 EU в печке в ИК. Нужно рассчитать цену на электроэнергию, и другие ресурсы. Если например, для крафта алмаза нужно 128 кусочков угля - то алмаз будет стоить +- 12 800 mcr. Сколько будет стоить железо и золото, нужно исходить из частоты нахождения его в земле и востребованности. В цену можно добавлять затраты электроэнергии и нервов :). Можно также завысить(не занизить) цены на какие-то дорогие редкие камни(это же банк :D). Посчитать цену на микросхемы.

    Также приложу файлик, нашел его на каком-то форуме, в нем тоже интересный подход на ценообразование в зависимости от количества и соотношения ресов в чанке. Разницу на куплю-продажу (%) добавлю и сам немножко в пользу банка. То есть смысл задать цены на первичные ресурсы майна (которые есть в природе), и исходя из цен на них+затраты+нервы+востребованность*кол-во в рецепте и прочее посчитать цены на ходовые айтемы (сколько стоит квант, допустим).

    Цель - шахтер или пчеловод игрок, он может продать избыток одних ресурсов и купить другие, которые не может скрафтить. Также деньги на счете будут в будущем капитализироваться. Есть также мысль о кредитовании, но только в частном порядке на аккаунт в банке, который знает админ и под большой процент(будет выгодно игрокам, которые умеют быстро развиваться в майне)

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


  6. Готов подготовить базовое ядро для системы черепах на основе моих идей

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

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

    Пропал интерес и угас огонь в глазах.:)

    А мне интересно почитать, как Зеро подходит к вопросу. Тут есть и топология сети, уровни, шлюзы по умолчанию и прочее. Темы закрывают модераторы, кстати.


  8. Покопавшись в методах трассировки считаю, что для наших целей оптимальным будет реализовать волновой алгоритм (http://ru.wikipedia.org/wiki/Алгоритм_Ли)

     

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

     

    Остается вопрос, который я пока не до конца понимаю, как оптимально реализовать. Это простая разведка с постепенным смещением по карте, изменение слоя карты. Как черепахе задавать оптимально приращение dx dy, в сторону ли врага, в сторону ли большого неисследованного массива карты или еще как-то. Если она, допустим, решила сменить область исследования, она трассирует путь в известной зоне, перебазируется туда, а там опять планомерно приступает к разведке. Примерно так, как мы копаем руду в пещере - копаем как-то рандомно по блоку, потом нас что-то дернуло, пробежали в соседнюю пещеру и копаем там. Вот этот момент, как мы бежим в другую пещеру - это реализация перемещения по кратчайшему пути, так как мы его знаем. Но что нас побуждает копать тут или там, это вопрос.:) И его надо решить.

     

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


  9. ты хоть знаешь как работают таблицы,и вообще маршрутизацию?? я так вижу что нет. если хочешь по расуждать заходи в RC

    Отвечу в такой же дерзкой манере:

     

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

     

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

     

    Р.S. Сам как думаешь, когда случайный человек скачает твою программу, сможет ли он настроить передачу данных между различными сегментами сети ?


  10. (Т.е. поиск маршрута осуществляется методом волны. Если терминал А отправляет пакет терминалу Б, тот пакет этот обойдет ВЕСЬ Интернет. Причем распространяться будет равномерно во все стороны, отражаясь и переотражаясь. Количество пакетов множиться будет в геометрической прогрессии пока не завалит своей массой игровой сервер.

    :) Так именно и будет!
    Сам смысл, для чего предназначен роутер, здесь пока не реализован. Без таблиц, статических или динамических, не обойтись. А про них нет никакого упоминания.

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


  12. Я тоже смотрю, что почему-то все начинают в КК писать сразу программы, связанные с роутерами, серверами клиентами и базами данных, а это не самые легкие задачи. При всех тех дырах сетей и прочее. Зачем сразу пытаться написать аналог Одноклассников и ВК. Можно пока поработать с файлами, таблицами, циклами, подать простую команду по сети черепашке, повернуться например. Немножко код научиться разбивать на смысловые блоки и записывать их в функции, как передавать аргументы. Тогда намного легче будет ориентироваться в своем и чужом коде. Ну и АПИ конечно почитать надо.


  13. Может как-то переделать функцию, чтобы она не пыталась выполнить строку, как функцию. И длину #s сразу проверять, чтобы не слали строки в приемник бесконечные (надо знать максимальную длину своих строк). И переписать весь сериалайз/ансериалайз в какой-то отдельный пользовательский общедоступный функционал.

     

    Это опасная функция!:D:mad:

    function unserialize( s )
        local func = loadstring( "return "..s, "unserialize" )
        if func then
            setfenv( func, {} )
            local ok, result = pcall( func )
            if ok then
                return result
            end
        end
        return nil
    end

    Подредактировал код, получилось не очень...

    function Reception()
    local id,message = rednet.receive()
       if RednetProtect(id) then
       local temp_array= textutils.unserialize(message)
                if temp_array[1] == 'register' then
                        AccountCreate(temp_array)
                end
       end
    end
    
    function AccountCreate(temp_array)
        login = temp_array[2]
        pass= temp_array[3]
        name= temp_array[4]
        .........
    end
    

     

    Отправляете по сети так:

    Логин = qwerty

    Пароль = 1111

    Имя = Вася

     

    SendCommand(id_server, {"register", login, password, name} )

     

    Вот функция отправки:

     

    function SendCommand(ID, data_pre_send)
            data_send = textutils.serialize(data_pre_send)   
            rednet.send(ID, data_send)
    end

  14. смотреть с 17 минуты, можно включить русские субтитры с переводом.

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

     

    Вот новый АПИ rednet ,для версии 1.63:

    CHANNEL_BROADCAST = 65535
    CHANNEL_REPEAT = 65533
    
    local tReceivedMessages = {}
    local tReceivedMessageTimeouts = {}
    local tHostnames = {}
    
    function open( sModem )
        if type( sModem ) ~= "string" then
            error( "expected string", 2 )
        end
        if peripheral.getType( sModem ) ~= "modem" then  
            error( "No such modem: "..sModem, 2 )
        end
        peripheral.call( sModem, "open", os.getComputerID() )
        peripheral.call( sModem, "open", CHANNEL_BROADCAST )
    end
    
    function close( sModem )
        if sModem then
            -- Close a specific modem
            if type( sModem ) ~= "string" then
                error( "expected string", 2 )
            end
            if peripheral.getType( sModem ) ~= "modem" then
                error( "No such modem: "..sModem, 2 )
            end
            peripheral.call( sModem, "close", os.getComputerID() )
            peripheral.call( sModem, "close", CHANNEL_BROADCAST )
        else
            -- Close all modems
            for n,sModem in ipairs( peripheral.getNames() ) do
                if isOpen( sModem ) then
                    close( sModem )
                end
            end
        end
    end
    
    function isOpen( sModem )
        if sModem then
            -- Check if a specific modem is open
            if type( sModem ) ~= "string" then
                error( "expected string", 2 )
            end
            if peripheral.getType( sModem ) == "modem" then
                return peripheral.call( sModem, "isOpen", os.getComputerID() ) and peripheral.call( sModem, "isOpen", CHANNEL_BROADCAST )
            end
        else
            -- Check if any modem is open
            for n,sModem in ipairs( peripheral.getNames() ) do
                if isOpen( sModem ) then
                    return true
                end
            end
        end
        return false
    end
    
    function send( nRecipient, message, sProtocol )
        -- Generate a (probably) unique message ID
        -- We could do other things to guarantee uniqueness, but we really don't need to
        -- Store it to ensure we don't get our own messages back
        local nMessageID = math.random( 1, 2147483647 )
        tReceivedMessages[ nMessageID ] = true
        tReceivedMessageTimeouts[ os.startTimer( 30 ) ] = nMessageID
    
        -- Create the message
        local nReplyChannel = os.getComputerID()
        local tMessage = {
            nMessageID = nMessageID,
            nRecipient = nRecipient,
            message = message,
            sProtocol = sProtocol,
        }
    
        if nRecipient == os.getComputerID() then
            -- Loopback to ourselves
            os.queueEvent( "rednet_message", nReplyChannel, message, sProtocol )
    
        else
            -- Send on all open modems, to the target and to repeaters
            local sent = false
            for n,sModem in ipairs( peripheral.getNames() ) do
                if isOpen( sModem ) then
                    peripheral.call( sModem, "transmit", nRecipient, nReplyChannel, tMessage );
                    peripheral.call( sModem, "transmit", CHANNEL_REPEAT, nReplyChannel, tMessage );
                    sent = true
                end
            end
        end
    end
    
    function broadcast( message, sProtocol )
        send( CHANNEL_BROADCAST, message, sProtocol )
    end
    
    function receive( sProtocolFilter, nTimeout )
        -- The parameters used to be ( nTimeout ), detect this case for backwards compatibility
        if type(sProtocolFilter) == "number" and nTimeout == nil then
            sProtocolFilter, nTimeout = nil, sProtocolFilter
        end
    
        -- Start the timer
        local timer = nil
        local sFilter = nil
        if nTimeout then
            timer = os.startTimer( nTimeout )
            sFilter = nil
        else
            sFilter = "rednet_message"
        end
    
        -- Wait for events
        while true do
            local sEvent, p1, p2, p3 = os.pullEvent( sFilter )
            if sEvent == "rednet_message" then
                -- Return the first matching rednet_message
                local nSenderID, message, sProtocol = p1, p2, p3
                if sProtocolFilter == nil or sProtocol == sProtocolFilter then
                    return nSenderID, message, sProtocol
                end
            elseif sEvent == "timer" then
                -- Return nil if we timeout
                if p1 == timer then
                    return nil
                end
            end
        end
    end
    
    function host( sProtocol, sHostname )
        if type( sProtocol ) ~= "string" or type( sHostname ) ~= "string" then
            error( "expected string, string", 2 )
        end
        if sHostname == "localhost" then
            error( "Reserved hostname", 2 )
        end
        if tHostnames[ sProtocol ] ~= sHostname then
            if lookup( sProtocol, sHostname ) ~= nil then
                error( "Hostname in use", 2 )
            end
            tHostnames[ sProtocol ] = sHostname
        end
    end
    
    function unhost( sProtocol )
        if type( sProtocol ) ~= "string" then
            error( "expected string", 2 )
        end
        tHostnames[ sProtocol ] = nil
    end
    
    function lookup( sProtocol, sHostname )
        if type( sProtocol ) ~= "string" then
            error( "expected string", 2 )
        end
    
        -- Build list of host IDs
        local tResults = nil
        if sHostname == nil then
            tResults = {}
        end
    
        -- Check localhost first
        if tHostnames[ sProtocol ] then
            if sHostname == nil then
                table.insert( tResults, os.getComputerID() )
            elseif sHostname == "localhost" or sHostname == tHostnames[ sProtocol ] then
                return os.getComputerID()
            end
        end
    
        if not isOpen() then
            if tResults then
                return unpack( tResults )
            end
            return nil
        end
    
        -- Broadcast a lookup packet
        broadcast( {
            sType = "lookup",
            sProtocol = sProtocol,
            sHostname = sHostname,
        }, "dns" )
    
        -- Start a timer
        local timer = os.startTimer( 2 )
    
        -- Wait for events
        while true do
            local event, p1, p2, p3 = os.pullEvent()
            if event == "rednet_message" then
                -- Got a rednet message, check if it's the response to our request
                local nSenderID, tMessage, sMessageProtocol = p1, p2, p3
                if sMessageProtocol == "dns" and tMessage.sType == "lookup response" then
                    if tMessage.sProtocol == sProtocol then
                        if sHostname == nil then
                            table.insert( tResults, nSenderID )
                        elseif tMessage.sHostname == sHostname then
                            return nSenderID
                        end
                    end
                end
            else
                -- Got a timer event, check it's the end of our timeout
                if p1 == timer then
                    break
                end
            end
        end
        if tResults then
            return unpack( tResults )
        end
        return nil
    end
    
    local bRunning = false
    function run()
        if bRunning then
            error( "rednet is already running", 2 )
        end
        bRunning = true
      
        while bRunning do
            local sEvent, p1, p2, p3, p4 = os.pullEventRaw()
            if sEvent == "modem_message" then
                -- Got a modem message, process it and add it to the rednet event queue
                local sModem, nChannel, nReplyChannel, tMessage = p1, p2, p3, p4
                if isOpen( sModem ) and ( nChannel == os.getComputerID() or nChannel == CHANNEL_BROADCAST ) then
                    if type( tMessage ) == "table" and tMessage.nMessageID then
                        if not tReceivedMessages[ tMessage.nMessageID ] then
                            tReceivedMessages[ tMessage.nMessageID ] = true
                            tReceivedMessageTimeouts[ os.startTimer( 30 ) ] = nMessageID
                            os.queueEvent( "rednet_message", nReplyChannel, tMessage.message, tMessage.sProtocol )
                        end
                    end
                end
    
            elseif sEvent == "rednet_message" then
                -- Got a rednet message (queued from above), respond to dns lookup
                local nSenderID, tMessage, sProtocol = p1, p2, p3
                if sProtocol == "dns" and tMessage.sType == "lookup" then
                    local sHostname = tHostnames[ tMessage.sProtocol ]
                    if sHostname ~= nil and (tMessage.sHostname == nil or tMessage.sHostname == sHostname) then
                        rednet.send( nSenderID, {
                            sType = "lookup response",
                            sHostname = sHostname,
                            sProtocol = tMessage.sProtocol,
                        }, "dns" )
                    end
                end
    
            elseif sEvent == "timer" then
                -- Got a timer event, use it to clear the event queue
                local nTimer = p1
                local nMessage = tReceivedMessageTimeouts[ nTimer ]
                if nMessage then
                    tReceivedMessageTimeouts[ nTimer ] = nil
                    tReceivedMessages[ nMessage ] = nil
                end
            end
        end
    end

    Кстати сети так и остались уязвимы, что печально.:D А может и нет.Ходишь с планшетом, играешь на нем в тетрис или просто он в кармане валяется, и он в фоновом режиме пишет весь радиоэфир ;)


  15. print("Enter Side :")
    side= read()
    rednet.open(side)
    Так лучше не делать. Представьте, что Вы вставили мышку в USB разъем, а вам Windows говорит, введите стандарт USB, скорость передачи данных, введите имя драйвера для мыши... Я бы комп вместе с таким Windows в окно сразу запустил.:)

     

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

    function RednetOpen()
        local sModemSide = nil
            for n,sSide in ipairs( rs.getSides() ) do
                if peripheral.getType( sSide ) == "modem" then   
                    sModemSide = sSide
                    rednet.open(sModemSide)
                    break
                end
            end
            if sModemSide == nil then
                print( "Program stopped.")
                print( "No modem attached." )
                error()
        end
    end

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


  16. Отличная программка и очень полезная. Просьба, хотелось бы после входа в аккаунт смену меню, то есть при активной сессии должны убираться лишние кнопки. Немножко где-то баг при удалении сообщений, одно всегда остается, а стирается после добавления новых. Хотелось бы дату смс видеть, и циклично месседжи крутить, то есть с последнего на первую перескакивает запись. И кнопку "удалить все месседжи"! Понравилось, как на сервере можно посмотреть пользователей (активных, всех). Нельзя ли по какой-то кнопке добавлять новости, что-бы не лезть в папки. С модемом повозился, функция его видит, но просит открыть (стоял с самого начала WiFi) надо бы еще проверку всунуть на тип модема, видимо.

     

    Можно будет на спавне поставить и штук 3-5 терминалов, игроки смогут друг-другу мессаги оставлять и прочее, новости писать можно игрокам, ходя для админов есть плагин automessage в чат.

     

    Вот функция получения времени на сайте http://www.timeapi.org. Вместо /now можно указать часовой пояс /pdt/7+hours+before или /pdt/3+hours+after и прочее. Там куча аргументов.

    Ну а уже строку 2014-05-05T17:33:48+01:00 функцией string.sub() повыкусывать себе дату, время в любом формате можно.

     

    function getWorldTime()
        if not http then
            print("Pastebin requires http API!!!")
            print("Set enable API_http in ComputerCraft.cfg")
            return false
        end
        local response = http.get("http://www.timeapi.org/utc/now")  --change args
        
        if response then
            local time_mess = response.readAll()
            response.close()
            return time_mess
            else
            return false
        end
    end
    
    print(getWorldTime())

    На спавн надо будет однозначно поставить, супер почтовичок, единственное, что интерфейсик бы допилить чуть-чуть.


  17. Zer0Galaxy

    Хочу уточнить такие вопросы:

    1. Половинки карт всегда симметричны?

    2. Если да, то симметрия зеркальная или осевая?

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

     

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

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

     

    Мы кидаем бэдрок и прочее в сундуки на базе, выбираем карту, открываем окно(блок бэдрока) для строителя на арене, это можно сделать только амину в креативе, черепаха по команде по змейке строит карту и приезжает обратно на исходную точку. Окно закрываем. Все.

     

    По поводу спавна. На скрине видны разные цвета шерсти (1,2,3,4,5 цвета по порядку от белого, это стандартный порядок цветов в майнкрафт). Анализируя цвет (в инвентаре у черепахи есть на начало боя эти блоки шерсти) черепаха не только узнает свое место на арене, но и свою задачу. Например мы в программу можем заложить уже "роль" бойца при спавне. Например, белый и оранжевый - дэферы, остальные цвета - атакеры.

     

    Malvina

    Я немного не наблюдаю грань где кончается работа разработчиков проекта и начинаются действия командных программистов. Выше был выделен такой аспект: Механизм принятия решений черепахой (с учетом коэффициентов "стоимости" и важности того или иного решения с учетом обстановки на поле боя).На мой взгляд это уже дело той и другой команды как будет рассчитывать черепашка приоритетность задач. То же самое по сути относится и к стимулу для черепахи. Как по мне так это должна решать команда сколько черепашек назначить на поиск флага\исследования местности и.т.д. Вот только далеко не все смогут качественно запрогать черепаху так код тут довольно сложный выйдет. Если в чём то не прав то прошу поправить.o_O

    P.S У меня почему то данная задумка ассоциируется со старой игрулькой в танчики на dendy :)

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

     

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

     

    Можете это конечно ничего и не учитывать, а кататься по змейке, пока не наткнетесь на флаг, как в Ваших танчиках на Денди, но будет ли Вам интересно наблюдать за такими действиями программы, вот вопрос;)


  19. Отлично, очень оперативно, с программой решили!

    Над чем еще следует подумать:

    - работа одновременно нескольких черепах на одной территории для сокращения времени работы;

    - координация работающих черепах с компьютера.

     

    По поводу первого, думаю не критично, справится одна черепаха на половину поля.

    А вот с координацией согласен. Нужен простенький графический интерфейс что-то типа:

    • показать список карт
    • построить карту - [выбор карты] - [приступить]
    • считать карту - [введите имя] - [приступить]
    • ....
    Все сделать в главном судейском компьютере. Там же будет и команды на отправку условий боя, старт боя и прочая дребедень.

    То есть картограф должен получить команду, построить или считать карту и отправить массив в память координационного компа. Строители могут там жить вечно, сундучки, как Вы их там правильно показали, только иногда пополнять углем и бэдроком. Там их, правда, несколько, 2-3, поставить нужно, с разными предметами, допустим снизу, сверху и слева. После постройки/считывания, черепашка возвращается по правой линии назад на исходно положение.

     

    рис.1 Общий вид, вражеская половина карты не достроена.2014-05-05_15.51.09.jpg

     

    рис.2 Спавн

    2014-05-05_15.51.28.jpg

     

    рис. 3

    2014-05-05_15.51.59.jpg

     

    рис. 4 Варианты лабиринтов. Карта "Кровавая резня" Здесь мы заведомо пихаем черепах в узкое место, в "кровавую баню" и т.п. Вариантов масса.

    2014-05-05_15.52.39.jpg


  20. Выкладывать обязательно, только оформить аккуратно, пояснить нюансы, или трудно воспринимаемые участки кода, какие-то скрины прикрепить, ссылки на источники, на видеообзор, Википедию, может какая-то литература использовалась, каких авторов. Рабочие и красиво оформленные работы будут увековечены в разделах проекты или в зале славы на радость их авторам и читателям форума!


  21. bonus={2,20,200}

    M=B1*P1+B2*P2+B3*P3

    Где B1, B2, B3 – выигрыш в случае выпадения одной, двух или трех семерок;

    P1, P2, P3 – вероятность соответствующего события.

    Вероятность выпадения только одной семерки равна 0,243. Вероятность выпадения двух семерок – 0,027. Трех семерок – 0,001. Кто силен в комбинаторике, проверьте меня.

     

    Таким образом, матожидание выигрыша равняется: M=2*0,243+20*0,027+200*0,001=1,226

    Что это значит? Это значит, что на тысячу принятых слитков автомат выдаст в качестве призов 1226.

     

    Ой, Дмитрий! Чувствую, где-то подвох, не пойму пока где:). Играл, и разорился до нитки:D

    У меня такое чувство,что М на 3 разделить что ли. А то получается, прибыльность 123%. Отбросим ничтожный вариант выпадения один из тысячи - где платят 200 кусочков(то есть на тысячу ставок по 1 кусочку железа в среднем выигрываем 200) Та же история и с двумя семерками.

     

    На сотне семерка встречается 20 раз (19 раз по одной и раз в числе 77 две). Верю, что от 000 до 999 - 243 числа с одной семеркой, не помню уже формул комбинаторики, киньте формулу, пожалуйста. Ну так вот - за вероятность 0,243 выигрыш всего один к одному, как на красное-черное, где вероятность 0,5!:p Что-то не сходиться. Как по мне, строку бонуса увеличить надо ~ до 4, 37, 1000!

     

    С каверами автоматик вообще конфетка, эстетично очень смотрится. Настроить бы у нас на сервере таких в казино, а рулетку по центру поставить!

     

    P.S. Тема была перемещена в этот раздел, как готовый и оформленый проект. (Администрация форума)

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