05:20
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Dima-kun  
Пишем плагин
ВнедорожникДата: Понедельник, 22.08.2011, 22:43 | Сообщение # 1
Постоялец
Группа: I'm V.I.P.
Сообщений: 419
Награды: 7
Город: Калининград
Репутация: 204
Замечания: 40%
Статус:
Для создания нам нужны
1) программка, которая Скомпилирует, т.к SDK для SA:MP на с++, естественно, нам и нужно программку работающую в этой же среде.
Чисто от себя я предлагаю DEV-c++ , программка хорошо подходит для написания dll'ок
Скачать можно тут: http://rghost.ru/18839371
2) SDK :http://rghost.ru/18839541
3) немного разбираться, про что это.
И так начнём:
1)Открываем установленный DEV-C++
2)Нажимаем: Файл->Создать->Проект->DLL
-Не забывайте сменить имя проекта, нежелательно использования русских букв
-Нажимаем ОК, и выбираем папку куда сохранить проект
3)Вы сохраниили проект. Перед вами окно где что то написано, а точнее это начальные исходики dl.
-Нажимаем : Выполнить->Скомплинировать
4) После того как вы получи dll( если не получили, то извините, забудьте про плагины вообще)
- В папку где лежит проект, и ваша dll кидаем папку SDK( которую вы скачали выше
5)Подключаем SDK

Code
#include "SDK/amxplugin.cpp"
#include "SDK/amx/amx.h" //  хоть и есть ссылка на этот плагин в plugin.h, но почему то работает лучше когда прописан сразу здесь
#include "SDK/plugin.h"


6) После этих строчек:

Code
typedef DLLIMPORT void (*logprintf_t)(char* format, ...);
logprintf_t logprintf;
DLLIMPORT void **ppPluginData;
BOOL Copys(char indir[128],char outdir[128]);
extern DLLIMPORT void *pAMXFunctions;
//Some declaration functions
static char *pcCreateAndFillStringFromCell(AMX *amx,cell params)
{
     char *szDest;
     int nLen;
     cell *pString;
     amx_GetAddr(amx,params,&pString);
     amx_StrLen(pString, &nLen);
     szDest = new char[nLen+1];
     amx_GetString(szDest, pString, 0, UNLIMITED);
     return szDest;
}
typedef DLLIMPORT   struct assoc_array assoc_array;

     PLUGIN_EXPORT DLLIMPORT unsigned int PLUGIN_CALL Supports()
{
     return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}
PLUGIN_EXPORT DLLIMPORT bool PLUGIN_CALL Load(void **ppData)
{
       pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
       logprintf = (logprintf_t)ppData[PLUGIN_DATA_LOGPRINTF];
       logprintf("Плагин успешно загружен");
       return 1;
}

PLUGIN_EXPORT DLLIMPORT void PLUGIN_CALL Unload()
{
            logprintf("No loader");            
}

static cell AMX_NATIVE_CALL f_MyOnePlagin(AMX *amx, cell *params)
{      
            logprintf("Ура, это мой первый плагин:)");
            return 1;     
}

AMX_NATIVE_INFO Natives[] =
{
       { "MyOnePlagin", f_MyOnePlagin }

};

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

PLUGIN_EXPORT DLLIMPORT  int PLUGIN_CALL AmxUnload(AMX *amx)
{
       return AMX_ERR_NONE;
}


Впринципе готово, но это же урок, Поэтому объясню как добавлять свои функции
Хотя начнем с загрузки:
Когда плагин загрузился, за это отвечаем :
Code
PLUGIN_EXPORT DLLIMPORT bool PLUGIN_CALL Load(void **ppData)


Поэтому там можно писать Что будет просходить при условии что плагин загрузился
Как Сделать свою функцию:
1)
Code
static cell AMX_NATIVE_CALL f_MyOnePlagin(AMX *amx, cell *params) //f_MyOnePlagin-названии функции используемой в //dll
{      
            logprintf("Ура, это мой первый плагин:)");  // выводит сообщение в консоль
            return 1;     
}


2) Нужно определить какая функция будет вызываться в нашем моде, это делается в

Code
AMX_NATIVE_INFO Natives[] =
{
       { "MyOnePlagin", f_MyOnePlagin }
////MyOnePlagin - функция которая будет вызываться в вашем моде  f_MyOnePlagin- котороая в dll     
};  


Вот и всё, нажимаем Скомплинировать, Помещаем получившую dll в папку plugins , и подключаем в конфигее
7) Открываем ваш мод
И вставляем
Code
native MyOnePlagin();

8) Делаем вызов это функции, например в
Code
public OnGameModeInit()

Пишем
Code
MyOnePlagin();


Всё Скомпилирует, запускаем сервак
Это азы, дальше осваивате сами.

Тема создана при просьбе Knief весь текст скопирован из его сообщения.





Используем Notepad++ вместо Pawno
SandBox RPG on the developing
setElementData ( source, "user.id", exports.MySQL:filter (data, "id") )


