 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Пишем плагин
| |
| Внедорожник | Дата: Понедельник, 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() Пишем
Всё Скомпилирует, запускаем сервак Это азы, дальше осваивате сами.
Тема создана при просьбе 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
Город: Санкт-Петербург
| 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
Город: Санкт-Петербург
| 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 не разобрался так как писало кучу ошибок с готового примера. расскажи, что в целом хочешь
|
| |
|
|
|
 |
|
 | |
| |
|