PDA

Просмотр полной версии : Админам серверов Ил-2



POP
20.11.2010, 15:11
В очередной раз решил размяться в c# и сбацал, на мой взгляд, весьма полезную для сервера программку.
Эта программа позволяет расширить или заменить функции распространённых командеров (SC, PowerDaemon, и, пожалуй, любых других).
Или даже создать свой собственный командер с нуля.
При запуске одновременно с имеющимся комадером, никакого влияния на его обмен с сервером эта программа не оказывает.
В чём суть?
Эта программа - "обёртка" для обычного иловского сервера, позволяющая программно получать события из лога и строки из консоли сервера и передавать их любому количеству самодельных плагинов, а также отправлять из этих плагинов команды серверу, не задействуя TCP-консоль.
Консольный порт по прежнему абсолютно свободен для существующих командеров.
В консольное окно программы (заменяющее окно самого сервера) выводятся как консоль сервера, так и строки из лога.
Русские буквы в консоли отображаются корректно.
Точнее, корректно будут отображаться все буквы в кодировке системы, на которой установлен сервер (если русская локаль, то русские, если немецкая, то немецкие, если китайская, то китайские...)

В приложенном архиве - сама программа, файл её настроек (с путём установки сервера и именем исполняемого файла сервера), интерфейс Interface.dll и папка с плагином, собирающем логи сервера в папку Logs, с сортировкой в подпапках по году, месяцу и дню. На каждую новую миссию заводится новый файл лога консоли и логфайла с временем начала миссии и её названия в имени файла.
Порядок установки:
1. Установить net.framework4 (http://www.microsoft.com/downloads/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992&displayLang=ru) с сайта microsoft.
2.Обязательно!!! переименовать файл сервера (il2server.exe), например, в il2fb.exe.
3. Распаковать содержимое архива в папку с сервером
4. Открыть файл il2server.exe.config в текстовом редакторе (блокнот, например) и вписать путь к серверу и имя исполняемого файла (во что переименовали il2server)

<setting name="Serverpath" serializeAs="String">
<value>D:\server</value>
</setting>
<setting name="Serverexe" serializeAs="String">
<value>il2fb.exe</value>
</setting>
После этого, можно как обычно запускать или из командера, или непосредственно файл программы (сервер она запустит самостоятельно).

Внимание!
Если на компьютере установлено несколько серверов, то необходимо, чтобы имена исполняемых файлов серверов не совпадали.
Эта программа, при запуске, ищет среди процессов, процессы с именем исполняемого файла, прописанного в конфиге программы, и убивает все такие процессы.

В следующем посте будут исходники плагина на с# и пример плагина на VisualBasic


Итак...
Вторая версия.
Теперь основной функционал вынесен в файл IL2SERVER.dll.
Как и обещал - организован сбор статистики пилотов за сессию на сервере во встроенную таблицу.
Собирать статистику (опрашивать сервер), программа может как самостоятельно, так и с помощью Геннадьичевского SC.
посмотреть что и как собирается можно с помощью плагина TestPlugin, набрав в консоли программы команду l (малое латинское эль), ну и "энтенр".
Если программа запущена вместе с SC от Геннадьича, то таблица пилотов на сервере будет заполняться без дополнительных действий, если без SC, то чтобы таблица полностью заполнялась, нужно ввести в консоли команду start. Чтобы остановить сбор статистики - команду stop.
Из необычного - состояние игрока теперь формируется в виде строки символов, каждый из которых соответствует тому или иному событию с пилотом или самолётом.
Например, строка "MofWHKs" Означает, что из меню (M) появился на поле, занял самолёт(o), взлетел (f), пилот был ранен (W), тяжело ранен(H), убит(K), самолёт сбит(s). (большие буквы - события, относящиеся к игроку(пилоту), маленькие - к самолёту)
Полный перечень событий есть в документации (INTERFACE.XML) к файлу INTERFACE.dll, ну и в следующем, сообщении как и полный перечень собираемой статистики (колонки таблицы).
Кроме всего прочего, в таблице есть ещё 2 столбца - координаты начала (первое появление на поле или взлёта) и конца вылета (последние координаты, которые появились в логе).

Добавлено 20.10.2010
В архиве ServerCommander.rar обновлён до версии 2.1.0.0 файл IL2SERVER.dll.
Исправлен баг с пропуском событий отключения игроков

POP
20.11.2010, 15:28
Что было здесь - уже не актуально.
Выкладываю текст крайней версии интерфейса.


using System;
using System.Data;
namespace INTERFACE
{
/// <summary>
/// Делегат для обработки события получения строки из консоли сервера.
/// </summary>
/// <param name="Cstring">Строка из консоли</param>
public delegate void ConsoleStringDelegate(string Cstring);
/// <summary>
/// Делегат для обработки события записи в лог-файл сервера
/// </summary>
/// <param name="LogString">Строка лога</param>
public delegate void LogStringDelegate(string LogString);
/// <summary>
/// Делегат для событий, передающих строку пилота из таблицы статистики
/// </summary>
/// <param name="Pilot">Копия строки из таблицы статистики</param>
public delegate void UserRowDelegate(DataRow Pilot);
/// <summary>
/// Делегат для событий сервера, передающих таблицу статистики всех пилотов на сервере
/// </summary>
/// <param name="Pilots">Таблица статистики</param>
public delegate void PilotTableDelegate(DataTable Pilots);
/// <summary>
/// Перечисление, задающее список столбцов в таблице статистики пилотов
/// </summary>
public enum pilotsColumn
{
/// <summary>
/// Номер на сервере
/// </summary>
N,
/// <summary>
/// Ник
/// </summary>
Nick,
/// <summary>
/// Сторона
/// </summary>
Army,
/// <summary>
/// Марка самолёта
/// </summary>
PlaneName,
/// <summary>
/// Место в самолёте
/// </summary>
Place,
/// <summary>
/// Вооружение
/// </summary>
Weapon,
/// <summary>
/// Загрузка топливом
/// </summary>
Fuel,
/// <summary>
/// Номер самолёта
/// </summary>
Plane,
/// <summary>
/// История состояний самолёта и пилота
/// </summary>
PilotState,
/// <summary>
/// Счёт по правилам сервера
/// </summary>
Score,
/// <summary>
/// Номер канала на сервере
/// </summary>
Channel,
/// <summary>
/// IP-адрес игрока
/// </summary>
IP,
/// <summary>
/// Пинг
/// </summary>
Ping,
/// <summary>
/// Скорость подключения
/// </summary>
Speed,
/// <summary>
/// Количество сбитых самолётов противника
/// </summary>
EAir,
/// <summary>
/// Количество уничтоженных статических самолётов противника
/// </summary>
ESAir,
/// <summary>
/// Уничтожено танков противника
/// </summary>
ETank,
/// <summary>
/// Уничтожено автомобилей противника
/// </summary>
ECar,
/// <summary>
/// Уничтожено орудий противника
/// </summary>
EArt,
/// <summary>
/// Уничтожено зениток противника
/// </summary>
EAAA,
/// <summary>
/// Уничтожено вагонов противника
/// </summary>
EWag,
/// <summary>
/// Уничтожено кораблей противника
/// </summary>
EShip,
/// <summary>
/// Уничтожено дружественных самолётов
/// </summary>
FAir,
/// <summary>
/// Уничтожено дружественных статических самолётов
/// </summary>
FSAir,
/// <summary>
/// Уничтожено дружественных танков
/// </summary>
FTank,
/// <summary>
/// Уничтожено дружественных автомобилей
/// </summary>
FCar,
/// <summary>
/// Уничтожено дружественных орудий
/// </summary>
FArt,
/// <summary>
/// Уничтожено дружественных зениток
/// </summary>
FAAA,
/// <summary>
/// Уничтожено дружественных вагонов
/// </summary>
FWag,
/// <summary>
/// Уничтожено дружественных кораблей
/// </summary>
FShip,
/// <summary>
/// Выстреленно снарядов
/// </summary>
FireBull,
/// <summary>
/// Всего попаданий
/// </summary>
HitBull,
/// <summary>
/// Попаданий в воздушные цели
/// </summary>
HitAirBull,
/// <summary>
/// Выстреленно ракет
/// </summary>
FireRock,
/// <summary>
/// Попаданий ракетами
/// </summary>
HitRock,
/// <summary>
/// Сброшено бомб
/// </summary>
FireBombs,
/// <summary>
/// Попаданий бомбами
/// </summary>
HitBombs,
/// <summary>
/// Координаты начала вылета
/// </summary>
StartCoord,
/// <summary>
/// Координаты конца вылета
/// </summary>
EndCoord
}
/// <summary>
/// Перечисление, задающее список событий с пилотом(игроком), записываемых в виде символа в строку "PilotState"
/// </summary>
public enum PilotEvent
{
/// <summary>
/// Подключился
/// </summary>
Connected='N',
/// <summary>
/// В брифинге
/// </summary>
InMenu='M',
/// <summary>
/// Ранен
/// </summary>
Wounded = 'W',
/// <summary>
/// Тяжело ранен
/// </summary>
Hwouded = 'H',
/// <summary>
/// Убит
/// </summary>
Killed = 'K',
/// <summary>
/// Выпрыгнул с парашютом
/// </summary>
Bailedout = 'B',
/// <summary>
/// Захвачен в плен
/// </summary>
Captured = 'C',
/// <summary>
/// Приземлился (на самолёте)
/// </summary>
Landed='L',
/// <summary>
/// Удачно приземлился (на парашюте)
/// </summary>
SuccessfullyBailed='S',
/// <summary>
/// Парашют сбит
/// </summary>
HasChuteDestroyed='D'
}
/// <summary>
/// Перечисление, задающее список событий с самолётом, записываемых в виде символа в строку "PilotState"
/// </summary>
public enum PlaneEvent
{
/// <summary>
/// Занят игроком
/// </summary>
Occupied='o',
/// <summary>
/// Взлетел
/// </summary>
TakeOff = 'f',
/// <summary>
/// Приземлился
/// </summary>
Landed = 'l',
/// <summary>
/// Разбит
/// </summary>
Crashed = 'c',
/// <summary>
/// Повреждён
/// </summary>
Damaged = 'd',
/// <summary>
/// Повреждён на земле
/// </summary>
DamagedOnGround = 'g',
/// <summary>
/// Сбит
/// </summary>
ShotDown='s'
}

/// <summary>
/// Интерфейс, реализуемый объектом "IL2SERVER.Server"
/// </summary>
public interface Imain
{
/// <summary>
/// Событие получения новой строки консоли
/// </summary>
event ConsoleStringDelegate ConsoleString;
/// <summary>
/// Событие записи новой строки в файл лога сервера
/// </summary>
event LogStringDelegate LogString;
/// <summary>
/// Событие остановки сервера
/// </summary>
event EventHandler ServerDown;
/// <summary>
/// Событие, вызываемое при удачном подключении к серверу нового пользователя
/// </summary>
event UserRowDelegate UserConnected;
/// <summary>
/// Событие, вызываемое при дисконнекте пользователя
/// </summary>
event UserRowDelegate UserDisconnected;
/// <summary>
/// Событие выхода пользователя в бриффинг
/// </summary>
event UserRowDelegate UserExitInMenu;
/// <summary>
/// Событие, вызываемое при окончании миссии.
/// </summary>
event PilotTableDelegate MissionEnd;
/// <summary>
/// Таблица статистики игроков на сервере
/// </summary>
DataTable pilots { get; }
/// <summary>
/// Путь к исполняемому файлу сервера
/// </summary>
string ServerPath { get; }
/// <summary>
/// Собирать ли автоматически статистику всех пилотов на сервере (команды user и user STAT)
/// </summary>
bool UserStatEnabled { get; set; }
/// <summary>
/// Собирать ли автоматически статистику всех активных каналов (команда channel)
/// </summary>
bool ChannelStatEnabled { get; set; }
/// <summary>
/// Файл текущей миссии (как указывается в команде mission)
/// </summary>
string CurrentMission { get; set; }

/// <summary>
/// Метод отправки консольной команды серверу
/// </summary>
/// <param name="Command">Команда</param>
void send(string Command);
}
/// <summary>
/// Интерфейс, который обязан реализовать плагин для подключения
/// </summary>
public interface ISCPlugin
{
/// <summary>
/// Свойство "Имя плагина" может быть любым, не совпадающим с именами остальных плагинов
/// </summary>
string Name { get; }
/// <summary>
/// Метод, вызываемый сразу после подключения плагина
/// Необходимо использовать для инициализации всех переменных плагина,
/// зависимых от ссылки на объект Server
/// </summary>
/// <param name="server">Объект IL2SERVER.Server, используемый для получения
/// событий и отправки команд серверу</param>
void LOAD(Imain server);
}


}

mar$
20.11.2010, 20:32
POP, а можно поподробней описать возможности программы,что она может дать нового? Я,например,не программист, не очень-то понятно, как это применить.
Вот если бы кто-нибудь заставил SC геннадича "понимать" карты с динамической наземкой,убрал бы его недостатки по части кодировок (чтобы "Вани" могли заходить на сервер), воткнул коммандеру как одну из функций тот же рандомайзер,выложенный здесь,на сухом, то тогда бы не было цены и коммандеру такому,и умельцу,его усовершенствовавшему...:ups:

POP
20.11.2010, 22:34
POP, а можно поподробней описать возможности программы,что она может дать нового? Я,например,не программист, не очень-то понятно, как это применить.
Вот если бы кто-нибудь заставил SC геннадича "понимать" карты с динамической наземкой,убрал бы его недостатки по части кодировок (чтобы "Вани" могли заходить на сервер), воткнул коммандеру как одну из функций тот же рандомайзер,выложенный здесь,на сухом, то тогда бы не было цены и коммандеру такому,и умельцу,его усовершенствовавшему...:ups:
Ну, в том виде как сейчас, ничего особо нового она не позволяет.
Это просто основа, на которую можно нанизывать новый функционал.
В принципе, даже SC не нужен, если написать все модули, которые будут выполнять те же функции.
Жаль что лет 5 назад я совершенно не владел программированием, и такой основы не появилось тогда. Возможно, про SC с его недостатками уже забыли бы.
Вот, в имеющемся плагине реализована простенькая функция сбора логов - чтобы при вычислении безобразий не нужно было лопатить логи гигабайтного объёма.
Кому нужна эта функция - кинул dll-ку в папку и получил. Не нужна - удалил.
Скоро будет другой плагинчик, позволяющий админам сервера видеть всех игроков на сервере (а не только тех, которых видит командер), и , самое главное, узнать номер канала каждого такого игрока и ip адрес.
Тогда проблема с хитрожопыми никами будет решена полностью, т.к., через тот же SC можно кикнуть не только командой <kick, но и командой <exec channel DESTROY, нужно только знать номер канала. И забанить можно средствами сервера по ip гораздо эффективнее.
Может быть, появится плагин, собирающий информацию в базу данных (для статистики), плагин для ротации карт, плагин для определения выполнения задания в миссии, для ограничения по самолётам или вооружениям....
И всё это можно будет использовать в любой комбинации. И делать маленьким частями. А если какого-то функционала не хватает, то садишься и просто дописываешь его самостоятельно - так, как хочешь именно ты. Правда, для этого нужно немножко разобраться с программированием. Совсем немножко или конкретно - всё зависит от уровня требуемого функционала.
SC остаётся нужен до тех пор, пока его функционал не заменён.


Очень советую скачать VisualC# Express или VisualBasic Express.
Эти программы мелкософт раздаёт бесплатно, но их возможностей хватит с лихвой для реализации любых функций сервера.
А c# очень пригодится и после выхода БОБа.

mar$
20.11.2010, 23:26
А если какого-то функционала не хватает, то садишься и просто дописываешь его самостоятельно - так, как хочешь именно ты. Правда, для этого нужно немножко разобраться с программированием.
Ох,если бы это было так просто,когда даже малейшего представления об этом нет...:sorry:

POP
20.11.2010, 23:56
Ох,если бы это было так просто,когда даже малейшего представления об этом нет...:sorry:
Дорогу осилит идущий ;)
Или "главное нАчать":D

