Zer0Galaxy
-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Сообщения, опубликованные пользователем Zer0Galaxy
-
-
О структуре ip-адреса и таблицах маршрутизации в сети rednet (продолжение)
И всё бы хорошо, но область покрываемая одним роутером ограничена радиусом 64. Если нам нужно покрыть бОльшую область, одним роутером не обойтись. И те роутеры, которыми мы накрыли требуемую область должны быть связаны между собой
На рисунке изображены четыре роутера (я их назвал first, second, third и fourth). К некоторым из них подключены хосты.
Как теперь пакету от хоста 11 добраться до хоста, скажем, 14? Прямой связи роутера first с хостом 14 нет. Значит пакет нужно направить на один из роутеров 8 или 9. Прописываем таблицу маршрутизации
v_pupkin 13 – Уже известный нам хост Васи Пупкина
14 9 – Пакеты на 14-й хост шлем через роутер third
Но хостов, подключенных к роутерам second, third и fourth может быть очень много да и добавляться они могут слишком часто. Неужели их всех нужно руками прописывать в таблицу маршрутизации? Давайте пересмотрим структуру ip-адреса. Пусть теперь этот адрес состоит из двух составляющих: адреса роутера, к которому подключен хост и адреса самого хоста разделенных точкой. Пример fourth.14
Теперь роутеру first не нужно помнить адреса всех хостов сети. Нужно лишь знать пути к роутерам. Вот так выглядит новая таблица маршрутизации.
First.self 10 – Это что бы отличать свои хосты от чужих
First.v_pupkin 13 – Уже известный нам хост Васи Пупкина
second 8 – Пакеты на роутер second
third 9 – Пакеты на роутер third
fourth 9 – Пакеты на роутер fourth шлем через роутер third
Разумеется, похожие таблицы должны быть составлены и для остальных роутеров сети. Такую сеть будем называть двухуровневой.
Каковы недостатки такой сети? При добавлении нового роутера (хоть это бывает и не часто) приходится корректировать таблицы маршрутизации всех остальных роутеров. Так же при отключении одного из ранее работавших роутеров будет наблюдаться потеря пакетов, проходящих через него. Как бороться с этими проблеммами? Мне видится динамическое построение таблиц маршрутизации с периодическим обновлением. Возможно со временем нам удастся решить и эту задачу.
Продолжение следует...
-
Ребята, давайте не будем спорить о том кто что знает о маршрутизации. Дело в том, что маршрутизация в реальном мире и в мире майнкрафта это две большие разницы. И не нужно переносить свои знания из реала в майн. Давайте лучше подумаем как такую маршрутизацию сделать, во-первых, работоспособной, во-вторых, максимально эффективной. Способ, предложенный Neo, действительно работает в сети из двух роутеров, но над эффективностью нужно еще поработать.
Предлагаю для размышления такой способ маршрутизации.
Предположим, наша сеть состоит всего из одного роутера и нескольких хостов.
Пакет, направляемый хостом-передатчиком в сторону роутера должен содержать адрес хоста-приемника. Роутер извлекает этот адрес и переправляет пакет далее в нужном направлении. Какой должна быть структура ip-адреса в такой сети, если забыть на минутку о реальных ip-адресах? Первое, что приходит в голову, это должно быть одно единственное число, по возможности совпадающее с id хоста. Такую сеть будем называть одноуровневой.
Нужна ли в одноуровневой сети таблица маршрутизации? Мне кажется, что нет, поскольку всю необходимую информацию о дальнейшем пути пакета роутер может извлечь из самого пакета. Ну разве что какой либо из пользователей не захочет иметь в качестве адреса число, а захочет иметь строку. Скажем Вася Пупкин, владелец хоста с id 13, ненавидит число 13. Он может обратиться к администратору роутера и тот пропишет вот такую таблицу маршрутизации:
v_pupkin 13
Теперь все пакеты с адресом получателя "v_pupkin" будут перенаправляться на id 13. Остальные же пакеты, с числовыми адресами получателей, будут обрабатываться роутером как и прежде.
Продолжение следует...
-
Не совсем так. Таблица маршрутизации все же есть. Заполняется она динамически при первом прохождении пакета методом волны. Но вот если количество роутеров в сети больше двух (есть вариант ветвления волны) то волна эта никогда не затухнет.
-
Проанализировал код. Подправил описание в соответствии со своим пониманием. Коментарии - в скобках курсивом.
Роутер - это компьютер и специальное программное обеспечение предназначенные для организации маршрутизации пакетов в сети rednet.
После запуска программы роутера необходимо ввести номер его подсети. Это должно быть число от 0 до 255, несовпадающее с подсетями других роутеров.
(Роутер это, как правило, редко обслуживаемый компьютер и запуск его программы будет скорее всего из стартапа. А значит никаких read() быть не должно. Используй парамерт запуска либо принимай номер подсети равным id роутера)
Прежде чем начать работу, терминалу (компьютеру, который отправляет или получает пакет) необходимо подключится к роутеру. Для этого нужно отправить login-пакет на адрес роутера.
Такой пакет представляет собой сериализированный массив, состоящий из следующих элементов:
1. nil, 2. "login"
(почему команда "login" на втором месте? Логичнее было бы команду ставить вперед)
Когда login-пакет приходит на роутер он проверяет нету ли этого терминала в базе , если нету генерирует в своей подсети случайный ip, проверяет что бы он не совпал с другими ip и отправляет его терминалу
(А если есть? Вдруг я выходил из программы и хочу снова подключиться. Надобы вернуть мне мой прежний ip)
ip представляет собой строку состоящую из четырех чисел, разделенных точкой.
Первое из этих чисел совпадает с номером подсети роутера, а последующие генерируются случайным образом в диапазоне 0-255
(Какова функциональность такого ip? Поможет ли она скорейшему нахождению маршрута? Если нет, то может не стоит копировать реал, а придумать что то свое?)
Для передачи данных другому терминалу нужно быть потключеным к роутеру, знать свой ip и ip адресата
(А зачем знать свой ip если его знает роутер?)
Пакет для передачи представляет собой сериализированный массив, состоящий из элементов:
1. ip отправителя, 2. ip получятеля, 3. Передаваемые данные 4. "transport"
(Опять таки, команду "transport" логичнее вынести на первое место. Она и обрабатывается первой и место ее не меняется по сравнению с "login".
О сериализации уже говорил. Нужно потихоньку от нее избавляться. Что нам нужно? Слепить четыре строки в одну? Так это не проблема. Потом разлепить? Я помогу, если сложно.)
передача происходит таким способом
1 пакет попадает на роутер, если этот пакет не от его терминалов , а от роутеров заносит
в таблицу маршрутизации данные что с роутера такого-то пришел пакет от ip такого-то , это используеться в 4 шаге
2 роутер проверяет авторизирован ли терминал если да то переходит к 3 шагу
3 ищет в своей базе ip терминала-получателя, если нет переходит к 4 шагу , если да то отправляет пакет адресату
4 ищет в своей базе ip адрес адресата и id роутера куда нужно пакет отправить,
если находит то отправляет на тот роутер что указан в базе,если нет переходит к 5 шагу
5 отправляет пакет на все роутеры которые прописаны в нём
(Т.е. поиск маршрута осуществляется методом волны. Если терминал А отправляет пакет терминалу Б, тот пакет этот обойдет ВЕСЬ Интернет. Причем распространяться будет равномерно во все стороны, отражаясь и переотражаясь. Количество пакетов множиться буддет в геометрической прогрессии пока не завалит своей массой игровой сервер.
Следует подумать над следующими вопросами:
1. Оптимизация поиска маршрута
2. Ограничение времени жизни пакета для исключения зацикливания
3. Оптимизация функциональности программы вообще. Если ты пишешь программу, которая как предполагается, будет работать постоянно на множестве компьютеров, то такая программа не должна выполнять лишних действий, а не лишние должна выполнять наиболее оптимальным способом. Чего, например стоит код:
term.clear() term.setCursorPos(1,1) print("__=Ip list=__") for i=1,#ip,1 do print("Ip : ",ip[i]," Mac : ",id[i]) end --for for i=1,#router,1 do print("__=Router=__"..router[i]) end for i=1,pr,1 do print("__=path=__") print("ip :",ip_path[i]," router :",router_path[i]) end for i=1,14,1 do print() end write(" Programmed By NEO") print("")который выполняется при каждом получении пакета. А ведь вывод на экран это одна из наиболее медленных операций) -
Можно. И такая функция уже есть. Нужно только реализовать интерфейс для компьютера. Вот только карту для считывания нужно строить из разрушаемого материала ибо при сканировании снимается верхний слой. Другого способа пока не вижу.Можно ли считывать живую карту из камня. Все таки совместить два слоя удобнее вживую, какие-то туннели и бойницы сделать, на однослойном рисунке как это совместить из двух слоев, не хочется фантазировать в уме, как они наложатся друг на друга.
-
Давай для начала поймем как можно объединять и разделять строки. Строки объединяются просто, при помощи оператора .. (две точки). Он называется конкатенация и просто сливает две строки в одну. Пример: message=login..passwordЯ не знаю каким образом разделить строку на несколько переменных, что бы одним пакетом передать.
Но разделить, таким образом объединенные, строки однозначно будет невозможно.
Самый простой способ объединения строк, да и любых данных, это поместить их в таблицу, а потом сериализовать, т.е. преобразовать в строку. Пример:
message=textutils.serialize({login,password,name})
На принимающей стороне эту строку можно будет преобразовать снова в таблицу при помощи функции textutils.unserialize(message)
-
Честно говоря, не совсем понятно, что приведенный код делает.
1) Почему ты считаешь, что одновременно регистрировать несколько пользователей не получится?
2) Функция RednetProtect вернет true если id равно 1 и false в противном случае. До второго ифа она не дойдет. Я так понимаю, она должна проверять id на равенство 1, 2 или 3. Цепочка ифов для этого не лучший вариант. Лучше заведи таблицу. Например так:
validID={[1]=true, [2]=true, [3]=true} function RednetProtect(id) return validID[id] end3) Зачем 'register', login, password, name передавать разными пакетами. Гораздо быстрее втиснуть в один и передать одним разом.4) А где собственно регистрация?
5) Зачем функция login?
-
Ну вот, закончил программирование системы построения карты. Система состоит из шести черепах-строителей (по три на каждую половину карты) и компьютера прораба.
Создание карты начинается с прорисовки эскиза в пайнте. Причем нижний и верхний слои карты прорисовываются и сохраняются в разных файлах, например map1 и map2. Затем на компьютере прораба выполняется команда buildmap map1 map2, по которой эскизы карты рассылаются черепахам-строителям. И черепахи начинают строить. Постройка вот такой карты
занимает порядка 2,5 минут. Выложил бы видео имей я доступ к ютубу.
Теперь по поводу бэдрока в качестве материала карты. Похоже, это единственно возможный вариант, хоть он мне и не нравится. Во-первых, выглядит не привлекательно. Во-вторых, исключает возможность автоматического демонтажа карты. Вот если бы найти блок, который бы разрушался черепахой-шахтером, но не разрушался черепахой-лесорубом. Тогда бойцов можно было бы вооружать топорами не боясь, что они поломают карту.
-
http://ridav.oxnull.net/forum/index.php?threads/клиент-сервер-новостей-и-сообщений.19/Давай, мне интересно.
Остались нерешенные вопросы:
- связь на дальние расстояния
- защита от перехвата сообщений
- руссификация
-
Руководство по настройке сервера сообщений и пример работы с клиентом
На первый компьютер (который будет сервером) записываем файл mess_serv.
Запускаем mess_serv
При первом запуске сервер создает:
- файл passwd, в котором будут храниться пароли пользователей
- директорию messages, в которой будут храниться непрочитанные сообщения
- директорию readed, в которой будут храниться прочитанные сообщения
- директорию news, в которую необходимо помещать новости
На другой компьютер записываем файл mess_client. Придется подкорректировать
первую строчку этого файла, указать ID первого компьютера.
Запускаем mess_client. В дальнейшем все команды вводим на компьютере-клиенте
Видим меню
Регистрируем первого пользователя. Клик по пункту "New user"
Вводим ник и пароль, например Vasya и 123
Видим сообщение "User Vasya connected"
отконекчиваемся "Logout"
и регистрируем второго пользователя "New user"
Petya 456
Посылаем сообщение первому пользователю "Send mess"
После запроса Destination user nick вводим имя первого пользователя (Vasya)
или стрелками Вверх-Вниз выбираем из уже зарегистрированных
и текст сообщения (Privet ot Peti)
отконекчиваемся "Logout"
Регистрируем третьего пользователя
Посылаем сообщение первому пользователю
отконекчиваемся
Заходим снова под первым пользователем: "Login", вспоминаем имя и пароль
Проверяем почту "Check mess"
Видим сообщение You have 2 new message(s)
Читаем первое сообщение "Read mess"
Видим <Petya> Privet ot Peti
Его можно удалить <Del> или перейти к следующему <Стрелка вправо>
Видим <Sasha> Privet ot Sashi
На сервере:
a - для получения id и имен активных пользователей
u - для получения имен всех зарегистрированных пользователей
q - выход
В директории news создаем несколько файлов с текстами новостей и снова
запускаем сервер, после чего их можно будет почитать с клиента нажав пункт "News"
Сервер http://pastebin.com/K7VhM2N5
Клиент http://pastebin.com/1RUTNKNx
-
Если не использовать блоки и предметы, которые разрушаются (например, стекло) то при демонтаже они возвращаются в инвентарь черепахи и в пополнении не нуждаются. Поэтому подзаправлять черепаху нужно только углем, а значит хватит одного сундука. Все таки одна черепаха строит половинку карты довольно долго. Зрители устанут ждать. Сейчас рассматриваю вариант одновременной работы трех черепах. В принципе это будет легко изменить настройками.сундучки, как Вы их там правильно показали, только иногда пополнять углем и бэдроком. Там их, правда, несколько, 2-3, поставить нужно, с разными предметами, допустим снизу, сверху и слева.
-
Алекс, я начал программировать систему для постройки карты по заданному массиву.
Хочу уточнить такие вопросы:
1. Половинки карт всегда симметричны?
2. Если да, то симметрия зеркальная или осевая?
3. Из какого количества типов блоков должна состоять карта? Пока предполагается три типа строительных блоков плюс один специальный (сундук, лампа и т.д.)
На данный момент предполагается, что карта будет прорисовываться в пайнте. Кто нибудь придумает алгоритм генерации карты случайным образом? Neo?
-
Функция serialize довольно ресурсоемкая (см. модуль textutils. Рекурсии там и прочее). Если вызывать ее разово, это конечно, ни на чем не сказывается. Но, если десятки роутеров будут только тем и заниматься, что сериалазить, это может здорово подгрузить сервер.
Функция unserialize это дыра для хакера поскольку пытается выполнить входящий пакет как строку Lua. Т.е. при желании можно заставить твой роутер выполнить любой код какой только вздумается.
-
О вероятностях.
Вероятность выпадения семерки на отдельно взятом барабане - 0,1. Вероятность не выпадения - 0,9. Эти два факта, вроде, сомнений не вызывают.
Теперь какие возможны варианты выпадения семерок на трех барабанах?
1) Ни одной семерки не выпало. Это означает, что на первом барабане не выпало И на втором не выпало И на третьем не выпало. Поскольку независимые события собираются по "И" вероятности перемножаются. Т. е. имеем
P0=0,9*0,9*0,9=0,729
2) Только на одном барабане выпала семерка. Это означает, что на первом барабане выпала семерка И на втором не выпала И на третьем не выпала. А так же надо учесть варианты, когда семерка выпала на втором ИЛИ на третьем барабане. Там где независимые события собираются по "И" - вероятности умножаем, там где взаимоисключающие события собираются по "ИЛИ" - складываем:
P1=0,1*0,9*0,9+0,9*0,1*0,9+0,9*0,9*0,1=0,243
3) Семерки выпали на двух барабанах: рассуждения аналогичны п.2
P2=0,1*0,1*0,9+0,1*0,9*0,1+0,9*0,1*0,1=0,027
4) Выпали три семерки: P3=0,1*0,1*0,1=0,001
Эти четыре варианта исхода являются взаимоисключающими (т.е. возникновение двух из них одновременно невозможно) и взаимодополняющими (других вариантов нет), а значит сумма их вероятностей должна равняться единице. Проверяем
P=P0+P1+P2+P3=0,729+0,243+0,027+0,001=1
-
2
-
-
Мой тебе совет, уходи от serialize-unserialize
-
Когда то решал задачку отправки электронных писем. Могу выложить если интересно
Как планируешь связывать клиента с сервером если расстояние между ними больше 64?
-
Черепаха заполняет территорию только одной команды. Предполагается, что с другой стороны должна работать аналогичная черепаха.
Над чем еще следует подумать:
- работа одновременно нескольких черепах на одной территории для сокращения времени работы;
- координация работающих черепах с компьютера.
-
А вот и программка
local W_Size=15 local H_Size=15 local Coal_slot=16 function open() for n,sSide in ipairs( rs.getSides() ) do if rednet.isOpen( sSide ) then return true end end for n,sSide in ipairs( rs.getSides() ) do if peripheral.getType( sSide )=='modem' then rednet.open(sSide) return true end end return false end local function getCoal() if turtle.getItemCount(Coal_slot)==0 then turtle.select(Coal_slot) turtle.suckDown() end end local function Refuel() if turtle.getFuelLevel()<1000 then turtle.select(Coal_slot) turtle.refuel(1) end end local function openCoble() Refuel() turtle.select(Coal_slot-1) turtle.dig() turtle.forward() end local function closeCoble() turtle.back() turtle.select(Coal_slot-1) turtle.place() end function buildLine(line) openCoble() for i=1,H_Size do if turtle.detect() then turtle.dig() end turtle.forward() if turtle.detectDown() then turtle.digDown() end end for i=H_Size,1,-1 do if line[i][1] then turtle.select(line[i][1]*4-3) if turtle.getItemCount(line[i][1]*4-3)<2 then repeat turtle.select(turtle.getSelectedSlot()+1) until turtle.getItemCount(turtle.getSelectedSlot())>0 end turtle.placeDown() end turtle.back() if line[i][2] then turtle.select(line[i][2]*4-3) if turtle.getItemCount(line[i][2]*4-3)<2 then repeat turtle.select(turtle.getSelectedSlot()+1) until turtle.getItemCount(turtle.getSelectedSlot())>0 end turtle.place() end end closeCoble() end function clearLine() openCoble() for i=1,H_Size do if turtle.detect() then turtle.dig() end turtle.forward() if turtle.detectDown() then turtle.digDown() end end for i=1,H_Size do turtle.back() end closeCoble() end function scanLine() local line={} openCoble() for i=1,H_Size do local p={} if turtle.detect() then for j=1,4 do turtle.select(j*4-3) if turtle.compare() then p[2]=j break end end turtle.dig() end turtle.forward() if turtle.detectDown() then for j=1,4 do turtle.select(j*4-3) if turtle.compareDown() then p[1]=j break end end end line[i]=p end for i=H_Size,1,-1 do turtle.back() if line[i][2] then turtle.select(line[i][2]*4-3) turtle.place() end end closeCoble() return line end function buildMap(map) getCoal() for i=1,W_Size-1 do buildLine(map[i]) turtle.turnRight() turtle.forward() turtle.turnLeft() end buildLine(map[W_Size]) turtle.turnLeft() for i=1,W_Size-1 do turtle.forward() end turtle.turnRight() end function clearMap() getCoal() for i=1,W_Size-1 do clearLine() turtle.turnRight() turtle.forward() turtle.turnLeft() end clearLine() turtle.turnLeft() for i=1,W_Size-1 do turtle.forward() end turtle.turnRight() end function scanMap() local map={} getCoal() for i=1,W_Size-1 do map[i]=scanLine() turtle.turnRight() turtle.forward() turtle.turnLeft() end map[W_Size]=scanLine() turtle.turnLeft() for i=1,W_Size-1 do turtle.forward() end turtle.turnRight() return map endДоступны следующие функции:buildMap - заполняет игровое пространство по заданной таблице
clearMap - очищает игровое пространство
scanMap - сканирует игровое пространство и возвращает его в виде таблицы
-
Да, действительно. Часть озвученных вопросов находится в компетенции администрации проекта (это организация боя и контроль соблюдения правил), а часть - в компетенции команды программистов. Но поскольку мы еще не разделились на тех и других, вопросы тоже не делим, а решаем сообща.
Я вот создал черепаху-строителя, которая заполняет игровую арену различными препятствиями. Арена у меня выглядит вот так:
и представляет собой пространство 15х30 высотой два блока. По бокам арена ограждена каменными блоками, сверху защащена кварцевым стеклом. Конструкция из красного и серого кирпича (см. рисунок) построена черепахой-строителем. Начальное положение черепахи - левый ближний к нам угол за пределами арены во втором слое. В сундуке под черепахой хранится уголь или другое топливо, которым автоматически заправляется черепаха.
Для постройки карты доступны четыре вида блоков: три любых строительных блока (кроме камня) и сундуки. Их следует разместить в инвентаре черепах таким образом:
слоты 1-4 блок первого вида (в примере - красный кирпич), 5-8 - блок второго вида (серый кирпич), 9-12 - блок третьего вида (песок), слоты 13-14 - сундуки. Слоты 15-16 зарезервированы для нужд черепахи.
-
Как же работает эта машина?
Счастливой цифрой является, разумеется, семерка. В трубу справа от кнопки вносим ставку. Это должны быть железные слитки в количестве от 1 до 5. Таблица чисел вверху экрана белым цветом показывает сделанную ставку и возможный выигрыш в случае выпадения одной, двух или трех семерок.
Когда ставка принята, нажимаем кнопку. И вот теперь всё зависит от фортуны. Что же выпадет на баранах? Если нам повезло и среди выпавших цифр есть хотя бы одна семерка, получаем выигрыш из левой трубы.
Для завершения нам осталось создать файл startup с текстом shell.run(“monitor right casino”), перегрузить компьютер и сделать корпус из GoldBlockCover.
На этом можно было бы и закончить, но для тех, кто дружит с математикой, я хотел бы добавить еще вот что. В строке номер 100 файла casino можно найти табличку 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. Согласитесь, для казино разорительно. И если вы, построив такой автомат, хотите сколотить на нем состояние то вам стоит подкорректировать табличку bonus.
Считайте ваши денежки и удачной вам игры!
-
Заходим в терминал компьютера и выполняем команду pastebin get ihL5CTxd casino
Возможно, полученную программу придется чуть подкорректировать. Сначала определим координаты сундука относительно сенсора. Для этого выполним ocs/programs/sensorview
Выбираем элемент с именем DiamondChest. Если вы используете сундук другого типа, то и имя его должно быть соответствующим.
Запоминаем координаты сундука относительно сенсора. В случае на картинке это -1,-1,1.
Выходим из sensorview и открываем на редактирование файл casino. Находим в пятой строчке переменную ChestPos и присваиваем ей значение ‘-1,-1,1’
Сохраняем файл casino и запускаем его вот таким образом monitor right casino.
Если всё сделано правильно, на мониторе мы должны увидеть вот такую картину.
-
Теперь сделаем трубу, по которой слитки будут извлекаться из сундука, для выдачи игроку его выигрыша. Это должен быть, разумеется, отрезок деревянной трубы. Установим и настроим при помощи ключа отрезок железной трубы. Оставшуюся часть трубы сделаем из золота. Другой конец трубы выведем под левым нижним углом монитора как показано на рисунке.
Для извлечения предметов из сундука установим на деревянную трубу пульсирующий гейт.
Настроим пульсирующий гейт на управление редстоун-сигналом и выберем ему функцию – «EnergyPulser».
Нам осталось установить над компьютером сенсор. Сенсор нужен для того, чтобы компьютер мог контролировать количество предметов в сундуке. В сенсор нужно зарядить Inventory Sensor Card.
На этом аппаратная часть закончена. Приступаем к программированию.
-
Под правым нижним углом монитора установим обсидиановую трубу. В нее игрок будет вносить свою ставку.
Соединим обсидиановую трубу с сундуком золотой трубой. В самом конце поставим алмазную трубу, чтобы в сундук попадали только те предметы, на которые должна идти игра.
Теперь самое время определить, на что именно мы будем играть. Предположим, это будут железные слитки. Внимательно смотрим, какой конец алмазной трубы подсоединен к сундуку. Ага – серый. Заходим в настройки алмазной трубы и устанавливаем в серую ячейку железный слиток.
В сундук тоже нужно положить 20-30 стаков железных слитков.
-
Доброго времени суток. Хочу рассказать вам, как можно в игре MineCraft построить игровой автомат на подобии всем известного «Однорукого бандита». Для тех кто подзабыл напомню принцип действия этого автомата http://ru.wikipedia.org/wiki/Слот-машина. Игрок делает ставку после чего запускает машину. Машина имеет три вращающихся барабана с нанесенными на них различными символами. Барабаны останавливаются в случайном положении и в зависимости от выпавших символов игрок либо проигрывает, либо получает свою ставку умноженную в несколько (иногда в сотни) раз.
Для постройки у вас должны быть установлены следующие моды: ComputerCraft(как же без него) с аддоном OpenCCSensors, BuildCraft и ProjectRed.
Построим вот такую конструкцию из золотого блока и шести золотых мониторов. На золотой блок установим кнопку.
С обратной стороны монитора установим компьютер (подойдет как золотой так и обычный) и соединим его с золотым блоком при помощи красного провода как показано на рисунке.
Чуть в сторонке от компьютера, по диагонали установите сундук.
Этот сундук будет использоваться для хранения предметов, на которые идет игра. Если играть вы планируете по крупному, то объём сундука должен быть как можно большим. Для этой цели подойдет алмазный сундук, ну или на худой конец – серебряный.
-
2
-

[CC] Ethernet
в Сетевые технологии
Опубликовано: