???
Математика на уровне МГУ

Показано с 1 по 25 из 69

Тема: Сервер статистики для БзБ. Может, пригодится кому.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6
    гдетатамзагаризонтам... Аватар для Zed4ever
    Регистрация
    29.08.2006
    Адрес
    НН
    Возраст
    44
    Сообщений
    227

    Re: Сервер статистики для БзБ. Может, пригодится кому.

    По вопросам:
    Цитата Сообщение от SlavikSG Посмотреть сообщение
    1. Эта строка должна показывать что-то обобщенное? То, что я наубивал и налетал на сервере за все время и по всем битвам? И будет показывать то, что налетаю и наубиваю еще в будущем? Верно?
    1 - ДА. Это именно обобщённая статистика. По названиям полей можно догадаться что они значят. Вот только из совсем непонятных: А_Т0.... - это кол-во убитых самолётов по их типам, G_T0... кол-во убитой наземки по типам, Р_Т0... - кол-во убитых персонажей по типам, R_T0... - кол-во убитых ресурсов по типам.
    Единственное отличие в этих строках: для всех, кроме битвы, учитывается кол-во уничтоженных, а для битвы - кол-во потерь.
    Цитата Сообщение от SlavikSG Посмотреть сообщение
    2. Сейчас у меня ResID равен трем. Это пожизненно? Типа, мой крест? ))
    2 - ДА. Если не вычищать статистику - ResID у игрока, да и у всех, как только он назначен - вечен.
    Цитата Сообщение от SlavikSG Посмотреть сообщение
    3. То есть, все результаты, наколоченные и налетанные мною будут сливаться в одну единственную строку этой таблицы под ID равную трем? Верно я понимаю?
    3 - ДА. Ваши обобщённые результаты будут в этой одной строке (потому и так много полей). Однако, ещё "обрезки" достижений есть в информации по игроку и в таблице медалек.
    Цитата Сообщение от SlavikSG Посмотреть сообщение
    4. И такой вопрос... Сейчас таблица dbo.ResultInfo содержит в себе 1022 записи. Если мне принадлежит лишь одна запись в этой таблице, то кому тогда принадлежат остальные 1019 записей? Сервак запущен вчера вечером и до сих пор пашет. В основном, в холостом режиме. Побывало на нем только 10 человек. Кому же тогда принадлежат другие ResID? Конечно, можно было бы подумать, что каждый выстрел зенитки, каждый выстрел бота на сервере будет создавать, инициировать, свою личную запись, со своим личным ID, в этой таблице. Но неужели это так?!
    4 - Тут вопрос интересный, и достаточно глубоко затрагивает механику сбора статы.
    Приступим c разъяснениями по порядку.
    Что имеем: нужно собрать сводную статистику для следующих независимых объектов:
    -Результаты для стороны (красная/синяя),тут нужно собирать сколько налетали игроки, сколько боты, сколько очков заработали игроки и сколько боты, сколько потерь понесла сторона и т.д. и т.п.
    -Результаты для игрока, сколько налетал, уничтожил.... бла-бла-бла.
    ВАЖНО! В итоге - строка сводной статистики одинакова для всех, с некоторой разницей в смысловой нагрузке отдельных полей (уничтожено/потеряно).
    -Результаты для персонажей (это боты - экипаж. Ну, типа, как в WoT экипаж танка с разбиением по специализации и нации)
    -Результаты для сквадов

    Теперь рассказываю как это реализовано:
    Самые первые два ResID выдаются для первой битвы для красной и синей стороны (См ResID_Red и ResID_Blue в табличке BattleInfo - можно через ХП ShowBattles)
    Следующий ResID получает первый игрок вошедший на сервер.
    Кстати, поздравляю! Если ввести медаль за ResID = 3 "ПервыйНах". Вы кандидат
    (ну, 3 ResID из тыщщи есть, а там совсем чуть-чуть осталось )

    Теперь отвлекусь от ResID и поясню на общие вопросы механики статы: стат сразу делалась таким образом, чтобы можно было вести учёт по сквадам и по ботам-экипажам (персонажам). И, чтобы персонажи могли прокачиваться улучшать навыки и ващще имели некую "уникальность". Тут было 2 пути: 1-й перс смертный, и, после смерти, о нём остаётся "вечная память" в виде строки с ResID; 2-й перс безсмертный, и привязывается к игроку/скваду, ну, и с возможностью "трансферов персоков м-ду клубами".
    За основной был взят 2-й вариант учёта и распространения персов. 1-й вариант, в принципе, реализован тоже, но его не удобно использовать, т.к. имеем гипотетическую возможность "вечного роста" основной БД-ы по результатам умервщления персов и нарождению новых. Поэтому, признак того, шо перс "уже один раз не жив" есть, но он не очень используется. Для хардкорных серверов - вэлкам 1-й вариант, но мы за ооочень долгую стабильную работу не отвечаем.
    Также, изначально, были заложены следующие ограничения/обязанности:
    Игрок ДОЛЖЕН входить в сквад. В сквад может входить сквад. Сквад должен быть укомплектован экипажами (боты-человечки, персонажЫ, которые, или персы сокращенно). Сквад должен быть укомплектован техникой. Игрок может взять технику только своего сквада и насаждать в ней экипажем только своего сквада. Игрок может занять место (вернее - вселиться в голову) члена экипажа только своего сквада.

    Отсюда, механика игры сводится к следующему, если всё "делать правильно" (не пугайтесь только, никто сейчас так не делает):
    1. Заходит игрок на сайт сервера и регистрирует сквад.
    2. Создаёт себя как игрока и записывает себя в свой сквад командиром. Далее, он может приглашать в сквад сквады и игроков.
    3. Скваду выдаётся (покупается ) определённое кол-во членов экипажа и кол-во техники
    ----Пополнение техники и экипажа + прокачка экипажа - тут отдельная тема, и она пока особо не реализовывалась, заложены только возможности.
    4. Далее, игрок может создать самолёто-вылет (т.е. полетать, ну, как обычно кнопка "Создать"). Для этого выбирается техника и в технику сажается экипаж из доступного скваду.
    5. Теперь игрок "вселяется в голову" любого члена экипажа. (Но может и не вселяться, а, к примеру, отправить ботов на разведку/бомбёжку и т.д.)

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

    Как работает механизм "догфайт" статы:
    Если игрок ПЕРВЫЙ раз заходит на сервер, для него АВТОМАТОМ заводится учётка, далее для него автоматом создаётся сквад и игрок заносится в этот сквад. После, в сквад зачисляются 100 членов экипажа (персонажей) и ещё один "пепелац".
    Когда игрок создаёт самолёт и начинает "смотреть глазами члена экипажа" в БД-е создаётся самолёто-вылет, который заселяется "именованными" персонажами из сквада игрока, которые не находятся в полёте (именно для этого их 100, чтобы постоянно кто-то находился "на земле"), и пепелац привязывается к текущему самолёту.

    Такой механизм (и его догфайт-версия тоже) позволяет награждать и наказывать игрока независимо от того когда наступило "конечное" событие. Т.е. если ты пострелял в кого-то, сам сел и ушёл с сервера - награда найдёт героя. Не надо час кружить и ждать "когда он цдохнет". Если ты, гад такой, вышел из самолёта, или сервера под огнём супостата - тоже не переживай. Усё учтётся по заслугам, даже если твоя тушка упадёт через час
    Зачем и почему сделано именно так - можно долго объяснять ещё. На пока порции этого блюда хватит, а то я и так отвлёкся от основной темы.
    А о чём я ващще? А, да... А, нет. Ща проверю. Во! Объясняю откуда 1к ResID.

    Теперь, имея в голове представление что да как работает, опять считаем ResID:
    1,2,3 - было. 4-й достанется скваду первого игрока, 5-105 - именованным персам первого игрока. (Это, есс-но, если в течение первой битвы на сервер заходили игроки).

    А теперь считаем "итого": каждый новый игрок будет добавлять 103 строки в табличке ResID основной БД-ы, каждая новая битва - 2 шт.

    Вернусь к вопросам:
    Цитата Сообщение от SlavikSG Посмотреть сообщение
    5. Если на первый вопрос можно ответить утвердительно, то значит расшифровку этой моей одной единственной строчки из таблицы dbo.ResultInfo, под ID равную трем, нужно будет искать в таблицах битв? Так я понимаю?
    5 - На првый вопрос ответ - ДА, а на этот - НЕТ. ResID в БД битвы содержит ссылку на сводную статистику ВЫЛЕТОВ.

    Тут тоже нужно объяснять механику движка статы.
    То, что в основной БД-е есть некая строка со сводными результатами - это выяснили.
    Теперь БДЫЩ! Точно такая-же табличка ResultInfo есть в каждой БД битв, и поля в ней те-же.
    Объясняю зачем она нужна и что в ней храниться.

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

    Выше я упоминал, что перед тем, как человек появляется в самолёте автоматом "что-то происходит".
    А происходит следующее (пишу с привязкой по событиям):
    1. Самолёт появился на карте (не важно кем и как созданный)
    -создаётся самолёто-вылет, смолёто-вылету сервер присваивает уникальное в пределах битвы имя
    -создаётся ResID в БД битвы для хранения результатов самолёто-вылета
    2. В самолёте появляется экипаж (не разом, а по одному они появляются, соотв-но для 109-го это событие наступит 1 раз, а для 110-ки уже 2 раза)
    -создаётся персо-вылет, перо-вылет "присоединяется" к самолёто-вылету через имя самолёто-вылета и номеру места в самолёте
    -создаётся ResID в БД битвы для хранения результатов перо-вылета.
    3. Игрок "вселяется" в перса
    -создается человеко-вылет
    -корректируются данные о самолёто-вылете: даются ссылки, позволяющие идентифицировати "пепелац" и вселившегося игрока
    -по количеству мест в самолёте корректируются данные о перо-вылетах: даются ссылки, позволяющие идентифицировати "именованного" персонажа и игрока
    -создаётся ResID в БД битвы для человеко-вылета

    Показания в общей сводной статистике и сводной статистике вылетов завязаны следующим образом:
    -инфа через персо-вылет попадает в самолёто-вылет и в человеко-вылет(если такой был к нему "присоединён")
    -инфа от самолёто-вылета попадает в сводку по битве своей стороны и в сквад (если не было человеко-вылета, к примеру, летали чисто боты, или бот-стрелок, в котором не сидела нога человека, сбил кого-то)
    -инфа из человеко-вылета попадает в сводку по игрока и сквада
    -инфа от сквада передаётся вышестоящему скваду.

    Как-то так. В кратце. Для общего понимания вопроса.
    Что непонятно - спрашивайте

    З.Ы. Как подсказка для поиска в расшифровке полей таблиц. Посмотрите док "про картинки" в аттаче с БД. Из него можно понять что чего значит. В т.ч. и по таблице ResultInfo.

    З.Ы.Ы. И коротко на остальные вопросы: да, "вычищать" будем (если) физически БД-у. По стоимости - да, настраивали. Но, тут всегда можно самому перенастроить.

    З.Ы.Ы.Ы. Мильён записей в табличке - не есть горе. Причём, ващще. Тут важно что и как ты с ними делаешь.
    Крайний раз редактировалось Zed4ever; 29.01.2013 в 23:31. Причина: очепятки
    i7 2600К, 16Gb, GTX660Ti, SSD, Win7-64 full ака SDPG_Zed4ever

Ваши права

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