=M=TYGRA
21.11.2010, 10:37
А ты сам не хочешь на конкретном сервере скажем попробовать реализовать и начать нанизывать функционал ? :) Сервер есть ;)

POP
21.11.2010, 11:42
А ты сам не хочешь на конкретном сервере скажем попробовать реализовать и начать нанизывать функционал ? :) Сервер есть ;)
Сервер и у меня есть (http://il-2.sinor.ru/forum) :)
Уже стоит, уже собирает логи, остальное - по мере написания и тестирования.;)

basurman
21.11.2010, 12:34
Лучше бы, простите за наглость, написали бы на чем-нить, что можно скомпилировать или хотя бы запустить под линух (и такой жалобно-плаксивый смайлик)

POP
21.11.2010, 12:40
Не вижу смысла.
Да и инструментов вроде VisualStudio под линукс нет. :)
А результат хочется получать с минимумом затрат.(лень - двигатель прогресса:))
Тем более, есть же питоновский Daemon... Или он под линуксом не работает?

mar$
21.11.2010, 13:36
POP, а можно все-таки поинтересоваться, какую задачу ты перед собой ставишь? Я понял так,что ты собираешься создать некую платформу,с помощью которой всякими плагинами-дллками и пр. "пичкать" сервер, добиваясь тех или иных "хотелок". Но удобно ли это для большинства админов серверов, когда мало кто из них владеет языками программирования? В таком виде легко запутаться, и в случае неудачной установки потом концов не найдешь. Не лучше ли поставить целью создать либо принципиально новый коммандер,учитывающий недостатки SC, с входящим в его функционал новыми плагинами,которые пользователь может юзать на свое усмотрение,либо усовершенствовать сам SC,правда,я не знаю,насколько это будет правомерно...
Идеи-хотелки для коммандера уже давно назрели, известны и недостатки существующего коммандера. Но SC хотя бы имеет вполне удобный и понятный интерфейс для настроек и управления сервером,да и веб-статистика под SC вполне информативна.
Есть еще,например, коммандер FBDj, для "ультрапаковых" серверов. В нем свои преимущества и недостатки. Понимает движущуюся наземку, может "отрезать" часть списка вооружений для конкретного самолета, но не имеет ряд полезных команд (как <vote в SC, например), не полностью ведет учет гибели пилота, статистика очень подробная, но и лишнего там выше крыши.
Очень жаль,что уже давно прекратилась поддержка SC "геннадичами", а ведь можно было и довести его до ума...

