Закрыть Привет! Если вы читаете это - Вы еще не зарегистрированы. Это займет не больше минуты. Нажмите здесь, чтобы пройти регистрацию в несколько простых шагов, чтобы пользоваться всеми возможностями нашего форума. Обратите внимание, запрещены непристойные, матерные, бессмысленные (цифры, случайный набор букв) ники. Удачи!

Реклама







 
Писать по поводу рекламы VK: vk.com/sergey68

** Как получить V.I.P --> КЛИК **

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

Показано с 1 по 10 из 10

  1. #1
    Пользователь

    Аватар для pol@nder

    Статус: Оффлайн
    Регистрация:23.10.2012
    Сообщений:211
    Репутация:59 [+/-] 

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

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

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

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

    Шаг 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)(charformat, ...);


    logprintf_t logprintf;
    extern void *pAMXFunctions;


    cell AMX_NATIVE_CALL HelloWorld(AMXamxcellparams)
    {
        
    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_tppData[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},
        {
    00}
    };

    PLUGIN_EXPORT int PLUGIN_CALL AmxLoadAMX *amx 
    {
        return 
    amx_Register(amxPluginNatives, -1);
    }


    PLUGIN_EXPORT int PLUGIN_CALL AmxUnloadAMX *amx 
    {
        return 
    AMX_ERR_NONE;

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



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

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

    Оригинальная версия инструкции на английском: http://forum.sa-mp.com/showthread.php?t=295798
    Последний раз редактировалось pol@nder; 16.08.2014 в 15:57.
  2. 5 пользователей сказали cпасибо pol@nder за это полезное сообщение:

    BossArturKA (18.08.2014), Профян (07.01.2016), Nexius_Tailer (15.02.2016), SEVN (08.09.2014), Sire (13.07.2015)

  3. #2
    Пользователь

    Аватар для Varios

    Статус: Оффлайн
    Регистрация:08.06.2013
    Сообщений:116
    Репутация:47 [+/-] 
    PHP код:
    1>------ Построение начатопроектtestКонфигурацияDebug Win32 ------
    1>  main.cpp
    1
    >d:\project2\test\test\main.cpp(1): fatal error C1083Не удается открыть файл включениеSDK\amx\amx.hNo such file or directory
    ========== Построениеуспешно0с ошибками1без изменений0пропущено========== 
    Что делать?
    Skype: uservarios
  4. #3
    Пользователь

    Аватар для pol@nder

    Статус: Оффлайн
    Регистрация:23.10.2012
    Сообщений:211
    Репутация:59 [+/-] 
    Ты видимо папку SDK не закинул в директорию с твоим проектом.
    Шаг 1. Скачать SDK для разработки плагинов: Ссылка
    Шаг 9. Добавьте файлы SDK к проекту. Для этого распакуйте заранее скачанный архив в директорию Вашего проекта.
  5. #4
    Профессионал

    Аватар для Лев Попов

    Статус: Оффлайн
    Регистрация:03.02.2013
    Адрес:Рудный
    Сообщений:3,028
    Репутация:927 [+/-] 
    PHP код:
    1>------ Построение начатопроектtestКонфигурацияDebug Win32 ------
    1>  main.cpp
    1
    >d:\project2\test\test\main.cpp(1): fatal error C1083Не удается открыть файл включениеSDK\amx\amx.hNo such file or directory
    ========== Построениеуспешно0с ошибками1без изменений0пропущено========== 
    Что делать?
    Добавь SDK в директорию.

    По теме - довольно таки хорошо. Только не описано, как переводить pawn код на C++
  6. #5
    Пользователь

    Аватар для Stas0119

    Статус: Оффлайн
    Регистрация:12.05.2014
    Сообщений:28
    Репутация:0 [+/-] 
    Отлично
  7. #6
    Пользователь

    Аватар для pol@nder

    Статус: Оффлайн
    Регистрация:23.10.2012
    Сообщений:211
    Репутация:59 [+/-] 
    Добавь SDK в директорию.

    По теме - довольно таки хорошо. Только не описано, как переводить pawn код на C++
    Это тоже планировал добавить, руки не доходят. Может быть в ближайшее время доделаю.

    ---------- Post added at 16:46 ---------- Previous post was at 16:32 ----------

    Добавил информацию про вызов функций плагина в pawn.
  8. #7
    Пользователь

    Аватар для BossArturKA

    Статус: Оффлайн
    Регистрация:13.05.2013
    Адрес:Беларусь
    Сообщений:346
    Репутация:352 [+/-] 
    Спасибо, все получилось.
    Больше бы примеров со связью плагинов с pawn.
  9. #8
    Пользователь

    Аватар для SEVN

    Статус: Оффлайн
    Регистрация:07.09.2014
    Сообщений:70
    Репутация:47 [+/-] 
    Всё получилось,по теме +.
  10. #9
    Пользователь

    Аватар для Joni_Sanz

    Статус: Оффлайн
    Регистрация:22.01.2013
    Адрес:Астрахань
    Сообщений:208
    Репутация:58 [+/-] 
    Отличный урок
  11. #10
    Пользователь

    Аватар для SSovenok

    Статус: Оффлайн
    Регистрация:29.11.2015
    Адрес:Беларусь
    Сообщений:4
    Репутация:0 [+/-] 

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

    Дайте руководство по написанию wcx-плагинов в Total Commander, желательно для Delphi

Ваши права

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