[Duvida] Como criar um plug in ?
3 participantes
Página 1 de 1
[Duvida] Como criar um plug in ?
Ultimamente tenho me dedicado a estudar C/C++ com alguns vídeos e leituras. Como já tenho algum conhecimento em Pawn e percebi que tenho potencial (desculpe parecer arrogante, mas eu acho que consigo fazer coisas que vão ser úteis e ajudar os outros) decidi me expandir para outras áreas, mas eu não consigo me desprender do SAMP, que foi onde eu comecei a ter interesse por programação. Por esse motivo me surgiu o interesse de fazer plugins que sejam úteis no SAMP, mesmo que alguém use sem meus créditos, eu quero fazer como uma satisfação pessoal.
Todo esse texto para chegar a uma única pergunta: Como fazer um plugin para SAMP? É necessário alguma biblioteca extra ou algo do gênero? Obrigado!
Todo esse texto para chegar a uma única pergunta: Como fazer um plugin para SAMP? É necessário alguma biblioteca extra ou algo do gênero? Obrigado!
Juniior3- Novato
- Mensagens : 6
Data de inscrição : 15/08/2013
Re: [Duvida] Como criar um plug in ?
#Tópico movido para a área correta.
Bom, eu te entendo, mas eu sempre tive interesse por conhecer todo tipo de linguagem que me agradasse.(um pouco diferente) Já não me considero mais dessa área de Pawn(SA-MP).
Respondendo as suas perguntas...
Você irá precisar de um SDK que contém umas bibliotecas do próprio PAWN em relação a AMX e outra de plug-ins.
Download link: Plug-in SDK (uploaded by Willian Luigi)
Pode baixar sem medo, não tem nenhum arquivo malicioso/executável, são apenas os códigos fontes do SDK, tu precisa inserir eles no teu projeto, sempre que tu for fazer um plug-in novo...
Como iniciar(Visando a utilização da IDE Visual Studio 2010):
Você deverá criar um projeto novo, pode inicia-lo 100% vazio ou então do jeito que vier mesmo. Este projeto deverá ser do tipo .dll(Dinamyc Library Link)
Após ter a solução do projeto toda pronta para desenvolvimento, você cria um arquivo novo dentro da solução, com a extensão ".def" este arquivo irá ser responsável por inserir algumas funções do SDK, dentro dele você inseri o seguinte código:
Projeto->properties->configuration properties->linker->input.
Na linha Module Definition File você põe o nome do arquivo .def que você criou, "exemplo.def"
Após ter todos estes primeiros passos prontos, tu pode começar o .cpp do plug-in, a intenção é que você tenha ao menos um conhecimento razoável de C++, pois caso contrário, acaba sendo complicado você conseguir fazer coisas realmente produtivas.
Exemplo de código:
plugin.cpp
AMX_NATIVE_CALL toda vez que for inserir um método novo para o seu plug-in, e além disso você precisa documentar este método na matriz de funções "PluginNatives"
para que estes métodos possam ser realmente exportados para o sa-mp, quando você inserir sua .dll na pasta plug-ins...
Eu te deixei alguns exemplos simples de funções que utilizam apenas um conhecimento base de C++, se você não tiver entendendo direito isto indica que você vai precisar estudar um pouco para poder iniciar os plugins...
Tem um link no fórum sa-mp muito bom, que ensina completo a respeito de plug-ins, todas as funções que o SDK do AMX provê, e coisas do tipo, o ruim é que é em inglês, mas vai ser muito útil mesmo assim...
Tutorial: Plugin development guide
Espero ter ajudado ao menos a te mostrar o caminho, qualquer dúvida você pode postar aqui neste tópico mesmo que eu volto a responder.
Abraços...
Bom, eu te entendo, mas eu sempre tive interesse por conhecer todo tipo de linguagem que me agradasse.(um pouco diferente) Já não me considero mais dessa área de Pawn(SA-MP).
Respondendo as suas perguntas...
Você irá precisar de um SDK que contém umas bibliotecas do próprio PAWN em relação a AMX e outra de plug-ins.
Download link: Plug-in SDK (uploaded by Willian Luigi)
Pode baixar sem medo, não tem nenhum arquivo malicioso/executável, são apenas os códigos fontes do SDK, tu precisa inserir eles no teu projeto, sempre que tu for fazer um plug-in novo...
Como iniciar(Visando a utilização da IDE Visual Studio 2010):
Você deverá criar um projeto novo, pode inicia-lo 100% vazio ou então do jeito que vier mesmo. Este projeto deverá ser do tipo .dll(Dinamyc Library Link)
Após ter a solução do projeto toda pronta para desenvolvimento, você cria um arquivo novo dentro da solução, com a extensão ".def" este arquivo irá ser responsável por inserir algumas funções do SDK, dentro dele você inseri o seguinte código:
- Código:
EXPORTS
Supports
Load
Unload
AmxLoad
AmxUnload
Projeto->properties->configuration properties->linker->input.
Na linha Module Definition File você põe o nome do arquivo .def que você criou, "exemplo.def"
Após ter todos estes primeiros passos prontos, tu pode começar o .cpp do plug-in, a intenção é que você tenha ao menos um conhecimento razoável de C++, pois caso contrário, acaba sendo complicado você conseguir fazer coisas realmente produtivas.
Exemplo de código:
plugin.cpp
- Código:
/*
|
| Includes da SDK & que você pretender usar para beneficiar seu Plug-in
|
*/
typedef void (*logprintf_t)(char* format, ...);
logprintf_t logprintf;
extern void *pAMXFunctions;
cell AMX_NATIVE_CALL _strlen(AMX* amx, cell* params)
{
cell* addr = NULL;
int len = NULL;
amx_GetAddr(amx, params[1], &addr);
amx_StrLen(addr, &len);
return len;
}
cell AMX_NATIVE_CALL _strcpy(AMX* amx, cell* params)
{
cell* addr[2] = {NULL, NULL};
char* stringReceive = NULL;
amx_GetAddr(amx, params[1], &addr[0]);
amx_GetAddr(amx, params[2], &addr[1]);
stringReceive = new char[params[3]];
amx_GetString(stringReceive, addr[1], 0, params[3]);
amx_SetString(addr[0], stringReceive, 0, 0, params[3]);
return ((stringReceive)?(delete[] stringReceive, 0):(delete[] stringReceive, -1));
}
cell AMX_NATIVE_CALL strcpyy(AMX* amx, cell* params)
{
cell* addr[2] = {NULL, NULL};
char* strrd = new char[params[3]];
char* strrc = new char[params[3]];
amx_GetAddr(amx, params[1], &addr[0]);
amx_GetAddr(amx, params[2], &addr[1]);
amx_GetString(strrd, addr[0], 0, params[3]);
amx_GetString(strrc, addr[1], 0, params[3]);
for (int i = 0; i < sizeof(strrd); i++)
{
strrd[i] = strrc[i];
}
*addr[0] = *strrd;
delete[] strrc;
delete[] strrd;
return 1;
}
cell AMX_NATIVE_CALL _strcmp(AMX* amx, cell* params)
{
cell* addr[2] = {NULL, NULL};
char *str1, *str2;
int len[] = {NULL, NULL};
amx_GetAddr(amx, params[1], &addr[0]);
amx_GetAddr(amx, params[2], &addr[1]);
amx_StrLen(addr[0], &len[0]);
amx_StrLen(addr[1], &len[1]);
str1 = new char[len[0]];
str2 = new char[len[1]];
amx_GetString(str1, addr[0], NULL, len[0]);
amx_GetString(str2, addr[1], NULL, len[1]);
return ((strcmp(str1, str2) == 0)?(delete[] str1, delete[] str2, 0):(delete[] str1, delete[] str2, -1));
}
PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES | SUPPORTS_PROCESS_TICK;
}
PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
g_Invoke = new Invoke;
pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
logprintf = (logprintf_t) ppData[PLUGIN_DATA_LOGPRINTF];
logprintf("\n==============================\n");
logprintf(" * StrJobs loaded.\n");
logprintf(" (c) - 2011 Willian Luigi");
logprintf("\n==============================\n");
return true;
}
PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
logprintf("\n==============================\n");
logprintf(" * StrJobs loaded.\n");
logprintf(" (c) - 2011 Willian Luigi");
logprintf("\n==============================\n");
}
AMX_NATIVE_INFO PluginNatives[] =
{
{"_strlen", _strlen},
{"_strcpy", _strcpy},
{"strcpyy", strcpyy},
{"_strcmp", _strcmp},
{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;
}
AMX_NATIVE_CALL toda vez que for inserir um método novo para o seu plug-in, e além disso você precisa documentar este método na matriz de funções "PluginNatives"
para que estes métodos possam ser realmente exportados para o sa-mp, quando você inserir sua .dll na pasta plug-ins...
Eu te deixei alguns exemplos simples de funções que utilizam apenas um conhecimento base de C++, se você não tiver entendendo direito isto indica que você vai precisar estudar um pouco para poder iniciar os plugins...
Tem um link no fórum sa-mp muito bom, que ensina completo a respeito de plug-ins, todas as funções que o SDK do AMX provê, e coisas do tipo, o ruim é que é em inglês, mas vai ser muito útil mesmo assim...
Tutorial: Plugin development guide
Espero ter ajudado ao menos a te mostrar o caminho, qualquer dúvida você pode postar aqui neste tópico mesmo que eu volto a responder.
Abraços...
Re: [Duvida] Como criar um plug in ?
Entendi, mas você disse que eu tenho que fazer o projeto em uma .dll, mas pra converter pro linux basta "mudar a extensão" ou tem que refazer o plugin pra linux ?
Juniior3- Novato
- Mensagens : 6
Data de inscrição : 15/08/2013
Re: [Duvida] Como criar um plug in ?
Então, nesse caso te recomendo usar o compilador g++, você tem que compilar ele duas vezes pra ficar "multiplataforma" uma vez com o VS, para ficar .dll, e outra com o g++, para obter o .so, não creio que precise refazer o plugin para isso...
Desculpe não ter uma resposta precisa pra te dar, é que eu particularmente só trabalho com Windows.
Desculpe não ter uma resposta precisa pra te dar, é que eu particularmente só trabalho com Windows.
Re: [Duvida] Como criar um plug in ?
Eu também trabalho com Windows, mas muitas hosts trabalham com Linux por ser de graça e não dar despesa enfim.. Obrigado ! Ajudou muito !
Juniior3- Novato
- Mensagens : 6
Data de inscrição : 15/08/2013
Re: [Duvida] Como criar um plug in ?
grande william,manja demais desses codigos diabólicos -q -q -q <3
Re: [Duvida] Como criar um plug in ?
hehe, valeuAlieN_ escreveu:grande william,manja demais desses codigos diabólicos -q -q -q <3
Tópicos semelhantes
» [Tira-Duvidas]Deixa aqui sua dúvida sobre mta(geral)
» Como fazer loops/tuneis (mta san andreas)
» Como adicionar o race no mta+dicas para deixar seu video mais legal
» Como fazer loops/tuneis (mta san andreas)
» Como adicionar o race no mta+dicas para deixar seu video mais legal
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|