Русский
Русский
English
Статистика
Реклама

Mmorpg

MMORPG больше не в Telegram Swift и Kotlin Первый большой проект Часть 1

24.11.2020 16:19:42 | Автор: admin

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

Почему больше не в Telegram

После выпуска первой статьи, энтузиазма писать игру хватило еще на неделю. Прилетели проблемы по работе, поиски новой, да и вообще лето. Проект был отброшен на задний план. В процессе поиска будущего работодателя возникла мысль попробовать себя в разработчиках. Спустя несколько часов диалогов с разными ребятами из IT, выбор пал на iOS-разработку. Благо, на Udemy курсы уже куплены, поэтому из летнего режима переходим в режим разработчика на 1.5[OT1] недели.

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

Проводим несколько Cust Dev исследований, и упираемся в понятие красный океан, где сложно найти инвестиции. Если кому интересно, вот пара отрисованных скриншотов проекта, умершего в зародыше.

EventSurf - найди как провести времяEventSurf - найди как провести время

Чем же теперь заниматься? Ведь амбиции трушного разраба никуда не делись. Точно! Есть же детская мечта - написать "свою MMORPG". Да и какой-никакой код на питоне остался.

Стоп? А зачем писать в игру в телеграме? Я зря что ли курсы проходил по iOS? И тут аргументы начали приходить один за другим

  • Ограничение функционалом чатов

  • Прототип у меня неплохо получилось нарисовать (по своему собственному мнению). Значит, и игру смогу

  • MMORPG - это про айдентику игрока среди других. А это труднодостежимо с телегой

  • Визуал воспринимается проще, чем эконки emoji и одноцветный текст

Решено. Делаем iOS

Дизайн

Заходим в Figma. Новый файл. Стоп. Нужна также и айдентика игры.

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

Что следующим этапом? Верно, стартовый экран. На нем должен быть лого и должна быть картинка. Название игры пока не придумано. Берем за пример TBMMORPG (Text based MMORPG). Как сделать красиво? Создаем 2 одинаковых текста, темный подкладываем под светлым, у темного увеличиваем letter spacing.

Теперь нужна картинка. Открываем Aseprite (редактор пиксельных изображений). Час тыкаем кисточкой в пиксели. Закрываем Aseprite. Идем на сайт по продаже спрайтов. Сутки поиска подходящих сетов и 50$, и более 1800 айтемов и персонажей у нас в папке проекта. Выбираем яркого персонажа и загадочного персонажа, ставим в конфронтацию, кладем в лапу оружие, охапка дров и плов готов!

Готово окно входа. Теперь нужен и сам экран с логами.

Ищем бесплатный шрифт, который будет смотреться хорошо на кириллице и соответствовать сеттингу. В текст пихаем картиночки, чтобы не было скучно

Основные механики игры

Notion: выписываем все, что хотим реализовывать в первых версиях игры:

  • Классы: на начальном этапе будут Воин, Лучник, Убийца, Маг

  • Характеристики персонажей: скорость атаки, уклонение, крит

  • Автофарм - даже вне сети.

  • Player vs Mob - автоматический фарм. Выбираются типы мобов доступные в локации, сколько максимум мобов в локации, их HP и атака. Раз в пять секунд персонаж и моб обмениваются ударами. Atack speed накапливается и при скорости атаки 50%, каждый второй обмен ударами, игрок наносит два удара. Мобы бывают с одной звездой, с двумя и с тремя. Самый сложный - с тремя, но с него гораздо вкуснее лут. Но и его появления меньше. В локациях для более высоких уровней могут быть агрессивные мобы. То есть, независимо от того, каких мобов для сражения вы выбрали, агрессивный моб может напасть на вас, даже в момент, когда вы бьете другого моба. Тогда урон будет проходить по игроку от двух мобов.

  • Player vs Player - игрок может выбрать другого игрока в локации и нанести ему урон. Игрок, нанесший урон, приобретает статус PVP и для всех в локации отображается другим цветом. Если на такого игрока нападут, то выигравший получит плюс к счетчику убийств PVP. Если игрок наносит урон игроку, который не находится в статусе PVP и убивает его, игрок переходит в статус PK (Player killer). Если такого игрока убить, с высоким шансом из его инвентаря выпадет при смерти лут, который не привязан к игроку, и его смогут подобрать другие игроки.

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

  • Крафт - доступен крафт, из собираемых ресурсов, из лута падающего с мобов, из лута падающего с боссов в данжах, из лута падающего при разборе предметов.

  • Группа - на фарме, в PvP, в GvG, в данжи и на боссах можно сражаться в группе. Эффект группы дает бонусы к характеристикам персонажей.

  • Данжи - в данж можно зайти одному или группой. В данже - N комнат. В каждой комнате - M волн мобов, которые атакуют игроков. В конце каждой комнаты - мини-босс. Последняя комната с основным и самым вкусным боссом, с которого падают уникальные ресурсы, необходимые для крафта, для повышения уровня Клана и для изучения скилов Клана.

  • Заточка: максимальная заточка оружия +12, максимальная заточка вещей и бижутерии +10. Безопасная точка +3. Неудачная точка свыше +3 - сбрасывает заточку до +0. Есть усовершенствованные свитки, которые сбрасывают точку при неудачной только на -1.

  • Мировой босс: появляется в определенной локации раз в сутки. Могут упасть разные ништяки. Выпадает тому, кто нанес больше всего урона (персонаж или группа).

  • Арена - каждый день проводится арена в формате группового этапа. Победителям распределяются очки. Каждую неделю, персонажи набравшие большее количество очков участвуют в финалe, который проводится в режиме сетки. В воскресенье определяются победители, которые получают ништяки и возможность участвовать в Арене Героев, которая проводится раз в месяц в формате турнирной сетки. Ее победители получают уникальные шмотки/оружие, которые имеют преимущество в PvP по сравнению с другими носимыми предметами в игре, а также статус Героя, который выделяет персонажа в списке всех персонажей

  • Клан: основной смысл кланов на текущий момент - это клановые скилы, которые значительно увеличивают характеристики персонажей, находящихся в клане.

  • Клановые замки: 4 больших города - 4 замка в их окрестностях. И эти замки можно захватывать. Один или два раза в неделю. И наличие замка дает бонус к монеткам с мобов, сокращает время перехода между локациями, дает баф, а также расширение инвентаря.

  • Чаты с игроками, чаты с гильдией, аукцион, и другие моменты, которые еще не до конца продуманы.


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

Начинаем прогать все заново

Дизайн - есть, механики - есть. Нужен код.

Открываем Питонячий файл, написанный для телеги. Находим в нем WebHooks. Это нам вряд ли подходит - выбрасываем питонячий файл. Открываем PyCharm. Стоп! А как сервер писать для MMORPG?

Пару дней гуглим, находим не так много информации. Походу, MMORPG не написать копипастом из StackOverflow.

Обычные запросы нам не то, чтобы подходят. На сей раз нам помогает Reddit, где сообщают, что WebSockets отличное решение для мультиплеерных игр. Несмотря на то, что боёвка планируется по шагам (обмен ударами раз в N секунд), то PVP, GVG и другие механики требуют постоянного соединения. Поэтому выбираем Websockets и одноименный пакет для Python.

Теперь нужно получить connection к веб-сокету с клиента. Накидываем пару текстовых полей в интерфейсе. Добавляем либу. Конектим. Фейл. Еще раз - фейл. Вообще не стучится. Пробуем через браузер - стучится. Хрень какая-то. Поменяли настройки. Конектим - не стучится. Окей. Теперь время посмотреть в доку. This library for sockets connection. If you need websocket protocol you should use this library: Starscream.

Выучили урок. Теперь будем читать доку либы чуть дальше строки с ее названием.

Конектится. Погнали дальше, подключаем ORM SQLAlchemy. Как же это элементарно работает! Реализуем таблицы, классы, регистрацию, вход. Все работает как по маслу.

Ну и настало время придумать название для игры. Что ассоциируется у меня с классическими MMORPG? Perfect World, Lineage, World of warcraf. В двух из трех есть слово World. Окей, заимствуем. В чем концепт игры? В логах! Logger World

Начинаем прогать все заново

Что-то ноут тормозит и работать становится тяжеловато. Копируем папку Developer в Yandex Disk, ребутаем устройство. Reinstall OS.

Открываем Xcode, открываем Pycharm. Открываем прое.. А вы знали, что неделя работы и 95% написанного кода Pycharm сохраняет не в Developer, а в свою директорию. Ну вот! А я не знал. И не посмотрел.

Окей. Повторенье - мать ученья. Только в этот раз - не на питоне. Что у нас есть из интересного? Swift на back! Но я не IBM - мне страшно. Java, NodeJS, C#

А что там с Kotlin? Вроде как он мультиплатформенный. Запускается там, где есть JVM. На нем можно будет написать и Android клиент. А еще можно использовать Kotlin Multiplatform Mobile, чтобы объединить кодовую базу iOS и Android приложения. И там только интерфейсные истории останется написать. Звучит easy. Как раз мой внутренний недождун устал от рутинных проектов по 50 штук в день, и подавай ему что-то эдакое.

Заходим в телегу, спрашиваем: "Есть ORM и Websockets либы для Kotlin, хватит ли этого на проект?". После краткого интродакшена игры нам подтверждают, что все гуд и Kotlin потянет (а вот ты нет!). Не зря Google пляшет вокруг Kotlin. И пару часов спустя нам пишет и предлагает поучаствовать в проекте AahzBrut. Он уже писал игры на котлин, да и явно кто-то с опытом back-end разработки, лучше, чем кто-то без опыта back-end разработки. Просим AahzBrut настроить проект, чтобы мы вдвоем могли писать код на разные части проекта. И получаем через пару часов файлик с описанием: Services, DTO, Entity, POJO, Reposintories. Уходим гуглить. Окей, AahzBrut, очень интересно, но якори нам на back-end точно не нужны. С этого момента AahzBrut у нас за серверную часть, а я за клиентскую.

Хороший старт

Ну по крайней мере на back-end у нас хороший старт

