PDA

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



Zed4ever
12.12.2012, 19:47
Доброго времени суток!
В свете последних событий (по поводу движка БоБа) - не имеет особого смысла "хранить в себе" создаваемые для него наработки.

Так как энтузиастов, на данный момент, поубавилось - на смарку работа в течение года, в общий доступ выкладывается сервер статистики, который позволяет вести учёт событий с их разбивкой по битвам, сквадам, игрокам и т.д.

Хочу сказать большое спасибо всем участникам проекта за работу!

Краткое описание возможностей сервера статистики можно получить тут: 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, который автоматом создаётся в папке с ехе файлом командера.

Если ОЧЕНЬ коротко по этому проекту - то как то так. Ещё раз всем большое спасибо за участие.

З.Ы. Надеюсь, пригодится, и всё было не в пустую. Хотя, удовлетворение от участия в чём-то нужном (как казалось) для любимого симулятора я получил.

З.Ы.Ы. Чем смогу - помогу в развитии/исправлению багов/доработке, отвечу на любые вопросы по теме.

Спасибо за внимание.

162633

Small_Bee
12.12.2012, 20:17
Исходники коммандера

RC_Old.7z - Рабочая 1.2 версия. Хелп для сервиса статистики при запущеном коммандере - http://{адрес_из_настроек}:{порт_из_настроек}/help. Сам сервис достаточно сырой, требует допиливания.
RC_New.7z - Незаконченная новая 2.0 версия, с поддержкой нескольких серверов на одной машине и оптимизированной dll-кой для игры. По сути рабочая, но не хватает UI (в состоянии эмбриона) и сервиса статистики. В сыром виде на одном конфиге, тем не менее, работает.

Оба проекта никак практически не откомментированы, однако код старался делать как можно более простым и понятным. Для обеих проектов надо будет сделать корректные референсы на dll-ки игры.
Можно пользоваться как угодно, целиком или по частям и т.п.
Архивы собирал спустя рукава, так что если чего не хватает, говорите.

LePage
12.12.2012, 20:29
Эй, я не понял, вы что? Побросали все? Еще ж нет никакого РоФаИла в природе и не будет даже через девять месяцев!

=Starik=
12.12.2012, 21:16
Спасибо, ребята, понимаю как вам сейчас досадно. Если мы чувстуем себя обманутыми, то каково же ваше огорчение.
Спасибо, что вы делали эту работу, зная, что в лучшем случае, услышите только спасибо, а тут и этого не случилось.

RBflight
12.12.2012, 21:32
Низкий вам всем поклон. Досадно.

Чибис
12.12.2012, 22:10
Да что такое, конец света что ли? БоБа, все списали что ли ? Завтра Steam его автоматом удалит?
На чем на летать то, пока у рофавских тарахтелок крылья прорежутся?

Zed4ever
12.12.2012, 22:43
Основная задача ветки - попробовать оставить на плаву тот этот проект. Ещё раз повторю - не хватает только вэб морды.
Вэбмордоделов серди "нас" нет.
Исходники выложены по той причине, что продолжать развивать проект смысла не имеет. А так, может, и сгодится кому.
З.Ы. Ацтавить панику, иопт! :)

Alex(31)
12.12.2012, 23:20
Мужики, без паники.., я не сильно понял о чем речь(наверное что то типа трофеев у плейстейшен)
Вэбмордоделов :) , шатающихся без дела полно на фриленсере (https://www.free-lance.ru/), всегда можно договориться(сам пользовался этими услугами, не подводили, а если уж утыкались в сложность задачи, то честно признавались заранее.. и денег не брали)
Заинтересованным нужно скинуться босу проекта на телефон, а он расплатится с исполнителем, сейчас по моему это не проблема
Как то так.., местный такой кикстартер :ups:

FW_Korsss
12.12.2012, 23:25
Мужики, без паники.., я не сильно понял о чем речь(наверное что то типа трофеев у плейстейшен)
Вэбмордоделов :) , шатающихся без дела полно на фриленсере (https://www.free-lance.ru/), всегда можно договориться(сам пользовался этими услугами, не подводили, а если уж утыкались в сложность задачи, то честно признавались заранее.. и денег не брали)
Заинтересованным нужно скинуться босу проекта на телефон, а он расплатится с исполнителем, сейчас по моему это не проблема
Как то так.., местный такой кикстартер :ups:

в БОБ не летаю. копеечкой поддержу.

Small_Bee
12.12.2012, 23:29
Дело не в отсутствии вебморделов, худо бедно это и я могу склепать, а в том, что проект, для которого это все делалось, закрыт окончательно, а движок, который позволял все это (и многое другое) делать, остался не у дел. Вызывались люди и для дизайна и для веб (всем большое спасибо), всех можно было при желании найти. Лично я не вижу смысла продолжать. Для тех, кто смысл в этом видит, исходники и отдаем.

=M=PiloT
12.12.2012, 23:36
Может в одночасье все смениться и повернуться , поломанный мерседес на улице ни чейный не бросят,подберут,починят ,пентагоны ломают ,оч вероятно боб расковыряют - теория ,но скажите что это невероятно ... а когда ковыряются маньяки по миру и не торопясь что получается видели уже много раз ,с одним правда недостатком - не централизованно . Из вмв симов имеем сей час два ила и все ,то что через 1,5 года будет РаФик - это завтра

Alex(31)
12.12.2012, 23:44
Для тех, кто смысл в этом видит, исходники и отдаем.
:) , чет мне подсказывает рано хоронить то.., РБР до сих пор живее всех живых и только на энтузиазме комьюнити, а если появится возможность в БоБ менять карту, то и комментарии как бы излишни...
Так что мой вариант всегда сработает в случае чего.. :thx:

Пока в онлайне не летаю.., но как за фишку на будущее _тоже поддержу

-atas-
22.12.2012, 17:43
Small_Bee и коллеги, на ATAG собирается команда моддеров для допиливания БоБа. Если надумаете вернуться, присоединяйтесь.

Что-то мне подсказывает, что подобной гибкости мы еще лет 6 как минимум нигде не увидим.

Small_Bee
23.12.2012, 01:25
Small_Bee и коллеги, на ATAG собирается команда моддеров для допиливания БоБа. Если надумаете вернуться, присоединяйтесь.

Что-то мне подсказывает, что подобной гибкости мы еще лет 6 как минимум нигде не увидим.

Мы работаем, стате быть )

-atas-
24.12.2012, 01:21
Мы работаем, стате быть )

Это радует ) Я на АТАГе ссылку на эту тему выложил. Может кто еще поковыряет. Вы бы туда тоже заходили )

SlavikSG
16.01.2013, 18:37
Большое спасибо за выложенные сервисы!!! :)

Пытаюсь реализовать, но дохожу до этого места и получаю ошибку.


...
Пример для локального расположения сервера статистики:
"Data Source=(local);Initial Catalog=Serv_DB;Integrated Security=True;Asynchronous Processing=true; Connect Timeout=3;"
- Нажать кнопку "Тест подключения", получить окно с информацией о попытке подключения к серверу. Если пишет, "Нешмоглая" - читаем снова от п.1
...

SQL запущен, работает. Нормально в него захожу. Таблицы пустые там создались. Но Коммандер из своей оболочки упорно не хочет соединяться с базой.

Данную строку нужно как писать? Буквально буква в букву? С кавычками, без? Может вместо Source=(local) нужно писать IP-адрес 127.0.0.1, а вместо Catalog=Serv_DB физический путь к базе данных, типа D:/BazaSQL?

В общем, что-то я тут явно не догнал.

Сам Коммандер работает нормально. Сервер запукает, останавливает. Лог сервера уже бежит не в родном окне сервера, а в самом Коммандере. В общем, тут все нормально... Мне бы с базой соединиться.

P.S.
Жутко тормозит интерфейс Коммандера. Буквально все еле шевелится в нем. Наверное, комп слабый. В данный момент юзается старенький Pintium 4 (2ггц) с двумя гигами оперативки на борту.

Zed4ever
16.01.2013, 22:10
для того, чтобы появилась возможность вставить строчку "Data Source=(local);Initial Catalog=Serv_DB;Integrated Security=True;Asynchronous Processing=true; Connect Timeout=3;" командер нужно запустить с ключиком "-repka" (создать ярлык, к примеру).
Если сервер установлен локально, то можно оставить и так, "Data Source=(local)", либо можно использовать более полную строку подключения типа:
"Data Source=WIN-R115V9I8SPS\IRSSSQL;User ID=USER;Password=PASSWORD;Initial Catalog=Serv_DB;Asynchronous Processing=true; Connect Timeout=10;", где
WIN-R115V9I8SPS\IRSSSQL - имя скуль сервера (имя компа+ само имя, то, которое ввели при установке)
User ID и Password нужно использовать, если авторизация не виндовая, либо виндовый пользователь, под которым запущен командер, не был добавлен к разрешённым пользователям при установке сервера. Для простоты можно задать пароль для пользователя "sa" и использовать его. "Catalog=Serv_DB" - это указано имя БД, а не путь на диске.
Если есть вопросы - могу объяснить/помочь с установкой - скапу отправил в личку.

--- Добавлено ---

З.Ы. Ещё подсказка:
Если указать MSSQLSERVER в качестве имени экземпляра при установке экспресса, то он установится как экземпляр по умолчанию, в этом случае в строке соединения на локальной машине достаточно будет указать (local). Иначе:
"имя компа\имя сервера"

--- Добавлено ---



P.S.
Жутко тормозит интерфейс Коммандера. Буквально все еле шевелится в нем. Наверное, комп слабый. В данный момент юзается старенький Pintium 4 (2ггц) с двумя гигами оперативки на борту.
А работаете по РДП/VNC? Если да - то так и есть, интерфейс с тормозами отрисовывает. Если "локальный дисплей" - то не замечал тормозов, да и производительности Вашего железа должно хватать.

SlavikSG
17.01.2013, 09:16
...
Если указать MSSQLSERVER в качестве имени экземпляра при установке экспресса, то он установится как экземпляр по умолчанию, в этом случае в строке соединения на локальной машине достаточно будет указать (local). Иначе: "имя компа\имя сервера"...
Собственно, это и явилось засадой. В мануале по установке SQL сказано дословно следующее:
5. В окне настройки экземпляра необходимо в поле Именованный экземпляр ввести уникальное имя экземпляра, например, KELITESQL и нажать кнопку...
Вот я и ввел свое уникальное имя. А в строке подключения к базе при этом вводил Data Source=(local). Потому Коммандер и не коннектился к базе. Сейчас моя строка выглядит следующим образом:
Data Source=MONTAJKA\SQLPROBA;Initial Catalog=Serv_DB;Integrated Security=True;Asynchronous Processing=true; Connect Timeout=3;
Тест на коннект с базой проходит на ура. Спасибо за разъяснения!


...
А работаете по РДП/VNC? Если да - то так и есть, интерфейс с тормозами отрисовывает. Если "локальный дисплей" - то не замечал тормозов, да и производительности Вашего железа должно хватать.
Не! У меня все гораздо проще. RAadmin юзаю. А говорю я, конечно, про локальное управление. Тормозит очень здорово. Буквально все закладочки, галочки, все двигается в очень большой задумчивости. В принципе, оно это мне сильно не мешает. Настроил один раз и забыл. Главное, чтобы это никак на работу самого сервера не влияло. Сегодня ночью сервак в холостом режиме (ну, почти в холостом), отработал на ура до самого утра и продолжает работать и сейчас. Посетители были ночью. Немного. Даже сейчас утром кто-то заходил...

У меня сейчас возник другой вопрос. Я так понимаю, самый существенный:
А что-то тихо в таблицах!!! Не вижу ни одной записи в статистике (в базе Serv_DB). Вчера специально топил кораблики на сервере. Ботов сбивал от оставленных мною же самолетов. Даже одного буржуя сбил, подвернувшегося под руку. Сам убивался ни раз. В базе тишина гробовая. Ничего не появилось. Все таблицы пустые. Ну, кроме служебных, которые изначально были заполнены. Наверное я опять что-то не так делаю? Или быть может, нужно в скрипте миссии что-то еще прописывать, чтобы это дело заработало?

Zed4ever
17.01.2013, 11:10
Для начала нужно проверить файл DB_ErrLog.tx (лежит рядом с ехе файлом командера).
Если в нём только записи об успешном подключении - значит всё супер, и работает как надо.
Если в нём куча сообщений об ошибках - значит надо разбираться шо сие значит. 90% - не верно указан путь к шаблону БД для битв (или вообще не указан) - решение см. п.5 из 1-го поста.

Поясню общий принцип работы.
БД Serv_DB это БД, которая содержит "сводную" (игроки, персы, сквады, кто сколько всего сбил, сколько умер, сколько очков заработал, сколько было битв, какие виды техники существуют, стоимость техники и т.д. и т.п.) информацию, и позволяет получить доступ к "подробной" (логи битвы и самолёто-вылетов, инфа по самолето/персо/человеко-вылетам в битве, результаты с/п/ч-вылетов) информации средствами хранимых процедур (ХП) (см. выше ХП Show____).
Также, через ХП этой БД командер вливает всю информацию о событиях на БоБ-сервере.
В БД имеются следующие таблицы:
BattleInfo - сводная информация по битвам (какая карта, чем окончилась, сколько длилась, ссылка на сводные результаты и т.д.)
EventInfo - текстовые сообщения событий
GeneralText - текстовые сообщения "общего назначения"
HangarInfo - инфа о "пепелацах" (пока только самолёт, но м.б. любой управляемый объект) износ, раскраска, борт номер и т.д.
LastGroundDestroy - инфа о 5 (или 10 - не помню) последних уничтоженных игроком наземных объектов
LastPlaneDestroy - см. выше, но для самолётов
Medals_Ribbons - информация о достижениях каждого игрока ("уровень" пилота, медали, нашивки и т.д.)
Medals_Ribbons_IfCnt - настройки количественных показателей, по которым определяется выдача наград (1 строка - 1 настройка, можно создавать свои настройки по желанию)
ObjectInfo - тут текстовые названия объектов в игре
ObjTypeScore - "стоимость" объекта, в зависимости от его класса и типа (ягер и бонбер, пилот и наблюдатель стоят по разному, шлюпка и линкор тоже - вот тут это и настраивается)
PersonInfo - информация по персонажам: (не игрок! Перс - это бот в "пепелаце". Игрок "вселяется" в перса) уровень умений (как в полном редакторе), налёт, ссылка на результаты и т.д.
Pilots_OnLine - инфа об игроках он-лайн
PlayerDep_Log - ссылки на все вылеты игроков во всех битвах
PlayerInfo - информация об игроках: имя, в каком скваде, ссылка на результаты, аська, текуший статус, стрик (текущий и максимальный) и т.д.
ResultInfo - "подробные" результаты, (везде, где в Serv_DB ссылка на результаты - это в неё) тут море чего: очки, кол-во уничтоженного и т.д., итого (на текущий момент) 136 параметров.
SquadInfo - информация о скваде: название, входит-ли в другой сквад, ссылка на результаты сквада, кто командир и т.д.


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

З.Ы. Также, чуть позже, выложу новые версии БД (доработана система наказаний, наград, вывод инфы в логи битвы и вылета).

SlavikSG
17.01.2013, 12:20
... где C:\RepkaStat\R1DB - расположение файла Clear_Battle.bak...
Ой! Ступил по полной! Путь я указал свой, но вот хвостик пути оставил ваш "\R1DB" и получилось у меня D:\BazaSCL\R1DB Даже и не знаю, зачем так сделал. Поздно было. Видать устал уже... Сейчас все поправил. Таблицу удалил (почему-то исправлять себя в живую она мне не разрешила) и запустил запрос по новой. Теперь все выглядит вот так:
http://img-fotki.yandex.ru/get/6447/1330300.4e/0_15a504_1b974466_L.jpg (http://img-fotki.yandex.ru/get/6447/1330300.4e/0_15a504_1b974466_orig.jpg)

Думаю, должно пахать. Проверить пока не могу. Ну, если только кто-то зайдет на сервер и активно на нем полетает.

А вообще, можно как-то проверить без пользователей, стало уже что-то писаться в таблицы или нет? Пока смотрю, все по прежнему. Никаких записей в таблицах нет. А на сервере проскочило только одно единственное сообщение:
Server: ИИ на Spitfire IIa () влетел в ландшафт.

Спасибо за расклад по таблицам. Теперь все намного понятнее стало.


...чуть позже, выложу новые версии БД (доработана система наказаний, наград, вывод инфы в логи битвы и вылета).
Только, пожалуйста, с подробным мануалом, как обновить уже текущую базу данных. Ок? :)

P.S.
За журналом ошибок понаблюдаю...

Zed4ever
17.01.2013, 12:59
Вот ещё - для того, чтобы исключить влияние ошибок и т.д. лучше почистить статистику.
Для этого:
1. Остановить сервер (из командера)
2. Вычистить файл DB_ErrLog.txt (проще контролировать наличие ошибок. Сейчас он, видимо, уже "длинный-длинный")
3. В БД Serv_DB выполнить запрос с вызовом ХП ClearAll "execute ClearAll" (удаляет все БД битв, в БД Serv_DB вычищает все таблички, кроме служебных)
4. Запустить сервер

После такой операции, даже если никто не заходил на сервер, должна появиться БД "Work_DB_1". В табличке BattleInfo появиться строка с инфой о 1-ой битве, в табличке результатов ResultInfo 2 строки с результатами для синей и красной стороны.

Посмотреть инфу "в человеческом виде" по битве можно, если В БД Serv_DB выполнить запрос с вызовом ХП ShowBattles "execute ShowBattles".
Посмотреть лог битвы: в БД Serv_DB выполнить запрос с вызовом ХП ShowBattleEvents "execute ShowBattleEvents 1", где "1" - номер битвы.
Если на карте существуют боты- самолёты, можно посмотреть лог самолёто-вылета: запрос "execute ShowBattleEvents 1, null, null,null, 1", где параметры следующие (по порядку):
1 - номер битвы
null - имя самолёто-вылета (текстовая строка)
null - строка с какой выводить
null - строка по какую выводить
1 - индекс самолёто-вылета (используется, если не задано имя самолёто-вылета).
Если ботов много, то индекс "1" можно прибавлять+1, т.е. 2,3,4,5...
А, если, ботов ещё и заставить повоевать др. с др., то можно увидеть "красивый" лог с попаданием каждой пульки и результатом её деятельности.

SlavikSG
17.01.2013, 17:59
Не получается! :(
Не пишется в таблицы ничего. Даже восстановил систему имиджем из Акрониса и поставил все с нуля. Не пашет. Таблицы пустые. Коммандер с базой соединятся, если судить, что "Тест кнопкой" это гарантированная проверка. Запуск и остановка сервера происходят на ура. Вроде внешне все в порядке. Никаких ошибок в логах Коммандера нет. Там вообще пусто. Я даже было подумал, что авторизация к SQL-серверу с помощью "MONTAJKA\SQLEXPRESS" не имеет право писать в таблицы. Проверил в живую по таблице Pilots_Online. Вручную можно туда писать ID-шники.

Теперь по Коммандеру:
Если делать все в точности, как написано про его установку тут:
http://www.sukhoi.ru/forum/showthread.php?t=75862
то миссия даже и не стартует. Бесконечно в логе висит надпись:
Loading mission...
Я имею в виду про то, что если скрипты миссий должны быть обязательно приведены к такому виду:
// It`s an auto-generated script from REPKA.Commander
//$reference REPKA.Stat.dll
using RepkaMissionsLib;
public class Mission : RSTMission
{
public override void Inited()
{
base.Inited();
BattleName = "vulkan";
MapName = "Online_Volcanic_Island"; //
}
}
То в этом случае миссия уже реально не грузится.

Так же не появляются карты, в ротации Коммандера, если их поместить в папку:
C:\Documents and Settings\Юзверь\Мои документы\1C SoftClub\il-2 sturmovik cliffs of dover\REPKA.Commander\Missions
А судя по описанию, Коммандер ОБЯЗАН их увидеть.
Так же не создаются автоматом скрипты для миссий, где изначально скриптов нет. А судя по описанию, они тоже ОБЯЗАНЫ создаваться.

В общем, я в полных непонятках. :(

Скачал даже готовую миссию Репки. Там файлы smp_dog1.*
Уж там-то наверняка все правильно написано и под Коммандер заточено. Но не пашет и эта миссия! Также бесконечно висит с надписью:
Loading mission...
И только когда я жму кнопку "Остановить сервер" на этой зависшей мисси, в логе Коммандера успевает проскочить несколько строк. Дословно он пишет это:
Останавливаем сервер...
Load landscape...
Load bridges...
Load static objects...
Сервер остановлен.

В общем, ерунду пишет... :(



...
После такой операции, даже если никто не заходил на сервер, должна появиться БД "Work_DB_1". В табличке BattleInfo появиться строка с инфой о 1-ой битве
...
Автоматом создается новая база с новыми таблицами???!!!
Ничего такого не заметил. Все тихо, как в танке.

Zed4ever
17.01.2013, 18:20
Тэкс. Тут, видимо, вопрос больше к Тимофею. Либо, если есть возможность - могу по РДП (под Вашим присмотром) посмотреть.
Я, вроде, этап подключения карт, не без труда, но проходил успешно.
В новой версии командера система подключения карт будет более человеколюбива:)
Файл DB_ErrLog.txt создаётся? В нём есть чего?
З.Ы. А как сервер в сети называется?

Small_Bee
17.01.2013, 22:01
Ну....
Начнем с того, что сильно спешит товарищ. База и исходники выкладывались "как было", т.е. ни корректная работоспособность, ни работоспособность в принципе не гарантировались. Тем более указывалось, что требуется допиливание.
Ну и странно юзать первую версию коммандера с актуальной базой. Актуальная зарелизенная версия коммандера - 1.2.
Если конечно есть желание разбираться со статой именно сейчас и не ждать, то надо брать исходники базы и коммандера, и допиливать самостоятельно. Но для этого надо знать С# и T-SQL как минимум.
Работоспособные версии я выкладывал, и там нет ни статы, ни базы.

SlavikSG
17.01.2013, 22:43
...Ну и странно юзать первую версию коммандера с актуальной базой...
Боже упаси!
Конечно юзается последняя версия Коммандера. Просто мне пришлось несколько раз проследовать по многим ссылкам после этой фразы:

...Порядок установки не изменился...
и так следовал, наверное, до самой первой версии Коммандера, пока не добрался до описания.

В общем да, вы правы. Нужно серьезно знать C#. И тем более серьезно, чтобы разобраться с чужой программой.


...если есть возможность - могу по РДП (под Вашим присмотром) посмотреть...
Я кстати, тоже про это подумал. Но может что-то более демократичное? Тот же TeamViewer, например? В общем, если мне конкретно приспичит, то обращусь обязательно.
Заранее спасибо! :)

Zed4ever
17.01.2013, 23:09
TeamViewer - именно он и скрывался под фразой "под Вашим присмотром", просто, обычно "второй" участник не имеет локального доступа, а по РДП стучиться. Если шо - моя скапа у Вас есть :)

Small_Bee
17.01.2013, 23:53
В общем да, вы правы. Нужно серьезно знать C#. И тем более серьезно, чтобы разобраться с чужой программой.


Сарказм неуместен. Или вы пользуетесь собранными и работоспособными версиями, или берете сырое, дорабатываете его до своих потребностей и пользуетесь. Зачем ставить базу, из которой Вы не сможете вытянуть информацию?

SlavikSG
18.01.2013, 10:09
...Зачем ставить базу, из которой Вы не сможете вытянуть информацию?
Ну, почему не смогу? На PHP, я думаю, можно было бы присоединиться к этой базе и вывести в WEB-интерфейс что-то не сложное. Была бы база.


TeamViewer - именно он и скрывался под фразой "под Вашим присмотром"...
Ага. Я понял. :)
А то, дааа... Обычно, когда юзается "Удаленный рабочий стол", то хозяин компа не видит, что там творит подключившийся удаленно. Что не есть гуд. Особенно, когда нужно мышой показать кому-то, что и как делать нужно.

Ладно, ребяты. Спасибо за помощь!
Я тут еще поковыряюсь сам с этой проблемой. Было бы время. Сейчас с этим совсем худо стало. Если что, то залезу с вопросами в эту тему:
http://www.sukhoi.ru/forum/showthread.php?t=68629

Zed4ever
18.01.2013, 10:23
М.б., сначала, заведём БД-у? А потом РНР-ште на здоровье:) М.б. и Ваши наработки использовать в последствии сможем.

SlavikSG
23.01.2013, 18:22
Сделал очередную попытку запустить статистику. Написал про это тут:
http://www.sukhoi.ru/forum/showthread.php?t=76672&page=2&p=1959694#post1959694

=ZH=Raiden
24.01.2013, 21:27
4. Подключить базу данных Serv_DB (см. аттач файл Serv_DB.bak)[/B]
Для чего:
- запустить среду SQL Server Management Studio
- подключиться к SQL серверу
- выбрать вкладку "Базы данных"
- вызвать контекстное меню, выбрать "Восстановить базу данных..."
- выбрать "С устройства:", указать файл Serv_DB.bak (кнопка "...")
- в поле "В базу данных:" ввести "Serv_DB"
- поставить галку "Восстановить"
- перейти на вкладку "Параметры", проверить/указать расположение БД и её журнала
- нажать кнопку "ОК"
- дождать восстановления БД
- проверить, что БД "Serv_DB" появилась в списке (на вкладке "Базы данных" вызвать "Обновить", либо переподключиться к SQL серверу)

нет у меня этого меня про базу данных,помогите плиз

Zed4ever
24.01.2013, 23:49
Шо? Чего нет? Serv_DB.bak? Он в архиве. SQL Server Management Studio? Он при установке скуль сервера появится. По какому пункту "нет у меня этого меня про базу данных"? Уточните, плз. :)
МенЯ(ю) нет?
164466

=ZH=Raiden
24.01.2013, 23:55
Шо? Чего нет? Serv_DB.bak? Он в архиве. SQL Server Management Studio? Он при установке скуль сервера появится. По какому пункту "нет у меня этого меня про базу данных"? Уточните, плз. :)
МенЯ(ю) нет?
164466

вот иенно этого пункта "базы данных" у меня и нет

Zed4ever
25.01.2013, 08:15
Это говорит о том, что SQL Server установлен некорректно, или "не в нашей конфигурации". Попробуйте его переустановить. А ещё, если можно, выложите скрин как у меня постом выше, а ещё скрин диспетчера конфигурации (SQL Server Configuration Manager, находится пуск->СкульСервер->Средства настройки) вкладку "Службы SQL Server".

=ZH=Raiden
25.01.2013, 10:37
Это говорит о том, что SQL Server установлен некорректно, или "не в нашей конфигурации". Попробуйте его переустановить. А ещё, если можно, выложите скрин как у меня постом выше, а ещё скрин диспетчера конфигурации (SQL Server Configuration Manager, находится пуск->СкульСервер->Средства настройки) вкладку "Службы SQL Server".

верно,служба скуля не хочет запускаться,надо пробовать переустановить

SlavikSG
25.01.2013, 16:41
Уже даже и не знаю, куда писать. То ли в тему про Коммандер, то ли в тему, про Статистику. Но судя потому, что сам Коммандер под Windows 7 сейчас заработал самым распрекрасным образом, то, наверное, нужно писать сюда.

Итак! Поставил свежую ОС Windows 7 (32bit) и опять проделал все то же самое. Сейчас Коммандер прекрасно запускает все мисси. Ничего не зависает. Запускает нормально и из Ротации и запускает нормально, если заполнено поле "Команда после запуска". Раньше, если даже в пустую миссию добавлялись скрипты для статистики, то висло стопудово. Висло под Win XP. Но под Windows 7 сейчас все нормально. Не виснет. Но при этом упорно ничего не пишется в базу данных!!!

У меня несколько вопросов к тем у кого статистика работает:
1. Какая операционка у вас используется? Windows 7 (32bit) или Windows 7 (64bit)?
2. Где был взят источник для Microsoft .NET Framework v4.0 Extended? Я свой брал тут:
http://www.microsoft.com/ru-ru/download/details.aspx?id=17718
И то ли я, вообще, применил?
3. Какая строка используется для подключения к базе данных в Коммандере? С вводом имени и пароля или простая?
4. По какому пути находится Коммандер, где точно лежат файлы миссий и где вы расположили базу SQL? И с каким названием каталог базы?
5. Лог файл, образующийся рядом с базой SQL, занимает у меня почти 400 мегабайт!!! Это нормально? Это так и должно быть? Странно просто! База не работает пока еще, а лог-файл такой здоровенный..
6. Работает ли у вас статистика, если не запускать миссии в ротации? То есть работает ли она, если запущена одиночная миссия с заполненным в Коммандере полем, "Команда после запуска"? Команда типа - f d:\1.cmd
7. Какую версию Коммандера вы используете? RC_Beta_v1.2.0.4 или RC_Beta_v1.2.0.5?
8. И последнее... Очень прошу!!! Дайте любую миссию, с которой статистика у вас РАБОТАЕТ!!! Плиииз!!! Любую, простейшую... С двумя миссиями, идущими в комплекте с Коммандером, так же не пашет статистика. Но может они уже не актуальны для новых версий Коммандера.

Примечание для Тимофея:
Если миссии запускаются из ротации, то нигде никаких файлов с ошибкой не появляется. Ни в Коммандере, ни в папке с игрой. Если запускать одиночную миссию с заполненным полем "Команда после запуска" - f d:\1.cmd то в основной папке игры образуются два файла:
REPKA.Stat.dll.errors.txt
[2013-01-25 11:38:57] Value cannot be null.
Parameter name: s
и
REPKA.Stat.log.txt
[2013-01-25 11:38:57]
Object reference not set to an instance of an object.
at rc_client.core.ExtensionMain.OnBattleInit()
[2013-01-25 11:39:03]
Object reference not set to an instance of an object.
at rc_client.core.ExtensionMain.OnActorCreated(Int32 missionNumber, String shortName, AiActor actor)
[2013-01-25 11:39:03]
Object reference not set to an instance of an object.
at rc_client.core.ExtensionMain.OnActorCreated(Int32 missionNumber, String shortName, AiActor actor)
[2013-01-25 11:39:04]
Object reference not set to an instance of an object.
at rc_client.core.ExtensionMain.OnMissionLoaded(Int32 missionNumber)
[2013-01-25 11:39:04]
Object reference not set to an instance of an object.
at rc_client.core.ExtensionMain.OnBattleStarted()
[2013-01-25 11:40:15]
Object reference not set to an instance of an object.
at rc_client.core.ExtensionMain.OnBattleStoped()

Так происходит со всеми миссиями, которые у меня есть сейчас в наличии. Может вам эти мессаги что-то скажут...

В общем, я иссяк. В голове пусто. Больше никаких мыслей нет. :(

Для Zed4ever лично:
Запустил на компе TeamViewer. Версия последняя.
Путь к "пользовательской" игре:
C:\Users\SlavikSG\Documents\1C SoftClub\il-2 sturmovik cliffs of dover
Путь к основной игре:
D:\Games\Steam\steamapps\common\IL-2 Sturmovik Cliffs of Dover
Коммандеры и база сидят в:
D:\BazaSQL
D:\RC_Beta_v1.2.0.4
D:\RC_Beta_v1.2.0.5
Stеам пароль помнит. Можно просто запускать ярлык с Рабочего стола. Запускается он, как и всегда, очень тормознуто.

Будет желание поковыряйся. Комп в полном твоем распоряжении.
Сервак сейчас по умолчанию стартует с именем "Test". В игровом клиенте появляется сразу и без проблем. Так что можно тестить сколько угодно. Сервак сейчас запущен и работает. В игровом клиенте должен быть виден.

TeamViewer настроен так, что можно смело перегружаться. Он потом стартует, пароль не изменится.

Глюков на компе не заметил. Винда совсем свежая. Ну, кроме одного... Желательно не обновлять Винду. Что-то очень серьезно комп начинает тормозить на этом деле. Особенно на перезагрузках, когда начинается "применение" этих самых обновлений. То ли оперативки маловато, то ли винт тормознутый.

ID и пароль от TeamViewer-а кинул тебе в личку.

Да сохранят, великие и могучие, Small_Bee и Zed4ever мой комп в целости и сохранности!
Аминь! :)

Zed4ever
26.01.2013, 02:00
Вопрос/просьба: можно первые "100" строк из файла лога БД-ы, а то 400мб - это явная ошибка где-то. Видимо, каждое событие вызывает запись в лог (см. = ошибка).

--- Добавлено ---

Зашёл на сервер с указанным ИД и паролем. Сервер НЕ ВЁЛ статистику. Запустил с Вашего рабочего стола ярлык, где есть ключ "-repka" - стат запустилась. Проверил. БД- по первой битве Work_DB1 появилась. Ошибок нЭма. М.б. без ключа запускали?

=ZH=Raiden
26.01.2013, 09:41
Это говорит о том, что SQL Server установлен некорректно, или "не в нашей конфигурации". Попробуйте его переустановить. А ещё, если можно, выложите скрин как у меня постом выше, а ещё скрин диспетчера конфигурации (SQL Server Configuration Manager, находится пуск->СкульСервер->Средства настройки) вкладку "Службы SQL Server".

при установке вылазит вот такая вот беда-службы компонента Database Engine ошибка,Репликация SQL Server ошибка

Zed4ever
26.01.2013, 11:20
при установке вылазит вот такая вот беда-службы компонента Database Engine ошибка,Репликация SQL Server ошибка

Вот тут, наверное, только гугл поможет. Сорь. Не было у меня случая, чтобы скуль сервер не поднимался после установки.
Устанавливаешь по инструкции?

=ZH=Raiden
26.01.2013, 14:20
Вот тут, наверное, только гугл поможет. Сорь. Не было у меня случая, чтобы скуль сервер не поднимался после установки.
Устанавливаешь по инструкции?

да,конечно,плюс в процессе выскочила ошибка о том,что не найден какой-то файл

SlavikSG
26.01.2013, 21:06
...Запустил с Вашего рабочего стола ярлык, где есть ключ "-repka" - стат запустилась...
Большое человеческое спасибо!!! :)

Сейчас, когда все пашет, понимаю, что я делал не так. Тут целый комплекс был глупых ошибок...

Начинаю разбираться дальше.

=ZH=Raiden
26.01.2013, 21:15
Вот тут, наверное, только гугл поможет. Сорь. Не было у меня случая, чтобы скуль сервер не поднимался после установки.
Устанавливаешь по инструкции?

а msql для этого дела подойдёт? для стата ила когда-то ставилась и она работает

Zed4ever
26.01.2013, 22:08
MySql - это другая СУБД. С ней работать не будет.
Так и не получается установить?
Тогда, может, подробнее расскажите по проблеме:
Какая ОС? Какую версию скуль-сервера ставите? Какую ошибку выдаёт при установке?

--- Добавлено ---


Большое человеческое спасибо!!! :)

Сейчас, когда все пашет, понимаю, что я делал не так. Тут целый комплекс был глупых ошибок...

Начинаю разбираться дальше.
Большое человеческое пожалуйста:)

SlavikSG
28.01.2013, 10:04
Можно вопрос?
Я так понял, работающая статистика Коммандера под каждый запуск новой миссии создает в SQL-сервере новую базу Work_DB_x, а в базе Serv_DB, в таблице BattleInfo, создает новую запись. Пока я в дебри не лез, просто сразу хочется спросить, можно грохать эти самые "новые базы" и записи в таблице BattleInfo? Повлияет это на работу статистики в дальнейшем? Или может есть какой-то другой способ предотвращающий раздувание статистики до очень больших размеров?

Zed4ever
28.01.2013, 17:58
По логике построения БД - в целом правильно.
По логике "прибивания" - нет. Если требуется почистить пространство - нужно в БД-е Serv_DB запустить ХП ClearAll, для чего выполнить скрипт "execute ClearAll" (при остановленном сервере БоБ).
Чистить руками - не есть гут. Там ссылки сплошные идут - можно лишнего навырезать и тогда море ошибок валить будет.

З.Ы. Как мысль себе на заметку - нужно приделать ХП, который бы вычищал только инфу по битвам, но оставлял сводную статистику для игроков/сквадов/персов.

SlavikSG
28.01.2013, 22:20
...Там ссылки сплошные идут - можно лишнего навырезать и тогда море ошибок валить будет...
Понял. Значит лучше так не делать.


...Как мысль себе на заметку - нужно приделать ХП, который бы вычищал только инфу по битвам, но оставлял сводную статистику для игроков/сквадов/персов.
Очень бы не помешало. А то ведь будет пухнуть очень неоправданно каталог с базами. Как снежный ком.

А есть где-то инфа, по таблицам? Какое поле, за что отвечает. В доках я чет ничего не нашел. Таблиц очень много, а полей и того больше. И что значит параметр Dep_Name в Хранимых процедурах?

Вообще, хотелось бы в идеале сделать запрос, который показал бы самые простые для игрока вещи:
1. Сколько, за весь период ведения статистики, игрок сбил самолетов.
2. Сколько подбил наземной (водной техники).
3. Каков его процент попаданий в целом.
4. На каком он месте по отношению к другим игрокам.
5. Сколько раз был сбит или просто свалился сам.

Такое вообще реально сделать из тех данных, которые накапливаются сейчас?
Из того, что сейчас находится в Хранимых процедурах, я что-то такого не увидел. Может не до конца понял.

Zed4ever
29.01.2013, 01:56
Пост 19 в этой ветке - есть инфа по табличка основной БД-ы. Она без значения каждого поля. Вот только для "пользователя" интереснее поля вывода через ХП, т.к. во многих случаях выводится "склейка" из нескольких таблиц. Причём, как по замене данных одной таблицы из другой (подстановка "человеческих" названий и т.д.), так и склеивание столбцов по ссылке (налёт, очки и т.д. по ссылке из таблицы результатов).

Далее по вопросам 1-5. Всё это есть.
Сводная статистика по всем "абонентам" (игрок, сквад, персонаж, битва, самолёто-вылет, персо-вылет, человеко-вылет) хранится в табличках ResultInfo. Там много чего, итого 136 параметров.
Единственное, процент попаданий - учёт заведён, но он не работает пока. Требуется доработка на уровне командера.

Dep_Name - это уникальное имя самолёто-вылета в битве. Через него ведётся поиск/вывод данных с ним связанных.
Вместо имени можно использовать ID самолёто-вылета. Тогда в ХП на место имени нужно подставить пустую строку или null, а в ID номер.
Имя и ID вылета можно получить из лога битвы.
К примеру, если требуется вывести полную сводку по игроку - запрашиваем черех ХП ShowPlayerInfo 'SDPG_Zed4ever'
В полученной строке смотрим значение поля ResID. Далее ХП ShowResultInfo <ResID> - получаем налёт, чего сбил и сколько и каких, уничтожил, убил, очков заработал, помер, сел не так и т.д.
Если взять <ResID> для битвы и для конкретной стороны, то ХП ShowResultInfo <ResID> покажет сколько налетали всего, сколько ПОТЕРЬ самолётов, наземки и ресурсов, сколько очков и кем и каких заработано...
Если получить <ResID> для вылета - ХП ShowDepResultInfo <Номер битвы>, <ResID> - покажет подробные достижения конкретно в этом вылете.

Если требуется оценить игроков по одному из критериев - для этого е ХП ShowBestPlayer, для которой нужно указать этот критерий. Если критерий не указан - выводятся игроки отсортированные посумме заработаных очков (плюсуются 6 категорий: истр очки, бомберские, штурмовые, разведовательные, транспортные и спасательные).

По размерам БД-ы. Что есть "критичный" объём данных? На Р4 за месяц-два накопилось несколько гиг архивов. До 10, вроде. Учитывая характер догфайтности оной - не очень критично, мне кажется. Пара фильмов ДВД :)
З.Ы. По механизму сохранения сводки "за историю битв" - тут надо подумать как правильно сделать.

SlavikSG
29.01.2013, 12:01
...Далее ХП ShowResultInfo <ResID> - получаем налёт, чего сбил и сколько и
...
Если требуется оценить игроков по одному из критериев - для этого ХП ShowBestPlayer...
А что-то нет у меня таких "вкусных" хранимых процедур. :( Может поэтому я и задал свои пять вопросов?



...По размерам БД-ы. Что есть "критичный" объём данных? На Р4 за месяц-два накопилось несколько гиг архивов. До 10, вроде...
Ой мама родная! У меня сейчас всего 10 гигов свободного места осталось (комп и винт старенькие). А что же будет, за несколько лет? Статистика ИЛ-2 у меня как-то четыре года жила и накапливалась. Там просто копейки набегали. Статистика, она на то и статистика... И в теории она должна накапливаться бесконечно долго. И процедура ClearAll вообще никогда не должна применяться. Сдается мне, решением этого дела мог бы стать полный отказ от создания каждый раз новой базы, под каждую новую битву. Но переделать это сейчас, скорее всего, уже невероятно сложно. Потому "сохранение сводки за историю битв", рано или поздно, может стать довольно насущным вопросом.

Вопрос:
Как можно поиметь у себя две процедуры?
ShowResultInfo
ShowBestPlayer
Я ведь потому и спросил про названия полей и какое поле за что отвечает. В принципе, можно было бы подумать про то, как самому состряпать тот или иной запрос. Но если оно уже все есть, то это гуд.

eekz
29.01.2013, 13:26
Я бы предожил принцип сезонов ладдера battle.net для сервера статистики проекта БзБ - т.е. сброс детальной статистики с сохранением какой-то общей информаци об игроке.
Преиимущества:
1. Меньший объём статы с течение времени
2. Доп. мотивация играть после сброса статистики
3. Сохранение обычной мотивации путём сохранения достижений даже после сброса

Zed4ever
29.01.2013, 17:01
По поводу ShowResultInfo - ошибся я, на память писал:) ShowResult она называется. ShowBestPlayer - опять я ошибся:) В выложенной версии её нет. Ещё "чуть-чуть" и обязательно обновлю выложенные версии.

По поводу раздувания статистики - согласен с Вами на все 100%.
Обязательно приделаю ХП "DelWorkDB", которая будет вычищать указанную БД битвы + вычищать из Serv_DB ссылки на базы битв.
Соотв-но, общая БД-а будет раздуваться с гораздо меньшей интенсивностью.

Small_Bee
29.01.2013, 17:33
А что-то нет у меня таких "вкусных" хранимых процедур. :( Может поэтому я и задал свои пять вопросов?
Ой мама родная! У меня сейчас всего 10 гигов свободного места осталось (комп и винт старенькие). А что же будет, за несколько лет? Статистика ИЛ-2 у меня как-то четыре года жила и накапливалась. Там просто копейки набегали. Статистика, она на то и статистика... И в теории она должна накапливаться бесконечно долго. И процедура ClearAll вообще никогда не должна применяться. Сдается мне, решением этого дела мог бы стать полный отказ от создания каждый раз новой базы, под каждую новую битву. Но переделать это сейчас, скорее всего, уже невероятно сложно. Потому "сохранение сводки за историю битв", рано или поздно, может стать довольно насущным вопросом.


Изначально стояла задача собирать как можно более подробную статистику. На самом деле, решение вести стату по каждому сражению в отдельной базе - отличное решение. Предыдущая версия базы (с одной базой) буквально через неделю-другую распухала до невероятных размеров с соответствующими последствиями по производительности - счет записей в отдельных таблицах переваливал за миллион. :)

SlavikSG
29.01.2013, 18:17
...ShowResult она называется...
Ага. Ясно.

Чёт, чем дальше, тем меньше начинаю врубаться...
Посмотрел я на процедуру ShowResult. Это всего лишь простейший запрос с выборкой по ResID из таблицы dbo.ResultInfo. В результате видим всего одну строку на, почти, 140 полей! По полям я даже уже не спрашиваю. Наверное, замучаешься расписывать. Просто такой вопрос:
1. Эта строка должна показывать что-то обобщенное? То, что я наубивал и налетал на сервере за все время и по всем битвам? И будет показывать то, что налетаю и наубиваю еще в будущем? Верно?
и еще вопросы...
2. Сейчас у меня ResID равен трем. Это пожизненно? Типа, мой крест? ))
3. То есть, все результаты, наколоченные и налетанные мною будут сливаться в одну единственную строку этой таблицы под ID равную трем? Верно я понимаю?
4. И такой вопрос... Сейчас таблица dbo.ResultInfo содержит в себе 1022 записи. Если мне принадлежит лишь одна запись в этой таблице, то кому тогда принадлежат остальные 1019 записей? Сервак запущен вчера вечером и до сих пор пашет. В основном, в холостом режиме. Побывало на нем только 10 человек. Кому же тогда принадлежат другие ResID? Конечно, можно было бы подумать, что каждый выстрел зенитки, каждый выстрел бота на сервере будет создавать, инициировать, свою личную запись, со своим личным ID, в этой таблице. Но неужели это так?!
5. Если на первый вопрос можно ответить утвердительно, то значит расшифровку этой моей одной единственной строчки из таблицы dbo.ResultInfo, под ID равную трем, нужно будет искать в таблицах битв? Так я понимаю?


...ShowBestPlayer - опять я ошибся...
Ага. Ждем... :)


...Обязательно приделаю ХП "DelWorkDB", которая будет вычищать указанную БД битвы + вычищать из Serv_DB...
Собственно, пока не горит. ShowBestPlayer намного важнее. :)
...небольшое уточнение. Базы битв нужно не вычищать, а удалять. Физически! Чтобы их не было на сервере SQL. Так вами планируется?..


...ObjTypeScore - "стоимость" объекта, в зависимости от его класса и типа (ягер и бонбер, пилот и наблюдатель стоят по разному, шлюпка и линкор тоже - вот тут это и настраивается)...
А кто-то это уже настроил? Очень бы хотелось эту настройку. Сам я точно никогда не смогу адекватно и правильно назначить очки за тот или иной объект в БзБ. Или так настрою, что потом камнями закидают. :)

Большое спасибо за ваши ответы!
Честно, не часто встретишь столь подробное освещение вопросов на форумах.

--- Добавлено ---


...счет записей в отдельных таблицах переваливал за миллион. :)
Может не стоит уж так подробно расписывать каждое событие в таблицы? Хотя, решение с "Битво-базами" снимает вопрос. Тут вы правы. Теперь бы еще сливать периодически общую инфу из этих "Битво-баз" в главную базу, а сами "Битво-базы" убивать, и было отлично.

Да. Представляю себе запрос по миллиону записей!!! Любой комп сдохнет. А пользователь фиг дождется результата вычислений по своей статистике. :)

Zed4ever
29.01.2013, 23:23
По вопросам:


1. Эта строка должна показывать что-то обобщенное? То, что я наубивал и налетал на сервере за все время и по всем битвам? И будет показывать то, что налетаю и наубиваю еще в будущем? Верно?

1 - ДА. Это именно обобщённая статистика. По названиям полей можно догадаться что они значят. Вот только из совсем непонятных: А_Т0.... - это кол-во убитых самолётов по их типам, G_T0... кол-во убитой наземки по типам, Р_Т0... - кол-во убитых персонажей по типам, R_T0... - кол-во убитых ресурсов по типам.
Единственное отличие в этих строках: для всех, кроме битвы, учитывается кол-во уничтоженных, а для битвы - кол-во потерь.


2. Сейчас у меня ResID равен трем. Это пожизненно? Типа, мой крест? ))

2 - ДА. Если не вычищать статистику - ResID у игрока, да и у всех, как только он назначен - вечен.


3. То есть, все результаты, наколоченные и налетанные мною будут сливаться в одну единственную строку этой таблицы под ID равную трем? Верно я понимаю?

3 - ДА. Ваши обобщённые результаты будут в этой одной строке (потому и так много полей). Однако, ещё "обрезки" достижений есть в информации по игроку и в таблице медалек.


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 шт.

Вернусь к вопросам:


5. Если на первый вопрос можно ответить утвердительно, то значит расшифровку этой моей одной единственной строчки из таблицы dbo.ResultInfo, под ID равную трем, нужно будет искать в таблицах битв? Так я понимаю?

5 - На првый вопрос ответ - ДА, а на этот - НЕТ. ResID в БД битвы содержит ссылку на сводную статистику ВЫЛЕТОВ.

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

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

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

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

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

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

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

З.Ы.Ы.Ы. Мильён записей в табличке - не есть горе. Причём, ващще. Тут важно что и как ты с ними делаешь.

SlavikSG
30.01.2013, 18:14
Это не тихий ужас. Это называется "Туши фонарь и выноси мебель". Не думал, что все так невероятно сложно окажется. :(

Я вообще, мало что понял. Но сдается мне, этот мануал, а это именно МАНУАЛ, будет необычайно полезен, еще кому-то. А себе лично хотелось бы из всего этого взять лишь крохи. Лишь небольшую начальную инфу для простенькой статистики. Для мизерной, но понятной таблички с данными по конкретному вирпилу.

На все ответить просто не успеваю. Пока коснусь лишь самого злободневного...

Файл "Про картинки 2.doc" мне ничего не прояснил. И посему, хочется или не хочется, а поля из таблицы ResultInfo нужно все же расписать. Я сейчас на работе, поэтому многие поля, которые можно было бы легко проверить, я проверить сейчас не смогу.

Итак, погнали!
Поля с нулем, я вообще игнорирую. Видимо они для ботов или еще бог знает для чего из вашего сложного мануала:

ID - это ResID вирпила. Самое важно поле. По нему будем делать выборку с условием.

StartTime - Момент, когда я создал свой последний самолет и очутился в нем. Инфа ненужная. Или это время, когда я впервые появился на сервере? Но вроде не сходится у меня дата.
EndTime - Типа, когда я перестал летать или бросил свой последний самолет. Сейчас у меня стоит 1900-01-01 00:00:00.000. Значит ноль. С этим непонятки. Инфа ненужная.
FlyTime - Стоит ноль. Значит инфа ненужная.
FlyTime_PI - Хотелось бы видеть в этом поле общее количество часов налета. Но вижу там странное время/дату. 1908-05-15 00:50:56.000 Не восемь же лет я летал?! Что значит, вообще, это значение в моем личном случае?

DepCnt_PI - равно 31. Количество всех моих вылетов во всех битвах
Dep_F_PI - равно 18. Скорее всего, значение, когда полет закончился удачной посадкой.
Dep_B_PI - равно 13. Это, наверное, когда я грохнулся об землю.

PersDepCnt_PI - равно 31. То же, что и DepCnt_PI, вот только не ясно, что важнее для статистики. В каком поле я сам, а не "персоно-бот"?
PersDep_F_PI - равно 18. Тот же вопрос...
PersDep_B_PI - равно 13. Тот же вопрос...

Deaths - равно 2. Количество смертей.
Deaths - равно 23. Количество смертей. Не понял, в каком случае, это касается того, что именно я помер в кабине самолета. Неужели 23 раза? Тогда не сходится с количеством удачных/неудачный посадок

Wounds - равно 0. Количество ранений бота.
Wounds - равно 3. Количество моих ранений.

Crashes - равно 0. Количество падений бота
Crashes - равно 4. Количество моих падений. Типа, когда я грохнулся всерьез и со смертью меня и самолета.

Defeat - равно 0. Не понял...
Defeat - равно 26. Не понял. Меня поразили 26 раз или я что-то поразил 26 раз?

Jumps - Ну, с этими полями все ясно. Сколько раз я, сколько раз бот прыгали с парашютом и сколько раз было неудачных прыжков у меня и у моего бота.

Sinks - равно 0. Не понял...
Sinks_PI - равно 0. Не понял...

Captured - равно 0. Сколько раз бота захватили в плен.
Captured - равно 5. Сколько раз меня захватили в плен.

Escaped - равно 0.
Escaped_PI - равно 0. Сколько раз я сбежал из плена?! Гггг! :) Это как понимать?!

PKills - равно 2. Сколько убил ботов в самолете.
PKills_PI - равно 2. Сколько убил живых пилотов в самолете.

AKills - равно 5.
AKills_PI - равно5. Сколько подбил самолетов в воздухе?

AGKills - равно 5.
AGKills_PI - равно5. Сколько подбил самолетов на земле? Странно, что равно тому же, что и в воздухе? Совпадение? Или я не совсем не понял.

GKills - равно 18.
GKills_PI - равно 18. Сколько подбил наземной техники?

GGKills - равно 18.
GGKills_PI - равно 18. Не понял что это. Сколько потопил кораблей?

RKills - равно 0.
RKills_PI - равно 0. Не понял что это.

FPKills - равно 0.
FPKills_PI - равно 0. Не понял что это.

FAKills - равно 0.
FAKills_PI - равно 0. Не понял что это.

FAGrKills - равно 0.
FAGrKills_PI - равно 0. Не понял что это.

FGKills - равно 0.
FGKills_PI - равно 0. Не понял что это.

FGGrKills - равно 0.
FGGrKills_PI - равно 0. Не понял что это.

FRKills - равно 0.
FRKills_PI - равно 0. Не понял что это.

Score_PI - равно 2816,666 Общее количество заработанных очков.
Score_Fighter_PI - равно 666,666 Типа, сколько я заработал, как истребитель, пуляя по самолетам? Верно?
Score_Assault_PI - равно 2050 Типа, сколько я заработал, как штурмовик, пуляя по наземным целям? Верно?
Score_Bomber_PI - равно 100 Тут не ясно. Бомбер это тот, кто сбросил бомбу или тот, кто сбросил бомбу с бомбера? Я и Мессера кидал бомбы. Но похоже, это тут не считается.

Score_Trans - Не понял.
Score_Rang - Не понял.
Score_Save - Не понял.

Пока все. Пора домой. :)

Назревший вопрос:
Я удаляю битвы. Живьем из базы. Таблицу dbo.BattleInfo очищаю. Завожу свервак. Новая битва с базой создается, но называется она уже Work_DB_4, а не Work_DB_1. Где-то нужно еще после удаления битв, обнулять счетчик. Где это делать? А то сейчас, на стадии изучения статистики, образуется просто прорва пустых, ненужных битво-баз. Но при этом уже есть и настоящие реальные данные в таблице dbo.ResultInfo. Поэтому функцию ClearALL применять очень бы не хотелось.

Вопросов по полям будет еще много. Сейчас я просто не успел...

Zed4ever
01.02.2013, 19:50
Звиняюсь что пропал.
Забежал на пару минут.
Подскажу чуть конкретнее по значению полей результатов и их соответствию в файле "про картинки".

Это "хвост" полей таблицы ResultInfo:
[P_T0] [bigint] NOT NULL,
[P_T1] [bigint] NOT NULL,
[P_T2] [bigint] NOT NULL,
[P_T3] [bigint] NOT NULL,
[P_T4] [bigint] NOT NULL,
[P_T5] [bigint] NOT NULL,
[P_T6] [bigint] NOT NULL,
[P_T7] [bigint] NOT NULL,
[P_T8] [bigint] NOT NULL,
[P_T9] [bigint] NOT NULL,
[P_T10] [bigint] NOT NULL,
[P_T11] [bigint] NOT NULL,
[P_T12] [bigint] NOT NULL,
[R_T1] [bigint] NOT NULL,
[R_T2] [bigint] NOT NULL,
[R_T3] [bigint] NOT NULL,
[R_T4] [bigint] NOT NULL,
[R_T5] [bigint] NOT NULL

Это "хвост" файла "про картинки":
Всего убито (из человечков) неизвестное тело = 0,
Pilot = 1, CoPilot = 2, Bombardier = 3, Radioman = 4, Engineer = 5, Observer = 6, Gunner = 7, NoseGunner = 8,
TopGunner = 9, WaistGunner = 10, VentralGunner = 11, RearGunner = 12
Всего уничтожено (из ресурсов):
Тут заложено 5 типов ресурсов, какие – пока не определились, но, наверное, стандартно можно заложить
1. Топливо
2. Боеприпасы
3. Рем\комплекты
4. Производство
5. Чел\ресурсы


Время будет напишу подробнее.

SlavikSG
03.02.2013, 13:22
...
Подскажу чуть конкретнее по значению полей результатов и их соответствию в файле "про картинки".
...
Ага. Покапаюсь. Спасибо!

А как со вторым моим вопросом? Есть на него ответ?
Я удаляю битвы. Живьем из базы. Таблицу dbo.BattleInfo очищаю. Завожу свервак. Новая битва с базой создается, но называется она уже Work_DB_4, а не Work_DB_1. Где-то нужно еще после удаления битв, обнулять счетчик. Где это делать? А то сейчас, на стадии изучения статистики, образуется просто прорва пустых, ненужных битво-баз. Но при этом уже есть и настоящие реальные данные в таблице dbo.ResultInfo. Поэтому функцию ClearALL применять очень бы не хотелось...

Zed4ever
03.02.2013, 16:40
По второму вопросу:
Номер очередной БД-ы битвы берётся из индекса таблички BattleInfo. А индекс этот отмечен как ID строки, соотв-но он САМ увеличивается на 1 при новой вставке.
Поэтому, для того, чтобы сбросить счётчик баз - нужно делать ClearAll, иначе никак (так сам скуль-сервер работает, я тоже в своё время заморачивался - как сбросить ID в начало. Ничего, кроме как пересоздания таблицы не накопал). БЖСЭ, как говориться.
По удалению руками "ненужных" БД битв - в принципе, ничего страшного в этом нет. Главное, чтобы не было обращений в этим БД. Да, и при обращении к несуществующей БД-е - тоже ничего страшного не будет: ошибка в лог упадёт, и всё. Вот, только лог ошибок может расползаться до неприличных р-ров.

Если вычищаете ВСЮ табличку dbo.BattleInfo - можно это делать черех ХП ClearBattleInfo. Тогда индексы БД битв будут начинаться с "1".
Но тут могет засада получиться (вернее получится) - в табличке учёта вылетов будут неправильные ссылки, т.к. они привязаны к №битвы и №вылета в конкретной битве.

З.Ы. Мне для анализа - какой р-р БД Serv_DB у Вас сейчас, какой общий р-р БД битв и какой средний р-р одной БД битвы. И сколько по времени идёт одна битва.

SlavikSG
06.02.2013, 15:02
...Если вычищаете ВСЮ табличку dbo.BattleInfo - можно это делать черех ХП ClearBattleInfo. Тогда индексы БД битв будут начинаться с "1"...
Ооо! Это самое оно. Мне больше пока ничего и не нужно. Спасибо! :)

Снова разбирался с полями из таблицы ResultInfo. Как вы правильно дали понять, данные начал брать из файла "Про картинки 2.doc". Но начал снизу, как вы показали в примере, и только в этом случае, почти все получилось. Почти!
Про эти поля не сказано ничего:
[A_T7]
[A_T8]
[A_T9]
[A_T10]

Еще вопрос:
Поясните пожайлуйста по полям подобного вида. Например, кол-во истребительных вылетов:
[Dep_F]
[Dep_F_PI]
[PersDep_F_PI]
Чем эти поля отличаются друг от друга? Чет я совсем запутался. Где-то "в группе/скваде", где-то "я один". Где-то "бот или персона". В общем, полная каша в голове. И перечитывание мануала из поста номер 53 мне не помогло.

То же самое с полями:
[FAKills]
[FAKills_PI]
Чем они отличаются? Ну, и там еще много чего подобного есть.

Вопросов еще много, но не буду спешить. Хочу задать пока только один:
Каким образом, используя таблицу ResultInfo можно узнать, сколько я всего, за все время существования сервера и статистики, сделал вылетов?
Сначала я подумал, что это можно легко понять, взяв данные из поля DepCnt_PI, или из схожим с ним поля, но по "бомберскому" типу Dep_B_PI (летал я на Ju-87), или из поля PersDepCnt_PI или опять же, но по "бомберскому" типу из поля PersDep_B_PI. Во всех этих четырех полях мой вылет отображен правильно (летал я на Ju-87) и вроде бы все хорошо. Но как только я перемещаюсь в голову заднего стрелка, так количество моих вылетов сразу увеличивается вдвое. По логике вроде, как все правильно. Типа, сколько летал за пилота, сколько летал за стрелка. Но не нужен мне стрелок!!! Мне нужен только я любимый!!! Сколько раз я лично, без стрелка, поднял вчера вечером свой Ju-87? Знаю, что поднял его (создал его на ВПП) всего три раза. А статистика глаголит, что 6 раз. А выбери я Хенкеля, вообще будет странная цифра? Повторюсь еще раз:
Как узнать, точное количество моих вылетов на сервере?
При этом очень даже хотелось бы узнать даже не сколько раз я создал самолет на ВПП, а сколько раз я оторвал шасси своего пепелаца от ВПП. Если это, конечно, вообще возможно узнать правильно.

Вот такой у меня очень насущный вопрос. Разберусь в нем, может отпадут многие другие вопросы.... Про киллы, мои и стрелка, про утопления мои и стрелка, про прыжки мои и стрелка. В общем, нужно исключить всех "персон", "ботов", все "сквады". "группы", а оставить только одного живого игрока, чтобы вести статистику по обычному мясному Dogfight-серверу. То есть не вести статистику, а правильно ее выбирать из таблицы ResultInfo.


...З.Ы. Мне для анализа - какой р-р БД Serv_DB у Вас сейчас, какой общий р-р БД битв и какой средний р-р одной БД битвы. И сколько по времени идёт одна битва.
Про это я не понял. Что такое "р-р"? :)
Вообще, сервер еще не работает. Выключен все время. Запускаю лишь иногда, когда появляется время и возможность покопаться со статистикой.

Charger
06.02.2013, 15:57
ИМХО, средний РазмеР

Zed4ever
06.02.2013, 20:29
1. "р-р" - как тут правильно ответили, это я так слово РазмеР написал. Звиняюсь за абррвтуру :)

2. [A_T7]...[A_T10] - тут тоже моя "неточность" при отправке на RTFM (рид зыс факин мануал :) ), ещё раз сорь.
Это поля для учёта типов сбитых/потерянных самолётов. Но, в итоге, с Тимофеем сошлись на том, чтобы сократить список типов самолётов до "6": Fighter = 1, Bomber = 2, Sturm = 3, Scout = 4, Transport = 5, Rescue = 6. Тут дело в том, что если брать тип напрямую из игры, то их получается "мильён" (истр, истр-бомбер, тяжелый истр,....), ГОРАЗДО больше 10. А, в итоге, поля [A_T7]...[A_T10] остались как рудимент. М.б. удалю их, при случае...

3. [Dep_F], [Dep_F_PI], [PersDep_F_PI] - поясняю в чём разница.
Для простоты будем брать случай учёта результатов для живого игрока.
Для начала - что каждое поле значит:
[Dep_F] - количество истребительных САМОЛЁТО(!)-вылетов.
[Dep_F_Pl] - количество истребительных самолёто-вылетов под управлением человека
[PersDep_F] - количество истребительных ПЕРСО(!)-вылетов
[PersDep_F_PI] - количество истребительных персо-вылетов под управлением человека
Теперь, на примерах, как они инкрементируются (т.е. к текущему прибавляется один):
Ситуация "человек решил полетать на 110-ке".
Создаётся истребительный (для 110 м.б. и другой тип, но, пусть, для примера, будет истребительный) самолёто-вылет под управлением человека ([Dep_F]+1, [Dep_F_Pl]+1. ДА! Для обоих полей! Так сделано.).
Далее, "разум" человека заселяется в голову перса пилота - создаётся истребительный персо-вылет под управлением человека ([PersDep_F_PI]+1, [PersDep_F+1]).
Вдруг, человеку приспичило посидеть за стрелком - создаётся ещё один истребительный персо-вылет под управлением человека ([PersDep_F_PI]+1, [PersDep_F+1]).
Т.е., если летать всё время на 109-м, то кол-во самолёто-вылетов и персо-вылетов для игрока будет одинаковым (т.к. из экипажа только пилот), в случае многоместных самолётов их кол-во МОЖЕТ отличаться, при условии, что человек "прыгает" в самолёте по местам. Тут следует учесть, что если персо-вылет в самолёте уже существует, то он новый не создаётся, т.е. в 110-ке можно 100500 раз прыгать между пилотом и стрелком - персо-вылетов для этого самолёто-вылета будет всё равно ДВА.
Тут ещё следует уточнить: если речь идёт о статистике игрока - можно (или нужно? - проверю на досуге) использовать поля с припиской "_PI". Хотя, они и не должны отличаться по своим количественным показателям от полей без оной приписки. Как-то так. М.б. сумбурно объяснил.

3. [FAKills], [FAKills_PI] - это поля для учёта сбитых ЕДИНОЛИЧНО (!) ДРУЖЕСТВЕННЫХ летательных аппаратов (для вычисления предателей :) ). [FAGrKills] - для учёта сбитых другов в соучастии с кем-то. (соучастник м.б. ворогом).

4. Сколько всего сделал САМОЛЁТО-вылетов: поле DepCnt_Pl (ну, или DepCnt). Сколько ПЕРСО-вылетов: PersDepCnt_Pl.
Если, как Вы пишите, при пересадке за стрелка в штуке поля от учёта САМОЛЁТО-вылетов тоже инкрементируются - это баг. Проверю. Должны ОДИН раз увеличиться поля с учётом самолёто-вылетов, и два раза с учётом персо-вылетов.

5. "При этом очень даже хотелось бы узнать даже не сколько раз я создал самолет на ВПП, а сколько раз я оторвал шасси своего пепелаца от ВПП. Если это, конечно, вообще возможно узнать правильно."
Вот тут есть ограничение - учитывается именно кол-во созданий вылетов. Т.е. если создать самолёт на полосе, а потом вернуть его в ангар - не будет разницы, в итоге, если взлететь и сесть.
М.б. "Ч2Н" добавим учёт кол-вы взлётов. Но не уверен... Скорее учёт изменений статуса вылета на "в воздухе", т.к. при появлении самолёта в воздухе событие "взлетел" не наступает, наступает событие "изменился статус: в воздухе". Но, тоже не раньше, чем "Ч2Н" :) (Занят доводкой вывода на вэб-морду - оно приоритетнее).

6. "Вот такой у меня очень насущный вопрос. Разберусь в нем...".
Тут всё довольно просто. Учитывать поля с припиской "_Pl" (где есть и с ним и без) и выкинуть поля начинающиеся с "Pers".


И ещё - м.б. какнибудь пересечёмся в скапе? Я-б голосом гораздо эффективнее смог-бы объяснить что к чему. И времени на это потратили бы меньше в разы.
А то за время ответа на "пару" вопросов в кнопы тыкая можно было-б "пару+" голосом рассказать :)

SlavikSG
07.02.2013, 14:04
Все! В голове полная каша. :(

Вообще перестал врубаться в поля [Dep_F_Pl] - количество истребительных самолёто-вылетов под управлением человека и [PersDep_F_PI] - количество истребительных персо-вылетов под управлением человека. Какая-то игра слов уже получается.

И так и не понял, как посчитать количество вылетов Штуки (ну, или там еще чего-то). Получается, что если я сажусь за стрелка при каждом вылете, то количество моих вылетов удваивается. А на одноместном останется равным одному. И как же тогда посчитать, сколько я самолетов создал?! :(

Да, Скайп рулит. Как-нибудь вечерком нужно будет потолковать на эту тему. Но и здесь писать нужно. Кому-то ведь это тоже может пригодиться.

Zed4ever
07.02.2013, 17:53
Нужно почуствовать разницу в САМОЛЁТО-вылете и ПЕРСО-вылете (ну, и в человеко-вылете потом).
Для примера возмём сцухой суперджэт.

Самолёто-вылет будет один, а персо-вылетов МНОГО (экипаж+много пассажиров).
Если этот самолёт создаст человек, то мы будем иметь 1 самолёто-вылет, и, в нагрузку, дополнительно учтём один самолёто-вылет под управлением человека.
Если человек будет "лазить по головам" во всех персонажах этого пепелаца, то при каждом новом "вселении" будет создаваться персо-вылет под управлением человека.

Так сделано для того, чтобы в общей сводке была возможность посмотреть сколько налетали боты, а сколько люди.

З.Ы. Сам после старичка не сразу переварил такой подход :)

SlavikSG
08.02.2013, 00:16
Кажется врубился с этими "самолето-персо-вылетами". Но чет не сходится с практикой.


...
Самолёто-вылет будет один, а персо-вылетов МНОГО...
Может и точно со Штукой глюк? У меня в любом случае создает два вылета, как только я влезаю в голову стрелка. То есть все эти четыре поля автоматом получают значение "2":
DepCnt_PI
Dep_B_PI
PersDepCnt_PI
PersDep_B_PI

Нужно будет еще на Хенкеле проверить. Даже взлетать не нужно. Достаточно просто полазить по головам стрелков.

А еще такой небольшой вопрос. Решил сменить аутентификацию к серверу. Если писать так, то не пашет:
"Data Source=192.168.0.91,1433\SQLEXPRESS;User ID=ИМЯ ПОЛЬЗОВАТЕЛЯ;Password=ПАРОЛЬ;Initial Catalog=Serv_DB;Asynchronous Processing=true; Connect Timeout=10;"
А если писать так, то пашет:
"Data Source=192.168.0.91\SQLEXPRESS;User ID=ИМЯ ПОЛЬЗОВАТЕЛЯ;Password=ПАРОЛЬ;Initial Catalog=Serv_DB;Asynchronous Processing=true; Connect Timeout=10;"
То есть с указанием порта не работает. А без порта работает. Не в курсе, почему такое может быть?

Zed4ever
08.02.2013, 10:14
Про порт - Фиревол, наверна:)
Правда, локально через указание порта ниразу не пробовал подключаться...
З.Ы. По многоместным пепелацам - проверю, и, если есть чего править, исправлю.

SlavikSG
10.02.2013, 23:24
Да нет, конечно!.. Фаервол тут не при чем. Просто я когда глянул сюда:
http://blog.wadmin.ru/2012/07/sql-ports/
мне чуть дурно не стало. Пока я так не смог настроить порты фаервола. Журнал Windows 7 тупит и не хочет записывать события блокировок. Понять бы, по каким портам блокировка идет. Прям хоть ставь другой фаерволл с нормальным журналом событий, чтобы понять, что ему не хватает. А пока проверка подключения к SQL-серверу с помощью Коммандера с удаленного компа в инете работает лишь тогда, когда фаерволл выключен полностью. Но это все ерунда. Дело наживное... Разберемся.

В общем, пока я в полном расстройстве. Не вижу для себя никакой возможности вытаскивать из таблицы ResultInfo количество вылетов (ну, или создаваемых самолетов). проверял и Хенкель, и 110 и Штуку. Как только садишься за стрелков, сразу все поля прибавляют свое значение. Рекордсмен тут Хенкель. Пробежавшись по стрелкам я получил во всех полях таблицы цифру 8. :(

Zed4ever
11.02.2013, 00:04
Принял. Значит это мой "косяк". Исправлю.
З.Ы. Мне чуть осталось доделать (допроверить/настроить, даже) вывод на вэбморду, и займусь проверкой баг-ов.
З.Ы.Ы. Если можно сделайте подборку багов/хотелок, чтобы не упустил чего.

SlavikSG
11.02.2013, 00:46
...З.Ы.Ы. Если можно сделайте подборку багов/хотелок, чтобы не упустил чего.
Сильно извиняюсь. Просто тупо не хватает времени заниматься всерьез. Поэтому "хотелок" пока только три:
1. Удаление битв и слив их данных в основную базу.
2. Разобраться с этим "количеством" создаваемых вылетов.
3. Не столь важно, но в Коммандере нужно сделать галочку - "Сворачивать в трей при запуске". То есть по желанию пользователя. При освоении и отладке приходится делать просто несметное количество запусков Коммандера. И каждый раз Коммандер нужно вытаскивать из трея вручную.

И не знаю. Но создание каждый раз, даже для случайного, нового вирпила более ста записей!.. Не слишком ли это? Ведь сколько может зайти игроков на сервер даже не сделав ни одного вылета?! Даже не пхнув мышкой в ту, или иную армию. Пустых записей будет тысячи. Ведь они будут реально тормозить SQL запросы по статистике для других вирпилов. Может можно будет сделать в будущем механизм для удаления таких фантомных пустых записей? Или хотя бы не создавать эти 103 записи, пока игрок фактически не создаст крафт.

Frezak
03.05.2013, 15:50
=KK=Des
"Господа, очень хочется знать ведется-ли сейчас какая-то работа над статистикой, если да то хотелось бы иметь возможность доступа к ресурсам и возможно принять какое-то участие в разработке. Если, нет то хотелось бы получить последние исходные файлы и начать докручивать её под свои нужды.
Почему пишу об этом? Не хотелось бы развивать 2 ветки софта отдельно хочется чтобы это был отдельный софт с конечной поддержкой из одного места."

Small_Bee
07.05.2013, 02:12
Идет работа.
Стата пережила кардинальный рефакторинг, как база так и логика сбора статы. Теперь она не требует обязательного присутствия коммандера, и может собирать стату даже в оффлайне без лишних телодвижений. Разработка ведется на C# 4.0, UI коммандера - WPF, в качестве родной базы - MSSQL - но можно любую прикручивать, хоть в хтмл сливать прямо (собственно в тестовом режиме так и делает).
Для вебморды планируется MVC4
Помощь не помешает в основном для вебморды и версии коммандера, совместимого с новой статой.