[Plugin] Pawn.CMD - El procesador de comandos mas veloz

¿Encontraste un Plugin que te asombró? ¿Qué opinas de mostrárnoslo? ¡Súbelo y compártelo con los demás! También, encuentra gran cantidad de Includes.

Moderador: Ayudantes

Reglas del Foro
  • Si publicas un Plugin de tu autoría, deberás publicar el código fuente del mismo. No olvides utilizar el BBCode [Pawn]Código aquí[/Pawn].
  • Si no eres el autor del plugin/include o has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
Responder
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

26 Nov 2017 10:26

Este tema es una traducción de este articulo.____________________________________________________This post is a translation of this one.
@Derechos de autor de urShadow[email protected]ight of urShadow




Pawn.CMD 3.1.4




Descripción:
Pawn.CMD - Un procesador de comandos que funciona a través de un plugin.
Este plugin es compatible con cualquier versión de SA:MP a pesar de que usa piratería de memoria.



[centrar]Comparación entre otros procesadores de comandos
Retraso entre que es recibido RPC_ServerCommand y llamado cmd_test(Mil comandos)[/centrar]

Imagen
[centrar]Medido en microsegundos. Mientras mas bajo, mejor.[/centrar]

Natives:

Código: Seleccionar todo

native PC_RegAlias(const cmd[], const alias[], ...); 
native PC_SetFlags(const cmd[], flags); 
native PC_GetFlags(const cmd[]); 
native PC_EmulateCommand(playerid, const cmdtext[]); 
native PC_RenameCommand(const cmd[], const newname[]); 
native PC_CommandExists(const cmd[]);    
native PC_DeleteCommand(const cmd[]); 

native CmdArray:PC_GetCommandArray(); 
native CmdArray:PC_GetAliasArray(const cmd[]); 
native PC_GetArraySize(CmdArray:arr); 
native PC_FreeArray(&CmdArray:arr); 
native PC_GetCommandName(CmdArray:arr, index, dest[], size = sizeof dest); 
Callbacks:

Código: Seleccionar todo

forward PC_OnInit(); // Llamado luego de el inicio de Pawn.CMD
forward OnPlayerCommandReceived(playerid, cmd[], params[], flags); // Llamado antes del comando.
forward OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags); // Llamado después del comando.
Como instalar:
Extrae los archivos descargados en la carpeta de tu servidor. Y edita el archivo "server.cfg":
- Windows

Código: Seleccionar todo

plugins pawncmd.dll
- Linux

Código: Seleccionar todo

plugins pawncmd.so

Comando de ejemplo:
 Codigo Pawno:
1
2
3
4
5
6
7

#include <Pawn.CMD>  //Añadimos el plugin al código.

cmd:ayuda(playerid, params[]) // También se puede usar "CMD" y "COMMAND".
{ 
    // Inserte su código aquí.
    return 1; 
} 
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 7
Creando alias para el comando:
 Codigo Pawno:
1
2
3
4
5
6
7
8

include <Pawn.CMD> 

cmd:ayuda(playerid, params[]) 
{ 
    // Inserte su código aquí.
    return 1; 
} 
alias:ayuda("comandos", "cmds", "menu"); // Sensible a mayúsculas y minúsculas. En resumen, si escribimos /menu, funcionara el código del /ayuda. 
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 8
Asignando variables a comandos:
Puedes asignar variables a comandos, para darles un uso. Ejemplo:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#include <Pawn.CMD> 

enum(<<=1) 
{ 
    CMD_ADMIN = 1, 
    CMD_MODER, 
    CMD_USER 
}; 

flags:banear(CMD_ADMIN); // Seteamos esta opción para este comando.
cmd:banear(playerid, params[]) 
{ 
    // Inserte su código aquí.
    return 1; 
} 

public OnPlayerCommandReceived(playerid, cmd[], params[], flags) 
{ 
    if ((flags & CMD_ADMIN) && !pAdmin[playerid]) // Cuando se escriba el comando, tenemos que especificar en este callback si el comando ingresado tiene un flag, y añadimos a su vez otra condición para darle un uso a dicho flag(en este caso, un ejemplo de variable de administrador)
        return 0; 

    return 1; 
} 
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 23
Ejemplo completo:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

#include <Pawn.CMD> 

enum(<<=1) 
{ 
    CMD_ADMIN = 1, 
    CMD_MODER, 
    CMD_USER 
}; 

flags:banear(CMD_ADMIN); 
cmd:banear(playerid, params[]) 
{ 
    // Inserte su código aquí.
    return 1; 
} 
alias:banear("bloquear"); 

public OnPlayerCommandReceived(playerid, cmd[], params[], flags) 
{ 
    if ((flags & CMD_ADMIN) && !pAdmin[playerid]) 
        return 0; 

    return 1; 
} 

public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags) 
{ 
    if(result == -1) 
    { 
        SendClientMessage(playerid, 0xFFFFFFFF, "SERVIDOR: Comando desconocido."); 
        return 0; 
    } 

    return 1; 
} 
  Cantidad de llaves: Abiertas(5)-Cerradas(5) | Lineas Totales: 35
Si quieres usar Pawn.CMD en un filterscript, coloca este Define antes de incluirlo:
[/code]#define FILTERSCRIPT [/code]


Descarga las versiones:
https://github.com/urShadow/Pawn.CMD/releases

Código fuente:
https://github.com/urShadow/Pawn.CMD

Código fuente de la prueba de retraso entre que es recibido RPC_ServerCommand y llamado cmd_test(Mil comandos)
https://gist.github.com/urShadow/14d...17088cf2f23cbe
Última edición por MattHudson el 23 Sep 2018 11:52, editado 1 vez en total.
Razón: Añadí mejor descripción para los flags.
Avatar de Usuario
BartolomeCanitrot
Junior
Junior
Mensajes: 290
Registrado: 02 Feb 2017 01:57
Contactar:
Reputación: 18

26 Nov 2017 11:59

Muy bueno, pero una duda, yo tengo una gm de 0 y asi es como utilizo los comandos
 Codigo Pawno:
1

command(comando, playerid, params[])
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
¿No tendria que mover nada para que siga funcionando los comandos? PD: ya lei todo el post.

Ya probe, me salen estos errores
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2093) : error 025: function heading differs from prototype
C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2093 -- 2106) : error 021: symbol already defined: "command"
C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2105) : error 025: function heading differs from prototype
C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2105 -- 2116) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 9
La linea 2093 es la primer linea donde empiezan los comandos
Aca tranquilo, programando y aprendiendo como todos.

Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

26 Nov 2017 12:25

BartolomeCanitrot escribió:
26 Nov 2017 11:59
Muy bueno, pero una duda, yo tengo una gm de 0 y asi es como utilizo los comandos
 Codigo Pawno:
1

command(comando, playerid, params[])
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
¿No tendria que mover nada para que siga funcionando los comandos? PD: ya lei todo el post.

Ya probe, me salen estos errores
 Codigo Pawno:
1
2
3
4
5
6
7
8
9

C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2093) : error 025: function heading differs from prototype
C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2093 -- 2106) : error 021: symbol already defined: "command"
C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2105) : error 025: function heading differs from prototype
C:\Users\IGNACIO\Downloads\GTA San Andreas\Nueva carpeta\BaySide Roleplay\gamemodes\asd.pwn(2105 -- 2116) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 9
La linea 2093 es la primer linea donde empiezan los comandos
Para adaptarlo, coloca esto en el include que descargaste(medio al final)
 Codigo Pawno:
1

#define command(%1,%2,%3) COMMAND:%1(%2, %3)
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1
Para lo de los errores, revisa si te siguen apareciendo con este código. Si continúan, publica un tema en la sección preguntas. Y recibirás mejor ayuda por parte de la comunidad.

Saludos,

/MH
Avatar de Usuario
BartolomeCanitrot
Junior
Junior
Mensajes: 290
Registrado: 02 Feb 2017 01:57
Contactar:
Reputación: 18

30 Nov 2017 22:13

Este procesador no funciona con sscanf, ya probe y no detecta los parametros.
Aca tranquilo, programando y aprendiendo como todos.

Avatar de Usuario
DarkFireYT
Baneado
Baneado
Mensajes: 601
Registrado: 12 Dic 2016 18:05
Contactar:
Reputación: 35

02 Dic 2017 10:43

Me pueden decir como hago ese test de microsegundos ? me quiero sacar dudas de si es falso o no estas estadisticas , porque en una dice que izmd es mas lento que otro y aca que es mas rapido
PandaBoy / DarkFireYT
"La vida es sagrada"
[ Imagen Externa ]
DarkFireYT´s Design....
Cualquier pregunta al privado no me molesta.
Todos nos equivocamos, sino no seriamos humanos.

Si me equivoco agradezco de antemano al que me corrija.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

02 Dic 2017 11:05

Hola, -hi


BartolomeCanitrot escribió: Este procesador no funciona con sscanf, ya probe y no detecta los parametros.
A mi siempre me funciono con el uso de dicho plugin.



DarkFireYT escribió: Me pueden decir como hago ese test de microsegundos ? me quiero sacar dudas de si es falso o no estas estadisticas , porque en una dice que izmd es mas lento que otro y aca que es mas rapido
El usado en la imagen tiene la fuente perdida, el autor de ella elimino la pagina donde estaba disponible para ver.
Puedes usar esta, ni idea si te funcionara bien o no.



Saludos, -bye
/MH
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1048
Registrado: 05 Oct 2017 12:13
Reputación: 113

02 Dic 2017 11:26

DarkFireYT escribió:
02 Dic 2017 10:43
Me pueden decir como hago ese test de microsegundos ? me quiero sacar dudas de si es falso o no estas estadisticas , porque en una dice que izmd es mas lento que otro y aca que es mas rapido
Hey men, solo convierte de milisegundos a microsegundos, aquí te dejo la pagina y problema resuelto.
http://convertlive.com/es/u/convertir/m ... lisegundos

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Avatar de Usuario
MrDave
Ayudante
Ayudante
Mensajes: 1048
Registrado: 05 Oct 2017 12:13
Reputación: 113

02 Dic 2017 11:42

BartolomeCanitrot escribió:
30 Nov 2017 22:13
Este procesador no funciona con sscanf, ya probe y no detecta los parametros.
Si funciona, solo que lo debes colocar así:
 Codigo Pawno:
1

if(sscanf(params, "ds", params[0], params[1])) return SendClientMessage(playerid,-1,"USO: /darauto [playerid] [ID/Name Vehicle]");
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1

- Temporalmente estoy retirado de SA-MP; por lo tanto no me envíen propuestas de proyectos.
- No respondo dudas por privado, usa la sección de preguntas.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

02 Dic 2017 12:00

MrDave escribió:
02 Dic 2017 11:42
BartolomeCanitrot escribió:
30 Nov 2017 22:13
Este procesador no funciona con sscanf, ya probe y no detecta los parametros.
Si funciona, solo que lo debes colocar así:
 Codigo Pawno:
1

if(sscanf(params, "ds", params[0], params[1])) return SendClientMessage(playerid,-1,"USO: /darauto [playerid] [ID/Name Vehicle]");
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 1

Hola, -hi


Está prohibido comentar 2 (dos) o más veces seguidas en un mismo tema sin que hayan transcurrido 24 horas u otro usuario haya comentado.
Utiliza el botón Editar ( Imagen ) para modificar tu anterior mensaje y evitar ir contra el reglamento de PawnScript.


Saludos, -bye
/MH
Avatar de Usuario
DarkFireYT
Baneado
Baneado
Mensajes: 601
Registrado: 12 Dic 2016 18:05
Contactar:
Reputación: 35

04 Dic 2017 08:55

Con el test que me pasaste MH ,
Funciona pero no es de microsegundos , es de milisegundos parece
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

612
660
527
539
548
563
620
521
554
517
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 10
PandaBoy / DarkFireYT
"La vida es sagrada"
[ Imagen Externa ]
DarkFireYT´s Design....
Cualquier pregunta al privado no me molesta.
Todos nos equivocamos, sino no seriamos humanos.

Si me equivoco agradezco de antemano al que me corrija.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

04 Dic 2017 09:00

DarkFireYT escribió:
04 Dic 2017 08:55
Con el test que me pasaste MH ,
Funciona pero no es de microsegundos , es de milisegundos parece
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

612
660
527
539
548
563
620
521
554
517
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 10
Y bueno... compara ambos procesadores y listo. El que mas bajo tenga le resultado, mejor sera.

Por lo general vas a tener resultados diferentes siempre al menos que uses la misma benchmark que en el gráfico(la cual, como dije antes, esta eliminada.) así que nada, compara los resultados de los diferentes procesadores de comandos y listo.
Avatar de Usuario
DarkFireYT
Baneado
Baneado
Mensajes: 601
Registrado: 12 Dic 2016 18:05
Contactar:
Reputación: 35

04 Dic 2017 09:03

MattHudson escribió:
04 Dic 2017 09:00
DarkFireYT escribió:
04 Dic 2017 08:55
Con el test que me pasaste MH ,
Funciona pero no es de microsegundos , es de milisegundos parece
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

612
660
527
539
548
563
620
521
554
517
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 10
Y bueno... compara ambos procesadores y listo. El que mas bajo tenga le resultado, mejor sera.

Por lo general vas a tener resultados diferentes siempre al menos que uses la misma benchmark que en el gráfico(la cual, como dije antes, esta eliminada.) así que nada, compara los resultados de los diferentes procesadores de comandos y listo.
Yo tengo uno de milisegundos mas nuevo , y ese me da 432 ms y este que me diste 660.
Por si alguno lo quiere :
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

#include <a_samp>
#include <DarkCMD0.5>

main( ) { }

// Script para test de velocidad de ShinyDavid.

#define ITERACIONES  1000000
#define REPETICIONES 10

new Tiempos[REPETICIONES];

public OnGameModeInit()
{
	for(new z=0;z<REPETICIONES;z++)
	{
     	Tiempos[z] = GetTickCount();
	    for(new y=0;y<ITERACIONES;y++)
	    {
      		CallRemoteFunction("OnPlayerCommandText","is",0,"/comando1 0 param1");
		}
  		printf("- %d milisegundos en la prueba: %d",GetTickCount()-Tiempos[z],z);
	}
	return 1;
}

public OnPlayerCommandText(playerid,cmdtext[])
{
return 0;
}
//================================= Comando ====================================
DCMD:comando1(playerid, params[])
{
SendClientMessage(playerid, -1, "test");
}
// =============================================================================
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 36
PandaBoy / DarkFireYT
"La vida es sagrada"
[ Imagen Externa ]
DarkFireYT´s Design....
Cualquier pregunta al privado no me molesta.
Todos nos equivocamos, sino no seriamos humanos.

Si me equivoco agradezco de antemano al que me corrija.
Avatar de Usuario
MattHudson
Moderador Global
Moderador Global
Mensajes: 1666
Registrado: 31 Oct 2015 18:16
Ubicación: Argentina, Buenos Aires, San Miguel.
Contactar:
Reputación: 89

04 Dic 2017 09:13

DarkFireYT escribió:
04 Dic 2017 09:03
Yo tengo uno de milisegundos mas nuevo , y ese me da 432 ms y este que me diste 660.
Por si alguno lo quiere :
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

#include <a_samp>
#include <DarkCMD0.5>

main( ) { }

// Script para test de velocidad de ShinyDavid.

#define ITERACIONES  1000000
#define REPETICIONES 10

new Tiempos[REPETICIONES];

public OnGameModeInit()
{
	for(new z=0;z<REPETICIONES;z++)
	{
     	Tiempos[z] = GetTickCount();
	    for(new y=0;y<ITERACIONES;y++)
	    {
      		CallRemoteFunction("OnPlayerCommandText","is",0,"/comando1 0 param1");
		}
  		printf("- %d milisegundos en la prueba: %d",GetTickCount()-Tiempos[z],z);
	}
	return 1;
}

public OnPlayerCommandText(playerid,cmdtext[])
{
return 0;
}
//================================= Comando ====================================
DCMD:comando1(playerid, params[])
{
SendClientMessage(playerid, -1, "test");
}
// =============================================================================
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 36
Como ya te dije... Cada prueba te va a dar resultados diferentes. Has la misma prueba con los diferentes procesadores de comandos y ahí compáralos...


Chau, -bye
/MH
Responder