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

Страница 1 из 4 1234 КрайняяКрайняя
Показано с 1 по 25 из 83

Тема: Админам серверов Ил-2

  1. #1
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Админам серверов Ил-2

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

    В приложенном архиве - сама программа, файл её настроек (с путём установки сервера и именем исполняемого файла сервера), интерфейс Interface.dll и папка с плагином, собирающем логи сервера в папку Logs, с сортировкой в подпапках по году, месяцу и дню. На каждую новую миссию заводится новый файл лога консоли и логфайла с временем начала миссии и её названия в имени файла.
    Порядок установки:
    1. Установить net.framework4 с сайта 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.12.2010 в 08:05.

  2. #2
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    Что было здесь - уже не актуально.
    Выкладываю текст крайней версии интерфейса.
    Код:
    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);
        }
    
    
    }
    Крайний раз редактировалось POP; 03.12.2010 в 10:55.

  3. #3

    Re: Админам серверов Ил-2

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

  4. #4
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

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


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

  5. #5

    Re: Админам серверов Ил-2

    Цитата Сообщение от POP Посмотреть сообщение
    А если какого-то функционала не хватает, то садишься и просто дописываешь его самостоятельно - так, как хочешь именно ты. Правда, для этого нужно немножко разобраться с программированием.
    Ох,если бы это было так просто,когда даже малейшего представления об этом нет...

  6. #6
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    Цитата Сообщение от mar$ Посмотреть сообщение
    Ох,если бы это было так просто,когда даже малейшего представления об этом нет...
    Дорогу осилит идущий
    Или "главное нАчать"

  7. #7
    Античитар Аватар для =M=TYGRA
    Регистрация
    21.12.2004
    Адрес
    UNKL/UNKI
    Возраст
    45
    Сообщений
    583

    Re: Админам серверов Ил-2

    А ты сам не хочешь на конкретном сервере скажем попробовать реализовать и начать нанизывать функционал ? Сервер есть
    "Strategy of Victory Team"
    Win 8.1 Pro (x64)/ASRock Z77 EXTREME 4/ i7 2600K up 4.0 ГГц / GEIL CORSA(9-9-9-28) DDR3 1600MHz 16Gb / MSI GTX580 TwinFrozrII 1,5Gb/SoundBlaster Z/Medusa 5.1/TrackIr 5Pro+ProClip/Saitek X65(РУД)/STJoy(РУС)/VKB 14-3 Delux/

  8. #8
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    Цитата Сообщение от =M=TYGRA Посмотреть сообщение
    А ты сам не хочешь на конкретном сервере скажем попробовать реализовать и начать нанизывать функционал ? Сервер есть
    Сервер и у меня есть
    Уже стоит, уже собирает логи, остальное - по мере написания и тестирования.

  9. #9

    Re: Админам серверов Ил-2

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

  10. #10
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

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

  11. #11

    Re: Админам серверов Ил-2

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

  12. #12
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

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

  13. #13

    Re: Админам серверов Ил-2

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

  14. #14
    Зашедший
    Регистрация
    24.08.2008
    Сообщений
    43
    Нарушения
    -1/0 (0)

    Re: Админам серверов Ил-2

    Цитата Сообщение от basurman
    Лучше бы, простите за наглость, написали бы на чем-нить, что можно скомпилировать или хотя бы запустить под линух (и такой жалобно-плаксивый смайлик)
    Под linux есть mono. И компилирует и запускает.

  15. #15
    Зашедший
    Регистрация
    08.05.2009
    Возраст
    47
    Сообщений
    74

    Re: Админам серверов Ил-2

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

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

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

  16. #16
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

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

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

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

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

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

  17. #17
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    Первые 2 сообщения обновлены до актуального состояния

  18. #18
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    В первом сообщении, в архиве 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
    той же командой.

    В архиве - исходники.
    Крайний раз редактировалось POP; 06.12.2010 в 17:58.

  19. #19
    Зашедший
    Регистрация
    08.05.2009
    Возраст
    47
    Сообщений
    74

    Re: Админам серверов Ил-2

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

  20. #20
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    Цитата Сообщение от Gispanez Посмотреть сообщение
    А можешь написать коротенький пример, плагинчика, хоть с пустым функционалом - только получение строки из консоли сервера, и отдание команды. Если можно на С++ )).
    В с++, к сожалению, я совсем не шарю
    Но вот пример плагина на 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 в 08:26.

  21. #21
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

    У нас на форуме создан специальный раздел по поводу что, как, почему... и т.п.
    Здесь тоже буду отвечать на вопросы и выкладывать результаты.
    Надеюсь, не сочтут за рекламу. Просто, в формате одной темы врядли удастся нормально пообсуждать и развить столь крупную задумку, а просить целый раздел тут пока не под что.

  22. #22

    Re: Админам серверов Ил-2

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

  23. #23
    Зашедший
    Регистрация
    08.05.2009
    Возраст
    47
    Сообщений
    74

    Re: Админам серверов Ил-2

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

  24. #24
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    54
    Сообщений
    3,715
    Нарушения
    0/1 (10)

    Re: Админам серверов Ил-2

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

  25. #25

    Re: Админам серверов Ил-2

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

Страница 1 из 4 1234 КрайняяКрайняя

Ваши права

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