[Include] [RCMD2] Processador de Comandos RCON [no GM]
#1

[RCMD] Simple Rcon Commands in GM
versгo 2.1 com cуdigo bem mais otimizado, disponнvel no github, e sem o sscanf2

Bom, como alguns nгo sabem, para criar um novo comando rcon, nгo й possivel nativamente em uma GM, vocк deve criar um filterscript, sу para os comandos, e isso й meio chato!

Vocк tem uma larga opзгo de utilizaзгo dessa include, pode-se se fazer de diversas maneiras, de acordo com a que lhe agradar melhor!


Callback:

parecida com a nativa, porem й chamada no seu Gamemode (e todos filterscripts caso tenha), alem de vir os comandos separadamente de seus parametros
Код:
OnRconCommandCalled(cmd[], param[]);
OnRCMDFinishCommand(cmd[], param[], sucess);
Macros:
Vocк pode usar tambem como processador de cmds rcon, й muito similar ao ZCMD!
Код:
rcmd(%1,%2) 
RCONCOMMAND:%1(%2)        
RCONCMD:%1(%2)
RCMD:%0(%1)
Exemplo:
Bom nгo basta sу falar, vou dar alguns exemplos sobre esta include, que fiz aqui para testar...
PHP код:
//chamada: 1
public OnRconCommandCalled(cmd[], param[])
{
    
printf("GM recebeu comando: %s",cmd);
}
//chamada: 2
RCMD:funfa()
{
    print(
"funcionou!");
    return 
1;
}
//chamada: 3
public OnRCMDFinishCommand(cmd[], param[], sucess)
{
    if(!
sucess)
        
printf("[RCMD] este comando nao existe: %s"cmd);
    return 
1;







instalaзгo:
  • Baixe o arquivo .zip e apуs extraia em seu local de preferencia
  • Copie o arquivo "filterscript/RCMD.amx" e coloque na pasta "filterscript" de seu servidor
  • abra o "server.cfg", e onde estiver escrito filterscripts adicione "RCMD"
  • copie o arquivo "pawno/include/rcmd_include.inc" e cole no diretуrio de "pawno/include/"
  • escreva no topo do GM: "#include <rcmd_include>", apуs isto estarб pronto e poderб desfrutar ;)

Link para download:

GitHub: https://github.com/RodrigoDornelles/RCMD
Reply
#2

Boa Include, +REP.
Reply
#3

Genial
Reply
#4

funcidx sу funciona no escopo do amx.
vocк deveria ter feito a ligaзгo no tуpico informando que depende do plugin sscanf.
Vocк poderia ao invйs de fazer todo o processamento via filterscript, faze-lo via gamemode com um filterscript ligado embutidamente(Para corrigir o onrconcommand)
Sscanf vai gerar um warning por nгo informar o tamanho mбximo da string(cmd).

A ideia pode ter sido boa, porйm nгo foi bem implementada.
Reply
#5

Quote:
Originally Posted by Dayvison_
Посмотреть сообщение
funcidx sу funciona no escopo do amx.
vocк deveria ter feito a ligaзгo no tуpico informando que depende do plugin sscanf.
Vocк poderia ao invйs de fazer todo o processamento via filterscript, faze-lo via gamemode com um filterscript ligado embutidamente(Para corrigir o onrconcommand)
Sscanf vai gerar um warning por nгo informar o tamanho mбximo da string(cmd).

A ideia pode ter sido boa, porйm nгo foi bem implementada.
oks vou implementar, suas ideias, eu estava com certa duvida se deveria fazer o processamento no GM ou FS, mas vou mover agora
Reply
#6

Interessante...

Eu vim mais pra ver a implementaзгo, й legal de ver quando a galera encontra uma forma diferente de resolver um problema de forma melhor...

mas me deparei com um cуdigo igual ao da ZCMD, uma pena...
Reply
#7

Quote:
Originally Posted by WLSF
Посмотреть сообщение
Interessante...

Eu vim mais pra ver a implementaзгo, й legal de ver quando a galera encontra uma forma diferente de resolver um problema de forma melhor...

mas me deparei com um cуdigo igual ao da ZCMD, uma pena...
antes eu estava usando sscanf2, mas era desnecessбrio ao invйs de trocar para strtock, eu dei uma olhada no ZCMD e copiei as 3 linhas para separar comandos de paremetros

foi o estudo de caso, que fez escolher essa maneira, se quiser sugerir ou mйtodo mais otimizado sem dependкncias explique:
Reply
#8

O que o Dayvison_ disse й verdade, a ideia atй й boa, contudo estб mal implementada.

Por exemplo, se eu desejar usar esta include vou ter que definir sempre isto no OnRconCommand:

PHP код:
return CallRemoteFunction("I_RCMD""s"cmd); 
Nгo й que dк muito trabalho, mas й chato ter que sempre definir isto, portanto o ideal seria colocar a tua lуgica diretamente no OnRconCommand e isso pode ser atingido atravйs da utilizaзгo do mйtodo ALS [ALS 4 (Hook Method 7)], o resultado final seria entгo:

PHP код:
public OnRconCommand(cmd[]){
    
//cуdigo aqui
}
#if defined _ALS_OnRconCommand
    #undef OnRconCommand
#else
    #define _ALS_OnRconCommand
#endif
#define OnRconCommand hooked_OnRconCommand
forward hooked_OnRconCommand(cmd[]); 
Devo tambйm dizer que o seguinte й desnecessбrio:
PHP код:
#if defined OnRconCommandCalled
    