POP
21.11.2010, 14:36
POP, а можно все-таки поинтересоваться, какую задачу ты перед собой ставишь? Я понял так,что ты собираешься создать некую платформу,с помощью которой всякими плагинами-дллками и пр. "пичкать" сервер, добиваясь тех или иных "хотелок". Но удобно ли это для большинства админов серверов, когда мало кто из них владеет языками программирования? В таком виде легко запутаться, и в случае неудачной установки потом концов не найдешь. Не лучше ли поставить целью создать либо принципиально новый коммандер,учитывающий недостатки SC, с входящим в его функционал новыми плагинами,которые пользователь может юзать на свое усмотрение,либо усовершенствовать сам SC,правда,я не знаю,насколько это будет правомерно...
Идеи-хотелки для коммандера уже давно назрели, известны и недостатки существующего коммандера. Но SC хотя бы имеет вполне удобный и понятный интерфейс для настроек и управления сервером,да и веб-статистика под SC вполне информативна.
Есть еще,например, коммандер FBDj, для "ультрапаковых" серверов. В нем свои преимущества и недостатки. Понимает движущуюся наземку, может "отрезать" часть списка вооружений для конкретного самолета, но не имеет ряд полезных команд (как <vote в SC, например), не полностью ведет учет гибели пилота, статистика очень подробная, но и лишнего там выше крыши.
Очень жаль,что уже давно прекратилась поддержка SC "геннадичами", а ведь можно было и довести его до ума...
Усовершенствовать SC не получится по причине его закрытости.
Но добавить функционала (там где не будет конфликтов с уже имеющимся) - реально.
Идея именно в платформе, в свободном обмене готовыми маленьким или большими кирпичиками (желательно с открытыми исходниками), максимально стандартизированными.
Подправить что-то в небольшом модуле гораздо легче, чем в клубке чужого кода, который пытается реализовать всё и сразу. Даже если исходники полностью открыты и доступны для редактирования. Ну и большое дело проще делать маленькими шажками.

mar$
21.11.2010, 14:55
POP, если ты берешься за большое дело, и если нужна помощь, обращайся.Я не программист,но проводить испытания или лопатить огромные текстовые файлы вплане создания списка объектов-это мне по силам))

Asmoday
23.11.2010, 22:07
Лучше бы, простите за наглость, написали бы на чем-нить, что можно скомпилировать или хотя бы запустить под линух (и такой жалобно-плаксивый смайлик)
Под linux есть mono (http://www.mono-project.com/). И компилирует и запускает.

Gispanez
27.11.2010, 15:58
Т.е. насколько я понял, эта программа осуществляет сугубо обмен между сервером и внешними модулями.
Тогда вопрос, ты сам будешь писать под нее модули и выкладывать сюда, или выложишь интерфейс обмена, чтобы можно было что-то и самому делать? Или будешь сам писать "под заказ"? То что ты предлагаешь сейчас - возможность по человечески вести логи сервера, запущенного под SC ИМХО весьма далеко от потенциала такой программулины :D

ЗЫ Ща поглядел на код повнимательнее, по ходу дела, тут тока нету функции как серверу команды отдавать, остальное вроде есть :D Хорошая программка камрад. Хорошо бы остальные методы поглядеть :D

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

POP
28.11.2010, 21:16
Т.е. насколько я понял, эта программа осуществляет сугубо обмен между сервером и внешними модулями.
Тогда вопрос, ты сам будешь писать под нее модули и выкладывать сюда, или выложишь интерфейс обмена, чтобы можно было что-то и самому делать? Или будешь сам писать "под заказ"? То что ты предлагаешь сейчас - возможность по человечески вести логи сервера, запущенного под SC ИМХО весьма далеко от потенциала такой программулины :D

ЗЫ Ща поглядел на код повнимательнее, по ходу дела, тут тока нету функции как серверу команды отдавать, остальное вроде есть :D Хорошая программка камрад. Хорошо бы остальные методы поглядеть :D

ЗЗЫ Кстати, как думаешь проверять плагины, чтобы они не конфликтовали друг с другом? Лопатить код вручную? По идее можно действительно стандартизировать часть команд, функций, имен, но тогда тебе или кому-то еще придется заняться нормализацией сторонних кодов. Хотя, сейчас БоБ на носу..
Весь интерфейс в interface.dll.
Там на самом деле 2 интерфейса.
Один - тот, который должен реализовать плагин, а второй - реализованный самой программой.
В том, что выложенно в первом посту, интерфейс самой программы как раз содержит только метод отправки команды серверу, а обработка информации с сервера - на совести плагина.

Сейчас кардинально переделываю программу.
Вот исходники нового интерфейсаСама программа теперь ведёт сбор данных об игроках на сервере и складывает их в табличку pilots, доступную через интерфейс.
Структура таблички в этом интерфейсе в виде перечисления pilotsColumn.
События из лога и консоли отдаёт плагинам теперь через event-ы.
Плюс некоторые события от самой программы, позволяющие получить данные уже недоступные после события - как статистику пилота на сервере при его дисконнекте - всё, что он насобирал за всю сессию выдаётся в виде строки таблицы вместе с событием дисконнекта.
Такая же строка отдаётся с событием выхода в меню.
Ну и вспомогательные "технические" события - Падение или остановка сервера и окончание миссии.

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

POP
03.12.2010, 11:01
Первые 2 сообщения обновлены до актуального состояния

POP
04.12.2010, 15:26
В первом сообщении, в архиве ServerCommander.rar обновлён файл IL2SERVER.dll
Теперь русские буквы не только корректно принимаются от сервера, но корректно отправляются из программы и плагинов. На совместимости с остальным это никак не сказалось.
Добавлен архив Admin.rar - с плагином, который давно обещал тем кто страдает от "хитрожопых" ников.
readme оттуда:

v. 2.0.0.0
Этот плагин реализует три новых команды,
доступных админам сервера.
<users
без параметров.
Выдаёт в чат администратора список всех пилотов
с номерами (нумерация как на сервере), номерами каналов на сервере
и с IP-адресами.
<kickch N
Где N - номер канала игрока.
Разрывает связь с сервером игрока с каналом N, отправляя серверу
консольную команду channel N DESTROY.
<banch N
Где N - номер канала игрока.
Разрывает связь с сервером игрока с каналом N, отправляя серверу
консольную команду channel N DESTROY и добавляет IP-адрес этого игрока в
серверный банлист. (команды ban ADD IP {ip-адрес этого канала} и ban SAVE ban.txt)

Графический интерфейс вызывается командой admin в консоли программы
и позволяет редактировать список админов, импортировать список админов
из файла Геннадьичевского SC admin.txt и видеть присутствие на сервере
залогиненных администраторов.
Добавляются и удаляются администраторы также, как в SC через игру суперадмином
или вручную через графический интерфейс программы (с Геннадьичевским SC
список не синхронизируется - если добавили ручками только в SC, то новые команды
не будут доступны, пока также не добавить в таблицу плагина, и наоборот)
В любое время можно удалить файл со списком админов и заново загрузить из Геннадьичевского.
Список админов хранится в файле SCAdmins.XML в корневой папке программы,
который будет создан при первой загрузке плагина.
Логин админа в плагине происходит параллельно с логином в SC
той же командой.

В архиве - исходники.

Gispanez
04.12.2010, 19:06
А можешь написать коротенький пример, плагинчика, хоть с пустым функционалом - только получение строки из консоли сервера, и отдание команды. Если можно на С++ )).
И как они подгужаются, достаточно просто поместить dll в папку с SC и он подхватится? Т.е., допустим, захотел я сделать визуальное окошко типа геннадичевского SC, с отображением всего что надо, запихнул соответствующий код в dll, саму ее поместил в папку, и оно автоматически появится при запуске программы? или надо ее где-то описывать?
Потом, то что у тебя называется "таблица статистики" это как я понимаю, встроенная в программу, собственная статистика? Т.е. часть функционала таки зашита в il2server.exe, или я чето не так понял?