На текущий момент, у нас реализовано:

  • Примерный визуал игры (как должна выглядеть)

  • Экраны регистрации, логина, выбора персонажа, создания персонажа, прототип самого экрана с логами, ну и конечно иконка приложения

  • Back-end: aутентификация, регистрация, Websockets STOMP, созданы локации, персонажи, персонажи бегают по локациям, оповещения об изменении количества игроков в локациях, и еще много разных и интересных штук, которые я бы понял, но не понял :(

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

Чао!

Подробнее..

MMORPG прошлого века как мы создали первый Киевский игровой сервер

09.05.2021 10:20:54 | Автор: admin

Давным давно на далеком сервере...

Вторая половина девяностых. В СНГ интернет как таковой еще только начинает развиваться. Коммерческих сайтов практически нет (а если и есть, то исключительно айтишной тематики). Web еще не стал тем местом, где пользователи проводят основную часть времени. Доминирующая технология последней мили - dial-up, на котором в основном читают почту и сидят в ICQ. Но энтузиасты айтишники уже пользуются и ньюсами и IRC и несколькими другими сервисами. И конечно играют в сетевые игры!

Doom, в который можно было поиграть вдвоем по модему или вчетвером в локальной сети уже смещен с позиции самой популярной сетевой игры. Сейчас поднимают пиратские батлнет сервера на PVPGN - там можно сразиться в Starcraft и Diablo уже в компании до 4-8 игроков (чем больше игроков, тем больше вероятность лагов). В шутерах доминирует Quake и Quake2 - в игре одновременно может быть уже десяток игроков, и уже не зависеть от чужих лагов (ибо UDP).

Кто-бы мог подумать, что примерно всего через десять лет появятся игры, в которые может одновременно играть сотня или тысяча игроков, и даже больше!

Но что это только что было?
Неужели такие игры уже есть?
Да, уже есть! А если взять англоязычный мир, так уже давным-давно!

Рождение FD

В 1998 году официально запускается первый Киевский MUD (Multi User Dungeon/Dimension) сервер "Forgotten Dungeon".
Для него по шапочному знакомству выделили немного места на одном из FreeBSD-серверов в общежитии Киевского Политехнического института.

Это не первый русскоязычный MUD сервер, но один из них.
Московский "Мир Мерлина" был запущен примерно на год раньше.
А вот с другими серверами в СНГ старшинство уже можно и оспорить (привет, Zmey и ко.!).

Благодаря большой локальной сети общежитий КПИ, раскинутой на витой паре, коаксиале и честном слове, сервер быстро заполняется игроками.
В активные дни количество игроков находящихся в мире превышает 100, то и 150, что по тем меркам весьма немало!
Такой онлайн позволяет не просто побегать по миру в компании практически в любое время суток, но и наладить дипломатические отношения между кланами и даже альянсами.

Внешний канал для института был проблемой - интернет в то время был медленным и дорогим, поэтому были периоды, когда игровой сервер не был доступен снаружи.
Но по договоренности с ректоратом, для "Forgotten Dungeon" в конечном счете все-таки сделали исключение, как для общественно-полезного проекта.
Снаружи он был известен по адресу mud.ntu-kpi.kiev.ua:4000 до конца своей активной жизни (2005-2007).
Хотя, честно говоря, внешние игроки составляли не более 10% основного онлайна.

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

Такая тесная и регулярная связь и общий энтузиазм вдохновляли на множество безумных идей, и "Forgotten Dungeon" очень быстро обрастал сложной боевой/магической механикой и уникальными фичами.

Конечно, по современным меркам, все разработчики в основном не дотягивали даже до джуниоров - обычные студенты, из которых не все отличали компилятор от линкера.
Мы просто писали код с горящими глазами.
Сервер падал - его поднимали и писали скрипты с автоматическим рестартом.
Сервер ломался - его чинили и писали новые фичи с новыми ошибками, которые снова чинили.
Иногда появлялись игроки и "мимокрокодилы" с факультетов информатики, которые могли написать немного больше, чем "hello world". Они делали свой вклад и пропадали.

Однако, несмотря на полное отсутствие коммерческого опыта разработки, мы были открыты к любой полезной информации.
В какой-то момент, узнав про существование систем контроля версий, я перевел все на CVS с коммитами и странной системой версионирования.
Еще не было Jenkins/Teamcity, не было gitlab/gerrit и других привычных CI инструментов, но у нас при коммите новых изменений уже триггерилась сборка новой версии с отправкой логов. А админ, не выходя из игры мог командой перезагрузить игровой сервер с обновлением на новую версию, что позволяло разграничить права доступа, давая возможность вносить изменения в код, но не давая доступ к полной админке.
На каждое падение сервера, автоматически генерировался отчет с отладочной информацией (dbg стектрейс) и уходил на почту.
Для тех времен, это было очень круто!
За почти 10 лет существования сервера, вклад в разработку внесло несколько десятков человек. Без контроля версий, и этих на коленке сделанных скриптов, наверное не получилось бы и половины вещей довести до ума.

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

Технические данные

За базу был взят один из отделившихся от DikuMud движок, а именно ROM 2.4b4a - довольно популярная кодовая база на то время.
К сожалению, сам репозиторий со всей историей коммитов не удалось сохранить (это современные системы типа git хранят всю историю локально, а более старые CVS только на сервере).
Но сохранилась последняя версия исходного кода.
При помощи Google и stackoverflow я смог довести код до состояния, когда он собирается и запускается на современном Линуксе.
В коде есть текстовый файл, где вручную писали комментарии на жуткой смеси русского(нецензурного)/английского, но посторонним его читать не рекомендуется.

Еще до запуска сервера в институте, он стоял у меня на рабочем сервере, я игрался с ним в одиночку (зарегистрировались несколько знакомых, которые заходили в основном потестить какие-то фичи). Но раскручивать я его не собирался, ибо не был готов хостить полноценный сервер на работе, так что я и КПИ нашли друг друга (:
Добавил поддержку кодировок (koi-8, cp-866, win1251 и транслитерацию), добавил поддержку контрольных символов для ANSI colors, поправил какие-то ошибки.
И даже придумал и реализовал систему простых автоматических квестов.
Но эти вещи можно найти практически в каждом MUD, а я хочу поделиться некоторыми уникальными инсайдами или просто забавными моментами.

Делаем простые вещи

Если говорить о базовых элементах программирования - например на практике понять разницу между знанием синтаксиса if/then/else и умением им пользоваться хорошо, то игровые механики в таких простеньких консольных или браузерных играх это просто превосходный вариант для начинающих! Ведь для того, чтобы увидеть результат нового супер-пупер заклинания, тебе не нужен гейм-дизайнер, художник, музыкант и кто-то еще. Многие вещи делаются простыми командами.

Например: научился проверять значение переменной, и создал новую переменную, статус "friendly fire". Добавляем немного условий - и код готов. А с точки зрения игрока - полностью меняется боевая составляющая, потому что теперь можно сражаться команда на команду или клан на клан или стая однотипных монстров против игроков, пользуясь массовыми заклинаниями и не вредя своим "друзьям".

Можно сделать переменную "Статус зрителя", и создать арену для дуэлей, на которой могут находиться зрители в полной безопасности. Еще немного переменных - и можно уже делать ставки на победителя, и вот уже "просто посмотреть за чужой дуэлью" превращается в азартное зрелище вроде "арены гладиаторов" с букмекером! А учитывая что игра текстовая - все зрители могут смотреть, так сказать, с лучшего места в первом ряду ;)

Пробуем что-нибудь посложнее

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

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

Уникальные локации

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

Воспоминания про армию

Однажды мы придумали армию.
Натуральную.
По достижению 18 уровня, все вещи у игрока забираются, и его переносит в закрытую локацию.
В этой локации он даже пообщаться с другими игроками не может, за исключением тех, кто уже в "армии". Из внешнего мира можно было прийти в специальную "комнату переговоров", в котором можно было пообщаться и даже передать предметы (только с типом "вода" или "еда").
Без поддержки друзей, клана и хороших предметов, нужно было выжить три уровня с высокоуровневыми агрессивными монстрами (сержанты, солдаты, прапорщики..), пока на 21 уровне товарищ Майор не отправлял тебя назад в общий мир. Иногда даже игроки из враждующих кланов объединялись в армии =)
Но за смерть в армии не штрафовали, поэтому рано или поздно армию проходили все.
Казалось бы - ну придумали и придумали.
Но Армия оказала заметное социальное воздействие.

Небольшое отступление: в середине 90х во многих MUD у игроков вообще могла отсутствовать возможность сражаться друг с другом, так как многие MUD создавались как социальные игровые "чаты" с ролевой составляющей в стиле DnD (или другой тематикой). На ресурсах со списком серверов, даже отдельно указывалась поддержка PK (Player Killing) в описании сервера.

