bCMD
"Novo Processador de Comandos"
"Novo Processador de Comandos"
Hoje apresento-vos o novo processador de comandos, ele é processado por CallRemoteFunction e o comando cria callbacks tornando mais rápido a sua execução.
Syntaxs
pawn Code:
bCMD[seucomando]-(playerid,params[]) //ou bcmd:seucomando(playerid,space[])
CallBacks
Quando o comando é chamando também é chamada a função OnPlayerCallCommand, você pode usa-lo e verificar se o comando existe ou não, exemplo:
pawn Code:
public OnPlayerCallCommand(playerid,cmdtext[],sucess){ if(sucess) { new result[128]; format(result,sizeof(result),"O comando %s não existe",cmdtext); SendClientMessage(playerid,-1,result); } return 1; }
Agora voce pode escolher outra forma de executar comandos, a tipica forma matem-se para não ocorrer bugs, para quem não sabe a tipica forma é /meucomando, para isso basta usar a função bKey(playerid,_key[],cmdtext[]); veja este exemplo
pawn Code:
public OnPlayerText(playerid,text[]){ if(bKey(playerid,"!",text)) return 0; else if(bKey(playerid,"@",text)) return 0; return 1; }
Agora podemos executar os comandos de 3 formas diferentes, /meucomando, !meucomando, @meucomando, lembrando que é necessário colocar essa função dentro da public OnPlayerText !
BenchMarks
Eu fiz 3 benchmarks e fiz a media deles e deu este resultado.
Code:
Benchmark (18/07/2012): [19:13:14] Bench for bcmd with out params: executes, by average, 555.43 times/ms. [19:11:39] Bench for zcmd sem params: executes, by average, 529.54 times/ms. [19:13:16] Bench for bcmd with params: executes, by average, 523.56 times/ms. [19:11:41] Bench for zcmd com params: executes, by average, 591.51 times/ms. [19:13:18] Bench for bcmd with sscanf: executes, by average, 565.32 times/ms. [19:11:43] Bench for zcmd com sscanf: executes, by average, 578.74 times/ms. Benchmark (19/07/2012): [01:08:57] Bench for bcmd with out params: executes, by average, 585.48 times/ms. (+30 ms) [01:08:59] Bench for bcmd with params: executes, by average, 564.63 times/ms. (+41.07ms) [01:09:01] Bench for bcmd with sscanf: executes, by average, 605.54 times/ms. (+40.22ms)
Exemplos
Bem como não podia faltar, aqui esta alguns exemplos do bCMD.
pawn Code:
bCMD[grana]-(playerid) return GivePlayerMoney(playerid,10000);
bCMD com params(space)
pawn Code:
bCMD[kick]-(playerid,params[]){ if(isnull(params)) return SendClientMessage(playerid,-1,"use: /kick [id]"); if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"Voce não é admin!"); Kick(strval(params)); return 1; }
bCMD + sscanf
pawn Code:
bCMD[pm]-(playerid,params[]){ new id,_text[128],pName[25]; if(sscanf(params,"ds[64]",id,_text)) return SendClientMessage(playerid,-1,"USE: /pm [id] [messagem]"); if(IsPlayerConnected(id)){ GetPlayerName(playerid,pName,25); format(_text,sizeof(_text),"PM de %s | texto: %s",_text); SendClientMessage(id,-1,_text); } else SendClientMessage(playerid,-1,"Jogador não conectado!"); return 1; }
ChangeLog
- 18/07/2012 - v1.0
- Lançameto
- 19/07/2012 - v1.1 (BETA)
- Optimização do código.
- Perda de velocidade, não era essa minha intenção, logo depois estarei reparando isso.
- Nova forma de usar comandos, agora em vez de usarmos /meucommando podemos usar !meucommando ou @meucommando (mais informações veja no topo)
Download
Download - Pastebin v1.1
Download - Pastebin v1.0
BUGS
No entanto não achei nenhum bug, caso achar algum bug reporte por PM ou reporte aqui no tópico, assim isto ajudara eu a resolver os bugs.
Créditos
- ZeeX
- Criador do ZCMD e deu-me a luz para o inicio da include.
- BlueX
- Criador da include.
- Y_Less
- Criador do sscanf
- [iPs]Team
- Melhor equipe de programação.
- SA-MP Team
- Team past, present and future - SA:MP.
- Paulo_Terror
- Tirou-me algumas duvidas.
- Stewie`
- Um grande amigo.
- Wiki SA-MP
- Tirou-me algumas duvidas.
- DraKiNs ou Bruno
- Ajudou-me em optimização.
Postado Por: Caozinho_DosCorre










0 comentários:
Postar um comentário