Расширенный сбор статистики и как это можно использовать.

Gregory

Знаменитый
Участник
Сообщения
209
Розыгрыши
0
Репутация
81
Реакции
25
Баллы
1 295
Всем привет, решил немного рассказать о системе расширенного сбора статистики с сервера, которую мы разрабатываем. Расширенная она потому, что с помощью этой системы мы можем получать доступ к любой статистике игрового персонажа, той, которой нет не в базе, не в логах и даже в памяти сервера. И так обо всем по порядку.

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

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

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

Смерть игрока:

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

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

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

Насмешки:
Этот момент можно использовать как элемент дополнительной монетизации. Мы поступили следующим образом, в ЛК игрок может купить насмешку над врагом для своего чара, выбор насмешек довольно таки широк. Есть разделение на женские и мужские насмешки. Насмешку чар произносит во время убийства другого игрока. Насмешку слышит жертва и убийца. Так это выглядит в игре:
 
Задумка хорошая.
Но вопрос в другом, если на сервере играет 500-1000 человек, от таких массивов информации могут быть проблемы.
Не понятно, а запись в БД происходит постоянно при новом логе или N минут записывается весь массив логов?
 
Даже если там идет сразу запись в БД, то нереляционные базы данных никто не отменял, которые отлично подойдут под хранение статистики (и что не так сложно прикручивается, если там конечно не через кешед все гонится).
 
Данные обрабатываются и складываются в БД в режиме реального времени.
Дело в том, что это утилита будет работать без падения производительности на любых онлайнах, в моем случае она выступает в роли прокси. Но она будет точно так же работать, если вы вообще решите вынести её на отдельную машину и настроить свич таким образом, что-бы он зеркалил туда ваш трафик. Получится, что прокси уже не будет, а останется отдельно стоящий сервис, который вообще не будет оказывать никакого влияния на сервер.

В моем случае тесты проводились на онлайне ~250 окон. Падения производительности на таком онлайне никакого нет.
Все верно. Кэшед мы вообще не используем.
 
Последнее редактирование:
Делаем аналог теневых предметов для С4
В данном примере используется "теневой" предмет Договор, по исчезновению которого пропадает Агатион. Для примера я указал срок жизни договора 2 минуты.

Понятно, что актуально скорее всего только для хроник C4, так как в них не реализованы теневые предметы.
Данный пример не относится к системе статистики, но использует один из её компонентов.
 
очень круто однако , впервые такое вижу) удачи в развитии , подпишусь)
 
Утилита в любом случае будет просаживать производительность.
 
Отличная задумка. А при каждом ударе будет озвучка или же при определенном.
 
Сейчас озвучка активируется при убийстве, насмешку слышит убийца и жертва, но настроить можно как на каждый удар, так и на крит например.
 
Ищу партнера для запуска сервера на данной сборке.