Jump to content

Search the Community

Showing results for tags 'плагин'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Russian Section
    • Новости и объявления
    • Пиратия: Документация
    • Пиратия: Релизы
    • Пиратия: Разработка
    • Пиратия: Web
    • Пиратия: Помощь
    • Совместные проекты / набор команды
    • Доска объявлений
    • Программирование
    • Оффтопик
    • Корзина
  • English Section
    • News & Announcements
    • Guides
    • Releases
    • Development
    • Web
    • Questions & Help
    • Shared Projects / Team search
    • Paid services & Requests
    • Programming
    • Offtopic
    • Recycle bin
  • Portuguese Section
    • Dúvidas & Ajuda
  • Spanish Section
    • Preguntas y Ayuda
  • Servers
    • Russian servers
    • English servers

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Found 1 result

  1. Загрузчик модов для сервера и клиента (PKOdev.NET mod loader) Проблема Многим разработчикам и администраторам серверов Пиратии в нашем сообществе известно, что функциональность клиента и сервера можно изменять так называемыми модами (аддонами, плагинами, дополнениями, патчами). Например: 1) Исправление SQL-инъекций в AccountServer.exe и GroupServer.exe; 2) Увеличение лимитов для .txt/.bin файлов (ItemInfo, CharacterInfo, SkillInfo и других); 3) Обработка сообщений в канал местного чата с помощью lua функции HandleChat(); 4) Трансформация персонажей с помощью lua функции TransformCha(); 5) Панель наложенных на персонажа эффектов; 6) Отображение уровня ЖЗ и МН под персонажами и монстрами. Таким образом, с помощью модов можно исправлять критические баги и уязвимости, изменять настройки, добавлять новый функционал и возможности. Изначально появление модов было вызвано отсутствием в открытом доступе исходных кодов клиента и сервера: разработчикам ничего не оставалось, кроме того, как редактировать исполняемые .exe файлы, развивая и применяя навыки реверс-инжиниринга. После публикации "исходников" популярность модов по-прежнему остается на высоком уровне. Этому способствует ряд причин: 1) Низкое качество полученных исходных кодов, отсутствие опыта их использования. Чтобы ими пользоваться, администратору нужно обладать широкими знаниями языка программирования C++, разбираться в клиент-серверной архитектуре, понимать как устроен сервер и клиент. Кроме того, исходные коды требуют длительного изучения и исследования на предмет багов и уязвимостей, включая процесс тестирования; 2) Существующие официальные сборки сервера и клиента в полной мере удовлетворяют требованиям большинства администраторов и игроков, кроме того, их работоспособность и надежность подтверждена годами практического применения. Для них было создано множество программ, скриптов и модов, которые могут быть несовместимы с исполняемыми файлами сервера и клиента, собранными из исходных кодов; 3) Изучение исходных кодов позволяет лучше понять устройство исполняемых файлов сервера и клиента Пиратии. Такие полученные знания делают возможным создавать моды повышенной сложности. Администраторы и разработчики при реализации своих игровых проектов могут пойти по двум путям: использовать старые, официальные сборки сервера и клиента, и изменять их функционал с помощью модов, либо развиваться в направлении разработки исходных кодов. Как уже должно быть понятно, данная тема поддерживает первый путь. В настоящий момент разработка модов связана с некоторыми проблемами: 1) В нашем сообществе отсутствует четкий стандарт и культура написания модов. Кто-то внедряет код непосредственно в исполняемый .exe файл методом "патчинга", другие предпочитают писать DLL-библиотеки. Некоторые моды могут конфликтовать друг с другом, что приводит к ошибкам и трудноуловимым багам; 2) Как следствие, установка модов сопряжена с определенными трудностями: например, как перенести мод из одного GameServer.exe в другой? Каждый раз необходимо заниматься редактированием ("патчингом") исполняемых .exe файлов, а для этого нужно обладать специальными знаниями и навыками. Если моды выполнены в виде DLL-библиотек, то каждый мод необходимо вручную вносить в таблицу импорта исполняемого .exe файла. Все это неудобно, отнимает много времени и создает вероятность совершения ошибок в процессе установки и появления багов; 3) Существует некоторое множество версий GameServer.exe и Game.exe (остальные серверные исполняемые .exe файлы не принимаем во внимание), которые имеют различную двоичную структуру. Иными словами, разработанный мод для GameServer.exe версии 1.36 не будет работать с GameServer.exe версии 1.38 – Вам необходимо разрабатывать мод под конкретный .exe файл. Вследствие этого возникает путаница с версиями исполняемых файлов. Яркий пример – адреса лимитов для .txt/.bin: думаю, многие заметили что они разные для разных .exe. Исходя из вышесказанного, было принято решение создать систему, которая исправит текущее положение вещей в отношении модов и упростит их использование – Загрузчик модов для клиента и сервера. Загрузчик модов Загрузчик модов выполняет несколько задач: 1) Унификация процесса создания, установки и запуска модов; 2) Определение типа и версии исполняемого .exe файла, который подлежит модификации; 3) Поиск установленных модов, определение их версии и совместимости с целевым исполняемым .exe файлом, подключение модов к исполняемому .exe файлу клиента или сервера. Представляет собой DLL-библиотеку, которая единоразово подключается к исполняемому .exe файлу клиента или сервера . Моды так же являются DLL-библиотеками, которые помещаются в определенную директорию и автоматически запускаются загрузчиком при запуске клиента или сервера. Перед запуском исполняемого .exe файла клиента или сервера управление передается загрузчику. Загрузчик определяет тип и версию .exe файла, к которому он привязан, и начинает процесс поиска DLL-библиотек в директории "mods" из корневой папки клиента/сервера. Текущая найденная DLL-библиотека динамически подключается к процессу клиента/сервера, после чего загрузчик запрашивает у библиотеки информацию о моде: название мода, тип и версия целевого .exe файла, версия мода, имя автора модификации. Если тип и версия .exe файла с загрузчиком совпадает с типом и версией .exe файла, полученными из DLL-библиотеки мода, то загрузчик дает моду команду на запуск. Далее мод вносит изменения в код процесса исполняемого файла, тем самым осуществляя модификацию. Перед завершением процесса клиента/сервера управление снова передается загрузчику, который по очереди отключает от процесса все моды. Текущая версия загрузчика может работать с официальными 1.3x версиями Game.exe (клиент) и GameServer.exe (сервер). Определение типа исполняемого файла (GameServer.exe или Game.exe) и его версии производится по метке времени компиляции (linker timestamp), которая записана в COFF-заголовке каждого исполняемого файла. Поддерживаемые Game.exe и GameServer.exe ---------------------+----+----------------+-------------- Название | ID | Обозначение | Метка времени ---------------------+----+----------------+-------------- GameServer.exe 1.36 | 1 | GAMESERVER_136 | 1204708785 ---------------------+----+----------------+-------------- GameServer.exe 1.38 | 2 | GAMESERVER_138 | 1204708785 ---------------------+---+----------------+-------------- Game.exe | 3 | GAME_13X_0 | 1222073761 ---------------------+----+----------------+-------------- Game.exe | 4 | GAME_13X_1 | 1243412597 ---------------------+----+----------------+-------------- Game.exe | 5 | GAME_13X_2 | 1252912474 ---------------------+----+----------------+-------------- Game.exe | 6 | GAME_13X_3 | 1244511158 ---------------------+----+----------------+-------------- Game.exe | 7 | GAME_13X_4 | 1585009030 ---------------------+----+----------------+-------------- Game.exe | 8 | GAME_13X_5 | 1207214236 ---------------------+----+----------------+-------------- GateServer.exe 1.38 | 101| GATESERVER_138 | 1224838480 ---------------------+----+----------------+-------------- Установка загрузчика модов 1) В корневой директории исполняемого .exe файла, к которому подключается загрузчик модов, создайте папку с названием "mods"*. В этой папке будут храниться DLL-библиотеки модов; 2) Откройте исполняемый .exe файл в программе CFF Explorer. Перейдите на вкладку "Import adder" (1); 3) Нажмите кнопку "Add" (2) и выберите файл pkodev.mod.loader.dll; 4) В списке "Exported functions" выберите "ExportedFunction" (3); 5) Нажмите кнопку "Import By Name" (4); 6) Снимите флажок "Rebuild OFTs" (5); 7) Нажмите кнопку "Rebuild Import Table" (6); 8 ) Сохраните файл (7). 9) Запустите исполняемый .exe файл. В окне консоли вы должны увидеть следующее сообщение: [pkodev.mod.loader] ----------------------------------------------- [pkodev.mod.loader] PKOdev.NET mod loader ver. 1.0 by V3ct0r [pkodev.mod.loader] ----------------------------------------------- Если у исполняемого файла нет окна консоли, например, у Game.exe, то запустите его следующим образом: system\Game.exe startgame > output.txt Теперь вывод в консоль будет перенаправлен в текстовый файл output.txt. * Примечание: для Game.exe папка "mods" должна находиться в корневой директории игрового клиента, а не в папке system. Установка модов Чтобы установить мод достаточно поместить его DLL-библиотеку в папку "mods". Для удобства каждый мод можно помещать в отдельную папку. Пример структуры папок для GameServer.exe: GameServer | -> Mods | -> .disabled | -> .priority | -> pkodev.mod.example1.server.138.dll | -> pkodev.mod.example2 | -> pkodev.mod.example2.server.138.dll | -> pkodev.mod.example3 | -> pkodev.mod.example3.server.138.dll После запуска исполняемого .exe файла Вы должны увидеть новый мод в списке загруженных модов: Удаление модов Чтобы удалить мод, необходимо удалить его DLL-библиотеку из папки "mods". Временное отключение модов Чтобы отменить загрузку тех или иных модов, создайте в корневой директории с модами (папка "mods") файл ".disabled" и запишите в него названия модов, которые необходимо временно отключить, с новой строки. Например: // Файл: mods\.disabled // Запишите ниже названия модов, которые необходимо отключить pkodev.mod.fullmap pkodev.mod.tablelimit Таким образом, моды "pkodev.mod.fullmap" и "pkodev.mod.tablelimit" будут проигнорированы загрузчиком. Приоритет загрузки модов Загрузчик модов позволяет загружать те или иные моды в указанном порядке. Для этого создайте в корневой директории с модами (папка "mods") файл ".priority" и запишите в него названия модов в порядке убывания приоритета. Моды, не записанные в данном файле, будут загружены после модов с приоритетом, в случайном порядке. Например: // Файл mods\.priority // Запишите ниже названия модов в порядке убывания приоритета загрузки pkodev.mod.power pkodev.mod.tablelimit pkodev.mod.fullmap Моды будут загружены в следующем порядке: 1. pkodev.mod.power; 2. pkodev.mod.tablelimit; 3. pkodev.mod.fullmap; 4. Далее - все остальные обнаруженные в папке "mods" моды в случайном порядке. Создание мода Для того, чтобы мод мог быть загружен загрузчиком, он должен соответствовать следующим требованиям: 1) Название DLL-библиотеки мода должно быть вида: pkodev.mod.<название мода>.<client или server>.<обозначение версии.exe >.dll Например: pkodev.mod.tablelimit.client.13x_0.dll pkodev.mod.mobspawn.server.138.dll 2) DLL-библиотека мода должна экспортировать 3 функции: __declspec(dllexport) void __cdecl GetModInformation(mod_info& info) Заполнить структуру типа mod_info. Данная структура содержит основную информацию о моде: название, версию, имя автора, ID типа и версии исполняемого .exe файла, для которого предназначен мод. // Mod information structure struct mod_info { // Название мода char name[128]; // Версия мода char version[64]; // Имя автора char author[64]; // Тип и версия целевого .exe файла (см. таблицу) unsigned int exe_version; }; __declspec(dllexport) void __cdecl Start(const char* path) Запустить мод и произвести модификацию процесса исполняемого файла. В переменной path содержится путь до корневой директории мода. В данной функции мод должен выполнить свою инициализацию, загрузить необходимые настройки и произвести модификацию процесса исполняемого файла. __declspec(dllexport) void __cdecl Stop() Остановить мод. В данной функции мод должен сохранить свои настройки, откатить модификацию процесса (необязательно) и освободить ресурсы. 3) Тип и версия исполняемого файла, указанная в DLL-библиотеке мода (структура modinfo, поле exe_version), должны совпадать с типом и версией исполняемого файла, для которого он предназначен. Если загрузчик определил тип и версию исполняемого файла как GameServer.exe 1.38 (GAMESERVER_138) с ID 2 (см. таблицу выше), то DLL-библиотека мода должна записывать в поле exe_version значение 2. Пример разработки мода Для разработки мода можно использовать любой язык программирования, который поддерживает создание DLL-библиотек. Я буду использовать язык C++ и среду разработки Visual Studio 2019 Community. В качестве примера создадим мод для GameServer.exe версии 1.38 (ID 2), который будет выводить в его окно сообщение "Hello world!". 1) Определим название мода, пусть оно будет: pkodev.mod.helloworld Тогда название DLL-библиотеки мода будет: pkodev.mod.helloworld.server.138.dll 2) Создадим проект динамически подключаемой библиотеки .DLL; 3) Подключаем к проекту файл loader.h (см. вложения в конце данного сообщения); 4) Реализуем функцию GetModInformation(): void GetModInformation(mod_info& info) { strcpy_s(info.name, "pkodev.mod.helloworld"); strcpy_s(info.version, "1.0"); strcpy_s(info.author, "V3ct0r"); info.exe_version = GAMESERVER_138; } 5) Реализуем функцию Start(): void Start(const char* path) { std::cout << "Hello world!" << std::endl; std::cout << "path = " << path << std::endl << std::endl; } 6) Реализуем функцию Stop(): void Stop() { } 7) Скомпилируем проект. В результате мы получим файл pkodev.mod.helloworld.server.138.dll; 8 ) Устанавливаем и тестируем мод. В окне GameServer.exe мы должны увидеть сообщение "Hello world!" и путь до корневой директории мода: Проект примера мода можно найти во вложении. Скачать 1) Загрузчик модов; 2) Исходный код загрузчика модов для Visual Studio 2019 Community (C++); 3) Интерфейс для создания модов (файл loader.h); 4) Проект примера мода "Hello world!" для Visual Studio 2019 Community (C++); 5) Образцы исполняемых файлов клиента и сервера из таблицы (7.3 Мб); 6) Шаблон проекта мода PKOdev.NET loader для Visual Studio 2019 Community (C++). Доступные моды 1) Подключение Game.exe к Stall Server (сервер "оффлайн" ларьков); 2) Исправление мгновенного возрождения убитых монстров после перезапуска сервера; 3) Редактирование лимитов .txt таблиц; 4) Система рейтинга игроков; 5) Система ежедневных наград за вход в игру; 6) Отображение времени отката ("кулдауна") умений; 7) Отображение координат под NPC; 8 ) Автоматическое подключение к серверу / вход в игру; 9) Социальные кнопки (Discord, Youtube, Twitch и др.); 10) Медали (ожерелья) со званиями; 11) Отображение уровня персонажа игрока рядом с его именем; 12) Отображение дополнительных параметров на форме с характеристиками персонажа (frmState); 13) Время сервера; 14) Антибот; 15) Отображение уровня предметов на иконках ("умные иконки"); 16) Отображение названия предмета в аппарели; 17) Изменение размера персонажей; 18) Отображение времени отклика ("пинг") на форме выбора сервера; 19) Система контрактов; 20) Отключение проверки пароля при входе во внутриигровой Интернет-магазин; 21) Отключение сообщений об ошибках при компиляции .txt-таблиц (table_bin); 22) Очистка чатов; 23) Исправление сброса профессии персонажей при переподключении к серверу ("слёт профессии"); 24) Цветные GM-сообщения (GM notice); 25) 60 кадров в секунду (60 FPS); 26) Эффект полета для крыльев; 27) Полная карта местности для региона; 28) Выделение друзей и врагов цветом. (Обновлено 18.02.2022) Если у Вас есть какие-либо вопросы или возникли проблемы, то смело спрашивайте в данной теме!
×
×
  • Create New...