Смерть персонажа в игре воспринималась неприятно - потеря опыта, потеря предметов, и в отличие от уже одиночных RPG, нельзя было сохраниться.
Но Армия в нашем MUD "сделала из тварей дрожащих львов и тигров".
После армии, страх перед смертью заметно падал, отношение к игровому персонажу менялось.
Я слышал пару историй, когда игроки из нашего мира уходили в другие миры и наводили там шороху.
Даже верю, что это могло оказать какое-то влияние и в реале. Ну собственно для кого-то это так и было.
Конечно с армией тоже было связано много багов, которыми пользовались любители халявы, но мы это дело находили и прекращали:

Сотни мелочей

Введено много уникальных рас, с действительно заметными отличиями. Сейчас в MMORPG это уже норма, а тогда и рас было мало, и в базовом движке их отличие было в основном в небольшом разбросе изначальных параметров - силы, ловкости и так далее.
У нас вводились заметные изменения.
Раса Вампиров, которые заметно прибавляли в силе по ночам и вынуждали игроков следить за сменой дня и ночи в игре.
Банальные вещи - Ящеры умеют плавать. Пикси - летать. Этериалы - проходить сквозь двери и сопротивляться режущему оружию. Зомби могут не есть и не дышать. У Кентавров четыре ноги, поэтому удар двумя копытами вполне заменял серьезное оружие.
Гномы могут перековывать предметы, улучшая их при помощи специальных артефактных компонентов (да, у нас гномы-игроки уже были прародителями современных крафтеров).
В общем сотни мелочей, которые в сумме значительно влияли на то, как следует одевать/вооружать/прокачивать и отыгрывать своего персонажа в зависимости от расы.

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

Админы и игроки творят вместе

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

У нас были "отношений", включая секс, свадьбы, разводы и даже возможность получить статус "родственника". Да, следует ставить рейтинг 18+.

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

Внутренняя кухня

Некоторые решения были довольно странные по архитектуре. Например, никто из нас не умел работать с базами данных и не особо разбирались в том, насколько это удобно. Честно говоря, в то время из известных баз были Foxpro и MS Access. MySql еще не был известен. А Oracle какой-то версии 5-6 был жутко тяжелым и решения на его базе только начинали продаваться далеко в Москве.
В большинстве MUD движков данные игроков хранились в файлах. Проблемным моментом в этом было то, что сохранение файла игрока обычно происходило во время его выхода из игры, и практически все сервера были подвержены ошибке с дублированием предметов.
Рецепт примерно такой: Ты узнаешь любой баг в игре, который приводит к падению сервера (это встречалось частенько и в разных мадах).

Инструкция: в игру заходят два игрока, у одного есть "вкусный" предмет.
Он отдает его второму. Второй выходит из игры (его профайл сохраняется уже с предметом).
Первый игрок крашит сервер (или дожидается такого краша), и его инвентарь не успевает сохраниться в файл.
После рестарта сервера - оба заходят - и каждый с предметом.

Мое ужасное но рабочее решение было в лоб - если игрок производил любые манипуляции с предметами, на него вешался флаг "сохранить".
При сохранении какого-либо игрока, сохранялись все игроки с таким флагом одновременно.
При онлайне 100-200 игроков вопрос производительности не стоял, файлы игроков занимали в среднем 3-4 килобайта.
Решение сработало отлично, и duplicate bug в нашем мире исчез (главное чтобы не крашилась сама процедура сохранения).

Можно было просто почитать документацию о fopen/fwrite, и вот - добавлены административные команды для работы с оффлайн игроками.
Администраторам игры было полезно уметь забанить, разбанить, проверить информацию по игрокам, которые сейчас оффлайн, без доступа к консоли сервера.

Работаем с текстом

Переводя фразы изначального движка и создавая новые, текст для действий старались строить таким образом, чтобы он звучал корректно вне зависимости от пола игрока.
Например: "Ты уже благословил Aelita" - звучит неблагозвучно, если заклинание колдует девушка.
Нейтральная фраза выглядит как: "Aelita уже под божественным благословлением".

Но затем была придумана и реализована система работы с полом.
В коде это выглядело как: "Ты уже благословил$a Aelita", (ch->sex)
Нужное подбиралось из массива ["","а","о"] для он, она, оно.
Или с использованием готовой функции: act_new("Задание перв$b выполнил$r $n!",ch,NULL,NULL,TO_ALL,POS_DEAD);

Чуть позже, по той же схеме добавили обработку падежей.
Для этого в описании персонажей (в основном для NPC) нужно было руками прописать склонения: "волшебн|ый|ого|ому|ого|ым|ом дракош|а|и|е|у|ей|е".

В тексте фразы указывалась нужная форма:
act("$c1 выдыхает облако кислоты в $C4.",ch,NULL,victim,TO_NOTVICT);
Функция проверяла есть ли для данного персонажа набор падежей, если нет - просто брала инфинитив.

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

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

Зарубежом

История зарубежных англоязычных МАДов гораздо более долгая. Она начинается чуть ли сразу с появления первых сетей - второй половины семидесятых. Общее количество игроков и онлайн на отдельно взятом крупном сервере могло посоревноваться с общим онлайном всех серверов в СНГ вместе взятых.

Например Arctic MUD, который появился еще в 1992 году, к концу девяностых мог похвастать онлайном свыше 1000 человек, доходя в пиковое время почти до двух тысяч. Многие англоязычные MUD могли позволить себе монетизирование, которое в то время в СНГ было бы непонятым и попросту невозможным. Также для игры в MUD, точнее комфортной игры, желательный уровень английского языка заметно выше чем elementary. Это также было довольно серьезным барьером для желающих поиграть.
Вполне возможно что за рубежом было придумано и воплощено много разных интересных вещей, и многие из наших нововведений могли оказаться вторичными.

Пик MUD серверов в рунете пришелся на тот небольшой промежуток времени, когда сама идея многопользовательских текстовых игр была уже неплохо проработана. Существовало несколько готовых движков с разным подходом к основной механике: level-based (dikumud, ROM, Merc and many other), когда персонаж получает уровни и от уровня уже получает навыки, заклинания и улучшения параметров (elf 80-го левелу), или skill-based (Avalon, Clok, DartMUD), когда уровня нет вообще, или он ни на что не влияет, а значение имеет только уровень владения различными навыками и заклинаниями (владение двуручным мечом 12 уровня).