forward OnRconCommandCalled(cmd[], param[]);
#endif
#if defined OnRCMDFinishCommand
    
forward OnRCMDFinishCommand(cmd[], param[], sucess);
#endif 
Eu, como utilizador da include, nгo necessito de definir qualquer coisa, a nгo ser que seja extremamente necessбrio, por exemplo, valores mбximos. Desta forma, eu nгo necessito de definir o OnRconCommandCalled nem o OnRCMDFinishCommand, se desejar usar, sei que eles lб estarгo para me ajudar. Й de relembrar que se os defines forem removidos, й necessбrio usar o funcidx e sim, ele funciona corretamente e tem a sua respetiva utilidade.

Eu aconselho-te a ver algumas includes, como o zcmd, bcmd ou icmd para entenderes um pouco a lуgica por de trбs do processamento de comandos, qualquer dъvida podes mandar uma mensagem!
Reply
#9

Quote:
Originally Posted by RebeloX
Посмотреть сообщение
PHP код:
return CallRemoteFunction("I_RCMD""s"cmd); 
Nгo й que dк muito trabalho, mas й chato ter que sempre definir isto, portanto o ideal seria colocar a tua lуgica diretamente no OnRconCommand e isso pode ser atingido atravйs da utilizaзгo do mйtodo ALS [ALS 4 (Hook Method 7)], o resultado final seria entгo:

PHP код:
public OnRconCommand(cmd[]){
    
//cуdigo aqui
}
#if defined _ALS_OnRconCommand
    #undef OnRconCommand
#else
    #define _ALS_OnRconCommand
#endif
#define OnRconCommand hooked_OnRconCommand
forward hooked_OnRconCommand(cmd[]); 
Isso nгo funciona, pois sу й chamado em FS,mas para frente tera uma funзгo hookando e escrevendo o binario do FS diretamente quando liga o servidor, e carregando o FS, como essa sugestгo do day: https://github.com/Open-GTO/sa-mp-fixes/issues/80

(e eu nгo entendi o que tu quer fazer... escrever no seu GM no FS da include?)


Quote:
Originally Posted by RebeloX
Посмотреть сообщение
Devo tambйm dizer que o seguinte й desnecessбrio:
PHP код:
#if defined OnRconCommandCalled
    
forward OnRconCommandCalled(cmd[], param[]);
#endif
#if defined OnRCMDFinishCommand
    
forward OnRCMDFinishCommand(cmd[], param[], sucess);
#endif 
Eu, como utilizador da include, nгo necessito de definir qualquer coisa, a nгo ser que seja extremamente necessбrio, por exemplo, valores mбximos. Desta forma, eu nгo necessito de definir o OnRconCommandCalled nem o OnRCMDFinishCommand, se desejar usar, sei que eles lб estarгo para me ajudar. Й de relembrar que se os defines forem removidos, й necessбrio usar o funcidx e sim, ele funciona corretamente e tem a sua respetiva utilidade.
metodos, e metodos, funcidx й uma funзгo nativa que sera sempre chamada cada vez que executar o comando, sendo que nгo й necessбrio invista, que ou aquela compilaзгo sempre darб verdadeiro, ou sempre sera falso.

faзa um estudo de cada caso!

eu nгo usei sу #defined ou funcidx porque eu gosto mais de um ou outro, eu pensei em qual seria mais vantajoso para cada situaзгo (se tu prestar atenзгo pode ver que utilizei ambos)
Reply
#10

Quote:
Originally Posted by RebeloX
Посмотреть сообщение
Por exemplo, se eu desejar usar esta include vou ter que definir sempre isto no OnRconCommand:

PHP код:
return CallRemoteFunction("I_RCMD""s"cmd); 
Nгo й que dк muito trabalho, mas й chato ter que sempre definir isto, portanto o ideal seria colocar a tua lуgica diretamente no OnRconCommand e isso pode ser atingido atravйs da utilizaзгo do mйtodo ALS [ALS 4 (Hook Method 7)], o resultado final seria entгo:
Isto foi feito no filterscript, vocк nгo terб que fazer nada no gamemode.

Quote:
Originally Posted by RebeloX
Посмотреть сообщение
Devo tambйm dizer que o seguinte й desnecessбrio:
PHP код:
#if defined OnRconCommandCalled
    
forward OnRconCommandCalled(cmd[], param[]);
#endif
#if defined OnRCMDFinishCommand
    
forward OnRCMDFinishCommand(cmd[], param[], sucess);
#endif 
Eu, como utilizador da include, nгo necessito de definir qualquer coisa, a nгo ser que seja extremamente necessбrio, por exemplo, valores mбximos. Desta forma, eu nгo necessito de definir o OnRconCommandCalled nem o OnRCMDFinishCommand, se desejar usar, sei que eles lб estarгo para me ajudar.
Nгo precisa definir nada pois pawn lida com funзхes publicas deste jeito:
PHP код:
#if defined publica // func jб estarб definido aqui,==
    
forward func();
#endif
public func() { } 
Quote:
Originally Posted by RebeloX
Посмотреть сообщение
Й de relembrar que se os defines forem removidos, й necessбrio usar o funcidx e sim, ele funciona corretamente e tem a sua respetiva utilidade.
funcidx sу funciona com funзхes no mesmo amx.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)