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

  • Автор темы Автор темы Gregory
  • Дата начала Дата начала

Gregory

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

Как это работает:
Основным компонентом системы является утилита, которая выступает в роли прокси между сервером и клиентом. Утилита работает с пакетами, выбирает нужный тип и парсит его. Далее все нужные данные выбираются и складываются в базу статистики. Не буду вдаваться в описание пакетов, скажу только, что в них содержится огромное количество информации о игровом процессе.
Несколько примеров:
Сбор сведений о нанесенном уроне:
Damage.webp
Здесь видим, что в статистику мы складываем данные о времени, кто кого ударил, какой урон нанес, статус флага и координаты.
Как использовать эти данные уже дело вашей фантазии, например я сделал переходящее знамя, каждый раз, когда игрок наносит урон больше чем у прежнего обладателя "знамени", то оно переходит ему (Элитная ачивка дающая дополнительный рейтинг профиля игрока).
Проведенное в игре время:
1hour.webp
Собственно эта статистика сообщений "Вы провели в игре еще 1 час", как только игрок получает такое сообщение в системный чат, система его фиксирует. Я использую эту статистику для мотивации онлайна. За каждый проведенный в игре час, система выдаёт игроку случайную плюшку.
Снимок.webp
Смерть игрока:
Die.webp
Сюда системе записывает данные о всех смертях на сервере, собственно жертва, убийца, опять же флаг и координаты. В случае когда KillerID = 0 (как и в случае с уроном) - значит убийца был моб. Чуть ниже, я покажу примеры, как я использую эту статистику.
Так это выглядит в деле:

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

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

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

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

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