Доброго времени суток!
В свете последних событий (по поводу движка БоБа) - не имеет особого смысла "хранить в себе" создаваемые для него наработки.
Так как энтузиастов, на данный момент, поубавилось - на смарку работа в течение года, в общий доступ выкладывается сервер статистики, который позволяет вести учёт событий с их разбивкой по битвам, сквадам, игрокам и т.д.
Хочу сказать большое спасибо всем участникам проекта за работу!
Краткое описание возможностей сервера статистики можно получить тут: http://www.sukhoi.ru/forum/showthread.php?t=77992
Для общего понимания:
Сервер статистики базируется на командере от Small_Bee (http://www.sukhoi.ru/forum/showthread.php?t=76672), и получает от него всю необходимую информацию.
В качестве СУБД используется SQL Server Express 2008 R2. БД построена таким образом, чтобы обойти большинство ограничений накладываемых версией Express (кроме объёма ОЗУ - использует не более 1Гб).
На данный момент сервер статистики полностью функционирует - прошёл обкатку на всех серверах репки, как в режиме работы "локально", так и в режиме работы "по сети".
Для полноценной работы недостаёт вэб морды для вывода информации (информация по вэб-морде см. файл "Про картинки 2.doc" в приложении).
Для того, чтобы установить сервер статистики необходимо:
1. Установить командер (ссылку см. выше)
2. Установить SQL Server
Инструкция по установке Microsoft SQL Server Express 2008 R2:
http://www.kontur-extern.ru/support/faq/38/437
2. Создать каталог, в котором будут храниться базы данных
3. Скопировать в созданный каталог файлы Serv_DB.bak и Clear_Battle.bak
4. Подключить базу данных Serv_DB (см. аттач файл Serv_DB.bak)
Для чего:
- запустить среду SQL Server Management Studio
- подключиться к SQL серверу
- выбрать вкладку "Базы данных"
- вызвать контекстное меню, выбрать "Восстановить базу данных..."
- выбрать "С устройства:", указать файл Serv_DB.bak (кнопка "...")
- в поле "В базу данных:" ввести "Serv_DB"
- поставить галку "Восстановить"
- перейти на вкладку "Параметры", проверить/указать расположение БД и её журнала
- нажать кнопку "ОК"
- дождать восстановления БД
- проверить, что БД "Serv_DB" появилась в списке (на вкладке "Базы данных" вызвать "Обновить", либо переподключиться к SQL серверу)
5. Настроить системную таблицу
Для чего:
- нажать кнопку "Создать запрос"
- выполнить следующий запрос (нажать кнопку "! Выполнить"):
"USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[RepkaStatConfig]([Param_Name] [varchar](255) NULL, [Value] [varchar](255) NULL) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT INTO RepkaStatConfig (Param_Name, Value) VALUES ('DB_Path', 'C:\RepkaStat\R1DB')
GO"
, где C:\RepkaStat\R1DB - расположение файла Clear_Battle.bak
6. Настроить командер для работы с сервером статистики
Для чего:
- запустить командер с ключиком -repka
Пример: C:\Users\ХХХ\Desktop\rc\CommanderUI.exe -repka
- в командере перейти в раздел настроек (кнопка с перекрещенными ключами), далее раздел "Игровая статистика", поставить галку "Включить игровую статистику"
- ввести строку подключения к БД
Пример для сетевого расположения сервера статистики:
"Data Source=192.168.0.91,1433\SQLEXPRESS;User ID=ИМЯ ПОЛЬЗОВАТЕЛЯ;Password=ПАРОЛЬ;Initial Catalog=Serv_DB;Asynchronous Processing=true; Connect Timeout=10;"
Пример для локального расположения сервера статистики:
"Data Source=(local);Initial Catalog=Serv_DB;Integrated Security=True;Asynchronous Processing=true; Connect Timeout=3;"
- Нажать кнопку "Тест подключения", получить окно с информацией о попытке подключения к серверу. Если пишет, "Нешмоглая" - читаем снова от п.1
галка "Включить Вэб сервис" и настройки ниже - отвечают за передачу данных на вэб морду. Подробности их работы лучше спросить у автора.
- нажать кнопку "Сохранить"
- перезапустить командер
ВСЁ! Сервер готов к вливанию!
В приложении есть файлы, из которых можно понять логику работы сервера - делалось дсп, эпизодически и давно, так шо на полноценный SDK они не тянут.
У каждой хранимой процедуры есть каменты - что они делают и зачем, иногда, даже, не только в начале кода. Поэтому, считаю, что разобраться можно.
Нигде у себя не нашёл описания основных хранимых процедур, используемых для вывода информации на вэб морду, поэтому выкладываю здесь.
Для вывода "готовой" информации из недр БД-ы используются хранимые процедуры (ХП) базы данных (БД) ServDB, которые начинаются с "Show" (33 штуки).
ShowAllDep - вывод таблицы со всеми самолёто-вылетами (всех, либо только вылетов без участия игрока)
ShowAllPlayerDep - Показать все вылеты игрока
ShowBattleEvents - Показать события битвы (от и до)
ShowBattleEventsRows - Получить кол-во строк в таблице батл эвент.
ShowBattles - Показать сводку по битвам
ShowBattlesByTime - Показать сводку по битвам за период времени
ShowBattlesRows - Получить кол-во битв
ShowCurBattle - Показать текущую битву
ShowDepartures - Показать результаты самолётовылетов в битве
ShowDeparturesRows - Показать кол-во вылетов в битве
ShowDepCnt - Показать общее кол-во вылетов на разных самулях (всех, либо только вылетов без участия игрока)
ShowDepCountryCnt - Показать кол-во вылетов на самолётах разных стран (всех, либо только вылетов без участия игрока)
ShowDepDamages - Получить повреждения полученные в вылете только по агрегатам (с параметром нанесённые в вылете, с разбивкой по получателям)
ShowDepDetailDamages - Показать детализированные повреждения полученные в вылете (с параметром нанесённые в вылете, с разбивкой по получателям)
ShowDepEvents - Показать лог вылета (от и до) - Самый подробный лог. В нём есть ВСЕ события (в т.ч. попадание каждой пульки и нанесённый ей урон)
ShowDepEventsRows - Показать кол-во строк в таблице событий вылета
ShowDepEventsSec - Показать лог вылета (от и до) с уплотнением по секундам
ShowDepEventsShort - Показать сжатый лог вылета (д.б.б. основным методом вывода на вэб морду событий вылета)
ShowDepResult - Показать результат (для вылета, персо-вылета, человеко-вылета)
ShowDepTypeCnt - Показать кол-во вылетов на разных типах самулей (всех, либо только вылетов без участия игрока)
ShowDepTypeCountryCnt - Показать кол-во вылетов на самолётах разных стран по типам (всех, либо только вылетов без участия игрока)
ShowLastGroundDestroy - Показать поледнюю (Х штук) уничтоженную игроком наземку
ShowLastPlaneDestroy - оказать поледние (Х штук) уничтоженные игроком самолёты
ShowMedals_IfCnt - Показать количественные показатели выдачи наград
ShowPersDep - Показать персо-вылеты в битве
ShowPersDepRows - Показать кол-во строк в таблице персовылетов
ShowPilotsOnLine - Показать игроков он-лайн с их разбивкой по армиям и кто на чём летит и в ком сидит
ShowPlayerDep - Показать человеко-вылеты в битве
ShowPlayerDepCnt - Показать кол-во вылетов на разных типах самулей у игрока
ShowPlayerDepRows - Показать кол-во строк в таблице человековылетов в битве
ShowPlayerInfo - Показать информацию по игрокам (с фильтром)
ShowPlayerMedals - Показать награды игрокa
ShowResult - Показать результаты (для битвы, перса, игрока, сквада)
ОГРАНИЧЕНИЯ ВЕРСИИ
На текущем этапе разработки не реализованы ХП типа Show для вывода подробной информации для сквадов, персов, и "пепелацам" в ангаре (хотя полноценный учёт всех параметров для них ведётся).
Выложенная версия сервера статистики работает в режиме "догфайт", т.е. не требуется создавать сквад (есть возможность создавать сквады входящие в сквады), заносить в него пилототов, при вылете сначала выбирать самолёт из ангара, сажать в него персонажей и т.д.
Всё делается автоматом: при заходе НОВОГО игрока на сервер для него автоматически заводится сквад, скваду выделяется 100 бессмертных персонажей и выдаётся один "универсальный" самолёт в ангар. При вылете автоматом выдаётся самолёт из ангара, в него сажается свободный персонаж, в персонажа сажается игрок.
ИЗВЕСТНЫЕ ПРОБЛЕМЫ
При получении ранения персонажем в лог вылета армия инициатора ранения передаётся как "ноль" - нужно подправить в командере.
Крайне редко возникает исключение в событии "СамолётУничтожен", т.к. не поступает никакой информации по вылету - нужно подправить в командере.
Лог ошибок храниться в файле DB_ErrLog.txt, который автоматом создаётся в папке с ехе файлом командера.
Если ОЧЕНЬ коротко по этому проекту - то как то так. Ещё раз всем большое спасибо за участие.
З.Ы. Надеюсь, пригодится, и всё было не в пустую. Хотя, удовлетворение от участия в чём-то нужном (как казалось) для любимого симулятора я получил.
З.Ы.Ы. Чем смогу - помогу в развитии/исправлению багов/доработке, отвечу на любые вопросы по теме.
Спасибо за внимание.
ServDB.7z