POP
05.12.2010, 08:20
А можешь написать коротенький пример, плагинчика, хоть с пустым функционалом - только получение строки из консоли сервера, и отдание команды. Если можно на С++ )).
В с++, к сожалению, я совсем не шарю :)
Но вот пример плагина на c#, в котором всё что можно продемонстрировано


using System;


namespace ClassLibrary3
{
public class Class1:INTERFACE.ISCPlugin//Унаследовали наш класс от INTERFACE.ISCPlugin
{
INTERFACE.Imain Server;//Объявили переменную типа INTERFACE.Imain - это будет ссылка на объект server
#region Члены ISCPlugin

public void LOAD(INTERFACE.Imain server)//Это реализация метода LOAD из INTERFACE.ISCPlugin. Параметр - это ссылка на объект Server, передаваемая программой при загрузке плагина
{
Server = server;//Запомнили ссылку
//Тут делаем всё, что нам нужно при запуске плагина
Server.ConsoleString += new INTERFACE.ConsoleStringDelegate(Server_ConsoleString);//Подключаем обработчик события получения строки консоли
//Если надо - подключаем обработчики остальных событий
/*
Server.LogString+=new INTERFACE.LogStringDelegate(Server_LogString);
Server.MissionEnd+=new INTERFACE.PilotTableDelegate(Server_MissionEnd);
Server.ServerDown+=new EventHandler(Server_ServerDown);
Server.UserConnected+=new INTERFACE.UserRowDelegate(Server_UserConnected);
Server.UserDisconnected+=new INTERFACE.UserRowDelegate(Server_UserDisconnected);
Server.UserExitInMenu+=new INTERFACE.UserRowDelegate(Server_UserExitInMenu);
*/
//Если хотим - загружаем(запускаем) форму из нашего плагина.. и т.д.
}


public string Name//Это реализация свойства Name из INTERFACE.ISCPlugin
{
get { return "MyPlugin"; }//Просто возвращаем имя нашего плагина
}

#endregion
void Server_ConsoleString(string Cstring)//А это и есть обработчик события получения строки консоли - параметр - это строка
{
Console.WriteLine(Cstring);//вывели в консольное окно программы строку консоли сервера
}
void MyMetod()//Просто какой-то метод. Здесь - для демонстрации обращений к методам и свойствам сервера.
{
Server.send("mission END");// Вот так отправляем серверу команду "mission END"
Server.UserStatEnabled = true;//Включили сбор статистики пилотов. (кто чего сколько настрелял, напопадал, науничтожал)
Server.ChannelStatEnabled = true;//Включили сбор статистики каналов (пинг, скорость подключения)
System.Data.DataTable MyTable = Server.pilots;//Получили ссылку на таблицу статистики пилотов на сервере
string MissionNow = Server.CurrentMission;//Записали в переменную MissionNow строку текущей миссии на сервере (путь и имя файла миссии)
Server.CurrentMission = "net/dogfight/1/mission.mis";//Загрузили и запустили миссию net/dogfight/1/mission.mis
Server.send("mission LOAD net/dogfight/1/mission.mis BEGIN");// Тоже самое, только командой серверу
string Path = Server.ServerPath;// Узнали путь к папке сервера

}

}
}

Вне .NET я даже не знаю можно ли сделать плагин (наверное можно, но как - даже представления не имею).




И как они подгужаются, достаточно просто поместить dll в папку с SC и он подхватится? Т.е., допустим, захотел я сделать визуальное окошко типа геннадичевского SC, с отображением всего что надо, запихнул соответствующий код в dll, саму ее поместил в папку, и оно автоматически появится при запуске программы? или надо ее где-то описывать?
Достаточно просто поместить dll-ку. Программа загрузит из неё все классы, унаследованные от INTEFACE.ISCPlugin, и в каждом таком объекте запустит метод LOAD(server). Всё что делается в конструкторе такого класса без параметров и всё, что делается в методе LOAD() будет сделано.
Главное - метод LOAD() и, конечно, конструктор, должны вернуть управление программе (поток не должен в них остаться).

Если плагин не имеет собственного файла настроек, то нигде, ничего прописывать не нужно.
Если же он использует файл параметров типа plugin.dll.config (его легко и просто создать в VisualStudio и в программе к нему легко обращаться), то в файл настройки il2server.exe.config нужно будет добавить соответствующую секцию из файла plugin.dll.config . Сам plugin.dll.config уже не понадобится.



Потом, то что у тебя называется "таблица статистики" это как я понимаю, встроенная в программу, собственная статистика? Т.е. часть функционала таки зашита в il2server.exe, или я чето не так понял?
Часть функционала зашита в IL2SERVER.dll, в класс Server.
Это, по сути, оболочка для родного иловского сервера, запускающая его, перехватывающая его консоль, следящая за файлом лога, собирающая доступную от сервера информацию об игроках (самый основной минимум) и предоставляющая всему остальному интерфейс Imain.
il2server.exe - это оболочка для объекта Server и всех плагинов, которая инициализирует Server, ищет и инициализирует плагины через интерфейс ISCPlugin. Дальше плагины и Server общаются напрямую.

POP
05.12.2010, 16:28
У нас на форуме создан специальный раздел (http://il-2.sinor.ru/forum/index.php?c=20) по поводу что, как, почему... и т.п.
Здесь тоже буду отвечать на вопросы и выкладывать результаты.
Надеюсь, не сочтут за рекламу. Просто, в формате одной темы врядли удастся нормально пообсуждать и развить столь крупную задумку, а просить целый раздел тут пока не под что.

mar$
06.12.2010, 01:04
POP, не пойму,все архивы надо разархивировать на папку с сервером?
Можно поподробней с порядком установки? Спасибо.

Gispanez
06.12.2010, 08:15
Ок, спс. Бум разбираться что к чему )

POP
06.12.2010, 08:17
POP, не пойму,все архивы надо разархивировать на папку с сервером?
Можно поподробней с порядком установки? Спасибо.
В папку с сервром разархивировать ServerCommander.rar.
Там появится папка plugins, с двумя подпапквми.
Admin.rar распаковать куда угодно, взять файл AminPlugin.dll (да, буква пропущена - можешь поправть, можешь так оставить. На скорость работы не влияет :)) и положить его в одну из подпапок папки plugins в корне сервера. В ..../server/plugins/1 или в ....server/plugins/новая папка.
Всё остальное в этом архиве - это папка с исходниками.

mar$
06.12.2010, 11:10
POP,спасибо! В админке у тебя есть команда <kickch N, а как насчет <banch N ? Да еще чтобы эта запись автоматом в ban.txt:)
Кстати,а почему после остановки сервера ban.txt переименовывается в ban.bak?
Вобщем,твоя задумка-стоящая вещь,если ее развивать. Чую, ты таким образом действительно сможешь не только заменить весь функционал SC,но и превзойти его.:)

POP
06.12.2010, 12:04
POP,спасибо! В админке у тебя есть команда <kickch N, а как насчет <banch N ? Да еще чтобы эта запись автоматом в ban.txt:)
И это можно легко сделать.



Кстати,а почему после остановки сервера ban.txt переименовывается в ban.bak?
Понятия не имею. Возможно, в ban.cmd, нужно где-то добавить ban SAVE.
Я раньше не замечал такого, но проверил - точно есть такое.

mar$
06.12.2010, 12:16
Да,по поводу плагина adminPlagin.dll (aminPlagin.dll) Не сохраняет записи списка админов. После перезапуска сервера админлист пустой.

POP
06.12.2010, 12:55
Да,по поводу плагина adminPlagin.dll (aminPlagin.dll) Не сохраняет записи списка админов. После перезапуска сервера админлист пустой. Кнопочку Save не забыл нажать?
Проверь что в корневой папке сервера создаётся файл SCAdmins.XML
Есть ли права на создание файла в корне сервера при запуске?
Как вообще запускаешь сервер?

mar$
06.12.2010, 13:34
Кнопочку Save не забыл нажать?

Не забыл.

---------- Добавлено в 13:33 ---------- Предыдущее сообщение было написано в 13:32 ----------



Проверь что в корневой папке сервера создаётся файл SCAdmins.XML

Создается.В нем пусто

---------- Добавлено в 13:34 ---------- Предыдущее сообщение было написано в 13:33 ----------



Есть ли права на создание файла в корне сервера при запуске?

Не знаю:rolleyes:

---------- Добавлено в 13:34 ---------- Предыдущее сообщение было написано в 13:34 ----------



Как вообще запускаешь сервер?
По-разному пробовал. И сразу server.exe,и через SC

POP
06.12.2010, 13:45
Не забыл.

---------- Добавлено в 13:33 ---------- Предыдущее сообщение было написано в 13:32 ----------


Создается.В нем пусто

---------- Добавлено в 13:34 ---------- Предыдущее сообщение было написано в 13:33 ----------


Не знаю:rolleyes:

---------- Добавлено в 13:34 ---------- Предыдущее сообщение было написано в 13:34 ----------


По-разному пробовал. И сразу server.exe,и через SC
Сделай так.
Запусти сервер, набери в консоли admin, на вылезшем окошке нажми кнопку Import from SC, покажи файл admin.txt в корне SC и после того, как админы появятся в списке проверь содержимое SCAdmins.XML

mar$
06.12.2010, 13:47
Сделай так.
Запусти сервер, набери в консоли admin, на вылезшем окошке нажми кнопку Import from SC, покажи файл admin.txt в корне SC и после того, как админы появятся в списке проверь содержимое SCAdmins.XML
<?xml version="1.0" standalone="yes"?>
<DocumentElement />
Пусто,короче

POP
06.12.2010, 14:19
<?xml version="1.0" standalone="yes"?>
<DocumentElement />
Пусто,короче
Удали этот файл и повтори, начиная с импорта.

POP
06.12.2010, 17:56
Поправил баг с несохранением списка, добавил команду <banch.
Архив в первом сообщении обновлён.
Команда <banch N добавляет ip канала N в банлист сервера и сохраняет банлист в файл ban.txt.

Проблема с переименованием ban.txt в ban.bak при остановке сервера решается добавлением в конец файла server.cmd строки
ban LOAD ban.bak

Если не планируется править ban.txt вручную во время работы сервера, то этого достаточно.

mar$
07.12.2010, 00:01
POP,its work!:) Теперь осталось привертеть команды управления сервером из SC, заставить читать ini файлы миссий, привертеть рандомайзер, и новый коммандер готов...:D

POP
12.12.2010, 14:37
Нужна помощь в разработке веб-статистики.
База данных практически готова, сбор в базу практически всей информации с сервера - тоже.
БД на MS SQL EXPRESS.
Сайт статистики нужен или на php (желательно сразу пятом), или на .NET под IIS.
Всем, кто заинтересован и готов взяться за написание (пусть даже под другую платформу), готов отдать образец пустой базы или чуть позже (через недельку) базы с собранной с действующего сервера статистикой и ответить на любые вопросы.

mar$
12.12.2010, 19:15
POP,а готовые тела стат не подойдут,типа как эта (http://www.il2.play.vsi.ru/infront.php)?

POP
12.12.2010, 19:55
Нет.
База данных разработана полностью новая, поэтому, переделка будет сложнее, чем написание с нуля.
Не нужны изыски. Нужен минимум функционала и оформления, как было в "стандартном" стате от Геннадьича.
Это для раздачи всем желающим.

mar$
12.12.2010, 20:12
Нужен минимум функционала и оформления, как было в "стандартном" стате от Геннадьича.

Погодь. Эта стата и работает на SC. Она использует данные оттуда,т.е. имена объектов те же самые. eAAA,fAAA,SAir,Tank,и т.д.

POP
13.12.2010, 07:52
Погодь. Эта стата и работает на SC. Она использует данные оттуда,т.е. имена объектов те же самые. eAAA,fAAA,SAir,Tank,и т.д.
В новой базе структура таблиц совсем другая, а значит и все запросы нужно переписывать. Да и сбор статистики по-другому организован.
Стараюсь сервер не напрягать запросами по eAAA... и т.п.

mar$
15.12.2010, 17:56
А если Дайдалосы выдадут вдруг нагора свой коммандер и стату?:eek: Ведь не зря они трудились над MDS, зная,что без MDS догфайт-серверы не поддерживают движучку?

AlexMcArrow
15.12.2010, 21:13
Здравствуйте, меня зовут Александр.
Прошу прощения, за то что, резко вклиниваюсь в дискуссию.
Честно, прочитал все посты мельком, но уловил основную суть.
Сам не являюсь игроком, потому, тяжело понимаю аббревиатуры и местный сленг.

"Ближе к теме".
Все здесь собравшиеся, обсуждают новую версию статистики для игры ИЛ-2 штурмовик.
Я заинтересован этой темой, по многим причинам:

я немного веб-программист (php).
мой брат играет в эту игру и очень переживает из-за плохой статистики.
несколько, добрых людей, попросили помочь со статистикой.


Вопросы:

Зачем писать данные статистики на прямую в БД? Это очень сильно ограничивает, сторонних разработчиков, в возможности модификаций.
Чем обусловлен выбор СУБД (MS SQL EXPRESS)? Опять-же, мы сталкиваемся с проблемой совместимости — решение: Предложения по существу.
Зачем жесткая структура БД? Опять-же, мы сталкиваемся с проблемой совместимости — решение: Предложения по существу.


СТАТ — сервер (программное обеспечение) статистики.
ИС — игровой сервер (совокупность ИЛ-2 сервера и связующего программного обеспечения)

Предложения по существу:
Можно использовать протокол передачи (через HTTP, используя JSON, XML, URI, JSON:RPC, XML:RPC).
Данные передавать «сырыми» - как есть. Механизмы «разгребания» данных откинуть на СТАТ. (как и каким образом эти данные будут храниться и обрабатываться — будет проблемой разработчика СТАТ)
Протокол можно будет использовать не только для записи данных статистики (с ИС, в БД СТАТ), но и для «общения» СТАТ с ИС, для реализаций таких вещей как: авторизация, проверка допустимости игрока к игре (кик, бан) и многого другого.
Для защиты от подмены или фальсификации данных, можно обойтись, простым средством: каждая сторона (СТАТ и ИС), будут иметь одинаковые ключи проверки, которые будут посылаться с каждым запросом (ключ, даже длинной в 10 символов, заставит попотеть, желающих «напакостить»).

Суть:
Разделить «яйца».
ИС — будет заниматься игрой, сбором информации и пересылкой ее, на СТАТ.
СТАТ — будет заниматься хранением, обработкой и выводом статистики.
ИС+СТАТ — смогут взаимодействовать, на основании протокола.

Не словом, а делом:
Готов взяться за разработку СТАТ (php+MySQL). Есть хорошие наработки в области, хранения и обработки данных (но там своя, очень хитрая система таблиц и хранения данных — MySQL), от сюда и проблема.
Если я смогу получать (а по факту, ИС, сам будет кидать новые данные) данные в сыром виде, я смогу самостоятельно организовать их хранение, в удобном мне формате. И соответственно, при запросе ИС, на авторизацию пользователя, СТАТ просто ответит: да или нет.

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

Так-как проект, общественный - думаю, можно смело работать на GitHUB (программисты - поймут)


Макаров Александр
e-mail: alex.mcarrow@gmail.com
icq: 163109067
Уфа (GMT+5)
В сети с 11.00 до 18.00 (GMT+5)

POP
20.12.2010, 09:24
В архиве ServerCommander.rar, в первом сообщении, обновлён до версии 2.1.0.0 файл IL2SERVER.dll.
Исправлен баг с пропуском событий отключения игроков

---------- Добавлено в 12:24 ---------- Предыдущее сообщение было написано в 11:06 ----------


Здравствуйте, меня зовут Александр.
Ответил по электронке... Уже дня три...
Без результата

AlexMcArrow
20.12.2010, 13:12
Ответил по электронке... Уже дня три...
Без результатаДоброго времени суток.
Письмо получил, и прочитал.
По поводу тех.задания, к сожалению, я сам не гуру в игре, а по этому - даже не знаю, что и как считается и какие данные мне нужны.

Мое представление работы:
БД - база данных
ИС - игровой сервер (сам ИЛ-2)
КМ - командер (программа обеспечивающая работу ИС и производящая сбор информации)
СТАТ - система статистики
ПИЛОТ - один из игроков

КМ - определяет работу ИС (запуск ИС, выбор текущей карты и т.д.), собирает информацию об игре и передает ее СТАТ
СТАТ - занимается формированием отчетных данных, учетом авторизации пользователей

Авторизация (как я это вижу): (далее описана логика, без претензий на верность)
ПИЛОТ, заходит на ИС под своим логинов, вводит свой пароль. КМ, передает логин и пароль СТАТ, которая проверяет допустимость данной пары (логин+пароль) (существование, кик, бан и т.д.) и сообщает КМ результат (login/error). КМ - на основании полученного результата производит необходимые действия (разрешает ПИЛОТУ играть, или принуждает покинуть игру)

Передача статистики боя
КМ, работая с ИС, производит сбор данных о текущих действиях на ИС и передает их СТАТ.
СТАТ, обрабатывает полученные данные и сохраняет их в БД, для последующего использования.

Статистика для ПИЛОТОВ
ПИЛОТ, заходит в СТАТ (которая может являться, веб-страницами, веб-приложением или даже локальным клиентом).
СТАТ отображает необходимы данные ПИЛОТУ получая данные из БД

Понимаю, что все выше описанное, для большинства - не новость. Просто есть желание сделать все по человечески.

Вопросы и ответы:
1) Зачем КМ, напрямую работать с БД?
Как я понял, КМ необходимо где-то хранить промежуточные данные, кто сейчас в игре, кто авторизирован, а кто еще нет.
Думаю для этих целей КМ может использовать собственную БД, но только для хранения временных данных.
Даже такие вещи, как: список карт, последовательность карт, настройки карт (если это возможно) - хранить в БД СТАТ = это даст возможность, редактировать ИС из удобного интерфейса, не ковыряясь в десятках файлов

2) Протокол для КМ+СТАТ?
Использование протокола, позволит организовывать независимую (от ОС, разрабочика, СУБД) систему хранения данных в СТАТ.
Каждый желающий, сможет использовать КМ и создать свою СТАТ
КМ и СТАТ - смогут работать на разных серверах и станут независимыми в своей работе

Karabas-Barabas
20.12.2010, 20:45
...
1) Зачем КМ, напрямую работать с БД?

Потому что вы себе слабо представляете, нет, совсем не понимаете как и что работает.
Чтобы не городить всю следующую ерунду:




Мое представление работы:
БД - база данных
ИС - игровой сервер (сам ИЛ-2)
КМ - командер (программа обеспечивающая работу ИС и производящая сбор информации)
СТАТ - система статистики
ПИЛОТ - один из игроков

КМ - определяет работу...

...Как я понял, КМ необходимо где-то хранить промежуточные данные, кто сейчас в игре, кто авторизирован, а кто еще нет.
Думаю для этих целей КМ может использовать собственную БД, но только для хранения временных данных.
Даже такие вещи, как: список карт, последовательность карт, настройки карт (если это возможно) - хранить в БД СТАТ = это даст возможность, редактировать ИС из удобного интерфейса, не ковыряясь в десятках файлов

2) Протокол для КМ+СТАТ?
Использование протокола, позволит организовывать независимую (от ОС, разрабочика, СУБД) систему хранения данных в СТАТ.
Каждый желающий, сможет использовать КМ и создать свою СТАТ
КМ и СТАТ - смогут работать на разных серверах и станут независимыми в своей работе

База это альфа и омега.
SQL База это и есть сама война или что вам угодно.

А сатистика - это всего лишь набор скриптов на Языке Структуированных Запросов, что и означает SQL.
Статистика лишь визуальное представление текущей войны, частный случай, определяемый лишь тем, что какая-то группа игроков желает увидеть, или даже скорее - показать, тем, кто находится вне игры :)
Как впрочем является скриптами на SQL и все остальное - генерация "арены" для боя (куда, какие и сколько танчиков поставить, доступные аэродромы и самолеты с вооружением на них для пилотов, что каким игрокам доступно, в первую очередь в связи с привязкой к выбранной армии, всякие условия типа погоды и т.п.), обработка запросов пилотов при входе на сервер о "конфигурации арены", а так же постоянное отслеживание изменений на "арене" вносимых игроками в процессе игры или по еще каким то механизмам, отслеживание состояния самих игроков, расчеты необходимых изменений, с учетом заранее заданных или вычисляемых параметров и т.п., и передача этой информации обратно игрокам.
Всякие частности типа авторизация (потому что можно и без неё ведь обойтись в каких-то случаях), проверка чего-то или кого-то, защита от и т.п. это тоже все скрипты.
Что-то примерно так.

