[Plugin] Pawn.CMD
#1

Pawn.CMD 3.3.3


Description:

The fastest command processor for SA:MP server.

This plugin is compatible with any SA:MP version despite memory hacking.

Natives:
PHP Code:
native PC_RegAlias(const cmd[], const alias[], ...);
native PC_SetFlags(const cmd[], flags);
native PC_GetFlags(const cmd[]);
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_GetCommandName(CmdArray:arrindexdest[], size sizeof dest);
native PC_FreeArray(&CmdArray:arr);
native PC_EmulateCommand(playerid, const cmdtext[]); 
Callbacks:
PHP Code:
forward PC_OnInit();
forward OnPlayerCommandReceived(playeridcmd[], params[], flags);
forward OnPlayerCommandPerformed(playeridcmd[], params[], resultflags); 
How to install:
Extract archive in server folder. Update your server.cfg.

- Windows
Code:
plugins pawncmd.dll
- Linux
Code:
plugins pawncmd.so
Configuration (pawncmd.cfg in plugins folder)

The values in parentheses are default values
  • CaseInsensitivity (true)
  • LegacyOpctSupport (true)
  • LocaleName ("C")
  • UseCaching (true)
Example command:
PHP Code:
#include <Pawn.CMD>
cmd:help(playeridparams[]) // you can also use 'CMD' and 'COMMAND' instead of 'cmd'
{
    
// code here
    
return 1;

Registering aliases:
You can register aliases for a command.

PHP Code:
#include <Pawn.CMD>
cmd:help(playeridparams[])
{
    
// code here
    
return 1;
}
alias:help("commands""cmds"
Using flags:
You can set flags for a command.

PHP Code:
#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

If you want to use Pawn.CMD in a filterscript, put this define before including:
PHP Code:
#define FILTERSCRIPT 
Changelog:
1.0:
- First release
2.0:
- Now plugin is fully compatible with zcmd command style
2.1:
- Fixed bugs
3.0:
- Added macros "callcmd" to call a command. Example: callcmd::ban(playerid, "42");
- Added natives PC_SetFlags, PC_GetFlags, PC_EmulateCommand, PC_RenameCommand, PC_DeleteCommand
- Added macros "isnull"
- Parameter "cmdtext" splitted into "cmd" and "params"
- Pawn.CMD is not compatible with zcmd style anymore
3.1:
- Added natives PC_CommandExists, PC_GetCommandArray, PC_GetAliasArray, PC_GetArraySize, PC_FreeArray, PC_GetCommandName
- Added macros PC_HasFlag
- Added public PC_OnInit
- Changed native PC_GetFlags
- Compatibility with YSI
3.1.1:
- Fixed bug in native PC_RenameCommand
3.1.2:
- Fixed bug in scripts queue
3.1.3:
- Fixed error "File or function is not found"
3.1.4:
- Added support for OPCT
3.2.0:
- Increased stability
3.3.0:
- Fixed YSI (y_hooks) incompatibility
- Fixed multibyte strings
- Semicolons at the end of alias and flags declarations not allowed now
- Added pawncmd.cfg file (More info in README.md)
- Completely rewritten using samp-ptl
3.3.1:
- Fixed Windows issues
3.3.2 (hotfix):
- Fixed UB (server crashing)
3.3.3:
- Fixed "bad conversion" error
- Updated samp-ptl to the latest version

Download binaries:
https://github.com/urShadow/Pawn.CMD/releases

Source code:
https://github.com/urShadow/Pawn.CMD
Reply
#2

consecrated, +rep
Reply
#3

Lol, bro, it's not micro, it's mini. 12 ms for ... comands? 100?
Reply
#4

Cool.
Reply
#5

Any benchmark with ZCMD?
Reply
#6

Quote:
Originally Posted by SickAttack
View Post
Any benchmark with ZCMD?
Obvious that Pawn.CMD faster than zcmd, because it works through memory hack.
Reply
#7

Micro(μ) is x10 on -6, mili(m) is x10 on -3. That is from SI
Reply
#8

how much faster than zcmd?
Reply
#9

This looks like a troll. Look at guy's name, lol. Frist post was this topic, really? No way.
Reply
#10

hoho Niice woork!
Reply
#11

Quote:
Originally Posted by vannesenn
View Post
This looks like a troll. Look at guy's name, lol. Frist post was this topic, really? No way.
You never heard of UrShadow? bro get outta your cave , watch his github.
Reply
#12

Quote:
Originally Posted by vannesenn
View Post
This looks like a troll. Look at guy's name, lol. Frist post was this topic, really? No way.
Why the fuck are you spamming this thread all the way?
Reply
#13

Quote:
Originally Posted by vannesenn
View Post
This looks like a troll. Look at guy's name, lol. Frist post was this topic, really? No way.
Lol... Dude, you need to get around the community more... urShadow is a pretty big deal. Not for all of the best reasons, but he does some pretty badass things.

And no this is actually not his first post. His last threads were removed because they are not allowed on this forum because of techniques they used (not necessarily bad techniques, in fact some were techniques we use all the time).

(also, speaking of trolling, that's kind of urShadow's thing outside of this forum)
Reply
#14

Faster than izcmd too?
Reply
#15

Quote:
Originally Posted by WhiteGhost
View Post
Faster than izcmd too?
Yes.
Reply
#16

Another thing it work as normal commands right?
PHP Code:
cmd:test(playerid,params[])
{
SCM(playerid,-1,"Test Command Worked.");
return 
1;

Reply
#17

Yes, but the return value will be ignored.
Reply
#18

Great work. Can you possibly add like "help" parameter in YCMD?
Reply
#19

Quote:
Originally Posted by Crayder
View Post
Lol... Dude, you need to get around the community more... urShadow is a pretty big deal. Not for all of the best reasons, but he does some pretty badass things.

And no this is actually not his first post. His last threads were removed because they are not allowed on this forum because of techniques they used (not necessarily bad techniques, in fact some were techniques we use all the time).

(also, speaking of trolling, that's kind of urShadow's thing outside of this forum)
I don't play SA-MP anymore like before two-three years. I visit this form maybe twice a day, not a lot. I'm more active on ZB SA-MP(SA-MP forum for West Balcan). I don't remember I saw urShadow's topic in plugin forum/bord. Sorry, but his current name looks like big troll
Reply
#20

Quote:
Originally Posted by vannesenn
View Post
I don't play SA-MP anymore like before two-three years. I visit this form maybe twice a day, not a lot. I'm more active on ZB SA-MP(SA-MP forum for West Balcan). I don't remember I saw urShadow's topic in plugin forum/bord. Sorry, but his current name looks like big troll
urShadow has been here way longer than "two-three" years... Now off of that subject... :P

@YourShadow Can you let us have some more features like:
- Not ignoring the return value, so we can hide commands
- Disabling commands for certain players, which would return 0 for them
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)