Сообщение отредактировал Внедорожник - Понедельник, 22.08.2011, 23:06
ImperealДата: Понедельник, 22.08.2011, 22:58 | Сообщение # 2
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2677
Награды: 51
Город: Санкт-Петербург
Репутация: 1868
Замечания: 100%
Статус:
Quote (Внедорожник)
скомплинирует

Скомпилирует не?



Прощай самп-рус =Р
KniefДата: Понедельник, 22.08.2011, 23:00 | Сообщение # 3
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (Impereal)
Скомпилирует не?

Должно, если что не получается, давай помогу

ImperealДата: Понедельник, 22.08.2011, 23:03 | Сообщение # 4
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2677
Награды: 51
Город: Санкт-Петербург
Репутация: 1868
Замечания: 100%
Статус:
Quote (Knief)
Должно, если что не получается, давай помогу

Я имею ввиду что у тебя написано "скомплинирует", мой пост намекал на ошибку...
С плагинами не пробовал работать, времени пока разбираться нет да и знания в с++ нету.



Прощай самп-рус =Р
KniefДата: Понедельник, 22.08.2011, 23:14 | Сообщение # 5
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (Impereal)
Я имею ввиду что у тебя написано "скомплинирует", мой пост намекал на ошибку...
С плагинами не пробовал работать, времени пока разбираться нет да и знания в с++ нету.


а)
я в с++ тоже не очень, просто везде смысл один) Правда создавая с++ так намудили)
Пример: за 3 часа(если взять чистой работы) я написал, прогу на делфе, которая соединяет с бд sql , тащит данные, кое что делает с ними, так же заносит, и т.д и т.п, ну около 1к строк было.
А на с++ пока писал плагин, я убил 4-5 часов, создавай функцию, которая будет копировать папку, со всеми файлами, оказывается, в с++ нет таких стандартных средств. Да и вообще, куда не сунешься в с++ сразу проблемы

AlcoholikДата: Вторник, 23.08.2011, 00:14 | Сообщение # 6
Мастер джэдай
Группа: Администратор
Сообщений: 8299
Награды: 111
Город: Санкт-Петербург
Репутация: 6085
Статус:
Полезно, но объяснил ты не всё, что написал) Я например теперь понимаю, как создать функцию, а что это такое, без понятия.
Quote
static char *pcCreateAndFillStringFromCell(AMX *amx,cell params)
{
char *szDest;
int nLen;
cell *pString;
amx_GetAddr(amx,params,&pString);
amx_StrLen(pString, &nLen);
szDest = new char[nLen+1];
amx_GetString(szDest, pString, 0, UNLIMITED);
return szDest;
}
typedef DLLIMPORT struct assoc_array assoc_array;

Написал бы кто-нибудь парочку простеньких плагинов с исходниками.



if(isset($beer)&&isset($girl)) { drink($beer);fuck($girl); }else die();
Мониторинг sa:mp серверов


Приватно никого не консультирую, моды также не пишу, ни так, ни за деньги.
Моя ICQ 675715, пишу только с неё. Все остальные Роачи фейки, ничего я не продаю и продавать не буду, вас разводят.
KniefДата: Вторник, 23.08.2011, 00:30 | Сообщение # 7
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (KroN)
Полезно, но объяснил ты не всё, что написал) Я например теперь понимаю, как создать функцию, а что это такое, без понятия.
Quote
static char *pcCreateAndFillStringFromCell(AMX *amx,cell params)
{
char *szDest;
int nLen;
cell *pString;
amx_GetAddr(amx,params,&pString);
amx_StrLen(pString, &nLen);
szDest = new char[nLen+1];
amx_GetString(szDest, pString, 0, UNLIMITED);
return szDest;
}
Написал бы кто-нибудь парочку простеньких плагинов с исходниками.

pcCreateAndFillStringFromCell(AMX *amx,cell params) - нужно, для функций, с несколькими агрументами. используется так:
В принципе давайте изменим свою первую функцию.
Code

static cell AMX_NATIVE_CALL f_MyOnePlagin(AMX *amx, cell *params) //f_MyOnePlagin-названии функции используемой в //dll  
{       
        char* arg1; // объявление переменых тип char - означает  это строка, а int - целый числа, впринципе, насчет этого гугл поможет
        char* arg2;
             arg1=pcCreateAndFillStringFromCell(amx, params[1]);
             arg2=pcCreateAndFillStringFromCell(amx, params[2]);
             logprintf("В функцию, я ввёл слова : %s и %s",arg1,arg2);  // выводит сообщение в консоль  
             return 1;      
}

И соответсвенно, в моде
Code
native MyOnePlagin(const ar1[],const ar2[]);

и уже вызывать:
Code

MyOnePlagin("ВАСЯ","Бухарик");

Кстати незнаю как выведутся русский слова)
поэтому можете заменить на свои

ВеликсДата: Вторник, 23.08.2011, 08:54 | Сообщение # 8
Мастер джэдай
Группа: Модераторы
Сообщений: 3931
Награды: 287
Город: Мухосранск
Репутация: 8429
Замечания: 0%
Статус:
http://forum.sa-mp.com/showthread.php?t=253436 - Немного получше все описано, если знания англ. позволяют, можете почитать =)