Но уже всего через несколько лет на хвост начали наступать первые "графические МАДы", как их называли вначале - Ultima Online, Everquest. А затем подтянулись уже и более современные MMORPG - Lineage/Aion/WOW и другие. Поэтому отечественные мады, ярко вспыхнув, горели не слишком долго - около десяти лет (примерно с 1997 по 2005-2007), вытесненные более современными играми.

Я потратил примерно одинаковое количество времени на администрирование "Forgotten Dungeon" и шарда Lineage2, и могу сказать, что с точки зрения игровой механики, МАД конечно гораздо глубже, шире, и предоставляет больше возможностей и свободы для игроков.

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

Но удобство и простота управления, привлекательность и конечно визуальная составляющая - конечно на стороне графических игр.

Я подсчитал, что в "Forgotten Dungeon" есть примерно 350 команд, которые можно ввести (правда часть из них административные, часть эмоции), около 120 заклинания и примерно 50 навыков (активных и пассивных). Гайдов и форумов практически не было в силу неразвитости веб, есть только довольно обширная но запутанная внутренняя справка. Примерно месяц занимало просто чтобы игрок стал чувствовать себя в игре уверенно и ориентироваться в мире.
А для большинства графических игр - месяц это зачастую если и не ветеран, то уже довольно опытный игрок.

На текущий момент (2021 год) еще можно найти несколько живых серверов в СНГ (http://www.mudconnector.su/MudList), но это лишь тень минулого и зачастую они пустуют.
А вот среди англоязычных серверов можно найти десяток серверов, с онлайном в 500-800 игроков.

Стоит отметить, что MUD - это практически единственный вариант интересной многопользовательской сетевой игры для слепых игроков, поскольку текстовая игра очень легко адаптируется при помощи синтезатора речи. Существуют целые кланы таких игроков. Да и поддержать таких игроков, добавив несколько опций по запросу для удобства - это действительно требует очень немного затрат со стороны разработчиков.

Конец истории

Я уверен, что наши восторженные "открытия" тех времен сейчас вряд ли кого-то удивят.
Подход к разработке заметно изменился. Количество готовых наработанных решений за 20 лет можно найти практически на любой случай. Паттерны, структуры данных (словари, двухсторонние списки с уже готовыми методами работы) и множество других вещей - уже встроено в язык.
Но эта статья - кусочек реальной истории одного из первых виртуальных миров Украины и рунета.

Исходники "Forgotten Dungeon" доступны на https://github.com/sfkulyk/fdungeon
Кстати, выложить код в github (правда без некоторых последних правок), я успел еще до https://archiveprogram.github.com/, поэтому можно надеятся, что исходники FD переживут всех нас ;)

Сам игровой мир (пусть и пустой) живет по адресу mud.saboteur.com.ua:4000, чисто из чувства ностальгии. Много он не просит, а вдруг кто зайдет пустить слезу по временам, когда трава была зеленее.

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

Буду благодарен, если при этом вы сохраните в текстах наши юные смешные имена..

Спасибо всем, кто дочитал до конца.

Подробнее..

Перевод Как в Runescape ловят пользователей ботов, и почему они не поймали меня

19.04.2021 18:14:05 | Автор: admin

Автоматизация игроков всегда была большой проблемой в глобальных многопользовательских онлайновых ролевых играх (MMORPG), таких как World of Warcraft и Runescape, и этот вид взлома игр значительно отличается от традиционных читов, например в стрелялках. Однажды в выходные я решил взглянуть на системы обнаружения, созданные компанией Jagex для предотвращения автоматизации игроков в Runescape и вот что из этого вышло.


Использование ботов

Последние несколько месяцев игрок с учётной записью sch0u играл в World 67 круглосуточно, выполняя обычные задачи, такие как убийство мобов или сбор ресурсов. На первый взгляд игрок с этой учётной записью выглядит так же, как и любой другой игрок, но есть одно ключевое отличие это бот.

Я запустил этого бота ещё в октябре, чтобы протестировать возможности системы обнаружения ботов. Я попытался найти в Интернете информацию о том, как компания Jagex борется с создателями таких ботов, и нашёл только видео коммерческих ботов, создатели которых хвастались тем, что их системы перемещения мыши неотличимы от людей.

Поэтому единственный вывод, который мне удалось сделать, заключается в том, что движение мыши имеет значение.

Эвристика!

Я начал с анализа клиента Runescape, чтобы подтвердить эту теорию, и быстро заметил глобально вызываемую переменную hhk, которая задаётся вскоре после запуска.

const auto module_handle = GetModuleHandleA(0);hhk = SetWindowsHookExA(WH_MOUSE_LL, rs::mouse_hook_handler, module_handle, 0);

В результате на мышь устанавливается низкоуровневая hook-точка, добавляя её к общесистемной цепочке hook-точек. Это позволяет приложениям в Windows перехватывать все события мыши, независимо от того, связаны они с вашим приложением или нет. Низкоуровневые hook-точки часто используются клавиатурными шпионами, однако есть и законные случаи использования, такие как эвристика, подобная вышеупомянутой hook-точке мыши.

Обработчик мыши Runescape довольно прост по своей сути (следующий псевдокод красиво переписан вручную):

LRESULT __fastcall rs::mouse_hook_handler(int code, WPARAM wParam, LPARAM lParam){  if ( rs::client::singleton )  {      // Call the internal logging handler      rs::mouse_hook_handler_internal(rs::client::singleton->window_ctx, wParam, lParam);  }  // Pass the information to the next hook on the system  return CallNextHookEx(hhk, code, wParam, lParam);}void __fastcall rs::mouse_hook_handler_internal(rs::window_ctx *window_ctx, __int64 wparam, _DWORD *lparam){  // If the mouse event happens outside of the Runescape window, don't log it.  if (!window_ctx->event_inside_of_window(lparam))  {    return;  }  switch (wparam)  {    case WM_MOUSEMOVE:      rs::heuristics::log_movement(lparam);      break;case WM_LBUTTONDOWN:case WM_LBUTTONDBLCLK:case WM_RBUTTONDOWN:case WM_RBUTTONDBLCLK:case WM_MBUTTONDOWN:case WM_MBUTTONDBLCLK:  rs::heuristics::log_button(lparam);  break;  }}

С учётом пропускной способности эти функции rs::heuristics::log_* используют простые алгоритмы для пропуска данных событий, которые похожи на предыдущие зарегистрированные события.

Эти данные события позже анализируются функцией rs::heuristics::process, которая вызывается каждым фреймом в основном цикле рендеринга.

void __fastcall rs::heuristics::process(rs::heuristic_engine *heuristic_engine){  // Don't process any data if the player is not in a world  auto client = heuristic_engine->client;  if (client->state != STATE_IN_GAME)  {    return;  }  // Make sure the connection object is properly initialised  auto connection = client->network->connection;  if (!connection || connection->server->mode != SERVER_INITIALISED)  {    return;  }  // The following functions parse and pack the event data, and is later sent  // by a different component related to networking that has a queue system for  // packets.  // Process data gathered by internal handlers  rs::heuristics::process_source(&heuristic_engine->event_client_source);  // Process data gathered by the low level mouse hook  rs::heuristics::process_source(&heuristic_engine->event_hook_source);}

Вдали от клавиатуры?

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

Запретив игре вызывать функцию rs::heuristics::process, я сразу ничего не заметил, но ровно через пять минут вышел из игры. По-видимому, Runescape принимает решение о неактивности игрока просто по эвристическим данным, отправленным клиентом на сервер, хотя вы можете просто отлично играть в эту игру. Это породило новый вопрос: если сервер не считает, что я играю, то считает ли он, что я использую бота?

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

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

Уязвимостей полно не только в играх, а с ростом цифровизации различных отраслей, многие недостатки безопасности вышли наружу и требуют серьезного внимания, а значит, растёт востребованность специалистов в сфере информационной безопасности, для обучения которых мы сделали специальный курс Этичный хакер. Если вам по душе искать пробелы в защите и получать за это вознаграждение добро пожаловать.Узнай, как прокачаться и в других областях работы с данными или освоить их с нуля:

Другие профессии и курсы

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы
Подробнее..

Перевод Как создавать игры для тех, кто не хочет играть по правилам

04.08.2020 10:19:03 | Автор: admin
Чувствуете ли вы азарт, когда обнаруживаете в игре сбой? Когда, наконец, попадаете в скрытую область на карте, не предназначенную для игроков? Которая была заблокирована кажущимися непроходимыми горами и невидимыми стенами? Если ваш ответ да, поздравляем, вы исследователь.

Как исследователя, меня всегда восхищало то, что скрыто от глаз в играх, в которые я играю. До сих пор хорошо помню, как в первый раз попала под Штормград в World of Warcraft. Добраться туда нетрудно, и я, конечно, не была первой. Но когда я спустилась вниз под шумный город, мой восторг было не передать. Прямо надо мной стояли сотни людей: все куда-то спешили, продавали вещи на аукционе или болтали с друзьями, и я была как бы не с ними, но все еще там. С тех пор я всегда искала в играх что-то подобное. Мне все время хочется заглянуть за дым и зеркала и увидеть игру такой, какая она на самом деле. Это привело меня к размышлению о том, как разработчики создают игры для таких людей, как я, исследователей.

image


Кто же такие исследователи?


Если вы опросите тысячу поклонников The Elder Scrolls, что им больше всего нравится в игре, вы получите множество разных ответов. Однако это не будет тысячей разных ответов. Возможно, нам хотелось бы верить, что наши мотивы уникальны, но в действительности они часто следуют определенным схемам и могут быть определены по категориям. Так, в своем исследовании 1996 года Ричард Бартл поделил игроков на четыре психотипа: исследователей, карьеристов, коммуникаторов и киллеров.

Карьеристы (Achievers) традиционный тип игроков, стремящихся достигнуть определенных в игре целей: пройти игру до конца, прокачать персонажа, накопить богатство, побить рекорд или заработать награду.

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

Коммуникаторы (Socializers) любят общаться с другими игроками. Как правило, такие игроки преуспевают в роли лидеров гильдий, кланов или групп и наиболее эффективно проявляют себя при взаимодействии с другими игроками. Коммуникаторы наиболее комфортно чувствуют себя в мультиплеерных играх, где командная работа является ключевым элементом геймплея.

Исследователи (Explorers) мотивированы желанием открывать для себя новые вещи. Они любят открывать новые или скрытые области, обнаруживать сбои в игре или использовать творческие игровые механики. Им также по душе находить в играх спрятанные пасхалки.

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




Как игры наказывают исследователей


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

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


Скрытые области


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

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

  • Игрок получает доступ к разрушающим качественный игровой опыт предметам и использует их. Мы могли это наблюдать в 2019 году, когда Bethesda заблокировала аккаунты игроков, получивших доступ в комнату разработчиков Fallout 76, где хранятся абсолютно все игровые предметы, включая броню и оружие.
  • Игрок получил доступ к чему-либо вразрез Пользовательскому соглашению (Terms of Service (ToS)). Обычно это значит, что игрок использовал некий чит-код например, удаляющий невидимые стены, ускоряющий героя или позволяющий ему летать там, где он хочет.
  • Доступ к скрытой области дает игроку явное преимущество над остальными. Такое часто встречается в шутерах от первого лица, где игроки могут попытаться проникнуть в скрытую область карты, откуда удобно убивать ничего не подозревающих противников.

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


Та самая комната разработчиков


Необычное использование игровых механик


Создатель YouTube-канала Archvaldors Warcraft Hacks недавно опубликовал видео под названием Как меня забанили за БОТОВ при отсутствии ботов. В этом видео он объясняет, как его забанили в World of Warcraft по запрету Activision-Blizzard. Этот запрет должен был решить проблему ботов, которая всегда преследовала игру. Единственная проблема заключалась в том, что Арчвальдор не использовал никаких ботов.

Как он думает, кто-то пожаловался на него, как на бота, потому что он пытался получить доступ к области, заблокированной воротами. Чтобы добиться своей цели, он бежал к воротам и пытался применить на них ряд различных способностей, чтобы посмотреть, сработает ли что-то из этого. Гейм-мастер (сотрудник Blizzard, которому поручено решать внутриигровые проблемы) уделил проблеме буквально несколько секунд, а затем исчез. Впоследствии он игнорировал все попытки Арчвальдора выйти на диалог, а спустя три недели тот оказался забанен на полгода без права обжалования после попытки подняться по местности в другой области игры.

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

Это не первый раз, когда Activision подвергается критике за чрезмерный бан. Они также получали негативную реакцию за то, что банили игроков на 10 лет в Call of Duty Mobile буквально ни за что. Похоже, что в попытке сделать игры честными для игроков античит-программы предпочитают избавляться от исследователей наряду с ботами. И если для того, чтобы избавиться от ботов, нужно перебанить и всех исследователей что ж, пусть будет так.


Что исследователи привносят в игры


Итак, исследователей часто наказывают за то, что они делают, но почему это так важно? Могут ли игры позволить себе их потерю? Нет, нет и еще раз нет. Считается, что исследователи в среднем составляют 10% от базы игроков.

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


Как создавать игры для исследователей


Если исследователи являются законной частью игрового сообщества, которое разработчики не могут игнорировать, то как создавать игры, которые будут интересны для них? И как при этом сохранить целостность игры?


The Legend of Zelda: Breath of the Wild всегда поощряла игроков исследовать свой мир


Поддержка творческого использования игровых механик


Во-первых, разработчики игр должны расширить понятие того, как следует играть в их игры. В последние годы некоторые MMORPG обвинялись в том, что они стали MMO в духе тематических парков. Это означает, что все игроки движутся по одному и тому же игровому сценарию. Свобода игрока уже не столь важна на первый план выходит сюжетно-ориентированная составляющая игрового процесса. Так устроено большинство однопользовательских линейных игр, и этот подход показывает себя очень эффективно. Игроки The Last of Us не жалуются, что не могут исследовать открытый мир. Зачем им это? Они купили игру ради захватывающей истории и развития характеров героев. Но MMO совсем другой жанр, где исследование открытого мира и свобода игроков являются ключевыми понятиями.

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


Сложность


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


Пасхальные яйца


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

Вот пара примеров таких пасхалок:

  • В Doom 2 есть секретная концовка, открывающаяся в случае, если игрок выстрелит боссу в лицо и затем пройдет по нему. В этом случае вы увидите голову геймдизайнера игры Джона Ромеро, насаженную на кол.
  • Если в Saints Row 2 вы отправитесь на скрытый прибрежный остров и побродите по его побережью, но увидите огромного фиолетового кролика, поднимающегося из глубин океана.




Удаляйте контент только в случае необходимости


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

Idewavecore. Ретроспектива

03.03.2021 00:13:52 | Автор: admin

Очень круто - запрограммировать механизм или программный модуль, заставив его выполнять твою волю. С похожими мыслями в конце 2018 я размышлял о том, что хочу сделать собственный WoW-сервер, который будет полностью мной управляем. Поизучав С++ исходники MANGOS, я пришел к выводу, что не смогу вот так взять и реализовать все свои идеи, не понимая, как же работает MMO RPG сервер от начала и до конца. И для этой цели я решил реализовать свой движок. С нуля.


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

Если вкратце, то Login Server (как и аутентификация в клиенте WoW) построены на использовании алгоритма SRP. Описание алгоритма выходит за пределы статьи, но если вкратце, то он позволяет идентифицировать пользователя без передачи пароля на сервер, благодаря чему пароль (даже в закэшированном виде) можно не хранить на сервере. Даже желательно.

Алгоритм шифрования же World сервера скорее всего отличается от клиента к клиенту (я сделал такой вывод при беглом изучении исходников сервера WoW 3.3.5a). В статье речь пойдет о сервере для WoW 2.4.3 (именно для этой версии я писал сервер). Там используется что-то вроде шифра Цезаря. Хотя чаще (в исходниках) можно встретить название HeaderCrypt или Wowcrypt.

В версии 2.4.3 шифруются первые несколько байт каждого пакета на World сервере (кроме первого пакета). Для расшифровки (decrypt) используются первые 6 байт: 2 байта - размер пакета + 4 байта - opcode (специальный код, по которому можно определить хэндлер(ы), что будет с этим пакетом работать). И для зашифровки (encrypt) используются первые 4 байта (только opcode). Соответственно, если перехватить пакет (sniff), то не получится определить, на какой опкод он будет отправлен. А если пакет большой, то он может быть разбит на несколько и чтобы их правильно достать из буфера - нужны эти самые первые 2 байта (размер пакета).

Процесс входа на сервер вкратце можно описать так:

Клиент последовательно обменивается данными с Login сервером и в случае успеха получает SRP токен (session key), который затем будет использован для создания токена шифрования/расшифровки пакетов (crypto key). Токен создается на этапе "send auth request" (см. схему выше). После чего на клиент отправляется auth response, суть которого - показать, что операция прошла успешно. Auth response - единственный незашифрованный пакет, последующие пакеты будут шифроваться с помощью crypto key. По поводу шифра - у меня он реализован так.

Процесс взаимодействия с World сервером простой - клиент отправляет зашифрованный пакет, на сервере он кладется в буфер, расшифровываются первые несколько байт (о чем я писал выше), получаем размер (size) и опкод (opcode) и если количество байт в буфере >= size, то мы получаем список необходимых хэндлеров (их может быть несколько) по заданному опкоду и передаем им size байт из буфера. Либо ожидаем получения остальных байт. Отдельного внимания заслуживает Update Packet. Он отличается от остальных пакетов более сложной структурой.

Расшифровывать нужно каждый пакет. Если какой-то пакет пропущен, то следующий (согласно алгоритму) будет расшифрован неправильно. На эти грабли я наступал с особой старательностью.

В чем суть моего сервера

Во-первых, я его писал на Python 3 (asyncio + SQLAlchemy). Точнее, на момент создания я еще не имел опыта с SQLAlchemy - я его обрел после, когда решил, что существующая у меня реализация работы с БД - ужасна во всех ее проявлениях (а еще попутно решил изучить новую технологию). И очередной раз переписал проект с нуля.

Во-вторых, подход к обработке данных тоже несколько отличался. Я предпочел отказаться от идеи глобального хранилища всех объектов (где каждый объект содержит также методы работы с ним) и создать специальные мэнеджеры (manager), для того, чтобы работать с каждым отдельным типом объектов: Item, Player, Unit и т.д. Т.е. если я хочу выполнить действие над Player, я использую PlayerManager, который выполняет нужное действие и удаляется из памяти. В первую очередь это сделано в угоду читабельности. К примеру, аналогичный класс в MANGOS лично для меня кажется громоздким (как и C++, несмотря на множество его преимуществ). Каждый отдельный класс объекта - это SQLAlchemy модель и он же - структура данных, хранящая текущее состояние. Таким образом, я использую такие объекты не только для взаимодействия с БД, но и для обмена структурированными данными между частями приложения.

В-третьих, я использую специальные классы - handler - совокупность которых я использую для обработки отдельно взятого опкода. Каждый хэндлер должен выполнять одну типовую задачу. И (опционально) он может вернуть респонс (опкод + данные - структура аналогична запросу), который затем будет отправлен клиенту.

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

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

Что дальше

В процессе разработки сервера у меня возникла идея создания MMO RPG шаблонизатора, который предоставит формат описания игровых серверов (например, связка Login + World сервер, или шард-ориентированная архитектура, где каждая локация - отдельный сервер и т.д.), а так же серверов, имеющих отношение к игровым косвенно (например, web сервер, где будет сайт и форум). Именно для этого я создал фреймворк (но не совсем внятно описал его в своей предыдущей статье). И сейчас сервер переписываю на базе этого фреймворка.

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

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

Подробнее..

Ты не задрот ты учишь английский! Или как MMORPG прокачивает знание языка

20.04.2021 18:08:31 | Автор: admin

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

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

MMORPG обучает английскому лучше, чем уроки в школе

В 2010 году ученые из университета в Чхунчхоне, входящего в топ-5 лучших вузов Кореи, провели масштабное исследование, как онлайн-игры влияют на изучение иностранного языка. На примере учеников младшей школы они проверили гипотезу, что MMORPG помогают изучать английский.

Ознакомиться с полным исследованием можно здесь.

Онлайн-игры перспективная среда для развития социальных навыков и изучения нового. И вот почему:

  1. MMORPG обеспечивает максимальное вовлечение в игровой процесс, погружая пользователя в полноценную экосистему языка. Но при этом игрок находится в самом центре событий, активно участвуя в развитии сюжета, что сильно влияет на его мотивацию. Игрок участвует в заданиях и ивентах, изучает историю мира и персонажей английский язык здесь является инструментом, а не целью.

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

  3. В MMORPG крайне важной является система альянсов и кланов внутриигровых объединений игроков. Обсуждения игры, фарм ресурсов, переговоры с другими кланами, социальные институты и прокачка, совместные ивенты и сложные квесты вариантов коммуникации очень много. Обеспечивается общение с помощью чатов или игровых серверов, к примеру, в Diskord. Причем в крупных альянсах часто общаются с помощью аудио- и видеосвязи. В MMORPG играют во всем мире, поэтому самым распространенным языком в кланах считается английский. Его банально знает больше людей, чем другие языки.

Чтобы проверить гипотезу, исследователи проанализировали учебный опыт 302 учеников 5 и 6 классов из нескольких общеобразовательных школ Кореи. В ходе исследования примерно опыт 76 учеников признали не репрезентативным из-за нарушений в процессе исследования.

Группа из 118 студентов совершенствовала навыки английского в MMORPG, а контрольная группа из 102 учеников проходила классические занятия с преподавателем.

Сам эксперимент занял 2 месяца.

Экспериментальная группа не занималась по классической системе. Вместо этого ученикам включали MMORPG. Специально для этого исследования была разработана учебная схема внутри онлайн-игры для развития письменных навыков, чтения и аудирования.

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

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

Так выглядела схема обучающей системы для исследования изучения английского с помощью MMORPG.

В конце двухмесячного эксперимента все участники прошли финальный тест. И оказалось, что MMORPG действительно помогает учить английский быстрее, чем стандартная программа.

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

И главной причиной исследователи выделяют интерактивность и вовлечение в процесс. Ученик не просто выполняет упражнения, а выполняет игровые квесты. Именно эта экосистема позволяет многократно усилить результаты изучения.

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

Вот только исследователи не говорят, на базе какой именно MMORPG они вели анализ. Поэтому мы подобрали для вас три популярных онлайн-игры, в которых вы точно сможете прокачать свой английский.

EVE Online

Легендарная космическая MMORPG с огромной вселенной и более чем восемью миллионами игроков. При чем больше полумиллиона заходит в игру ежедневно.

Главная ценность этой онлайн-игры с точки зрения английского очень мощные сообщества игроков и альянсы.

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

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

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

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

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

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

Runescape

Фэнтезийная MMORPG, которая носит титул самой большой онлайн-игры в мире по версии Книги рекордов Гиннесса. За 20 лет существования в ней зарегистрированы свыше 250 миллионов аккаунтов.

И даже несмотря на внушительный возраст и уже третий рефордж игры, Runescape собирает больше 1,2 млн людей онлайн каждый день. А в Old School версии и того больше свыше 2 млн уников в сутки.

В игре обширный лор, который выходит далеко за ее пределы. По ней написаны целые серии книг, так что если проникнитесь, будет, что почитать.

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

Один из примеров квестов. Грамматика довольно простая, но попадаются сложные слова и фразовые глаголы.

Сообщество игры очень активное. Интересно, что несмотря на молодую аудиторию (больше половины игроков до 18 лет), в нее все еще играет много старожилов, которые застали самую первую версию. Поэтому интересных собеседников здесь более чем достаточно. Особенно в Old School версии игры. Мы даже рекомендуем попробовать именно ее, потому что графоний здесь практически не имеет значения. Главное интересное общение и отличный игровой опыт.

The Elder Scrolls Online

Насчет этой игры есть много мнений. Одни считают ее достойной продолжательницей серии TES, другие полным провалом. Но для прокачки английского языка она полезна.

Главная ценность здесь обширнейший лор. Здесь огромнейшее количество письменных материалов о мире внутри игры и еще больше в сообществах и на официальных сайтах.

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

Онлайн здесь тоже приличный больше 1,2 млн посетителей в сутки и почти 18 млн зарегистрированных пользователей.

Беседка вкладывает огромные ресурсы, чтобы сделать игру красивой не только с точки зрения графики, но и истории. Гайды, видео, арты, музыка, трансляции контента просто валом. Выбирайте формат, который вам больше всего нравится. А лучше сразу все так заодно можно и понимание живого языка прокачать, и чтение, и лексику. Вот только TES требует довольно высокий уровень английского не менее Upper-Intermediate, а лучше Advanced. Тогда вы точно проникнитесь лором сполна.

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

***

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

Онлайн-школа EnglishDom.com вдохновляем выучить английский через технологии и человеческую заботу

Только для читателей Хабра первый урок с преподавателем в интерактивном цифровом учебнике бесплатно! А при покупке занятий получите до 3 уроков в подарок!

Получи целый месяц премиум-подписки на приложение ED Words в подарок. Введи промокод april21 на этой странице или прямо в приложении ED Words. Промокод действителен до 01.06.2021.

Наши продукты:

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru