ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФИЛОЛОГИЧЕСКИЙ ФАКУЛЬТЕТ
КАФЕДРА МАТЕМАТИЧЕСКОЙ ЛИНГВИСТИКИ
ЧАКИРОВА КСЕНИЯ АЛЕКСАНДРОВНА
ИССЛЕДОВАНИЕ ЯЗЫКА ОБЩЕНИЯ В РОЛЕВЫХ ОНЛАЙН ИГРАХ
И ЕГО АВТОМАТИЗИРОВАННОЕ МОДЕЛИРОВАНИЕ
Выпускная квалификационная работа по направлению подготовки
035700 «Лингвистика»
НАУЧНЫЙ РУКОВОДИТЕЛЬ:
ИЛЬЯ СЕРГЕЕВИЧ НИКОЛАЕВ
кандидат филологических наук,
доцент кафедры математической лингвистики
Санкт-Петербург
2017
1
Оглавление
Введение ........................................................................................................................... 4
Глава 1. Феномен массовых мультиплеерных онлайн-игр и особенности их языка 6
1.1. Понятие ММОРПГ и их особое положение среди прочих игр ........................... 6
1.2. Механизм общения между пользователями .......................................................... 8
1.3. Характерные черты языка ММОРПГ ................................................................... 11
1.3.1. Условия и ограничения игрового процесса, и их влияние на
формирование языка ММОРПГ............................................................................. 11
Ограничение по пространству .................................................................... 11
Ограничение по времени............................................................................. 13
1.3.2. Особенности лексики ММОРПГ ......................................................... 14
Процессы заимствования и сокращения, их участие в формировании
основ игрового словаря ....................................................................................... 14
Формирование специфичных понятий ...................................................... 18
1.3.3. Особенности синтаксиса ММОРПГ ................................................... 19
1.4. Выводы .................................................................................................................... 23
Глава 2. Чат-боты и методики их построения ............................................................ 24
2.1. Понятие чат-бота, их виды и алгоритм их работы .............................................. 24
2.2. История разработки чат-ботов .............................................................................. 26
2.3. Анализ существующих программ для разработки чат-ботов ............................ 30
2.4. Выводы .................................................................................................................... 32
Глава 3. Разработка чат-бота на основе материалов языка коммуникации
пользователей ММОРПГ .............................................................................................. 34
3.1. Инструменты для проведения эксперимента ...................................................... 34
3.2. Выделение структуры ситуаций ........................................................................... 35
2
3.3. Процесс разработки чат-бота на языке ChatScript .............................................. 38
3.3.1. Составление базы данных .................................................................... 38
3.3.2 Построение диалогов............................................................................. 42
3.3.3. Обзор типовых диалогов ...................................................................... 45
Приветствие .................................................................................................. 45
Основные темы ............................................................................................ 46
Ответы на сторонние вопросы ................................................................... 47
Экстренный выход из ситуации.................................................................. 48
3.3.4 Оценка результатов ................................................................................ 48
3.4. Выводы .................................................................................................................... 49
Заключение ..................................................................................................................... 50
Список литературы ........................................................................................................ 51
Список применяемых ссылок....................................................................................... 53
Приложения.................................................................................................................... 55
Приложение 1. Отрывок из корпуса — русский язык ............................................... 55
Приложение 2. Отрывок из корпуса — английский язык ......................................... 56
Приложение 3. Словарь лексики и сокращений ММОРПГ, использовавшихся при
составлении чат-бота .................................................................................................... 58
Приложение 4. Словарь концептов .............................................................................. 61
Приложение 5. Словарь фактов.................................................................................... 62
Приложение 6. Introductions.top ................................................................................... 66
Приложение 7. Guild.top ............................................................................................... 69
Приложение 8. Group.top .............................................................................................. 75
Приложение 9. Questions.top ........................................................................................ 83
Приложение 10. Exit.top ................................................................................................ 84
3
Приложение 11. Диалог с пользователем.................................................................... 85
Приложение 12. Скриншоты работы программы ...................................................... 87
4
ВВЕДЕНИЕ
На протяжении последнего десятилетия человечество стало свидетелем
огромного прогресса в области технологий и электроники. Помимо новых
возможностей для ведения дел, перемещения и коммуникации, они принесли с
собой еще невиданные ранее способы развлечений, в которые, в числе прочего,
входят видеоигры. Ни для кого не секрет, что молодежь XXI века весьма ими
увлечена. По показаниям исследования компании Intel за 2015 год, количество
людей, посвящающих свое время видеоиграм, составляет около 1.8 биллионов
— одна десятая населения нашей планеты [Skaugen, 2015]. Видеоигры
насчитывают много подвидов и жанров, и многие из них являются
многопользовательскими или же мультилпеерными, что означает, что они
предназначены более чем для одного игрока. Будь их несколько или же сотни
тысяч, это неизменно приводит к кооперации или соперничеству и,
следовательно, к коммуникации. Чем больше людей — тем активнее ведется
диалог, тем сложнее становится язык игры, и тем интереснее он для
лингвистики.
Таким
образом,
актуальность
данной
работы
определяется
необходимостью исследования языка многопользовательских онлайн-игр, до сих
пор мало рассмотренного в лингвистических трудах.
Материалом для проведения работы послужил языковой корпус,
состоящий из текстов русско- и англоязычных чатов, взятых из трех подобных
игр («Perfect World», «Aion», «TERA: the Exiled realm of Arborea»). Выбор
именно этих проектов связан с тем, что они были созданы и выпущены в разные
временные периоды (2005, 2007 и 2015гг. соответственно), что означает большее
языковое разнообразие. Более того, из-за сравнительной популярности этих игр
5
даже сегодня, сбор необходимого материала в них не представляет большой
сложности.
Научная новизна данной работы состоит в попытке изучения ранее
нетронутого лингвистами языка и разработке диалогового агента на его основе.
И то, и другое может быть полезным при дальнейших исследованиях в этом
направлении.
Целью
данной
работы
является
изучение
языка
массовых
мультиплеерных онлайн-игр и применение полученных данных для разработки
программы чат-бота, имитирующего процесс общения в подобных видеоиграх.
Задачами данной работы является следующее:
рассмотреть
массовые
мультиплеерные
онлайн-игры
как
среду
коммуникации и условия, которые влияют на механизм ведения диалога
между двумя игроками;
описать особенности языка массовых мультиплеерных онлайн-игр с точки
зрения лексики и синтаксиса;
рассмотреть основные методы создания чатботов;
разработать собственный алгоритм ведения диалога компьютера с
пользователем в ситуации, имитирующей игровую;
В целом, данная работа представляется полезной как с теоретической, так
и с практической точки зрения, т. к. в ней затрагиваются особенности языка еще
малоизученной
социальной
группы
—
пользователей
массовых
мультиплеерных онлайн-игр. Проведенный же здесь эксперимент можно
считать своего рода первым шагом к тому, чтобы использовать данный язык для
более практических целей.
6
ГЛАВА 1. ФЕНОМЕН МАССОВЫХ МУЛЬТИПЛЕЕРНЫХ ОНЛАЙН-ИГР
И ОСОБЕННОСТИ ИХ ЯЗЫКА
1.1. Понятие ММОРПГ и их особое положение среди прочих игр
Так как основным предметом изучения данной работы является язык
массовых мультиплеерных онлайн-игр (далее «ММОРПГ»), одним из самых
важных моментов является расшифровка того, что понимается под такими
играми и чем именно они нас интересуют.
Как
было
упомянуто
во
введении,
мультиплеерные
или
многопользовательские игры предполагают наличие в сессии более одного
пользователя. Среди подобных игр особо выделяются так называемые
ММОРПГ (от англ. «MMORPG» — «Massively multiplayer online role-playing
game»), где при помощи мощного серверного оборудования и частых
обновлений содержания игры поддерживается постоянно рабочий виртуальный
мир, существующий вне зависимости от входа или выхода из него отдельного
субъекта. Термин ММОРПГ датируется 1997 годом и его автором считается
Ричард Гэрриот, автор игры «Ultima Online». Наиболее знаменитыми
экземплярами ММОРПГ являются, например, «World of Warcraft» от Blizzard
Entertainment, «Final Fantasy XIV» от Square Enix и «Guild Wars 2» от ArenaNet.
Виртуальные миры таких игр открыты для сотен тысяч, а порой и
миллионов людей, которым достаточно лишь скачать клиентскую программу
для доступа туда. Часто упор в таких играх сделан именно на совместную
деятельность: прохождение заданий и убийство боссов вместе с другими
игроками, создание кланов и гильдий, торговлю и обмен, сражения за
7
территории.
Пользователю
предлагается
создать
своего
персонажа
и
погрузиться в мир игры, где рано или поздно он обнаруживает необходимость
начать диалог с другими такими же как он, т.к. вышеназванные задачи трудно
или даже невозможно решить без посторонней помощи. Так же миры ММОПРГ
вне зависимости от специфичных особенностей каждого конкретного проекта
всегда разбиты на зоны со своими названиями. В этих локациях проживают
определенные
типы
существ,
за
убийство
которых
игроки
получают
определенные предметы. Их же, в свою очередь, можно обменять или продать за
игровую валюту, или пустить на выполнение особых заданий — квестов — что
способствует продвижению по лестнице уровней. Все это — лишь основы
игрового процесса в подобных проектах, и при участии в нем у пользователя
нередко создается впечатление живого мира со своей географией, социумом и
экономикой. Зачастую общественные и торговые отношения между игроками
настолько походят на ситуации реального мира, что некоторые социологи,
психологи и экономисты считают их хорошим материалом для своих трудов.
Например, Эдвард Кастронова был одним из первых, кто занялся вопросом
виртуальной экономики в своей работе «Synthetic Worlds: The Business and
Culture of Online Games». Существуют так же и сборники данных множества
социологических опросов, проведенных в виртуальных играх, такие как,
например, The Daedalus Project1.
В общем и целом, у каждого ММОРПГ-проекта складывается свое
сообщество, в котором, как правило формируется специфичный язык с особым
жаргоном и речевыми клише, подстраивающимися под возможности и
ограничения каждой конкретной игры. Помимо языка в подобных проектах
1
8
http://www.nickyee.com/daedalus/
появляется свой набор правил вежливости и запретов — свой этикет игры в
группе.
ММОРПГ
—
не
многопользовательских
игр.
единственный
Проекты
типа
представитель
«Overwatch»
от
жанра
Blizzard
Entertainment и «Titanfall 2» от Respawn Entertainment тоже подразумевают
работу в группе и поощряют общение игроков между собой, но от ММОРПГ их
отличает отсутствие постоянного виртуального мира. Игровые сеансы в такие
проектах не длятся дольше 30-40 минут, ограниченны одной небольшой картой
и рассчитаны на короткие сражения игроков между собой, а не на
взаимодействие в огромном мире со своей географией и рынком. Разумеется,
это не способствует развитию коммуникации за пределами боевых ситуаций,
отчего язык подобной игры выглядит несколько беднее в сравнении с языком
ММОРПГ-проекта. Именно в связи с этим материалом для данной работы были
выбраны последние.
1.2. Механизм общения между пользователями
В любую ММОРПГ всегда включены те или иные средства коммуникации.
Основной вариант для общения между игроками это текстовый чат, как правило
расположенный в левом нижнем углу экрана, хотя в последние годы все больше
игр включают в свои клиентские программы так же и возможность для
голосовой
связи.
Расположение
различных
панелей,
их
размеры
и
функциональность различаются от игры к игре, но местоположение текстового
чата обычно остается неизменным, хотя в некоторых проектах предусмотрена
функция его сокрытия с экрана, пока у игрока не возникнет надобности что-то
напечатать.
9
Пример ниже показывает стандартный экран ММОРПГ, взятый из проекта
«Guild Wars 2»:
Рис. 1. Стандартный игровой интерфейс ММОРПГ.
В рамках данной работы рассматриваются только текстовые чаты в связи с
легкостью получения и обработки текстового материала. Образец игрового чата
из ММОРПГ-проекта «TERA: The Exiled Realm of Arborea» (далее «TERA»)
приведен ниже:
Рис. 2. Стандартный вид игрового чата ММОРПГ.
10
Игровые чаты подразделяются на отдельные вкладки в зависимости от
цели, для которой в ней ведется общение (объявления для сбора в группу,
торговля, разговоры внутри гильдии/партии или личный диалог между двумя
игроками), и зоны, в которой оно проходит (одна локация на сервере или весь
сервер целиком). В примере выше эти вкладки обозначены под названиями
«Мир», «Группа», «Гильдия» и т. д. Нахождение в одной из вкладок скрывает
текст из любой другой, что служит для удобства игроков. Как правило, самым
активным чатом является мировой, к которому обращаются для самых разных
целей: от поиска группы до простого легкомысленного разговора. Если
пользователь выберет не разделять содержимое двух или более вкладок между
собой, то обычно реплики из разных вкладок подсвечиваются отличными друг
от друга цветами, что видно на примере. Зачастую игроки переключаются
между разными вкладками в зависимости от своих нужд и желаний, ведя по
нескольку разговоров сразу.
Сам язык ММОПРГ можно сравнить с языком профессиональной группы
или субкультуры. Игроки обсуждают «рейды» и «гринд», рассуждают о «бафах»
и «нерфах», продают и покупают «шмот» и «точку». Данные термины
придумываются изначально либо разработчиками проекта, либо — что чаще —
сочиняются самими пользователями. Не зная этих понятий и аббревиатур,
начинающий игрок рискует быть не понятым в сообществе, и, как следствие,
изолированным от него. В целом язык каждой конкретной ММОРПГ по
прошествии
некоторого
времени
с
момента
ее
появления
можно
охарактеризовать как довольно устойчивый, изменяющийся лишь вместе с
переменами в игровом мире (добавление новых классов персонажей, новых
боссов и т.д.). Набор речевых формул и знаков для выражения повседневных
ситуаций постоянен, и среди игроков часто используются стереотипные речевые
конструкции.
11
1.3. Характерные черты языка ММОРПГ
1.3.1. Условия и ограничения игрового процесса, и их влияние на
формирование языка ММОРПГ
Ограничение по пространству
Существует много факторов, влияющих на появление новых языковых
структур в мире ММОРПГ и их функционирование в системе. Как и любое
сообщество, пользователи подстраиваются под условия окружающей их среды и
темп игрового процесса.
Первый момент, который следует отметить насчет общения в текстовых
чатах — это ограничения на ввод символов, не дающий пользователю писать
чересчур длинные сообщения. Причина для этого правила проста — игровой
чат не предназначен для обработки большого объема текста от тысяч игроков
сразу. Подобная нагрузка замедляет работу сервера, что плохо отражается на
работе игры, и делает чат неудобочитаемым для пользователя, который чаще
всего не может уследить за происходящим из-за огромного числа слишком
длинных сообщений. Краткость так же поощряется и в самом игровом
сообществе, члены которого часто не любят тратить свое время на чтение
больших объемов текста. Предел символов разнится от игры к игре: например в
«Pefect World» эта величина равна 78 знакам, а в «TERA» - 300 знакам. Это
ограничение подталкивает игроков к тому, чтобы экономить силы и по
возможности сокращать то, что они желают сообщить. В первую очередь это
касается объявлений о наборе в гильдии, которые по своему назначению похожи
на рекламные сообщения и, следовательно, призваны привлекать к себе
12
внимание, при этом сообщая потенциальному новому члену сообщества
ключевые характеристики клана, такие как игровое направление («ПВЕ» —
сражения против монстров, или «ПВП» - сражение против других игроков),
требования к участникам, их потенциальную выгоду и способ вступления.
Примеры ниже взяты из упомянутых проектов «Pefect World» и «TERA» для
сравнения между сообщениями одной и той же природы при разных
ограничениях на число допустимых знаков:
«Идет набор в гильдию HellRaisers. 55+ лвл и наличие РК обязательно. По
всем вопросам писать в лс, или кидайте заявку, проводим собеседование»
(«TERA»);
«Ги AlterEgo примет 100+ ПВП/ПВЕ игроков, готовых к развитию, кх и
123 есть» («Perfect World»).
Как можно видеть, второе сообщение намного суше и короче первого, по
большей части из-за большего числа сокращений и аббревиатур. То же самое
распространяется, например, на сообщения из торгового чата:
«Продам сердца: по 15к если вместе с поясом, по 18к отдельно; продам
пояс: 40к вместе с сердцами, 50к отдельно» («TERA»);
«Куплю т4 или вино в 69» («Perfect World»).
Опять же, можно видеть, что в первом случае более высокий порог знаков
позволяет пользователю включить в сообщение больше деталей о желаемой
сделке, которые при других условиях обсуждались бы отдельно, уже при личном
разговоре продавца и покупателя.
13
Ограничение по времени
Второе, даже более важное ограничение, побуждающее игроков писать о
своих намерениях как можно компактнее — это ограничение по времени. В
отличие от предыдущего примера, оно навязывается не самой системой
ММОПРГ, а, скорее, внутриигровыми ситуациями. Зачастую у пользователей не
хватает времени на активную детальную переписку — они могут находиться в
гуще важного сражения, или же их внимание могут отвлекать события вне игры,
такие как, например, телефонный звонок. Сам игровой процесс требует от
пользователя внимания и точности, а в случае с работой в группе — хорошей
координации. При таких условиях чтение и письмо забирают слишком много
времени, и в связи с этим многие слова сокращаются порой до трех-четырех
букв («графика» - «графа», «аккаунт» - «акк», «ressurect» - «res», «teleport» «tele»). Такие сокращенные варианты слов кочуют из более ранних проектов в
новые, где, что интересно, иногда это приводит к повторному сокращению
(«гильдия» - «гильда» - «ги», «неигровой персонаж» - «непись» - «нпс»). В
последние годы ограничение по времени все больше и больше подталкивает
игроков к тому, чтобы пользоваться голосовой связью с помощью встроенных
возможностей клиента или при содействии сторонних программ.
В отличие от предыдущего случая ограничение по времени чаще всего
влияет на боевые ситуации и поиск групп для совместной игры, в то время как
«рекламные» реплики остаются по большей части незатронутыми. Пример ниже
взят из проекта «Aion» и иллюстрирует оба вида сообщений:
«Проводится набор в легион TimeRaiders 65+ Осады/данжи/дерики,
голосовая связь ts3. По вопросам вступления писать в ПМ» (прием в гильдию).
14
«Мкад нужны все 60+» (сбор группы).
1.3.2. Особенности лексики ММОРПГ
Процессы заимствования и сокращения, их участие в формировании основ игрового
словаря
Процесс сокращения слов в ММОРПГ тесно соседствует с процессом
заимствования терминов и аббревиатур из других языков, в подавляющем
большинстве
из
английского
—
языка,
на
котором,
как
правило,
разрабатываются многие западные и на который переводятся все восточные
ММОРПГ перед их приходом в Россию. В качестве примеров можно привести
такие слова, как «rates» - «рейты» (увеличение количества получаемых очков
опыта), «mount» - «маунт» (игровое средство перемещения верхом), «dual» «дуалы» (парное оружие: мечи или кинжалы), «heal» - «хил» (процесс лечения
одного игрока другим или название класса, чья цель заключается в лечении
других игроков).
Многие
(языковым)
заимствования
причинам,
а
в
ММОРПГ
именно
из-за
происходят
«потребности
по
внутренним
уточнить
или
детализировать соответствующее понятие, разграничить некоторые смысловые
оттенки, прикрепив их к разным словам» [Крысин, 2004, с. 28] («таунт» при
русском «насмешка», «нуб» при русском «новичок»). Большой престиж
английского языка в целом способствует процессу заимствования, способствуя
появлению так называемых слов-параллелей [там же] наподобие «лут» «добыча», «сет» - «набор», которые, в противоположность упомянутым выше
парам, практически не отличаются по значению, в то время как «нуб»
15
подразумевает снисходительное и высокомерное обращение, а «таунт»
обозначает умение персонажа, привлекающее внимание врага в отличие от
простого акта пренебрежения.
Так же следует отметить, что на процесс заимствования в ММОРПГ
распространяется тенденция повторения одной и той же структуры при наличии
некоторого лексического ряда [там же], наподобие «голдселлер — ноулайфер —
дамагер — баффер» при значении лица и «кайтинг — фарминг — дуалбоксинг»
при значении деятельности. Как можно видеть из этих примеров, количество
варваризмов
—
заимствований,
неполностью
освоенных
языком
и
воспринимающихся как чужеродные слова — в языке ММОРПГ очень высоко
по причине их образности и легкого механизма словообразования. Особо много
заимствованных слов приходят в игровой жаргон по причине того, что при их
помощи можно заменить даже не два или три слова на русском языке («снайпер»
- «меткий стрелок») [там же], но целые описательные фразы:
«Бот»
–
персонаж,
находящийся
под
управлением
посторонней
программы;
«Фарм» – продолжительное уничтожение монстров с целью получения
добычи, а также вообще любой систематический сбор ресурсов;
«Пак» – группа монстров, атака на любого из которых автоматически
вызывает агрессию всех остальных.
В подобных случаях процесс заимствования тесно переплетен с
процессом сокращения, который, в силу разобранных ранее ограничений по
пространству и времени вместе с распространяющимся на все языки принципом
экономии А. Мартине, тоже играет очень важную роль в формировании языка
ММОРПГ.
16
Принцип экономии: «человек расходует ровно столько речевых усилий,
сколько требуется для того, чтобы его речь была понятной собеседникам»
[Мартине, 1963, с. 536] — является одним из основополагающих правил
общения в интернете в целом, и в ММОРПГ в частности. Самый очевидный
пример сокращений в языке мультиплеерных игр это огромное количество
аббревиатур и акронимов, большая часть которых берется уже готовыми из того
же английского языка и проходит через процесс транслитерации с заменой букв
английского алфавита на русские:
«Афк» - «AFK» - «Away From Keyboard» - «не за клавиатурой»;
«ДД» - «DD» - «Damage Dealer» - «игрок, наносящий урон врагу»;
«ДПС» - «DPS» - «Damage Per Second» - «количество урона за секунду»;
«Нпц» - «NPC» - «Non Playable Character» - «персонаж, который
контролируется искусственным интеллектом».
Процесс сокращения так же действует и на числовые величины. При
операциях с большими суммами игровых денег в подавляющем числе случаев
пользователи пишут «10к» вместо «10.000» и «10кк» вместо «10.000.000»
соответственно, где каждое «к» является сокращением для трех нулей. Нечто
похожее можно видеть при наборе игроков в группу, где при указании желаемых
уровней запрос будет выглядеть как «50+» вместо «от 50 и далее» или даже
вместо простого «от 50». В английском языке так же присутствует способ
ограничить промежуток между уровнями при помощи условных ограничений:
«4x», например, обозначает уровни от 40 до 49. Однако эти сокращения не
прижились в русском языке.
Довольно интересный момент в процессе словообразования ММОРПГ,
происходящий из тесного соседства и взаимодействия заимствований и
17
сокращений, состоит в том, что данные процедуры могут проводиться в
несколько ступеней в разном порядке, порой меняя начальную конструкцию до
неузнаваемости (аббревиатура «кос» происходит от фразы «кос-лист», которая в
свою очередь заимствована из английского «k.o.s list», которая является
сокращением фразы «kill-on-sight list»). Верно и обратное — процедура
заимствования может пропускать этап транслитерации и приходить в русский
язык уже в весьма коротком варианте («imbalance» - «имба»).
Однако далеко не вся английская лексика ММОРПГ удачно перебирается в
русский язык. При кратком обзоре словарей сленга на обоих языках легко
заметить различные аббревиатуры, свойственные только английскому: «Low on
Mana» - «LoM», «Want to buy» - «WTB», «Want to sell» - «WTS». Эти казалось бы
полезные сокращения не покидают границ интернациональных серверов,
предположительно потому что в русском языке уже существуют краткие
способы передать ту же мысль («Want to buy» - «куплю»). Так же чаты
англоязычных ММОРПГ богаты на аббревиатуры, использующиеся не столько в
играх, сколько в зарубежной интернет-коммуникации в целом: «I don’t know» «IDK», «Got to go» - «GTG».
В общем и целом, язык ММОРПГ — чрезвычайно активно развивающаяся
среда, и потому постоянное образование новых терминов и жаргонизмов при
помощи простых, экономящих время механизмов наподобие транслитерации и
заимствования варваризмов в нем вполне объяснимо. Зачастую процессы
сокращения и заимствования переплетаются с друг другом так тесно и
начальное слово (или фраза) проходит через такое большое количество ступеней
обработки, что его конечная форма становится практически неузнаваемой. Как
правило такие метаморфозы связаны с попытками уместить значение объемного
18
описания в один короткий термин для максимальной экономии времени и сил
пользователя.
Формирование специфичных понятий
До сих пор мы говорили об общепринятой лексике, действующей в
пределах большинства, если не всех ММОРПГ. Такие термины как «танк»,
«хил», «дд», «рейд» относятся к основным механикам работы игры, и в силу
того, что большинство ММОРПГ копирует их друг у друга, редко в каком
проекте можно обнаружить нечто оригинальное в системе классов, боя или
получения наград. Следовательно, терминология, связанная с этими системами,
остается неизменной. Однако к подобным словам так же добавляются
сокращенные или полные названия понятий, специфичных только для данной
конкретной игры. Такими понятиями обычно являются названия локаций и
подземелий («Старая ЦТД», «Носфольд»), игровых серверов («Гарда»),
предметов для торговли («гиперы», «рубинки», «алкагест»), монстров и боссов
(«Фульминар», «гидраты») и т. д.
Очень часто этим механизмом подобного словообразования является
аббревиация, т.к. среди как топонимических, так и предметных названий в
ММОРПГ очень редко можно встретить однословные конструкции, и куда чаще
—
картинные словосочетания, поддерживающие эпическую атмосферу
ММОРПГ: «Перо Кайсинеля» («Aion»), «Город Инея» (Perfect World),
«Зараженная слеза сердца» («TERA»). В такой ситуации сокращения просто
неизбежны. Чаще всего можно видеть именно следующие подтипы аббревиатур:
1. Усечения - «аббревиатурные номинации, образованные с помощью
опущения букв или слогов основы сокращаемого слова» [Сергеева, 176]
19
(«Каталамандж» - «Ката», «Гардарика» - «Гарда»). Даже чаще
опускаются слова целиком, и вышеупомянутый «Город Инея» становится
просто «Инеем», а «Перо Кайсинеля» - просто «Пером». В некоторых
случаях, особенно при обозначении игровых предметов, к усеченные
слова проходят через процесс суффиксации («Рубиновый камень» «рубин» - «рубинка»). Пусть реже, но данный механизм применяется в
английском языке («City of the Lost» - «Lost»)
2. Инициализмы/алфавитизмы
аббревиатуры,
-
образованные
от
словосочетаний путем оставления инициальных букв от каждого слова
сокращаемого
словосочетания
с
произношением
по
алфавитному
принципу» [там же] («Бастион Лока» - «БЛ», «Старая Цитадель» «Старая ЦТД»). Следует отметить, что этот способ намного более
популярен в английском языке, где более половины игрового словаря
состоит из алфавитизмов («Ancient Dragon City» - «ADC», «Endless
Universe» - «EU» «Cube of Fate» - «CoF»).
Отдельный интересный случай словообразования можно встретить в
ММОРПГ «Perfect World», где названия игровых подземелий, такие как
«Пещера огненных скал» и «Врата беспокойных духов» были переведены в
цифровой формат, связанный скорее не с самим именем зоны, сколько с уровнем
игрока, на котором рекомендуется в эту зону идти: 19, 29, 39 и так далее. В
результате к вышеназванным зонам до сих пор обращаются как к «19-му
данжу» и «69-му данжу» соответственно. Точно такое же явление произошло и
на интернациональных серверах, где, однако, вместо названия локации («данж»)
игроки вставили в сокращение аббревиатуру названия квеста этой локации:
«Final battle», или же «fb» - что тоже породило цепочку шаблонных имен
наподобие «fb19», «fb29» и т.д.
20
1.3.3. Особенности синтаксиса ММОРПГ
Все вышеперечисленные средства и термины, сливаясь воедино, образуют
краткие и емкие конструкции, которые могут быть совершенно непонятны для
постороннего
человека.
Это
заключение
так
же
справедливо
и
для
автоматических средств анализа и разметки текста. Основную трудность для
восприятия составляет факт того, что зачастую в игровых репликах из чата
может не быть ни единого привычного человеку слова — вся фраза может
состоять из одних терминов и аббревиатур. В подобных случаях значение
предложения теряется, если только пользователь не знает каждое слово и
каждое условное обозначение в нем.
В качестве примера конструкции, почти целиком состоящей из игрового
жаргона, можно привести следующее:
«Рунадиум х4 - дд хил и го» («Aion»).
Здесь под словом «Рунадиум» понимается название подземелья, куда
собирается группа, под обозначением «х4» - количество заходов, которые
планируется совершить, под «дд», «хил» - сокращенные названия требуемых
классов («дд» - игрок, наносящий большое количество урона, «хил» - лекарь),
под «го» - заимствование от английского глагола «go» - «идти». В целом данную
фразу можно перевести как «В Рунадиум на 4 захода требуются персонаж,
наносящий урон, и лекарь — идем сразу». В итоге единственным хорошо
опознаваемым элементом здесь является союз «и». Такие упрощенные
предложения не редкость и на интернациональных ММОРПГ-серверах:
«cler for BH AEU» («Perfect World»)
21
Так же возможны и более радикальные варианты:
«Руна ХИЛ ТАНК ДД ЧАНТ ТС» («Aion»).
В данном образце все слова являются сокращениями и аббревиатурами:
«Руна» - от уже упомянутого «Рунадиум», «ХИЛ ТАНК ДД ЧАНТ» - от названий
требуемых классов, «ТС» - от названия программы «Team Speak», используемой
во многих ММОРПГ как инструмент для голосового общения. В отличие от
предыдущего примера здесь предложение составлено без единого глагола и без
единого знака препинания. В терминах синтаксиса русского языка его можно
было
бы
назвать
эллиптическим
-
«самостоятельно
употребляемым
предложением особого типа, спецификой структуры которого является
отсутствие глагольного сказуемого, причем сказуемого, не упомянутого в
контексте, т. е. в смысловом отношении не являющегося необходимым для
передачи данного сообщения» [Валгина, 2003, с. 199]. Как и в предыдущем
примере, это предложение является побудительным, притом что многие
побудительные предложения в русском языке тоже относятся к эллиптическим
(«Все наверх!», «Скорей сюда, к хозяину, несчастье») [там же].
Эллипсис — речевое явление, заключающееся в коммуникативно
значимом опущении структурных элементов предложения [там же] — это очень
частое явление в ММОРПГ — неважно, на русском или английском языках —
что неудивительно, если учесть описанные ранее ограничения по времени и
пространству, налагаемые на игроков.
«Ну в соло версию (данжа) ходи, а в групповой (ходи) один» («TERA»);
«(Квест на) пробуждение 100% делается и без свитков» («TERA»);
«(Going to) Queen of hell SOT, 4 slots (available)» («Perfect World»).
22
Что интересно, одни из самых часто выпускаемых элементов предложения
в языке игроков это глагол «требоваться» и краткие формы прилагательных
«нужно/необходимо» (с соответствующими формами на английском языке), что,
как правило, происходит при наборе персонажей для какой-либо совместной
деятельности:
«Healer (needed) for Poeta 2 runs» («Aion»);
«В Лабиринт ужаса (нужно) 3 тела, пжалста :D» («TERA»);
«(В) Пхард (необходимы) хил танкующий ддшки» («Aion»).
Как можно видеть из некоторых образцов, пользователям ММОРПГ
свойственен аграмматизм - «отклонение от синтаксических и пунктуационных
норм литературного языка» [Латипова, 2016, 30]. Однако в данном случае это
связано не столько с неспособностью порождать правильные структуры, сколько
с нежеланием или пренебрежением к этому, чему способствует анонимность,
предоставляемая общением в интернете. В основном аграмматизм в ММОРПГ
проявляется в неправильной расстановке знаков препинания или их полном
отсутствии, а так же в непрямом порядке слов и утрате синтаксических норм от
сравнительно легкой до самой крайней степени:
- успех тащить манаю перед обновой, да
- успех, тащить шпиль в самом лютом его виде:) («TERA»)
Зачастую отсутствие правильной пунктуации при выделении частей
предложения заменяется на чрезмерное ее использование в конце предложения
для придания ему резкой эмоциональной окраски:
«grats people i never heard of!!!!!!!!!» («Perfect World»)
Еще так можно подчеркнуть, помимо всего прочего, срочность того, о чем
просит игрок:
«В 29 НА ЕЖУ ПЛЮСУЕМ!+!+!+!+!» («Perfect World»).
23
Так же сюда можно отнести широкое использование смайликов, давно
ставшее одной из характерных черт общения в интернете в целом. Из других
особенностей
языка
ММОРПГ
можно
отметить
широкое
применение
однородных членов предложения, как правило из-за огромного количества
игровых предметов, которые выносятся на торги, или больших списков
требований/перспектив для желающих вступить в группу/гильдию:
«проводится набор в легион TimeRaiders 65+ Осады/данжи/дерики,
голосовая связь ts3. По вопросам вступления писать в ПМ» («Aion»).
1.4. Выводы
Все
описанное
выше
рисует
нам
картину
невероятно
бурно
развивающегося языка, который, на первый взгляд, не отличается особой
глубиной, предпочитая полагаться на заимствования и сокращения для
пополнения своего словаря, и на, по большей части, чрезвычайно простые
структуры при составлении предложений. Вкупе с частыми нарушениями
правил синтаксиса и пунктуации это создает впечатление языка, весьма далекого
от
литературных
норм.
Однако,
учитывая
быстрый
темп
игры
и
сосредоточенность пользователя на событиях на экране, подобная простота и
краткость кажутся
вполне естественными и
даже необходимыми для
продуктивной деятельности. При этом язык ММОРПГ является невероятно
емким, способным передавать сложные идеи в сжатой форме, пользуясь малыми
средствами.
Хотя
автоматическая
обработка
текстов
ММОРПГ
представляет
определенную трудность из-за большого числа незнакомых терминов и
запутанных, нечитаемых компьютером конструкций, сравнительная простота
24
языка может оказаться плюсом в осуществлении машинной работы с языком
после их расшифровки.
25
ГЛАВА 2. ЧАТ-БОТЫ И МЕТОДИКИ ИХ ПОСТРОЕНИЯ
2.1. Понятие чат-бота, их виды и алгоритм их работы
Одним из важнейших направлений компьютерной лингвистики является
развитие механизмов взаимодействия между человеком и машиной, в число
которых, разумеется, входит ведение диалога. Если он ведется между двумя
людьми, то мы, как правило, ждем удовлетворения следующих условий:
целенаправленного обмена сообщениями, взаимопонимания между партнерами,
некой равноценности их деятельности в целом в процессе обмена сообщениями,
так же как и расширение знаний, умений и навыков каждого из них [Медведева,
2010]. В идеале все это ожидается и от программы, обеспечивающей диалог
между человеком и ЭВМ.
«Диалоговая система – человеко-машинная система «пользователь –
ЭВМ», обеспечивающая эффективное решение некоторого класса задач в
режиме оперативного обмена информацией между партнерами» [Довгялло,
1987].
«Диалоговая система – совокупность технических, программных и
информационных средств, обеспечивающих заданному кругу пользователей
возможность решения некоторого множества задач в интерактивном режиме
взаимодействия с ЭВМ в соответствии со сценарием диалога» [Мамиконов,
1986].
Исследование и разработка таких систем началась примерно с тех же
времен, когда мир впервые познакомился с электронно-вычислительной
техникой. Изначально общение между ней и человеком шло на машинном
языке, которым могли оперировать лишь посвященные в него пользователи.
26
Такой подход, конечно же, требовал больших знаний и чрезвычайных усилий со
стороны оператора, что привело к оптимизации процесса общения, который
продолжается до сих пор. На сегодняшний день общение с машиной на
естественном человеческом языке уже не редкость, вплоть до того, что
существуют программы, способные вести диалог с человеком, при этом с
переменным успехом создавая впечатление живой персоны — так называемые
чат-боты. Стоит заметить, что далеко не каждый чат-бот способен на подобное.
Для этого необходима не только система, позволяющая программе правильно
связывать слова вместе, но и огромная база данных со знаниями о мире.
Помимо чат-ботов, которые предположительно должны уметь вести
разговор
на
любую
тему,
существуют
программы,
называемые
интеллектуальными виртуальными агентами. Это программы, выполняющие
какую-то цель в заданной среде и при этом действующие рационально
[Гельфенбейн, 2008]. Таким агентам, напротив, не нужна полная база данных об
устройстве всего, что их окружает, т. к. они заняты ведением диалога в
определенной сфере и с определенной целью. Интеллектуальные агенты
нередко можно встретить на сайтах крупных компаний. Например бюро,
занимающееся юридическими вопросами, может установить на свой сайт
программу, которая будет консультировать посетителей по вопросам о ведении
суда или помочь в поисках адвоката. Совсем недавно — 10 апреля 2017г. —
диалоговой программой для помощи своим клиентам обзавелась компания
«Билайн»2.
Чат-боты
так
же
делятся
по
типу
их
работы.
Наиболее
распространенными на данный момент являются текстовые программы, однако
2
27
http://moskva.beeline.ru/about/press-center-new/press-releases/details/1115397/
последние достижения в области техники позволяют распознавать так же
визуальную информацию, такую как лица, жесты и так далее.
Так же существуют следующие чат-боты:
1. Работающие по заранее заданным сценариям;
В этом случае программа реагирует на ключевые слова, которые встречает
в репликах пользователя, и выдает ответы на основе команд, прописанных для
каждого ключевого слова разработчиком. При их отсутствии она перестает
понимать, о чем идет речь. Например при нахождении в веденной фразе таких
слов как «отец», «мать», программа может спросить «Ты любишь свою семью?»
или «А какие у тебя еще есть родственники?».
2. Обучающиеся в процессе общения.
В отличие от предыдущего случая эти чат-боты не используют для своих
ответов шаблоны, т.к. проходят через процесс обучения для того, чтобы уметь
обрабатывать естественную речь и корректно отвечать на поставленные
вопросы. Кроме того, они анализируют предоставленные им диалоги для
последующего
усовершенствования
своих
коммуникативных
навыков.
Примером такой программы может послужить «Tay» - выпущенный в 2016г.
чат-бот компании Microsoft на основе сети Twitter. «Tay» предназначалась для
обучения языку современной молодежи через диалог с пользователями Twitter, и
среди исследователей все еще ведутся споры о том, чем считать полученные
результаты: успехом или полным провалом — ведь уже после 16 часов обучения
«Tay» начала постить сообщения явно агрессивного характера, из-за чего проект
был вскоре закрыт.
28
2.2. История разработки чат-ботов
Первого чат-бота написали в США в 1966 году. Сделал это Джозеф
Вейценбаум,
назвавший
профессор
свое
новое
Массачусетского
творение
технологического
«ELIZA».
Программа
института,
должна
была
имитировать, или же, по словам самого Вейценбаума, «пародировать»
деятельность психотерапевта [Weizenbaum, 1976]: выслушивать проблемы
людей и предлагать им возможные решения, действуя при этом в пассивной
манере и перекладывая большую часть разговора на клиента.
В основе программы лежит 53 правила. Рассмотрев простой диалог ниже,
мы можем посмотреть работу одного из них:
RUN
ELIZA: Hi! I’m Eliza. What’s your problem?
Me: I am unhappy.
ELIZA: Did you come here because you are unhappy?
Дело в том, что «ELIZA» работает на основе поиска ключевых слов и
конструкций во фразах клиента. В данном случае ключевой элемент это
сочетание «I am». Программа отсекает данную конструкцию от всего
остального, вычленяя оставшееся, т. е. слово «unhappy», которое она позже
использует для генерации ответа, найдя в своей базе данных подходящую форму
для него, а именно «Did you come here because you are». В случае, если в реплике
клиента не за что зацепиться, «ELIZA» выдает фразы общего характера, такие
как «Very interesting. Please go on», «Ahh. Please continue...» и т. д.
29
Таким образом можно видеть, что механизм работы программы обращает
мало внимания на сам язык, рассматривая каждое слово скорее как возможный
сигнал для поиска подходящего варианта ответа.
Позже по подобию Элизы был создан новый чат-бот - «A.L.I.C.E»,
разработанный Ричардом Воллесом в 1995г. «A.L.I.C.E» использует технику
эвристического сопоставления фразы пользователя с образцами в своей базе
знаний — технология, которая привела к способности программы вести
полноценный диалог с пользователем. За это проект неоднократно был признан
лучшим из существующих на то время чат-ботов, а именно в 2000, 2001 и
2004гг., когда ему было присужден приз в конкурсе на премию Лѐбнера бронзовая медаль соревнований и денежная сумма. Такие призы выдаются лишь
тем диалоговым агентам, которые хоть на какое-то смогли убедить жюри в своей
человекоподобности, в то время как сама премия
Лѐбнера ждет лишь ту
программу, которая сумеет полностью обмануть комиссию. Подобное пока что
не удалось сделать никому.
Следующим важным шагом в разработке чат-ботов стал проект компании
IBM «Watson», созданный в 2006г под руководством Дэвида Феруччи. Основной
задачей чат-бота была работа с огромной на тот момент базой данных для
распознавания заданных ему вопросов на естественном языке и генерации
правильных ответов на них. В этом отношении программа явно достигла успеха,
чему свидетельствует, помимо прочего, ее победа в популярной теле-викторине
«Jeopardy!» в 2011г. Однако при таком функциональном ограничении «Watson»
является не столько виртуальным собеседником, сколько вопросно-ответной
системой.
К более современным и широко известным вариантам чат-ботов можно
отнести такие разработки как «Siri» от компании Apple (2011г.) и «Cortana» от
30
компании Microsoft (2014г.). Обе программы предназначены для персональной
виртуальной помощи пользователям техники данных компаний, и способны
понимать естественную речь, как текстовую, так и голосовую. «Cortana», если
дать ей доступ к своей личной информации (например, электронной почте),
может даже использовать ее для упреждения желаний и запросов пользователя.
2.3. Анализ существующих программ для разработки чат-ботов
Программы-собеседники могут быть написаны на разных языках
программирования. В основном разработчики используют Node.js, Python и
PHP. Также существует множество библиотек с готовыми решениями, не
требующими навыков программирования.
Одним из общепринятых вариантов разработки чат-ботов является язык
AIML (Artificial Intelligence Markup Language) - диалект XML, созданный для
разметки в уже упомянутой программе «A.L.I.C.E». Самыми важными
системными обозначениями в данном языке являются:
<aiml> - тэг, с которого начинается и которым заканчивается документ;
<category> - тэг, которым отмечается «блок знаний» в базе данных чатбота. Каждый блок состоит из образца вводных данных (pattern), ответов
на него (template) и опциональных данных (topic, that);
<pattern> - тэг, использующийся для обозначения образцов того, что боту
может сказать пользователь. Здесь помимо слов допускаются так же
символы _ и *;
<template> - тэг, содержащий ответ на вводные данные пользователя.
<topic>, <that> - тэги, применяющиеся при необходимости задания
дополнительного контекста.
31
Ниже приведен пример простой категории на языке AIML:
<aiml>
<category>
<pattern> Привет! Как дела?</pattern>
<template>
<random>
<li>Привет. Нормально.</li>
<li>Привет. Отлично. Как у тебя?</li>
</random>
</template>
</category>
</aiml>
ChatScript – это находящийся в открытом доступе язык описания
сценариев, созданный Брюсом Уилкоксом в 2011г. Программа, созданная на
основе ChatScript, принимает высказывание пользователя и порождает
текстовый ответ на него. Программа может как принимать, так и выводить одно
или несколько предложений.
Сценарий ChatScript представляет собой последовательность правил
(rule). У каждого правила есть свои тип (kind), индекс (label), образец (pattern) и
вывод (output). Рассмотрим систему организации правил на примере:
?: FOOD (have something to eat) I don’t carry food with me.
Тип предложения задаѐтся символом в начале строки, после него ставится
двоеточие. В данном случае вопросительный знак сигнализирует, что образец
может срабатывать только в том случае, если на ввод от пользователя поступило
вопросительное предложение. После типа задаѐтся тема беседы. Это
необязательно, однако тема оказывается полезной для связи реплик и при
исправлении ошибок. Здесь тематическим тегом является слово FOOD. По
32
образцу — фразе, заключѐнной в скобках, — осуществляется поиск: если во
вводимом пользователем тексте содержатся последовательность слов в строго
заданном порядке, например, «Do you have something to eat?» ответом системы
будет предложение «I don’t carry food with me».
Еще один инструмент для создания чатботов это RiveScript — язык,
разработанный Ноа Петербриджем в 2009 году с целью делать все то же, на что
способен AIML, но в более простом и понятном формате. В отличие от двух
предыдущих образцов, RiveScript это автономная библиотека программного
обеспечения, не предоставляющая с собой, например, пользовательского
интерфейса. Для полноценной работы с RiveScript требуются интерпретаторы
на другие распространенные языки программирования, такие как Java, Perl и
Python. Данные интерпретаторы можно скачать с официального сайта вместе с
библиотеками самого RiveScript.
Каждая реплика в RiveScript начинается с символов «!», «+» или «-»,
после чего следует некая информация. Команда «+» задает пусковой сигнал
(trigger) и используется для обозначения реплик пользователя, на которые
следует отвечать программе. Знак «-», соответственно, вводит подходящие
ответы на эти реплики, в то время как с «!» начинаются системные команды,
такие как операции с переменными. Простой чат-бот, написанный на языке
RiveScript, описан ниже:
+ what is up
- Not a lot, you?
+ you are a bot
- How did you know I'm a machine?
33
2.4. Выводы
Из всего вышесказанного можно заключить, что разработка чат-ботов —
достойное внимания лингвиста направление со сравнительно короткой, но
насыщенной историей. Популярность чат-ботов объясняется тем, как сильно
они экономят время и усилия человека в совершенно разных видах
деятельности: от простых коммуникационных задач до более сложных деловых
консультаций. Разработка чат-ботов несомненно требует не только навыков
программирования, но так же и глубокого понимания языка, с которым ведется
работа, возможных речевых ситуаций, в которые чат-бот будет вовлечен, и
предполагаемых запросов, которые могут появиться у пользователя.
34
ГЛАВА 3. РАЗРАБОТКА ЧАТ-БОТА НА ОСНОВЕ МАТЕРИАЛОВ ЯЗЫКА
КОММУНИКАЦИИ ПОЛЬЗОВАТЕЛЕЙ ММОРПГ
3.1. Инструменты для проведения эксперимента
В качестве материала для данного проекта был взят размеченный
языковой корпус на материале речи пользователей ММОРПГ, собранный и
размеченный вручную в 2016г. Тексты для этого корпуса брались из трех уже не
раз упомянутых ММО-проектов: «Perfect World», «Aion» и «TERA», как с
русскоязычных, так и с интернациональных серверов. Взятые из корпуса
фрагменты чатов так же использовались в качестве образцов для различных
языковых явлений в главе 1.
Для непосредственной разработки чат-бота на основе собранного
материала была выбрана программа ChatScript, в основном за сравнительную
простоту работы с ней и за прилагающийся к ней подробный обучающий
материал. Однако поскольку данный инструмент не поддерживает русский язык,
было принято решение использовать материал с интернациональных онлайнсерверов,
где
основным
языком
является
английский.
Очень
многие
характеристики, описанные в главе 1, распространяются и на него, поэтому в
процессе составления будут использоваться те же основные принципы, как при
работе с русским языком.
В качестве наполнения словаря чат-бота именами локаций, монстров и
предметов была использована терминология из проекта «Perfect World». Данный
шаг
был
предпринят,
чтобы
не
засорять
базу
данных
программы
разношерстными названиями из всех трех ММОРПГ разом и, таким образом,
35
сделать ее более упорядоченной. Однако основной пласт лексики, не
относящийся
к
специфическим
понятиям
данной
конкретной
игры,
действителен для всех трех вышеперечисленных ММОРПГ-проектов.
3.2. Выделение структуры ситуаций
Перед началом работы над чат-ботом важно расписать коммуникативную
ситуацию, которую планируется в нем моделировать. В это описание входит
разбитие ситуации на последовательность шагов, характеристика ее участников
и обстоятельств ее проведения.
Разрабатываемый чат-бот планировался как некий товарищ пользователя
по игре, осведомленный о ее аспектах и тонкостях. В связи с этим программа
должна быть способна отвечать на вопросы, которые могут возникнуть у игрока
в процессе диалога: как быстрее повысить уровень, где достать хорошую
экипировку и т.д.
Помимо этого планировались следующие стандартные ситуации, на
которые чат-бот мог бы вести диалог:
Гильдии/кланы (принятие в гильдию, ее направленность/требования);
Поход в данж/рейд (сбор в группу, ее потребности, возможные условия и
призы).
В каждой из этих стандартных ситуаций можно выделить определенные
стадии, более всего похожие на стадии собеседования при приеме человека на
работу: в обоих случаях рассматривается то, что игрок может предложить
данной группе/гильдии, и что группа/гильдия может предложить ему в ответ. В
36
диалоге участвуют два лица — два игрока, один из которых может говорить как
от своего собственного лица, так и от лица гильдии/отряда, в который он
собирает людей. При этом у собеседников можно выделить следующие
коммуникационные цели:
Игрок
1
(пользователь)
—
получить
место
в
отряде/гильдии,
зарекомендовать себя как полезного и способного выполнить предоставленные
ему задачи.
Игрок 2 (чат-бот) — рассмотреть кандидатуру собеседника и рассудить,
подходит ли он на необходимую должность.
Распишем конкретнее, какие шаги можно выделить в обеих выделенных
ситуациях. При этом необязательные стадии выделены курсивом.
Прием в гильдию включает в себя:
Изложение достоинств гильдии и ее требований;
Оценка желающего вступить игрока с точки зрения его класса и уровня;
Обсуждение целей и игровой направленности желающего вступить;
Решение возможных проблем, если они есть;
Подведение итогов.
Что касается приема в отряд, здесь можно выделить следующие шаги:
Изложение цели отряда: куда и зачем он идет — а так же требований к
вступлению;
Оценка желающего вступить игрока с точки зрения его класса, уровня и
экипировки;
Уточнение деталей, распределение ролей и будущих наград;
37
Подведение итогов.
В отличие от большинства ситуаций в реальном мире — например от
собеседования у работодателя, с которым мы сравнивали прием в группу или
гильдию — общение в ММОРПГ ведется в более легких и фамильярных тонах.
В рамках данного проекта было принято решение дать чат-боту подобную
легкую и приветливую манеру общения, оставив при этом его намерения
серьезными. Порой бот может вести себя раздраженно (например, если игрок
ведет себя навязчиво), но не опускаться до прямых грубостей. Механизм
ведения беседы довольно прост: сначала бот убеждается в наличии у игрока
интереса во вступлении в отряд, если игрок не заявил о нем сам, а потом берет
на себя активную роль в диалоге, задавая пользователю вопросы о различных
аспектах игры и его персонажа. В ММОРПГ такие разговоры, как правило,
проходят весьма шаблонно, однако порой игрок может слегка отклонить тему
беседы — например, осведомляясь о чем-то ему незнакомом или непонятном.
Следует отметить, что в отличие от коммуникативных ситуаций в
реальном мире взаимодействие в ММОРПГ проходит, в нашем случае, всегда
один на один, без чьего-либо вмешательства, а так же целиком с помощью
текста. Например, если в ситуации с консультацией посетителя в магазине
можно выделить несколько неполноценный, но все же шаг, где консультант
ведет покупателя к витрине — это можно провести и молча — то в случае
диалога двух игроков в ММОРПГ каждый шаг сопровождается обязательной
вербализацией, т. к. эти игроки редко находятся лицом к лицу в одной локации.
Иными словами, пространственные характеристики никак не влияют на
коммуникативную ситуацию в игре: собеседники могут находиться в
противоположных концах виртуального мира, и все же связаться друг с другом
через
38
чат.
Однако
в
подобных
ситуациях
так
же
недоступны
экстралингвистические средства наподобие жестов (в ситуации с магазином
покупатель может просто указать на витрину или нужный ему предмет).
Из обеих выбранных нами ситуаций так же возможен экстренный выход
— как правило, разрыв общения — к которому обращаются при нестандартном
развитии диалога. В ММОРПГ можно выделить следующие ситуации, при
которых может потребоваться прервать общение:
Пользователю требуется выключить игру или отойти от компьютера на
какое-то время;
Пользователь нарушает нормы поведения, переходит на оскорбления и
персональные атаки;
Пользователь переводит диалог на посторонние темы.
Все эти обстоятельства могут иметь место на любом из шагов в наших
стандартных ситуациях.
3.3. Процесс разработки чат-бота на языке ChatScript
3.3.1. Составление базы данных
Перед построением диалогов программе необходима база данных, в
которой будет содержаться информация о предметах и сущностях, о которых
может зайти речь в диалоге. В контексте ММОРПГ и выбранных нами
стандартных ситуаций при общении двух пользователей может зайти речь о
следующих вещах:
39
Места, такие как подземелья, арены и другие значимые игровые зоны. Их
можно охарактеризовать с точки зрения их игровой направленности: пвп
или пве;
Уровни и классы игроков. Их можно охарактеризовать с точки зрения их
ценности/пригодности для гильдии или отряда;
Различные предметы, как необходимые для выполнения задач, так и
являющиеся наградой за них. Их можно охарактеризовать с точки зрения
их соотнесенности с различными местами: где их можно достать или же
где они будут необходимы.
Все эти данные были записаны в словарь концептов, содержащийся в
системных файлах ChatScript (далее CS). Концепты записываются в файл при
помощи знака ~, после которого следует имя концепта и набор слов, входящих в
него, заключенный в квадратные скобки. Например, так выглядит запись
концепта об игровых классах в ММОРПГ:
concept: ~dd (archer blademaster assassin wizard)
concept: ~healer (cleric psychic)
concept: ~tank (barbarian)
concept: ~class (~dd ~healer ~tank)
В первых трех строках описаны концепты игровых ролей, который
выполняет тот или иной класс (archer и blademaster – это классы, чья задача —
наносить урон), концепт ~class включает в себя все вышеперечисленные роли, и,
следовательно, все возможные классы данной игры. Помимо концептов,
созданных непосредственно для данного проекта в CS есть своя коллекция
40
концептов, такие как собрание вопросительных слов (~qwords), мужских и
женских имен (~malename и ~femalename) и т.д.
В приложении 4 приведен еще примеры из составленного специально для
чат-бота словаря. Все необходимые для чат-бота данные содержатся в файле
database.top.
После разработки базы данных необходимо соединить введенные
элементы между собой при помощи фактов — простых утверждений,
состоящих из подлежащего, сказуемого и объекта, как в примере ниже:
(Girl play game)
В данном проекте факты использовались в основном для хранения
информации о том, в сражениях с каким боссом можно достать те или иные
предметы или в каких местах можно сделать важный квест. В процессе работы
чат-бота по фактам можно производить поиск с помощью команды ^quiery,
принимающей множество аргументов, например субъект, предикат, объект,
число и т. д.
Для большего удобства работы с фактами CS предоставляет возможность
составлять из них таблицы. В их заголовке задается название и шаблон, по
которому будут строиться факты, в то время как ниже, после системного
разделителя DATA следует информация, которая должна быть вставлена в
установленный шаблон. Ниже представлена таблица, описывающая различные
продукты питания и их энергетическую стоимость:
table: energy (^food ^calories)
createfact(^food has ^calories)
DATA:
41
mutton 300
omelet 209
duck 347
egg 50
sausages 265
Помимо команды ^query знак «^» так же обозначает введение макросов,
которые вмещают в себя определенный набор кода, позволяя использовать его
несколько раз для экономии места и сил. Задавать макрос можно как для
обработки данных, введенных пользователем (patternmacro), так и для
составления ответа на эти данные (outputmacro). Так макросы могут
использоваться для обеих вышеперечисленных ситуаций (dualmacro) и даже для
создания фактов (tablemacro). В обучающем материале, предоставляемом вместе
с языком CS, дается следующий пример макроса:
patternmacro: ^ISHAIRCOLOR(^who)
![not never]
[
( << be ^who [blonde brunette redhead blond ] >> )
( << what ^who hair color >> )
]
?: ( ^ISHAIRCOLOR(I) ) How would I know your hair color?
Данный макрос принимает один аргумент — человека, о котором идет
речь. Далее идет проверка на то, содержится ли в предложении пользователя
какие бы то ни было негативные слова (not, never). Если это не так, то
проводится поиск на наличие любой из двух возможных комбинаций: «be a
42
redhead/blonde/brunette» или «what is your hair color». Необходимо отметить, что
в случае вопроса аргументу «^who» придается значение «I», которое так же
включает в себя такие слова как «my», «mine» и т. д. Это значит, что в случае
ввода пользователем «What is mine hair color?» чат-бот будет в состоянии
распознать эти данные, используя макрос, и ответить: «How would I know your
hair color?».
3.3.2 Построение диалогов
Основной блок, с которым работает CS это тема, задающаяся в начале
документа при помощи знака ~ и набора ключевых слов. В ней содержится
набор правил, одно из которых мы привели в пример в главе 2.3 при обзоре
программы. У каждого правила есть свой тип (kind), индекс (label), образец
(pattern) и вывод (output).
Система различает четыре ограничения по типу:
s: правило срабатывает, если пользователь вводит утверждение;
?: правило срабатывает, если пользователь вводит вопрос;
u: правило срабатывает, если пользователь вводит соединение вопроса и
утверждения;
t: правило берет диалог в свои руки и само предлагает тему. Так же такие
правила называют гамбитами (gambit). Для таких правил необязательно вводить
образец, т. к. программа ведет разговор сама, но для них важен порядок
очередности, чтобы не нарушать цельность истории, которую будет вести чатбот. Исключением из этого являются случайные гамбиты (r:), задающие
возможные подтемы, на которые может вестись разговор:
43
TOPIC: ~playeraim (pve pvp gameplay "spend time" aim activity purpose)
r: {So what do you like,} pvp or pve?
a: (pve dungeon farm grind) {That's} nice. [We do all kinds of dungeons][Farm
is life][That's what this game is about]
a: (pvp arena duel) [Our guild is][We're] not for you then.
t: We [do][go to] chrono often.
t: {There's} some great exp there.
r: How [are you going to][will you] contribute to [us][the guild]?
a: (craft) Alright. We do have a clan [blacksmith][jeweler][pharmacist] already
tho.
a: (farm grind) You enjoy those? Alright.
a: (dungeon) We'll need to find you a const party.
a: (pvp arena) We don't do pvp.
Так же в диалог можно включить правила, начинающиеся с прочих
латинских букв, таких как a:, b: и т. д., но эти правила будут обозначать уже
вторичные ответные реплики бота, как в примере ниже:
t: SOLO_PLAY () Do you play solo?
a: (~no) I don't like going solo either. You have a guild?
b: (~yes) I'm [in][joined] one too.
b: (~no) A const party then.
44
Из примера видно, что реплика с обозначением «а» появится только в
случает отрицательного ответа пользователя на вопрос, заданный в теме. Далее
бот может повести диалог в двух других направлениях под знаком «b», которые
тоже будут зависеть от положительного/отрицательного
ответа игрока.
Квадратные скобки в одной из реплик обозначают слова, одно из которых
программа выбирает и вставляет в свои фразы в случайном порядке.
Другие важные символические обозначения в CS включают в себя:
>, < - знаки, задающие начало и конец предложения. Так правило u:
(your level>) покроет собой фразу «tell me your level», но не покроет
«your level is too low».
<< >> - знаки, обозначающие, что заключенные внутрь слова могут
встречаться в предложении в любом порядке. Так правило u: (<<what
your level is>>) покроет собой как фразу «what is your level», так и
«your level is what».
* - символ, допускающий наличие в предложении одного или
нескольких символов на позиции, в которой стоит. Так правило u: (*
who be your class) может включить в себя фразу наподобие «tell me,
what is your class».
Еще один важный элемент в составлении диалога на языке CS
то переменные, как подборочные (match variables), так и пользовательские (user
variables). Разница между ними состоит в том, что первые хранят в себе
информацию, которая будет применима только в одной серии высказываний и
позже стерта, тогда как последние остаются действительными на протяжении
всего диалога. Пример использования переменных приведен ниже:
t: PARTY () Party to ~fb. Need healer.
a: (join want take "+") {what is your} class?
45
n: ({my class be} $class)
if ($class == healer) [Right.][Nice.] Lvl?
a: (my level be _0)
if (_0 < 50) [It's too][Too] low.
if (_0 > 50) [Good][Meet you at arch]
if (_0 == 50) [I'm not sure.][We'll struggle.]
if ($class != healer) [I said we need a healer.][We have $class already.][Can't
you read?]
Пользовательские переменные обозначаются знаком $. В данном случае
пользовательская переменная хранит в себе значения класса игрока, который
просится в группу. По значению этой переменной программа сопоставляет,
относится ли данный класс с потребностями группы. Эта переменная может
потребоваться и позднее, например при обсуждении ролей в партии.
Подборочные переменные обозначаются знаком _ и цифрами от 0 до 20. В
нашем случае подборочная переменная содержит в себе значение уровня игрока,
по которому бот определяет, пригоден ли игрок для данного задания. Упоминать
уровень далее в разговоре уже не понадобится. Следует отметить, что
пользовательской переменной можно присвоить значение подборочной в случае
необходимости, так же как и проводить с их значениями другие операции: +=, =, *=, /=, %=, |= и т. д.
Помимо переменных в образце выше так же употреблялись условные
операторы «if», в нашем случае определяющие, как программа будет отвечать на
запрос пользователя в зависимости от его класса и величины его уровня.
46
3.3.3. Обзор типовых диалогов
Приветствие
После ввода имени пользователя программа приветствует его в
зависимости от того, впервые он запускает чат-бот или нет. С ботом можно
познакомиться чуть ближе, узнав его имя, класс и уровень, а так же услышав его
мнение о некоторых вещах: отношению к ММОРПГ в целом и их реалиям. Как
только пользователь перестает проявлять инициативу в разговоре, чат-бот
принимает ее в свои руки и переводит беседу на одну из двух основных тем,
описанных в главе 3.2. Выбор между ними произволен и проводится с помощью
случайных гамбитов «r», сам переход проходит через команды «^respond
~partyrecruting/guildrecruting». Всю необходимую информацию об этом можно
найти в документе introductions.top, который представлен в приложении 6
данной работы.
Основные темы
Алгоритм ведения диалога на две основные темы: прием в гильдию и
отряд — хранится в документах guild.top и group.top соответственно. В начале
обоих документов задаются макросы для данных ввода и вывода (patternmacro
и outputmacro), позволяющие сэкономить место в документе, а так же макрос,
выдающий конечное решение чат-бота в зависимости от того, как прошло его
«собеседование» с игроком.
Пользователь проходит через цепочку вопросов, которые задает ему чатбот. Каждому возможному ответу программа присваивает определенную
47
числовую величину в зависимости от того, что содержится в ответе. Например,
бот может спросить игрока о классе его персонажа. Если в ответе присутствует
название полезного для совместной игры класса (как правило, в каждой гильдии
всегда рады целителям), то к переменной, отвечающей за ценность данного
игрока для гильдии прибавляется 2 очка. Значение переменной меняется от
вопроса к вопросу. В конце своего опроса чат-бот проводит подсчет набранных
очков (эта сумма хранится в пользовательской переменной $qualityfin) и в
зависимости от получившейся цифры решает, принимать игрока в гильдию или
нет. Файл guild.top можно найти в приложении 7 данной работы, group.top — в
приложении 8.
Процесс принятия в группу проходит в целом так же, но суть вопросов
здесь несколько меняется. Весь набор подземелий можно разделить на легкие и
сложные, от чего меняется требования к классам игроков. В остальном процесс
оценки претендента проходит так же. После успешного приема в группу игрок
так же может уточнить некоторые моменты: например, какую роль в отряде ему
выполнять и т.д. Так же в этом разделе шире применяется материал из базы
данных, такой как соответствие между существующими подземельями,
обитающими в них боссами и доступными наградами.
Ответы на сторонние вопросы
В процессе ведения диалога у пользователя могут возникнуть вопросы по
основным механикам ММОРПГ. Например, если в разговоре с чат-ботом
выяснится, что уровень игрока недостаточно высок, чтобы стать частью группы,
он может спросить у программы, где его можно быстро повысить. В таком
случае чат-бот берет ответы из документа questions.top и демонстрирует свою
48
осведомленность о том, как работает система прогрессии в игре. В отличие от
предыдущих документов здесь при задании используется обозначение «nostay»,
позволяющее программе перейти к предыдущей теме разговора сразу после
того, как вопрос был отвечен.
Экстренный выход из ситуации
Как было описано в главе 3.2., экстренный выход чат-бота из диалога
возможен в трех случаях. Все они были включены в файл exit.top (приложение
10), где для каждой ситуации расписаны возможные варианты ответа. Их тон
разнится в зависимости от того, что происходит. Например, опознав в реплике
пользователя аббревиатуру «afk», программа среагирует нейтрально («See you
later then»), но если игрок решит перейти на оскорбления (как общеязыковые,
так и игровые, такие как «noob», «nolifer»), бот ответит агрессивнее — как
правило, занесением игрока в «черный лист» (данная функция доступна во
многих ММОРПГ-проектах) и последующим игнорированием.
3.3.4 Оценка результатов
Получившийся диалоговый агент был протестирован в разговоре с
четырьмя людьми, знакомыми с играми и ММОРПГ в частности. Каждый
эксперт провел две-три попытки поговорить с чат-ботом, каждый раз пробуя
вводить разные варианты ответов на его вопросы. Ведение диалога с чат-ботом
было охарактеризовано ими в общем и целом удовлетворительно: программа
подбирает правильные термины для разговора и отвечает в соответствии с
49
ситуацией в ~75-80% случаев (ошибки возникали в основном из-за
использования в речи собеседника незнакомых терминов, программа при этом
терялась и не знала, что ей ответить). Еще одно замечание было высказано по
поводу манеры чат-бота всегда ждать ответа игрока перед тем, как перейти к
следующему шагу своего опроса, что сделало диалог несколько скованным и
длинным, тогда как в реальной игровой ситуации все происходило бы быстрее.
Пример одного из диалогов чат-бота со специалистом можно посмотреть
в приложении 10.
3.4. Выводы
В данной главе было проведена попытка разработать полностью
функциональный диалоговый агент на основе лингвистического материала
ММОРПГ. После обзора возможностей выбранного для этой цели языка
ChatScript была составлена база данных, моделирующая основные механики
онлайн-проектов, которая далее использовалась при составлении типовых
диалогов на распространенные топики ММОРПГ о сборе групп и гильдий. Так
же чат-бот способен проинформировать игрока о некоторых аспектах игрового
процесса.
Все диалоги были смоделированы с учетом игровых реалий, при этом
стараясь сделать разговор приятным и понятным для пользователя. После
рассмотрения получившихся результатов данный эксперимент можно считать
успешным.
50
ЗАКЛЮЧЕНИЕ
В
рамках
данной
работы
было
проведено
исследование
ранее
незатронутого лингвистами языка массовых многопользовательских онлайн-игр
с точки зрения его лексических и синтаксических особенностей. Полученные
данные иллюстрируют его гибкость, быстроту и изменчивость — черты,
свойственные современным тенденциям развития онлайн-общения. Результаты
этого анализа могут послужить опорным материалом для последующего
изучения как языка ММОРПГ, так и для языка интернет-коммуникации в целом.
Собранные в процессе работы данные из текстовых чатов так же могут быть
использованы для более глубоких исследовательских проектов.
Так же в работе была предпринята попытка использовать язык ММОРПГ в
качестве материала для одной из практических задач лингвистики — разработки
чат-ботов. Для этого были рассмотрены основные методы составления
подобных программ, их история и распространенные языки их написания. При
помощи одного из этих языков — ChatScript – был создан диалоговый агент,
способный поддержать беседу на две распространенные темы сообщества
ММОРПГ и ответить на некоторые общие вопросы, которые могут возникнуть у
пользователя.
Таким образом был сделан один из первых шагов в изучении языка
ММОРПГ и, возможно, привнесен вклад в задачу разработки искусственного
интеллекта.
51
СПИСОК ЛИТЕРАТУРЫ
1. Бирюкова Е. Функционирование аббревиатур в современной речи.
Москва, 2007.
2. Валгина Н. Современный русский язык, синтаксис. Москва, 2003.
3. Веселов В. Управление диалогом чатбота, Конференция AINL 2013:
Искусственный Интеллект, Естественный Язык, СПб., 2013.
4. Власова А., Зоркий К. Как отличить в диалоге робота от человека,
Конференция AINL 2014: Искусственный Интеллект, Естественный Язык,
Сколково, 2014.
5. Гельфенбейн И. Виртуальные персонажи в Интернете, Международная
неформальная
конференция
интернет-активистов
iCamp,
Этномир,
Петрово, Калужская область, 2008.
6. Довгялло А. Диалоговые системы. Современное состояние и перспективы
развития / А. М. Довгялло // Науково думка — Киев, 1987.
7. Колокольцева Т., Лутовинова О. Интернет-коммуникация как новая
речевая формация / Т. Н. Колокольцева, О. В. Лутовинова // ФЛИНТА,
Наука — Москва, 2012.
8. Крысин Л. Русское слово, свое и чужое: Исследования по современному
русскому языку и социолингвистике / Л. П. Крысин // Языки славянской
культуры — Москва, 2004.
9. Латипова А. Синтаксические аспекты формирования языка интернетдискурса,
Конференция «Тенденции развития науки и образования»,
Самара, 2016.
52
10. Мамиконов В. Анализ диалоговых систем: модели и методы / В. В.
Мамиконов // Препринт — Москва, 1986.
11. Мартине А. Основы общей лингвистики / А. Мартине // Прогресс —
Москва, 1963.
12. Медведева И. Лингвистическое обеспечение диалоговых систем, Москва:
Московский государственный лингвистический университет, 2010.
13. Никонов В. Диалоговая интеллектуальная система с естественноязыковым интерфейсом / В. О. Никонов // Краснодар: Кубанский
государственный технологический университет, 2007.
14. Попов Э. Общение с ЭВМ на естественном языке / Э. В. Попов // Наука
— Москва, 1982.
15. Рыбина Г. Основы построения интеллектуальных систем / Г. В. Рыбина //
Финансы и статистика — Москва, 2010.
16. Рыков В. Прагматически ориентированный корпус текстов / В.В. Рыков //
Диалог-99 — Москва, 1999.
17. Сергеева Т. Аббревиатура в системе лексических сокращений / Т. С.
Сергеева // Грамота — Пенза, 2013.
18. Смирнова М. Коммуникативные неудачи в неофициальном диалоге: На
материале английского языка, Москва, 2003.
19. Тестелец, Я. Введение в общий синтаксис, Москва, 2001.
20. Уласень С. Организация диалога в системе общения на естественном
языке,
Конференция
AINL
Естественный Язык, Сколково, 2014.
53
2014:
Искусственный
Интеллект,
21. Alexandrov M., Blaco X., Ponomareva N. Constructing empirical models for
automatic dialog parameterization, Барселона: Автономный университет
Барселоны, 2007.
22. Bytheway J. Ann. Vocabulary learning strategies in massively multiplayer
online role-playing games, Веллингтон: Университет Королевы Виктории,
2011.
23. Catizone R., Dingli A., Pinto H. Information Extraction Tools and Methods for
Understanding
Dialogue
in
a
Companion,
Шеффилд:
Университет
Шеффилда, 2008.
24. Weizenbaum, J. Computer power and human reason: from judgment to
calculation, Нью Йорк, W. H. Freeman and Company, 1976.
СПИСОК ПРИМЕНЯЕМЫХ ССЫЛОК
1. Игровые термины, аббревиатуры, жаргон и сленг онлайн-игр –
[Электронный
ресурс].
URL:
http://mmoglobus.ru/igrovye-terminy-
abbreviatury-zhargon-i-sleng-onlayn-igr (дата обращения: 13.05.2017)
2. Краткий словарь сленга // Официальный форум pw.mail.ru. 2010 –
[Электронный
ресурс].
URL:
https://pw.mail.ru/forums/showthread.php?t=59721
(дата
обращения:
13.05.2017)
3. Abbreviations and Terms – Alphabetical // PWI wiki. 2014 – [Электронный
ресурс].
URL:
http://pwi-
wiki.perfectworld.com/index.php/Abbreviations_and_Terms_-_Alphabetical
(дата посещения: 16.05.2017)
4. Aiondatabase version 1.0 // Электронная база данных. 2013 – [Электронный
ресурс]. URL: http://aiondatabase.net/en/?sl=1 (дата посещения: 17.05.2017)
54
5. Pwdatabase version 0.7.5 // Электронная база данных. 2009 – [Электронный
ресурс]. URL: http://www.pwdatabase.com/pwi/ (дата обращения:
17.05.2017)
6. Skaugen D. The Game Changer // Technology@Intel, 2015 – [Электронный
ресурс]. URL: http://blogs.intel.com/technology/2015/08/the-game-changer/
(дата обращения: 03.05.2017)
7. Teradatabase version 1.0 // Электронная база данных. 2015 – [Электронный
ресурс]. URL: http://teradatabase.net/ru/?sl=1 (дата посещения: 17.05.2017)
8. Wilcox Bruce. ChatScript: Project Web Hosting // Open Source Software. 2013
– [Электронный ресурс]. URL: http://chatscript.sourceforge.net (дата
обращения: 09.05.2017)
55
ПРИЛОЖЕНИЯ.
Приложение 1. Отрывок из корпуса — русский язык
Система тэгов для данного корпуса была основана на тэгах программы
Mystem за редким исключением. Для часто встречающихся числовых величин в
речи игроков ММОРПГ был введен тэг CIPH и так же тэг PNCT для
обозначения смайликов и эмотиконов, которые зачастую принимаются при
машинной обработке за простые знаки пунктуации. Все нижеизложенные фразы
были взяты из проекта «TERA»:
КУПЛЮ{купить=V,pf,tran=inpraes,sg,indic,1p}
СЕРДЦА{сердце=S,n,inan=acc,pl}
ПО{по=PR}
15{15=CIPH}
К{к=S,abbr,m,inan=acc,pl}
ЗА{за=PR}
ШТ{шт=S,abbr,f,inan=acc,sg}
В{в=PR}
ПМ{пм=S,abbr,n,inan=acc,sg}
Ну{ну=PART}
мы{мы=SPRO,pl,1p=nom}
проходили{проходить=V,praet,pl,indic,ipf,tran}
без{без=PR}
опыта{опыт=S,m,inan=gen,sg}
за{за=PR}
56
2{2=CIPH}
часа{час=S,m,inan=gen,sg}
Танк{танк=S,m,anim=nom,sg}
хил{хил=S,abbr,m,anim=nom,sg}
и{и=CONJ}
дд{дд=S,abbr,m,anim=nom,sg}
в{в=PR}
шпиль{шпиль=S,m,inan=acc,sg}
до{до=PR}
келсаика{келсаик=S,persn,m,anim=gen,sg}
В{в=PR}
эбеновую{эбеновый=A=ins,sg,plen,f}
башню{башня=S,f,inan=acc,sg}
сводите{сводить=V,pl,imper,2p,ipf,tran}
пожалуйста{пожалуйста=PART=}
Приложение 2. Отрывок из корпуса — английский язык
Система тэгов для данного корпуса была основана на тэгах Британского
национального корпуса за редким исключением. Для часто встречающихся
числовых величин в речи игроков ММОРПГ был введен тэг ABR для
сокращений и так же тэг PNCT для обозначения смайликов и эмотиконов,
которые зачастую принимаются при машинной обработке за простые знаки
57
пунктуации. Все нижеизложенные фразы были взяты из проекта «Perfect
World»:
anyone_PNI
wanna_ ABR
kill_VV0
Quanji_NP0
in_PRP
Valley_NN1
of_PRF
Disaster_NN1
for_ PRP
me_PNP
?_PUN
BH_ ABR
snake_NN1
boss_NN1
3_CRD
slots_NN2
pm_ABR
for_PRP
inv_ABR
:)_PNCT
wtb_ABR
58
diamond_NN1
of_PRF
dragon_NN1
Приложение 3. Словарь лексики и сокращений ММОРПГ,
использовавшихся при составлении чат-бота
AOE – сокр. «area of effect». Умение массового поражения с эффектом или
уроном, наносимым по площади.
Arch – сокр. «Archosaur». В реалиях «Perfect World» это крупнейший город
на сервере, место всех встреч и торговли.
Barb – сокр. «barbarian». Один из игровых классов.
BH – сокр. «bounty hunt». Игровое задание, где необходимо отыскать и
убить одного конкретного босса.
Boss – чрезвычайно сильный монстр. Для того, чтобы повергнуть босса,
как правило требуются усилия нескольких игроков.
BS – сокр. «blademaster». Один из игровых классов.
Caster – класс, полагающийся в основном на магические атаки издалека.
Chrono — в реалиях «Perfect World» это особая локация, где можно найти
боссов высокого уровня.
Const – сокр. «constant». Постоянный. «Const party» обозначает группу
игроков, которые регулярно собираются и делают задания вместе.
Craft – производство предметов из игровых ресурсов: например,
различных зелий из растений, которые можно собрать, путешествуя по
виртуальному миру.
59
Cube – сокр. «Cube of fate». В реалиях «Perfect World» это особая локация,
состоящая из ряда комнат и испытаниями, в некоторых из которых требуется
поддержка других игроков.
DD – сокр. «damage dealer». Класс, чья задача наносить как можно
больше урона врагу.
DMG – сокр. «damage». Числовая величина урона, наносимого по чему бы
то ни было.
DOT – сокр. «damage over time». Умение, наносящее урон не сразу, а
понемногу за определенный период времени. Например, различные яды и
проклятья.
DPS – сокр. «damage per second». Количество нанесенного урона за
секунду.
Drop — различные предметы, выпадающие в качестве награды из монстра
или босса после его смерти.
Dungeon — особая игровая локация, населенная сильными монстрами а
так же одним или несколькими боссами. Для прохождения этих локаций как
правило требуются усилия нескольких игроков.
Endgame – конечный этап игры, доступный только игрокам высокого
уровня.
Exp – сокр. «experience». Очки опыта, которые даются игроку за убийство
монстров и выполнение заданий. После достижения определенного порога
опыта уровень игрока повышается.
Farm – последовательное убийство монстров или боссов с целью достать
определенный предмет, падающий с них.
FB – сокр. «final battle». В реалиях «Perfect World» это название квеста,
выполнение которого требует похода в подземелье. Так же обозначает сами эти
подземелья.
FC – сокр. «Frostcovered city». В реалиях «Perfect World» это одно из
подземелий высокого уровня.
60
Grind – последовательное убийство монстров или боссов с целью быстрее
повысить уровень.
Guild — сообщество, состоящее из большого числа игроков и
преследующее определенные цели.
GVG – сокр. «guild versus guild». Массовое сражение между игроками из
двух или более гильдий.
Inv – сокр. «invite». Игровой запрос на вступление в отряд или гильдию,
на который можно ответить согласием или отказом.
Loot – то же, что и «drop».
Lunar — сокр. «Lunar glade». В реалиях «Perfect World» это одно из
подземелий высокого уровня.
Lvl — сокр. «level». Показатель мастерства игрока, растущий в
зависимости от количества опыта, набранного им.
Newbie – игрок маленького уровня, недавно создавший персонажа.
Noob — то же, что и «newbie», но с пренебрежительным оттенком.
Party – отряд из нескольких игроков, преследующий определенные цели.
Pot – сокр. «potion». Различные зелья с положительными эффектами на
игрока.
Psy – сокр. «psyonic». Один из игровых классов.
PVE – сокр. «player versus environment». Тип игровой деятельности, в
которой пользователь ведет борьбу против монстров, находящихся под
контролем искусственного интеллекта.
PVP – сокр. «player versus player». Тип игровой деятельности, в которой
пользователь ведет борьбу против других игроков.
Quest – игровое задание, за которое пользователю дается опыт.
Rn – сокр. «right now».
Roll – акт «бросания костей», служащий для того, чтобы определить, кому
достанется добыча после убийства босса. Алгоритм присваивает каждому
61
игроку случайное число и ценный предмет передается тому, у кого оно больше
всех.
Sin – сокр. «assassin». Один из игровых классов.
Solo – одиночная деятельность.
Tab — в реалиях «Perfect World» это специальный предмет, необходимый
для доступа к боссу.
TW – сокр. «territorial wars». Сражения между двумя гильдиями за право
обладания определенной частью игрового мира.
Wine – в реалиях «Perfect World» это специальный предмет, необходимый
для быстрого и легкого прохождения подземелья.
Wiz – сокр. «wizard». Один из игровых классов.
XX - в реалиях «Perfect World» это серия специальных подземелий,
рассчитанных на игроков определенного уровня (60ХХ, 69ХХ и т.д.)
Приложение 4. Словарь концептов
concept: ~fb (fb29 fb39 fb51 fb69 fb79) # final battle dungeons
concept: ~dungeon (~fb fc lunar)
concept: ~boss (quingzi calcid wyvern linus polearm quanji fragrance holeen)
#
bosses
concept: ~treasure ("fiend's ring" "sinister bow" "mystical pearl" "percussion
necklace" "greaves of fallen" gorenox aquaride silverrain "dragon's will" "equine
talisman" ~shards) # all important drops
concept: ~shards (ruby emerald sapphire)
62
# gems
concept: ~necessity (tab wine key)
# items necessary for completing/entering a
dungeon
concept: ~places (arch cube arena chrono ~dungeon)
# all important places
concept: ~dd (archer blademaster assassin wizard)
concept: ~healer (cleric psychic)
concept: ~tank (barbarian)
concept: ~class (~dd ~healer ~tank)
# all available classes
concept: ~pve (~dungeons cube chrono)
# activity vs monsters
concept: ~pvp (archwest arena) # activity vs other players
concept: ~quest ("20/20/20" bh "crasy stone")
Приложение 5. Словарь фактов
dualmacro: ^falls_from(^treasure ^boss)
query(direct_svo ^treasure is_in ^boss)
dualmacro: ^spawns_in (^boss ^dungeon)
query(direct_svo ^boss is_in ^dungeon)
63
dualmacro: ^need_for (^dungeon ^necessity)
query(direct_svo ^dungeon has_flag ^necessity)
dualmacro: ^quest_in (^quest ^dungeon)
query(direct_svo ^quest has_flag ^dungeon)
table: dungeon_info (^dungeon ^lvl ^boss)
^createfact(^dungeon "level is" ^lvl)
^createfact(^dungeon "has boss" ^boss)
DATA:
fb29 29 quingzi
fb39 39 calcid
fb51 51 wyvern
fb59 59 quanji
fb69 69 polearm
fb79 79 linus
fc 85 holeen
lunar 100 fragrance
64
tablemacro: ^is_in(^boss ^treasure)
CreateFact(^treasure is_in ^boss)
tablemacro: ^has_flag (^dungeon ^necessity)
CreateFact(^dungeon has_kind ^necessity)
table: ^is_in (quingzi)
"fiend's ring" emerald
table: ^is_in (calcid)
"sinister bow" ruby sapphire
table: ^is_in (wyvern)
"mystical pearl" ruby
table: ^is_in (quanji)
"dragon's will" sapphire
table: ^is_in (polearm)
"equine talisman" emerald ruby
65
table: ^is_in (linus)
"greaves of fallen" ruby
table: ^is_in (holeen)
"gorenox" "aquaride" "silverrain"
table: ^is_in (fragrance)
"percussion necklace" emerald ruby sapphire
table: ^has_flag ("20/20/20")
fb69 fb79
table: ^has_flag (bh)
fb29 fb39 fb51 fb59 fb69 fb79
table: ^has_flag (fb79)
wine tab
table: ^has_flag (lunar)
tab key
66
table: ^has_flag (fb69)
tab wine
Приложение 6. Introductions.top
topic: ~introductions repeat keep(~emogoodbye ~emohello ~emohowzit name here )
#!x will match on every return start of a conversation
t: GREET( %input<%userfirstline %input>0 )
^keep()
[Hi again.][Hello again.][Still online I see.][Hi.]
#!x matches every time on startup of a new conversation
t: ( %input<%userfirstline )
^keep()
[Hi.][Hello.][Hey.] Have you been here before?
a:(~yes)
^reuse( GREET )
a:(~no)
[Welcome to your first time then][Nice meeting you]
67
#! who are you?
?:
( who be you )
My name is MMObot, I'm another player like you.
#! what is your class?
u:
class (class)
I'm a [wizard][wiz]. [Casters are the best.][Nothing like throwing fire at people
xD][Going to be warlock soon.][Not many of us around.]
#! what is your level?
u:
level (level)
84. [Pretty high, huh?][Lvl-ing is a pain now though ><][I have no life, I know
.__.]
u: (* you grind *)
Lvl 84 is kinda high. [So yes][Can't escape it]
u: (* you enjoy farm)
[It's calming][Yeah. Always good to have a ton of loot][Yes. Welcome to
MMORPG xD]
#! who is your creator?
68
u:
(* who be your [creator][autor])
Chakirova Xenia. She's a gamer too!
u:
(* where do you live) ^keep() ^repeat()
I live on your computer.
u: (* you like MMORPG)
[Of course!][I'm here now so I guess I like it]
u:
([what where]) ^keep() ^repeat()
Good question
t: SOLO_PLAY () Do you play solo?
a: (~no) I don't like going solo either. You have a guild?
b: (~yes) I'm [in][joined] one too.
b: (~no) A const party then.
a: (~yes) But it's so hard. Why even play MMORPG then?
b: (challenge) [That's possible, I guess][Whatever works for you]
b: (new) You will want to join someone eventually
b: (alone) That's [weird][strange]. I'll never understand.
69
r: Do you want to play together?
a: (~yes) ^respond ~partyrecruting
a: (~no) [Shame.][ok then]
r: I'm recruting in a guild rn. Interested?
a: (~yes) ^respond ~guildrecruting
a: (~no) [ok then][alright]
Приложение 7. Guild.top
patternmacro: ^what_you_do(^x)
[
(do ^x)
(go to ^x)
(play in ^x)
(have ^x)
]
outputmacro: ^need_info(^x)
[What is your ^x?]
70
[Tell me about your ^x]
[Mind telling me your ^x?]
[I need some info about your ^x]
[What about your ^x?]
[I need to know your ^x]
outputmacro: ^good_class (^class)
[That's quite useful]
[A good ^class is rare nowadays]
[I thought nobody plays as ^class, good to see one]
[A ^class? Just what we needed!]
outputmacro: ^so_so_class (^class)
[Alright, i see]
[Pretty common, but still]
[I hope you're a good one]
outputmacro: ^bad_class (^class)
[Sorry, we have enough of those already]
[^class is not really group-friendly, so yeah...]
[Everyone plays as a ^class nowadays]
71
outputmacro: ^good_lvl (^lvl)
[Wow, you're a real vet!]
[That's some real dedication here]
[You do have a life, right? Just kidding!]
[^lvl? That's practically endgame]
[You'll be a great guide to our newbs!]
outputmacro: ^so_so_lvl (^lvl)
[Nice]
[That'll do]
[^lvl is ok]
outputmacro: ^bad_lvl (^lvl)
[^lvl is too low]
[Sorry, but you're still a newbie]
[You're barely started playing!]
[That's too low]
[Plenty of low-lvl guild around]
[We aim for endgame content, you know]
72
outputmacro: ^final (^x)
if (^x >= 3) {[You seem good enough for us.][Welcome to our guild!][You will
be an asset to our guild. Welcome!] I'll tell our officer to [pick you up][send you an
inv]}
if (^x < 3) {[Maybe you should find someone else][We can't accept you,
sorry][Our guild is not for you]}
patternmacro: ^my_class (^class)
[
(i * ^class)
(i play as a ^class)
(it's ^class)
(my class is ^class)
(^class)
]
patternmacro: ^my_lvl (^lvl)
[
(my level is ^lvl)
(it's ^lvl)
(i reached ^lvl)
(i * ^lvl)
73
(^lvl)
]
topic: ~guildrecruting keep repeat (guild clan activity)
t: So our name is ["Amalgama"]["Genesis"]["Aurora"]. We're a pve focused guild.
a: (what is) Oh, you know. Dungeons and stuff?
a: (like) Glad to hear it.
a: (not like) That's too bad. Maybe we're not for you then.
?: (^what_you_do (_0))
if (_0 == [arena][gvg][tw]) {[Not really][Some of us do, not many tho][I said
we prefer pve, so that's that]}
if (_0 == [dungeons][xx][chrono][fb][lunaro][farm]) {[Yeah, that too][Lots of
it][That's kinda our purpose]}
t: [Let's begin with your class][What is your class?][Class?][Mind telling me your
class?][I need some info about your class][So what about your class?]
a: (^my_class(_class))
if
(_class
{^good_class(_class)}
$qualitycl = 2
74
==
[barbarian][barb][cleric][priest][wizard][wiz])
if
(_class
==
[archer][psychic][psy][blademaster][bs])
{^so_so_class(_class)}
$qualitycl = 1
if (_class == [assassin][sin]) {^bad_class(_class)}
$qualitycl = 0
t: [Now about your level][Lvl?][How high is your level?][So now some info about
your lvl]
a: (^my_lvl(_lvl))
if (_lvl >= 80) {^good_lvl(_lvl)}
$qualitylv = $qualitycl + 2
if (80 > _lvl >= 40) {so_so_lvl(_lvl)}
$qualitylv = $qualitycl + 1
if (_lvl < 40) {bad_lvl(_lvl)}
$qualitylv = $qualitycl + 0
t: {Alright, fine.} So how [are you going to][will you] contribute to [us][the guild]?
a: (craft) Alright. Can always use another [blacksmith][jeweler][pharmacist].
$qualityfin = $qualitylv + 2
a: (farm) You enjoy it? [Then you're welcome][At least someone does!]
$qualityfin = $qualitylv + 2
a: (dungeon) We'll need to find you a const party.
75
$qualityfin = qualitylv + 1
a: (advertise) Alright, that's something.
$qualityfin = $qualitylv + 1
a: (pvp arena) We don't do pvp.
$qualityfin = $qualitylv + 0
t: ^final($qualityfin)
Приложение 8. Group.top
patternmacro: ^who_do_you(^x)
[
(farm ^x)
(go to ^x)
(kill ^x)
]
outputmacro: ^good_class1 (^class)
[That's quite useful]
[A good ^class is rare nowadays]
[I thought nobody plays as ^class, good to see one]
76
[A ^class? Just what we needed!]
[^class is always needed for a good raid]
outputmacro: ^so_so_class1 (^class)
[So you have sustain, i see]
[Fine, we have another slot left]
[I hope you're a good one]
outputmacro: ^bad_class1 (^class)
[Sorry, we don't have a place for you]
[We have enough dps]
[But ^class can't really contribute to the raid party]
outputmacro: ^good_lvl1 (^lvl)
[That will do]
[^lvl is ok]
[Nice]
outputmacro: ^bad_lvl1 (^lvl)
[^lvl is too low]
[Sorry, but you're still a newbie]
77
[You're barely started playing!]
[That's too low]
[You'll just slow us down]
[Our raids are not for newbies]
outputmacro: ^final1 (^x)
if (^x >= 2) {[Alright, you're in. Meet you at arch][Let's go. Don't forget your
pots!][You're in. Let's make it fast]}
if (^x < 2) {[Maybe you should find someone else][We can't accept you,
sorry][Our group is not for you]}
patternmacro: ^my_class1 (^class)
[
(i * ^class)
(i play as a ^class)
(it's ^class)
(my class is ^class)
(^class)
]
patternmacro: ^my_lvl1 (^lvl)
[
78
(my level is ^lvl)
(it's ^lvl)
(i reached ^lvl)
(i * ^lvl)
(^lvl)
]
patternmacro: ^i_want (^want)
[
(i'm after ^want)
(i want to get ^want)
(i go to get ^want)
(can i have ^want?)
]
topic: ~grouprecruting keep repeat (guild clan activity)
t: I'm in a group rn. We're going to (_~dungeon)
a: (what is) One of this game instances. You never went there?
b: (~yes) Then maybe this'll be your first time
b: (~no) Then you must know the name
79
a: (high level)
if (_~dungeon == [fb29][fb39][fb51][fb59]) {Not really. [We're just
doing gv there][They're pretty easy]}
if (_~dungeon == [fb69][fb79][fc][lunar]) {Yeah. [Better come
prepared][They are not for noobs]}
a: (what boss)
@1 = ^quiery (direct_s _~dungeon "has boss" ?)
It's @1
a: (what level)
@2 = ^quiery (direct_s _~dungeon "level is" ?)
It's @2
a: (what loot)
@3 = ^quiery (direct_s _~dungeon "has boss" ?)
@4 = ^quiery (direct_s @3 is_in ?)
There is @4
#do you farm this boss?
?: (^who_do_you (_boss))
@1 = ^quiery (direct_s _~dungeon "has boss" ?
if (_boss == @1) {[Yes][It's out main destination][Not much else to do there]}
$boss = _boss
80
if (_boss != @1) {[This boss is not from that dungeon][You're confusing
things]}
u: ([take][come][want] with)
if (_~dungeon == [fb29][fb39][fb51][fb59][fb69]) ^respond ~tellclass
if (_~dungeon == [fb79][fc][lunar]) ^respond ~needclass
topic: ~tellclass (class profession have)
t: TELL_CLASS [Let's begin with your class][What is your class?][Class?][Mind
telling me your class?][I need some info about your class][So what about your class?]
a: (^my_class1(_class))
if
(_class
==
[barbarian][barb][cleric][priest][wizard][wiz])
{^good_class1(_class)}
$qualitycl = 2
if
(_class
==
[archer][psychic][psy][blademaster][bs])
{^so_so_class1(_class)}
$qualitycl = 1
if (_class == [assassin][sin]) {^bad_class1(_class)}
$qualitycl = 0
topic: ~needclass (class profession need)
81
t: NEED_CLASS [It's a hight-lvl dungeon. Healer is a must][We need to prepare. Can
you heal?]
a: (^my_class1(_class))
if (_class == [psychic][psy][cleric][priest]) {^good_class1(_class)}
$qualitycl = 2
if (_class == [wizard][wiz][assassin][sin]) {^so_so_class1(_class)}
$qualitycl = 1
if
(_class
==
[barbarian][barb][archer][blademaster][bs])
{^bad_class1(_class)}
$qualitycl = 0
topic: ~continue (lvl level)
t: [Now about your level][Lvl?][How high is your level?][So now some info about
your lvl]
a: (^my_lvl1(_lvl))
@5 = ^quiery (direct_s _~dungeon "level is" ?
if (_lvl >= @5) {^good_lvl1(_lvl)}
$qualitylv = $qualitycl + 1
if (_lvl < @5) {^bad_lvl1(_lvl)}
$qualitylv = $qualitycl + 0
82
t: ^final1($qualitylv)
t: So that's done with. Anything else?
a: (^i_want (_loot))
if (_loot == ["fiend's ring"] ["sinister bow"] ["mystical pearl"] ~shards)
{You can take it, sure}
if (_loot == ["percussion necklace"]["greaves of fallen"]) {[Our bs is
farming for it][You'll have to roll for it][We need it too]}
if (_loot == [gorenox] [aquaride] [silverrain]) {[Everyone wants
these][We are going to roll for it][All of us are after them]}
if (_loot == ["dragon's will"]["equine talisman"]) {[You'll have to roll for
it][Those are rare stuff][If it drops, our arch will take it]}
a: (what role)
if (_class == [cleric][priest]) [Be][You'll be] our main healer
if (_class == [psychic][psy]) [Try to] help our priest and debuff
sometimes
if (_class == [wizard][wiz]) [We need your dmg.][Aoe would be handy]
if (_class == [archer]) [Aoe would be handy][dot a lot and we'll be ok]
if (_class == [barbarian][barb]) [Do your job and tank][Be a good tank,
that's all]
if (_class == [assassin][sin]) [dot a lot and we'll be ok][just try to stay
alive and lifesteal]
83
Приложение 9. Questions.top
topic: ~questions nostay keep (question ask wonder interested know)
u: EXP (* how to [get][gain] exp *)
You can [go to arena if you like pvp][use exp gems from game
store][Frostcovered city is great for that]
u: GEAR (* how to get gear >)
[60XX are the place for that][Some dungeon farming could help][Some people
here like to gift things]
?: (* server dead >)
[All the action is in Arch][Not really][You should come at a different time of
day]
?: (* what is arch >)
It's the Ancient Dragon City. A capital of sorts.
?: (* where get premium currency >)
[You can trade for it][Check the auction][Donate real money if you have them]
?: (* where farm)
[Dungeons like ~dungeon][60XX and higher are a great place][Try lunaro!]
84
?: (* how to progress)
You gotta lvl up fast. Want me to tell you where?
a: (~yes) ^reuse ( EXP )
u: (* keep dying)
You don't have good gear then. Want to hear where to get it?
a: (~yes) ^reuse ( GEAR )
?: (what [_ruby _emerald _sapphire])
_0? It's a shard. Put it in your gear to boost it.
?: (what is dungeon >)
You go there to fight bosses. And get [a ton of loot][treasure.][nice trinkets.]
Приложение 10. Exit.top
topic: ~exit keep repeat (fuck shit noob nolifer afk )
u: (afk)
[Alright, i'll wait][See you later then][Bye][See ya]
u: (~general ~tv_show book sport music weather politics)
[We're playing a game][No offtop please]
u: ([fuck shit noob nolifer suck])
85
[Stop with that noise][Great, another troll][Well, that's what you
expect]^reuse(BLACKLIST)
u: BLACKLIST()
I'm blacklisting you. Bye
Приложение 11. Диалог с пользователем
MMObot: Hi. Have you been here before?
Nadya: No
MMObot: Nice meeting you
Nadya: Who are you?
MMObot: My name is MMObot, I'm another player like you.
Nadya: ok then
MMObot: Do you play solo?
Nadya: Yes, for the most part
MMObot: But it's so hard. Why even play MMORPG then?
Nadya: I’m still kinda new
MMObot: You will want to join someone eventually
Nadya: perhaps
MMObot: I'm recruting in a guild rn. Interested?
Nadya: yeah, let’s try it
MMObot: So our name is "Amalgama". We're a pve focused guild.
Nadya: ok. Do you have xx farm?
MMObot: Lots of it
Nadya: nice I guess
86
MMObot: Mind telling me your class?
Nadya: I’m a priest
MMObot: A good priest is rare nowadays
Nadya: thanks
MMObot: Now about your level
Nadya: it’s 57
MMObot: That'll do
Nadya: I don’t have good weapons though. Can you tell me where to get some good
gear?
MMObot: Some people here like to gift things
Nadya: nice to know
MMObot: Alright, fine. So how will you contribute to us?
Nadya: I like doing dungeons and xx. Will it do?
MMObot: We'll need to find you a const party.
Nadya: ok
MMObot: You will be an asset to our guild. Welcome! I'll tell our officer to send you
an inv.
Nadya: thank you
87
Приложение 12. Скриншоты работы программы
88
Отзывы:
Авторизуйтесь, чтобы оставить отзыв