[cut=freestyle]
ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ ,
СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ,
ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ,
ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ.
УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА.
ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ.
ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ.
ЛЕНАРУ ДАЙ УМА И ЛЕНУ
НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ
© Хасан
[/cut]
KniefДата: Вторник, 23.08.2011, 09:55 | Сообщение # 9
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (|MrVelix|)
http://forum.sa-mp.com/showthread.php?t=253436 - Немного получше все описано, если знания англ. позволяют, можете почитать =)


аха) ну попробуй скомлинируй dll )) потом скажешь сколько часов ссидел) Точнее она скомплинируется, но ты не подключешь его.
Кстати первое, что я находил, та самая статья, потом я жалел, что её нашёл

toneysixДата: Вторник, 23.08.2011, 15:22 | Сообщение # 10
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Честно говоря бесполезная тема, те, кто в состоянии что-либо писать на си++ никогда не возьмут во внимание подобного рода статьи, которые не несут абсолютно никакой информации. К тому же, функции типа pcCreateAndFillStringFromCell настолько убоги, что вы ничего не выиграете в скорости от подобного рода использования. Вся загвоздка передач данных состоит в том, что в павн используются ячейки, отсюда мы видим нужду в переводе данного типа на понятный си языку тип. К тому же эти исходники заточены под визуаловский компилятор, visual msc c++ самая убогая программа имхо, я всегда пишу только на codeblocks.
Эту статью можно назвать так: используем готовую среду для вывода в консоль надписи - "мой первый плагин".



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
KniefДата: Вторник, 23.08.2011, 15:37 | Сообщение # 11
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (toneysix)
Честно говоря бесполезная тема, те, кто в состоянии что-либо писать на си++ никогда не возьмут во внимание подобного рода статьи, которые не несут абсолютно никакой информации. К тому же, функции типа pcCreateAndFillStringFromCell настолько убоги, что вы ничего не выиграете в скорости от подобного рода использования. Вся загвоздка передач данных состоит в том, что в павн используются ячейки, отсюда мы видим нужду в переводе данного типа на понятный си языку тип. К тому же эти исходники заточены под визуаловский компилятор, visual msc c++ самая убогая программа имхо, я всегда пишу только на codeblocks.
Эту статью можно назвать так: используем готовую среду для вывода в консоль надписи - "мой первый плагин".


Это статья предназначена, что б начать делать плагин. Дай ссылку, где расписано, какая должна быть структура у плагина для подключения.а?
Это статья только об этом и рассказывает. А рассказывать о более сложных, смысла нет, потому что больше половины пользователей, в самом моде разобраться не могут, а способных писать плагины, тут вообще маленька доля, и если кто то хочет, он задаётся целью, и пишет, а писать примеры, на угад, какие надо, а какие нет. Смысла нет.
Я показал, какая должна быть структура у плагина, как создавать функции, такого я на рунете не находил.
А про visual с++ я с тобой полностью согласен

ВнедорожникДата: Вторник, 23.08.2011, 18:25 | Сообщение # 12
Постоялец
Группа: I'm V.I.P.
Сообщений: 419
Награды: 7
Город: Калининград
Репутация: 204
Замечания: 40%
Статус:
не могу найти функцию в с++ по загрузки файла с http
весь инет облазил результат 0





Используем Notepad++ вместо Pawno
SandBox RPG on the developing
setElementData ( source, "user.id", exports.MySQL:filter (data, "id") )


Сообщение отредактировал Внедорожник - Вторник, 23.08.2011, 18:25
KniefДата: Вторник, 23.08.2011, 22:28 | Сообщение # 13
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (Внедорожник)
не могу найти функцию в с++ по загрузки файла с http
весь инет облазил результат 0

а тебе ввиде програмки? или плагин?
кстати, вот, про веб
http://msdn.microsoft.com/en-us/library/ms525070(v=VS.90).aspx

ВнедорожникДата: Вторник, 23.08.2011, 22:57 | Сообщение # 14
Постоялец
Группа: I'm V.I.P.
Сообщений: 419
Награды: 7
Город: Калининград
Репутация: 204
Замечания: 40%
Статус:
мне нужен инклуд для загрузки файлов
с WinInet не разобрался так как писало кучу ошибок с готового примера.





Используем Notepad++ вместо Pawno
SandBox RPG on the developing
setElementData ( source, "user.id", exports.MySQL:filter (data, "id") )


Сообщение отредактировал Внедорожник - Вторник, 23.08.2011, 22:58
KniefДата: Среда, 24.08.2011, 00:47 | Сообщение # 15
Освоившийся
Группа: Пользователи
Сообщений: 79
Награды: 2
Город: Ульяновск
Репутация: 39
Замечания: 0%
Статус:
Quote (Внедорожник)
мне нужен инклуд для загрузки файлов
с WinInet не разобрался так как писало кучу ошибок с готового примера.

расскажи, что в целом хочешь

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua