
Сообщение от
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 общаются напрямую.