Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Инструкция по написанию плагинов под Windows.

pol@nder

Изучающий
Пользователь
Регистрация
23 Окт 2012
Сообщения
210
Лучшие ответы
0
Репутация
63
Странно, что до сих пор в интернете нету не одного нормального мануала на русском по написанию плагинов для сампа. Есть одна инструкция , для Dev C++, но переводили видимо гугл транслитом. Подробную инструкцию написал юзер официального форума сампа Kyosaur, естественно она на английском.
Мануал расчитан на людей, которые знакомы с C, но даже если Вы новичок и хотите попробовать написать свой собственный плагин, который будет выводить в консоль "Привет, мир", получая указания от абстрактной машины (amx'a), добро пожаловать.

Инструкция написана для IDE Visual C++ 2010 express.

Шаг 1.
Скачать и установить Visual C++ 2010 express (Желательно после этого бесплатно активировать):
Скачать для разработки плагинов:

Шаг 2.
Запустите Visual C++ 2010 express.
Создайте новый проект (файл > Создать > Проект... ЛИБО Ctrl+Shift+N).

Шаг 3.
Когда Вы создали новый проект, Вам предложат выбрать тип для Вашего проекта. Выбирайте "Проект Win32". Введите название для Вашего проекта, выберите его расположение (в выбранной директории автоматически создастся каталог решения - группа проектов) и нажмите 'ОК', чтобы продолжить.

Шаг 4.
Отлично, проект настроен. Нажмите 'Далее' в появившемся диалоге, если все в порядке.

Шаг 5.
После того, как Вы нажали 'Далее', появится еще один диалог. Выберите тип приложения "Библиотека DLL", а в дополнительных параметрах поставьте галочку "Пустой проект". Нажмите 'Готово'.

Шаг 6.
Следующее, что Вы должны сделать - нажать правой кнопкой мыши на название своего проекта в обозревателе решений (находится слева) и выбрать 'Свойства'.

Шаг 7.
В появившемся диалоговом окне перейдите в: Свойства конфигурации > Компоновщик > Ввод. Теперь следует добавить файл определения модуля. Кликните на пустое поле справа от графы 'Файл определения модуля'. Введите название для файла определения модуля, которое должно иметь расширение .def (Например, moduledeffile.def). Нажмите 'ОК'.

Шаг 8.
Теперь следует добавить все необходимые файлы к нашему проекту (включая файл определения). Нажмите правой кнопкой мыши на название проекта в обозревателе решений, выберите раздел 'Добавить' и нажмите 'Создать элемент...'. Так как в меню добавления нельзя выбрать файл с расширением .def, выберите .cpp, но в конце названия не забудьте приписать расширение .def (В моем случае, в строке "Имя", будет написано "moduledeffile.def"). Нажмите 'Добавить'. Теперь добавьте файл исходного кода (Файл C++ с расширением .cpp), для этого нажмите в обозревателе правой кнопкой мыши на фильтр (папку) 'Файлы исходного кода', выберите раздел 'Добавить' и нажмите 'Создать элемент...', выберите 'Файл C++ (.cpp)' и назовите его, к примеру, main (на этот раз не указывая расширения).

Шаг 9.
Добавьте файлы SDK к проекту. Для этого распакуйте заранее скачанный архив в директорию Вашего проекта. Теперь добавьте их в самой среде. Сделать это можно так:
правой кнопкой мыши по названию проекта в обозревателе решений > Добавить > Новый фильтр (тоже самое, что и папка). Назовите фильтр SDK. Нажмите правой кнопкой мыши на созданный фильтр > Добавить > Существующий элемент..., выберите все элементы из папки SDK, которая расположена в каталоге Вашего проекта и нажмите 'Добавить'. Снова нажмите правой кнопкой мыши на фильтр SDK > Добавить > Новый фильтр..., назовите новый фильтр amx, в фильтр amx добавьте файлы, которые находятся в папке SDK\amx.

Приблизительно так теперь должен выглядеть Ваш обозреватель решений:


Шаг 10.
Дважды кликните по .def файлу в обозревателе решений. Скопируйте туда следующий код:
PHP:
EXPORTS	
Supports	
Load	
Unload	
AmxLoad	
AmxUnload
Дважды кликните по .cpp файлу в обозревателе решений. Скопируйте туда следующий код:

PHP:
#include "SDK\amx\amx.h"
#include "SDK\plugincommon.h"


typedef void (*logprintf_t)(char* format, ...);


logprintf_t logprintf;
extern void *pAMXFunctions;


cell AMX_NATIVE_CALL HelloWorld(AMX* amx, cell* params)
{
    logprintf("This was printed from the Test plugin! Yay!"); // Эта строчка выведется в консоль при вызове функции HelloWorld() сервером
    return 1;
}

PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports() 
{
    return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}

PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData) 
{
    pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
    logprintf = (logprintf_t) ppData[PLUGIN_DATA_LOGPRINTF];

    logprintf(" * Test plugin was loaded."); // Эта строчка выведется в консоль при загрузке плагина
    return true;
}

PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
    logprintf(" * Test plugin was unloaded.");
}

AMX_NATIVE_INFO PluginNatives[] =
{
    {"HelloWorld", HelloWorld},
    {0, 0}
};

PLUGIN_EXPORT int PLUGIN_CALL AmxLoad( AMX *amx ) 
{
    return amx_Register(amx, PluginNatives, -1);
}


PLUGIN_EXPORT int PLUGIN_CALL AmxUnload( AMX *amx ) 
{
    return AMX_ERR_NONE;
}
А теперь, попробуйте все это скомпилировать, нажав комбинацию клавиш Ctrl+F5. Если все в порядке, Ваш плагин появится в папке Debug Вашего проекта. Самое время испытать его в деле, для этого нужно выполнить 3 простых шага:
  • Скопировать плагин (название.dll) в директорию '/plugins' Вашего сервера и указать его в конфиге сервера.
  • В начале мода/скрипта добавить следующую строчку (чтобы использовать функцию HelloWorld):
    PHP:
    native HelloWorld();
  • Добавить вызов функции при вводе команды или другим способом. Можно запускать.


Готовое решение + скомпилированный плагин:

При доработке мануала добавлю иллюстрации, объяснение кода, функции SDK и другое.

Оригинальная версия инструкции на английском:
 
Последнее редактирование:
Сверху Снизу