Portal SAMP
[Plugin] Pawn.CMD - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Plugins (https://portalsamp.com/forumdisplay.php?fid=10)
+---- Tópico: [Plugin] Pawn.CMD (/showthread.php?tid=60)



Pawn.CMD - sinux - 29/09/2020

Pawn.CMD 3.2.0
Descrição:
Pawn.CMD é um processador de comandos que funciona por meio de um plugin.
Este plugin é compatível com qualquer versão SA:MP, apesar de hackear a memória.


[Imagem: v43AinV.png]

Nativos:
Código PHP:
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:arrindexdest[], size sizeof dest); 

Callbacks:
Código PHP:
forward PC_OnInit();
forward OnPlayerCommandReceived(playeridcmd[], params[], flags);
forward OnPlayerCommandPerformed(playeridcmd[], params[], resultflags); 

Como instalar:
Extraia o arquivo na pasta de seu servidor e modifique o server.cfg.

- Windows

Código:
plugins pawncmd.dll

- Linux

Código:
plugins pawncmd.so


Comando de Exemplo:
Código PHP:
#include <Pawn.CMD>

cmd:help(playeridparams[]) // you can also use 'CMD' and 'COMMAND' instead of 'cmd'
{
    // code here
    return 1;


Definindo alias:
Você pode definir um alias para um comando.

Código PHP:
#include <Pawn.CMD>

cmd:help(playeridparams[])
{
    // code here
    return 1;
}
alias:help("commands""cmds"); // case insensitive 

Usando sincronizadores:
Você pode definir sincronizadores para um comando.

Código PHP:
#include <Pawn.CMD>

enum (<<= 1)
{
    CMD_ADMIN 1// 0b00000000000000000000000000000001
    CMD_MODER,     // 0b00000000000000000000000000000010
    CMD_JR_MODER   // 0b00000000000000000000000000000100
};

new 
pPermissions[MAX_PLAYERS];

flags:ban(CMD_ADMIN);
cmd:ban(playeridparams[])
{
    // code here
    return 1;
}
alias:ban("block");

flags:kick(CMD_ADMIN CMD_MODER);
cmd:kick(playeridparams[])
{
    // code here
    return 1;
}

flags:jail(CMD_ADMIN CMD_MODER CMD_JR_MODER);
cmd:jail(playeridparams[])
{
    // code here
    return 1;
}

public 
OnPlayerCommandReceived(playeridcmd[], params[], flags)
{
    if (!(flags pPermissions[playerid]))
    {
        printf("player %d doesn’t have access to command '%s'"playeridcmd);

        return 0;
    }

    return 1;
}

public 
OnPlayerCommandPerformed(playeridcmd[], params[], resultflags)
{
    if(result == -1)
    {
        SendClientMessage(playerid0xFFFFFFFF"SERVER: Unknown command.");

        return 0;
    }

    return 1;
}

public 
PC_OnInit()
{
    const testAdminPlayerId 1testModerPlayerId 2testJrModerPlayerId 3testSimplePlayerId 4;

    pPermissions[testAdminPlayerId] = CMD_ADMIN CMD_MODER CMD_JR_MODER;
    pPermissions[testModerPlayerId] = CMD_MODER CMD_JR_MODER;
    pPermissions[testJrModerPlayerId] = CMD_JR_MODER;
    pPermissions[testSimplePlayerId] = 0;

    PC_EmulateCommand(testAdminPlayerId"/ban 4 some reason"); // ok
    PC_EmulateCommand(testModerPlayerId"/ban 8 some reason"); // not ok, moder doesn’t have access to 'ban'
    PC_EmulateCommand(testModerPlayerId"/kick 15 some reason"); // ok
    PC_EmulateCommand(testModerPlayerId"/jail 16 some reason"); // ok, moder can use commands of junior moderator
    PC_EmulateCommand(testJrModerPlayerId"/jail 23 some reason"); // ok
    PC_EmulateCommand(testSimplePlayerId"/ban 42 some reason"); // not ok


Baixe os binários:
https://github.com/urShadow/Pawn.CMD/releases

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

Código-fonte do benchmark:
https://gist.github.com/urShadow/14d...17088cf2f23cbe

urShadow credits, Sinux reposting. Smile
me desculpe por essa mistura ridícula, mas foi oque eu pude fazer.