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

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

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6
    Заблокирован
    Регистрация
    11.03.2004
    Адрес
    Russian Federation
    Возраст
    55
    Сообщений
    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.

Ваши права

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