И вне всякого сомнения для базы надо использовать настоящий SQL. MS SQL хороший выбор.
Какое MySQL имеет отношение к SQL, непонятно.

А командер/демон/парсер это всего лишь костыль/замена отсутствующего API у выделенного сервера Ил-2.

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

mar$
21.12.2010, 00:13
А командер/демон/парсер это всего лишь костыль/замена отсутствующего API у выделенного сервера Ил-2.

Впрочем все это уже давно реализовано и успешно работает не менее чем на десятке игровых серверов.
С кучей недостатков и недоделок.:)

AlexMcArrow
21.12.2010, 06:05
Потому что вы себе слабо представляете, нет, совсем не понимаете как и что работает.
Перечитайте, мой первый пост (1518624 (http://sukhoi.ru/forum/showthread.php?p=1518624#post1518624)), я там, как раз и сообщаю, что я очень плохо знаю игру.
И поверьте, знание игры, не очень сильно повлияет на качество написанного программного кода.

Как думаете, программисты, которые писали код ИЛ-2, сколько имели боевых часов, на як-3 и ла-5фн??? :dontknow:


Какое MySQL имеет отношение к SQL, непонятно.
Почитайте на досуге: :rtfm:
http://ru.wikipedia.org/wiki/Sql
http://ru.wikipedia.org/wiki/MySQL

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

Я не "спаситель", во втором пришествии.
А лишь заинтересован в развитии проекта, а именно новая, хорошая, масштабируемая - статистика.

Что я хочу от Вас?
Я хочу посильной помощи, в создании этого проекта. Будет много вопросов и про интерфейс, и расположение элементов статистики на странице сайта и много других важных и не очень вопросов.
Буду очень рад Вашей помощи.

Прошу прощения, если мои слова, в этом посте, кого-то обидели и оскорбили.

Karabas-Barabas
21.12.2010, 10:31
С кучей недостатков и недоделок.:)

Как и у любой программы :)
Главное - работает УЖЕ.

А недостатки это продолжение достоинств :)
И их никто не мешает править тем, кому надо.

Глюки уж точно ни при чем, если кто-то не разбирается в программировании :)




---------- Добавлено в 10:31 ---------- Предыдущее сообщение было написано в 10:17 ----------


... я очень плохо знаю игру.
И поверьте, знание игры, не очень сильно повлияет на качество написанного программного кода...

Я не "спаситель", во втором пришествии.
А лишь заинтересован в развитии проекта, а именно новая, хорошая, масштабируемая - статистика.

Что я хочу от Вас?
Я хочу посильной помощи, в создании этого проекта.

Вас никто и не лечит.
Вам говорят как надо.

А если вы сами программист, то чего тогда спрашиваете,

и пишите:



Будет много вопросов и про интерфейс, и расположение элементов статистики на странице сайта...

С этого точно не стоит начинать :)
Не надо бежать впереди паровоза.
Что куда отобразить надо прикидывать, когда БУДЕТ ЧТО отображать.
А до этого еще много чего надо сделать.

AlexMcArrow
21.12.2010, 11:28
Что куда отобразить надо прикидывать, когда БУДЕТ ЧТО отображать.
А до этого еще много чего надо сделать.
Вопросы данной тематики, будут очень щепетильными и будут решаться несколько недель, а может и месяцев.
И ждать решения, когда уже тех.часть готова - будет неуместно.

А почему мне важно мнение людей которые будут пользоваться этим "продуктом"? - ответ в вопросе, "им пользоваться, а не мне". Я могу сделать на свое усмотрение, и оно с большой вероятностью будет ошибочным и не удобным.

По сути есть два пути:

Я делаю так как удобнее конечным пользователям - и все счастливы.
Я делаю, как сам решу - и в последствии начнется переделка ("сделай лучше так")



А если вы сами программист, то чего тогда спрашиваете,
Именно потому что я программист, я и спрашиваю ИГРОКОВ, которым пользоваться этой системой. Я заставляю "программу работать", но как она должна работать и какой должен быть конечный результат - решать конечным пользователям (ИГРОКАМ).

Итог:
Думаю нет смысла продолжать выяснять, кто в чем прав и виноват.
Лучше всю эту энергию направить в нужное русло.

Я так понимаю, вы очень хорошо знаете игру и методы расчета и вывода статистических данных.
Может Вы и возьмете на себя роль "выпускающего редактора"?

тестирование
внесение предложение
вынесение отдельных вопросов на обсуждение общественности
принятие решений касательно визуального и структурного оформления

POP
21.12.2010, 11:38
Ребята, не ругайтесь :)
У каждого свои предпочтения и взгляды на "как оно должно быть".
Думаю, что всегда можно договориться до наиболее интересного решения, если не только говорить, но и слушать друг друга.
Сейчас не идёт речь о создании нового крупного проекта, а, для начала, всеголишь, о замене SC более открытым и гибким проектом, постаравшись избавиться от его основных ограничений и недостатков и не наделав новых.
Пока - просто нужен массовый продукт, на начальном уровне под новые возможности 4.10, с возможностью в дальнейшем масштабировать до более серьёзных вещей.
Основа, собирающая и хранящая информацию от сервера, понимающая русские (на русской винде, немецкие на немецкой, китайские на китайской.... и т.д) буквы в никах, уже есть, возможность прикручивать любой функционал - есть.
Нужно отображение статистики, уровнем не хуже того древнего стата от Геннадьича.
Что и как делать дальше - будем разбираться потом, главное сейчас - не наделать принципиальных ошибок, которые потом придётся обходить "костылями".

mar$
21.12.2010, 12:01
Главное - работает УЖЕ.

Но может перестать работать вообще, если в 4.10 наземка действительно поедет.

Чёрный бомбер
21.12.2010, 12:14
Но может перестать работать вообще, если в 4.10 наземка действительно поедет.
А что мешает увеличить радиус таргетса до нескольких квадратов, в которых будет двигаться наземка? :)

POP
21.12.2010, 12:53
А что мешает увеличить радиус таргетса до нескольких квадратов, в которых будет двигаться наземка? :)
1. Попадание в этот радиус левых и даже своих объектов
2. Он принципиально не воспринимает всё, что вне секции [Nstationary]

mar$
21.12.2010, 13:05
А что мешает увеличить радиус таргетса до нескольких квадратов, в которых будет двигаться наземка? :)
SC заведомо не понимает движушиеся объекты [chief....]

Чёрный бомбер
21.12.2010, 13:27
POP, mar$
Сорри, забыл об этом :)

Karabas-Barabas
21.12.2010, 13:56
Но может перестать работать вообще, если в 4.10 наземка действительно поедет.

Это с чего бы?

Тем более что УЖЕ работает с движущейся наземкой :)

mar$
21.12.2010, 13:58
Тем более что УЖЕ работает с движущейся наземкой :)
SC?

=Andrey=
21.12.2010, 14:48
SC?
FBDj

Karabas-Barabas
21.12.2010, 16:09
SC?

Собственный.

Kerim
21.12.2010, 22:36
И поверьте, знание игры, не очень сильно повлияет на качество написанного программного кода.

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

Что касается выбора СУБД, то вопрос этот во многом религиозный - для данной задачи MySQL более чем достаточен (выше 5.1), тем более, что он уже есть на серверах с проектами Ил-2, но если речь идет о создании фактически нового продукта, то я бы тоже предпочел MS SQL-Server. Тут вопрос в другом - если проект пишется не только "под себя", но и с прицелом на свободное использование другими, не будет ли у этих "других" сложностей с поднятием MS SQL-Server на чужом хостинге? Не у всех, наверное, свое железо.

mar$
22.12.2010, 00:16
FBDj
Он как-то неправильно считает килы. Уже точно не помню,но сам лично обращался к его разработчику,но он так и не исправил этот баг.

---------- Добавлено в 00:16 ---------- Предыдущее сообщение было написано в 00:13 ----------


Собственный.
Поделился бы посмотреть)

POP
22.12.2010, 08:07
не будет ли у этих "других" сложностей с поднятием MS SQL-Server на чужом хостинге? Не у всех, наверное, свое железо.
Ну, держать Иловский сервер на чужом железе, да ещё там, где проблема поднять MSSQL - это само по себе под большим сомнением.
Во всяком случае, на виртуалке запустить сервер по-человечески мне не удалось из-за проблем с отсчётом времени через счётчик тактов процессора.
А по-другому виндовых хостингов, я как-то не встречал.
MSSQL же на любой виртуалке встанет без проблем.

mar$
23.12.2010, 00:58
Ну, держать Иловский сервер на чужом железе, да ещё там, где проблема поднять MSSQL - это само по себе под большим сомнением.

у нас именно так. Может,поднять БД и не будет проблемой,но сервера ил-2 нередко на чужих компах,с этим нельзя не считаться.

mar$
11.01.2011, 11:26
POP, а что означает запись в ServerErrrorlog.txt : socketConnection with 83.149.3.70:22415 on channel 55 lost. Reason: Reconnect user ошибка разбора ?

POP
11.01.2011, 15:44
Это значит, что при разборе этой строки из консоли произошла ошибка - возможно, этого юзера уже не было в списке игроков на сервере и была попытка его удалить по этой строке из консоли.
Вобщем, в этот файл пишутся перехваченные ошибки исключительно для отлавливания неучтённых вариантов поведения сервера. Если основная логика не нарушается, то можно их просто игнорировать.

mar$
11.01.2011, 23:53
POP,а можно взглянуть на пример инишника твоего коммандера? Как будут лимитироваться лдинамические объекты?

POP
12.01.2011, 08:54
POP,а можно взглянуть на пример инишника твоего коммандера? Как будут лимитироваться лдинамические объекты?
Формат инишника полностью повторяет SC-шный (по-крайней мере, то, что касается времени на миссию и целей)
Динамические объекты (наземка, то, что в секции chief миссии) привязываются к цели по первой точке маршрута - если эта точка попала в круг цели, значит вся колонна попадает в цель, учёт уничтожения - поюнитный.
Единственное отличие по целям - если в круг цели для команды попадает свой объект, то он не считается частью цели.
Можно одну и ту же цель (центр, радиус) задать для обеих команд - победит та, которая выбьет нужный процент чужих юнитов в этой цели.

mar$
12.01.2011, 10:03
Можно одну и ту же цель (центр, радиус) задать для обеих команд - победит та, которая выбьет нужный процент чужих юнитов в этой цели. Мне кажется,это лишнее.

mar$
12.01.2011, 11:30
Динамические объекты (наземка, то, что в секции chief миссии) привязываются к цели по первой точке маршрута - если эта точка попала в круг цели, значит вся колонна попадает в цель, учёт уничтожения - поюнитный.

Как я правильно понял,если колонна выедет за пределы радиуса цели,она все равно будет учтена?

POP
12.01.2011, 14:30
Как я правильно понял,если колонна выедет за пределы радиуса цели,она все равно будет учтена?

Да.
Не важно где уничтожена, важно является ли колонна целью в миссии.
Цели определяются в момент загрузки миссии. Колонны "разбиваются" на юниты и подсчёт выполнения цели ведётся от общего числа юнитов в цели.
Т.е., если в одну цель (на самом деле подцель) попадает один статик и одна колонна из 3х юнитов, и процент уничтожения задан 75%, то для выполнения этой цели нужно уничтожить уже не важно где 3 юнита из 4х.
Почему подцель - потому, что SC позволяет создавать одну цель для победы на карте из нескольких подцелей.
Я постарался сохранить логику для более простого перехода на новый командер.
Ничто не мешает изменить эту логику.

mar$
12.01.2011, 15:32
Насколько помню, в SC геннадичей (или это ограничение игры-хз) было ограничение максимум 4 таргетных цели на сторону. Большее число целей просто не определялось по команде <targets Теперь это будет учтено?

POP
12.01.2011, 16:08
Насколько помню, в SC геннадичей (или это ограничение игры-хз) было ограничение максимум 4 таргетных цели на сторону. Большее число целей просто не определялось по команде <targets Теперь это будет учтено?
Не отображается по команде - это не значит, что не учитывается и не обсчитывается.

mar$
12.01.2011, 20:06
POP,а ты еще не пробовал делать карты на свой сервер с ограничениями по загрузкам самолетов из большого редактора? FBDj-коммандер не понимает записи по этому параметру, по сети с ним летать невозможно.

POP
13.01.2011, 06:56
POP,а ты еще не пробовал делать карты на свой сервер с ограничениями по загрузкам самолетов из большого редактора? FBDj-коммандер не понимает записи по этому параметру, по сети с ним летать невозможно.
Не пробовал, но пока не представляю что может помешать нормальной работе - там что? В лог или консоль пишется что-то новое?

mar$
13.01.2011, 08:08
В лог или консоль пишется что-то новое? Я сначала не совсем разобрался. Пишется набор цифр в файл .mis после записи каждого самолета,поставленного на филд,если ему задавать конкретный список подвесов. Нельзя только включать ограничения по самим самолетам,иначе неразбериха. По лимитам подвесов вроде работает. Опять же ручками доправляя файл .mis

Кроу
20.01.2011, 21:57
POP, а твой коммандер под какими ОС работает? На фришку не пойдёт?

POP
21.01.2011, 15:04
POP, а твой коммандер под какими ОС работает? На фришку не пойдёт?
Нет. Не пойдёт, скорее всего.
Работает под тем же, под чем и сервер иловский.

Кроу
21.01.2011, 20:39
Жалко конечно. У нас сервер на фришке стоит, а коммандер тут выложен, но он сильно урезанный. По большому счёту можно только админу карту менять или голосовать игрокам за её смену. Никаких привязок к целям он не имеет, да ещё и виснет часто. Хотя и на том спасибо хоть какой то есть))

mar$
22.01.2011, 00:03
да ещё и виснет часто. Хотя и на том спасибо хоть какой то есть))
Ужос)) Как страдают вирпилы из-за убогости ОС))

mar$
30.01.2011, 13:36
Команда <banch N добавляет ip канала N в банлист сервера и сохраняет банлист в файл ban.txt.

Не сохраняет! После введения команды <banch N файл ban.txt остается неизменным.

ROSS_Noy
17.02.2011, 19:50
=M=TYGRA
Дим, вроде ж у тебя кто то из разработчиков SC знакомый есть. Пусть уже поделятся листингом, все равно они не поддерживают его ?

Komaroff
04.07.2011, 13:48
Тема заглохла ??

Prohor
10.07.2011, 21:55
И вообще интересно чего дальше с серверами делать.
Вот у меня кончились даты для идентификации пользователей. Поэтому страницы статистики глючит. Как продлить до 2020г., напиример?
Снят вопрос. Победил свою лень, поковырялся - нашёл.
Тока других вопросов, возникающих по мере развития Ила, это не снимает.

Yoorok
03.11.2011, 14:21
Всем привет, ребят, кто может помочь с добычей исходников IL2SERVER.dll )

Если я правильно понимаю в этой библиотеке разбирается лог сервера и формируется табличка pilots, вследствие не правильного разбора (возможно из за версии сервера ила..), часть полей этой таблицы не доступны, то есть лог разбирается не правильно ):

System.Data.DataTable users_on_server_auto = Server.pilots;
foreach (DataRow row in users_on_server_auto.Rows)
{
//несколько полей все же гуд )
Console.WriteLine(row[pilotsColumn.PilotState.ToString()].ToString());// - не обновляется!
Console.WriteLine(row[pilotsColumn.PlaneName.ToString()].ToString());// - не обновляется!
//это в общем то самые критичные поля, в остальных тоже не гуд (
}

Конечно и текущего функционала достаточно для разбора логов под любые нужды, но хотелось бы исправить эту проблему как то аккуратно ), иначе будет неоправданная нагрузка, хорошо если сервер запущен 1, а если их несколько десятков ... )

Всем спасибо, вопрос снят )