cyber01 1 704 Опубликовано: 11 марта, 2016 Думаю большинство пользователей форума помнят банк, который был на IT, да, он был местами лагучий, но это же шедевр. Я еще не видел ни одного подобного проекта (OpenNet не в счет т.к. там все разнозненно было и не понятно нафига оно надо ). В связи с заинтересованностью несколькими людьми в банке (да и самому интересно его запустить) решил выложить некий мануал по его запуску. Возможно владельцы других серверов и проектов смогут его использовать у себя. Собственно приступим: Для начала некоторая терминология в программах банка и его алгоритм работы на словах: Термины: Терминал (terminal) - пользовательская часть, через которую игрок взаимодействует с банком. Представляет собой обычный компьютер с монитором и клавиатурой. Кассир (teller) - робот, задачей которого является обработка всех данных по покупке/продаже чего-либо в банке. Осуществляет финансовые операции (работа с балансом) в банке, также забирает товар, полученный от игрока (продажа в банк) и отправляет запросы командному блоку, на выдачу банковского пароля и выдачу предметов. Виртуальный командный блок (netcb) - обычный компьютер, который получает команды от робота и передает команды в командный блок Супервайзер (supervisior)- административный элемент банка, позволяет выполнять различные операции в нем (выключение компьютеров, блокировка/разблокировка терминалов, принудительное обновление цен, блокировка дверей в кабинках) Алгоритм работы банка на словах: 1. Пользователь заходит в кабинку, тыкает в терминал 2. Двери кабинки закрываются и пользователю предлагают ввести пароль (либо восстановить его) 3. Если пользователь успешно авторизовался, то в зависимости от выбранной услуги выполняются различные действия: В случае продажи предметов банку: Пользователь выбирает пункт "Продать", бросает предметы в "яму" Робот забирает их, считает, выгружает в сундук На экране терминала отображается количество предметов и сумма, которую банк заплатит игроку. Игрок нажимает кнопку "Продать" и сумма зачисляется ему на счет. В случае покупки предметов у банка: Пользователь выбирает пункт "Купить", выбирает товар Выбирает количество товара и нажимает купить Если у игрока достаточно средств, то с его счета списывается необходимая сумма. Робот посылает командному блоку команду на выдачу предметов игроку. Выдача предметов осуществлялась через плагин BetterEnderChest 4. Игрок заканчивает сессию в банке, терминал деавторизовывает игрока и открывает двери Теперь рассмотрим, что требуется для постройки банка: Для создания банка, а будем строить для начала только одну кабинку, дополнительно потребуется: Web-часть: PHP скрипт + база данных - через них осуществляются все операции по зачислению/списанию баланса, хранению банковской сессии и пароля. Игровая часть: Плагины: Серверный плагин Essentials - по умолчанию командный блок отправляет сообщение игроку в виде письма из плагина Essentials Серверный плагин BetterEnderChest - по умолчанию выдача купленных игроком предметов осуществляет в Эндер сундук, доступ к которому извне реализуется плагином. В плагине есть баг, не сохраняются метаданные (зачарования, уровни энергии и прочее) Моды: OpenComputers - компьютеры, роботы и т.п. IC2 Exp. - покупка энергии AFSU - огромное хранилище энергии, для хранения энергии, которую смогут купить Nuclear Control - информационные экраны по краям терминала для показа информации о доступной энергии Iron Chest - не обязательно, на случай, если игрока буду продавать огромными партиями Applied Energistics 2 - в ней будут храниться все ресурсы, проданные банку Advanced Solar Panels - квантовые генераторы, для продажи энергии RedLogic - освещение и липкий редстоун Блоки: Командный блок - собственно все операции по отправке сообщений и выдаче предметов будут проходить через него. Командные блоки должны быть включены в конфигах сервера. Необходимое ПО лежит здесь. ПО немного изменено,а именно удален механизм автоапдейта (кроме прайслиста) т.к. при создании банка могут появиться необъяснимые баги (оно загружает всегда обновленную версию, не смотря на вашу ) Web-часть: Данные о балансе игрока, его банковской сессии и пароле хранятся в базе данных, Opencomputers общается с ней с помощью PHP скрипта, отправляя запросы на него и получая соответствующий ответ. Поэтому для работы банка в первую очередь нужно обзавестись хостингом с поддержкой PHP. К сожалению локальные вебсервера не подходят (OpenComputers их просто не видит). Выполнение этой части делится на несколько этапов: Импортируем структуру базы данных Загружаем PHP файл Указываем параметры доступа к базе данных (в PHP скрипте) Указываем ключ авторизации (абсолютно случайный, но без спец.символов). При попытке запросить баланс или его изменить для игрока, в случае, если игрока не существует - он будет создан. Игровая часть: Не забудьте поставить плагины для сервера. Собственно приступим к постройке: 1. Супервайзер Первым делом сделаем супервайзера т.к. его адрес указывается во всех программах. Конфигурации компьютеров/роботов выкладываю такими, какие они были в оригинальном банке, может будет работать и на менее мощной комплектации. Конфигурация компьютера-супервайзера: Системный блок 3 уровня Жесткий диск 2 уровня (золотой) Планка оперативной памяти 3.5 Видеокарта 2 уровня Процессор 3 уровня Плата беспроводной сети Ставим системный блок, монитор, подаем энергию, устанавливаем операционную систему. (все как с обычным компьютером). Например так: Далее загружаем программу-супервайзера (папка supervisior в архиве) любым удобным для вас способом. Выполняем команду components , чтобы посмотреть адрес модема и записываем его, он еще пригодится. Можно также отредактировать init.lua, добавив перед строкой local result, reason = os.execute(os.getenv("SHELL")) строки print("Running Supervisor:") require('shell').execute('имяпрограммы-супервайзера', _G) , чтобы она загружалась при старте компьютера. Перезагружаем компьютер, если все хорошо - программа успешно запустится. На этом с супервайзером закончили. 2. МЕ-сеть (система хранения) Получаемые от игроков ресурсы нужно где-то хранить, поэтому сделаем МЕ-сеть. Конфигурация ее произвольна, но сделаем простую: МЕ контроллер Терминал МЕ накопитель Плотный кабель (будет идти к каждому кассиру) Несколько ячеек хранения. Например так: Построение первой кабинки: 1. Виртуальный командный блок Конфигурация виртуального командного блока (компьютера такая же, как и у супервайзера). Ставим компьютер, рядом с ним ставим адаптер, а к нему командный блок (например так: . Подаем питание, устанавливаем операционную систему. После установки операционной системы также выполняем команду components и записываем адрес модема виртуального командного блока. Теперь загружаем программу netcb (доступна в архиве) любым удобным вам способом. Можно также добавить ее в автозапуск по аналогии с супервайзером. 2. Комната кабинки. Разделяем кабинку на половины (для клиентов и внутреннюю часть). С одного краю делаем углубление в один блок(разделите ее на 2 части с помощью стеклянного блока), для робота-кассира. Например так: . Робот может забрать ресурсы даже сквозь стекло! Далее ставим монитор и клавиатуру(терминал), а также заряжающую плиту. Например так: . Подключаем к монитору (сзади) кабель, ведущий под кабинку. А в углублении ставим зарядное устройство и рядом с ним блок, на который ставим сундук. Например так: Далее делаем обыкновенные поршневые двери. При этом вместо красной пыли используем Red alloy wire из Red logic, край "провода" выводим вниз, под кабинку. Например так: Слева и справа от экрана терминала за стеклом ставим информационные панели из Nuclear Control (продвинутая панель+расширитель). Они будут показывать заказанный вами объем энергии и доступный всего (датчики разместим позднее). Например так: На этом с кабинкой временно закончили. 3. Терминал. Теперь настала очередь терминала (самого компьютера). Конфигурация аналогична супервайзеру и виртуальному командному блоку, но здесь еще добавляется интернет плата и вторая планка оперативной памяти 3.5 уровня. Ставим компьютер. Подаем энергию, устанавливаем операционную систему. Далее устанавливаем необходимое ПО: 3.1 Загружаем любым удобным способом все файлы из папки terminal. 3.2 Редактируем файл bank.ini, где в ID указываем номер кабинки (1), а в CB указываем адрес модема виртуального командного блока (вы его получили ранее). 3.3 Редактируем файл terminal.lua, указываем адрес модема супервайзера (29 строка) 3.4 Обязательно добавляем файл в автозагрузку (как описано в начале для супервайзера, запускать программу start). 3.5 Перезапускаем компьютер. Можно для проверки поставить рядом монитор, чтобы проверить работоспособность (должно вывести надпись "Логин". Если все хорошо, убираем монитор т.к. далее будет подключен монитор в кабинке (позже) 4. Управление дверями, хранилища энергии. Теперь нужно построить хранилища энергии. Привожу скриншоты, тут ничего сложного. 4.1 Сначала делаем такую конструкцию: 4.2 Добавляем красный камень (блок из ОС), провода разъединители и квантовые генераторы: 4.3 Соединяем проводами красный камень, терминал и монитор терминала (в кабинке): 4.4 Подводим красную пыль от двери к красному камню (блок из ОС), можно также поставить рычаг, для ручного блокирования дверей: 4.5 Берем два набора для энергетического хранилища (из Nuclear Control), одним тыкаем по ЭХПФ (AFSU) и вставляем в левую (от монитора терминала) информационную панель, а вторым тыкаем по заряжающей плите и вставляем в правую информационную панель. В результате левая показывает общее количество энергии в системе, а правая уровень энергии в заряжающей плите. С этой частью закончили, осталась одна. 5. Кассир (teller) Кассир это робот определенной комплектации. Поэтому сначала соберем его. Нам потребуется следующая комплектация: Системный блок 3 уровня Улучшение "Контейнер плат" 2 уровня Дисковод Улучшение "Контроллер инвентаря" Улучшение "Притягивающий луч" 4 улучшения "Инвентарь" Монитор 1 уровня Клавиатура Интернет карта Плата беспроводной сети Видеокарта 1 уровня Процессор 3 уровня 2 планки памяти 3.5 уровня Lua Bios Жесткий диск 3 уровня Как только робот будет собран, устанавливаем его на зарядное устройство в кабинке (за стеклом), "лицом" к дверям. Под зарядное устройство (снизу) подводим энергию, а также ставим рычаг и включаем его (чтобы включить зарядное устройство). Таким образом робот должен быть на бесконечной зарядке. Далее устанавливаем операционную систему После чего загружаем все файлы из папки teller. Редактируем bank.ini, где в ID ставим 1 (номер кабинки), а в CB ставим адрес модема виртуального командного блока Добавляем программу на автозапуск (запускаем программу start) Редактируем файл teller.lua. Изменяем следующее: VIRTUALCB (строка 35) - ставим адрес модема виртуального командного блока, SUPERVISOR (строка 36) - адрес модема супервайзера, KEY и KEY2 (можно ставить одинаковыми) - ключ доступа, который указали в PHP файле. Далее в коде находим и меняем ссылки на PHP скрипт (по умолчанию это строки 707,710,714,717,765,768,785,791,794). Меняем только часть ДО(!) знака вопроса. Сохраняем файл Вставляем в робота плату на красном камне 2 уровня. А теперь пробуем запустить нашего кассира. После запуска кассира нужно перезапустить компьютер с терминалом и попытаться (после запуска) авторизоваться в терминале. Осталось поставить на сундук (что над роботом) шину импорта, вставить в нее 2 модуля ускорения и подвести к ней МЕ-кабель. Вот собственно и все. Первая кабинка готова. Для создания дополнительных кабинок требуется повторить все 5 пунктов, что и для первой кабинки (создать новый КБ, новый терминал, нового кассира). А также сменить ID кабинки в bank.ini, teller.lua и terminal.lua Прайс лист с ценами доступен тут . Ссылка на pastebin прайслиста указывается в teller.lua строка 25 Не забудьте поставить эндер сундук, чтобы игроки смогли забрать купленное. Выражаю огромную благодарность разработчикам банка: Alex(AlexCC) и Totoro. 12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
skritt 16 Опубликовано: 12 марта, 2016 (изменено) ... Спасибо за понятное объяснение! Ты на моей карте скринил а то что-то похожее? Изменено 12 марта, 2016 пользователем Fingercomp Цитирование стены текста высотою в пару мегапарсеков Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 12 марта, 2016 Вопрос №1. Зачем нужна Web-часть? Неужели информацию о сессиях и паролях нельзя хранить на супервайзере без выхода в реальный мир? Вопрос №2. Анализ ПО виртуального командного блока показал его абсолютную незащищенность от несанкционированного использования. В случае возрождения банка это ПО планируется оставить без изменения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 Автор темы 1 704 Опубликовано: 12 марта, 2016 Спасибо за понятное объяснение! Ты на моей карте скринил а то что-то похожее? Нет,это я скринил в одиночке у себя Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 12 марта, 2016 (изменено) Вопрос №1. Зачем нужна Web-часть? Неужели информацию о сессиях и паролях нельзя хранить на супервайзере без выхода в реальный мир? Вопрос №2. Анализ ПО виртуального командного блока показал его абсолютную незащищенность от несанкционированного использования. В случае возрождения банка это ПО планируется оставить без изменения? 1) Веб часть была разработана исходя из того, что денежный баланс игрока привязан к его профилю на форуме/сервере, и может использоваться посторонними программами, самим форумом и лаунчером. 2) Согласен. Защиты не может быть мало. В данном случае защитой служит уникальная комбинация "адрес модема КБ / порт / формат сообщения" Не слишком надежно, но и не вдруг угадаешь. (Здесь еще работает тот фактор, что ПО банка было частично засекречено =)) Изменено 12 марта, 2016 пользователем Totoro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 Автор темы 1 704 Опубликовано: 12 марта, 2016 Вопрос №1. Зачем нужна Web-часть? Неужели информацию о сессиях и паролях нельзя хранить на супервайзере без выхода в реальный мир? Вопрос №2. Анализ ПО виртуального командного блока показал его абсолютную незащищенность от несанкционированного использования. В случае возрождения банка это ПО планируется оставить без изменения? Вопрос1: Целью статьи было воссоздание копии оригинала. Хранить сессии и пароли решили в базе т.к. все равно туда же обращаемся за балансом и прочим. Вебчасть также нужна для доступа к самой базе т.к. средствами ОС получить доступ к базе данных невозможно. Также изначально в базе хранился баланс,голоса и прочее,которые нет возможности писать допустим в ОС извне. В итоге и пришлось делать прослойку в виде вебчасти. Вопрос2: ответ почти такой же,изначальная цель была воссоздать,а т.к. я не знаю lua,то и переписать у меня возможности нет Отправлено с моего U9500 через Tapatalk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 Автор темы 1 704 Опубликовано: 12 марта, 2016 Судя по количеству лайков - гайд вам понравился Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
skritt 16 Опубликовано: 12 марта, 2016 Проблемы: 1) не работает перевод в банке 2) даже если не покупаешь энергию рлита пополняется пробовал менять положение эпвх тогда программа крашится 3) при надписи терминал временно не работает программу можно закрыть и лазить в компе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 Автор темы 1 704 Опубликовано: 12 марта, 2016 Проблемы: 1) не работает перевод в банке 2) даже если не покупаешь энергию рлита пополняется пробовал менять положение эпвх тогда программа крашится 3) при надписи терминал временно не работает программу можно закрыть и лазить в компе С энергией где-то что-то неправильно сделал т.к. все хорошо работало, когда строил тестовую версию в одиночке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
skritt 16 Опубликовано: 14 марта, 2016 (изменено) С энергией где-то что-то неправильно сделал т.к. все хорошо работало, когда строил тестовую версию в одиночке. Разобрался со всем решить бы перевод те у кого с энергией проблемы заходим в редактирование файла terminal.lua и там есть local ENERGYFASTSIDE = sides.right — сторона для сигнала на быстрый генератор local ENERGYSLOWSIDE = sides.left — сторона для сигнала на медленный генератор включаем f3 и смотрим на быстрый и медленный генератор (например там south а там west) идём на сайт http://ocdoc.cil.li/api:sides и по этим сторонам видим например west - right (пример) и там где sides.left вместо этого ставим sides.right надеюсь объяснил юзайте) Если помог поднимите репу не жадничайте! Напишите кто сможет помочь с переводом денег решить проблему желательно в скайпе или вк! skype: leonid300403 VK: https://vk.com/livshits2015 E-mail: zet60628@yandex.ru Изменено 14 марта, 2016 пользователем skritt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 14 марта, 2016 Хэй! Это "советное" пиратство! А где копирайт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 Автор темы 1 704 Опубликовано: 14 марта, 2016 Хэй! Это "советное" пиратство! А где копирайт? Это кому адресовано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 14 марта, 2016 Это кому адресовано? Скритту, кажется... Меня напрягает просто шрифт особый в его сообщении, будто копипастил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 14 марта, 2016 (изменено) Это кому адресовано? @skritt =) Изменено 14 марта, 2016 пользователем Totoro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
cyber01 Автор темы 1 704 Опубликовано: 14 марта, 2016 Меня напрягает просто шрифт особый в его сообщении, будто копипастил. похоже на копипасту с пасты Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 14 марта, 2016 http://content-watch.ru/text/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах