07.10.2013, 04:05
(
Последний раз редактировалось ipsBruno; 08.10.2013 в 21:47.
)
Introduзгo
Este й um novo processador de comandos, nгo hб CallFunction como todos os outros. Neste novo sistema, consegui projetar os comandos de forma que cada um represente ids, e que assim nгo seja necessбrio o uso de strcmp.
Como ainda estб em fase de testes, alguns comandos com caracteres especiais sгo recusados, e o uso dele й um pouco mais complicado que os outros tradicionais comandos. Por isto, nгo recomendo que novatos utilizem este sistema, й um pouco mais complexo que usar zcmd ou icmd 6
Include
icmd7.inc
Novo Uso
Agora a callback OnPlayerCommandText foi modificada, e o uso dela serб o seguinte:
Commandid? Params?
Simples, commandid representa o ID do comando. E params[] representa os parвmetros do comando — caso o jogador tenha digitado algum, й claro
Alguns exemplos de uso:
/vida [valor]
/dinheiro [valor]
/eu [mensagem]
/vida /dinheiro /eu
Importante: Como puderam ver, ele funciona desta forma. Com switch case. Apesar de tambйm funcionar com if eu prefiro que usem com switch, por ser muito mais rбpido
Sempre que usarem
deve separar as strings pro virgula, para o processador conseguir processar os caracteres
caso contrбrio darб erro.
Notas finais
Sei que muita gente jб tem um sistema de comandos preferencial. Mas eu quero deixar uma coisa clara: Se vocк quer velocidade, esse й o processador que vocк deverб usar. Apesar do difнcil uso dele, й tudo compensado na velocidade e na clareza de como ele funciona.
Nгo postarei aqui os testes de velocidade, vocкs podem fazer por si prуprios e verгo que o processador й em torno de duas vezes mais veloz que os processadores atuais. Enquanto os atuais processam 250 comandos em um segundo, este processa 500 comandos em um segundo.
Autoria
Este sistema foi criado por Bruno da Silva. Agradeзo ao tutorial pre-processor de ******
Equipe [iPs]TeaM!
Abraзos
Este й um novo processador de comandos, nгo hб CallFunction como todos os outros. Neste novo sistema, consegui projetar os comandos de forma que cada um represente ids, e que assim nгo seja necessбrio o uso de strcmp.
Como ainda estб em fase de testes, alguns comandos com caracteres especiais sгo recusados, e o uso dele й um pouco mais complicado que os outros tradicionais comandos. Por isto, nгo recomendo que novatos utilizem este sistema, й um pouco mais complexo que usar zcmd ou icmd 6
Include
icmd7.inc
pawn Код:
/*
* --- iCmd 7 ---
* Por Bruno da Silva
* [iPs]TeaM
* mixmusicas.com.br ipsbr.net
* email@ brunodasilva.com
*
*/
#define retn("%0") init(%0,@,@)
#define init(%0,%1) def%0(%1)
#define defA(%1) init(%1)+(0x40BF)
#define defB(%1) init(%1)+(0x41BE)
#define defC(%1) init(%1)+(0x42BD)
#define defD(%1) init(%1)+(0x43BC)
#define defE(%1) init(%1)+(0x44BB)
#define defF(%1) init(%1)+(0x45BA)
#define defG(%1) init(%1)+(0x46B9)
#define defH(%1) init(%1)+(0x47B8)
#define defI(%1) init(%1)+(0x48B7)
#define defJ(%1) init(%1)+(0x49B6)
#define defK(%1) init(%1)+(0x4AB5)
#define defe(%1) init(%1)+(25755)
#define deff(%1) init(%1)+(26010)
#define defg(%1) init(%1)+(26265)
#define defq(%1) init(%1)+(28815)
#define defn(%1) init(%1)+(28050)
#define defo(%1) init(%1)+(28305)
#define defp(%1) init(%1)+(28560)
#define defb(%1) init(%1)+(24990)
#define defc(%1) init(%1)+(25245)
#define defd(%1) init(%1)+(25500)
#define defx(%1) init(%1)+(30600)
#define defy(%1) init(%1)+(30855)
#define defz(%1) init(%1)+(31110)
#define defr(%1) init(%1)+(29070)
#define defs(%1) init(%1)+(29325)
#define defh(%1) init(%1)+(26520)
#define defi(%1) init(%1)+(26775)
#define defj(%1) init(%1)+(27030)
#define defk(%1) init(%1)+(27285)
#define defq(%1) init(%1)+(28815)
#define defr(%1) init(%1)+(29070)
#define defs(%1) init(%1)+(29325)
#define defa(%1) init(%1)+(24735)
#define defb(%1) init(%1)+(24990)
#define defc(%1) init(%1)+(25245)
#define defd(%1) init(%1)+(25500)
#define deft(%1) init(%1)+(29580)
#define defu(%1) init(%1)+(29835)
#define defv(%1) init(%1)+(30090)
#define defw(%1) init(%1)+(30345)
#define defx(%1) init(%1)+(30600)
#define defy(%1) init(%1)+(30855)
#define defz(%1) init(%1)+(31110)
#define def0(%1) init(%1)+(12240)
#define defL(%1) init(%1)+(0x4BB4)
#define defM(%1) init(%1)+(0x4CB3)
#define defN(%1) init(%1)+(0x4DB2)
#define defO(%1) init(%1)+(0x4EB1)
#define defP(%1) init(%1)+(0x4FB0)
#define defQ(%1) init(%1)+(0x50AF)
#define defR(%1) init(%1)+(0x51AE)
#define defS(%1) init(%1)+(0x52AD)
#define defT(%1) init(%1)+(0x53AC)
#define defU(%1) init(%1)+(0x54AB)
#define defV(%1) init(%1)+(0x55AA)
#define defW(%1) init(%1)+(0x56A9)
#define defX(%1) init(%1)+(0x57A8)
#define defY(%1) init(%1)+(0x58A7)
#define defZ(%1) init(%1)+(0x59A6)
#define def1(%1) init(%1)+(12495)
#define def2(%1) init(%1)+(12750)
#define def3(%1) init(%1)+(13005)
#define def4(%1) init(%1)+(13260)
#define def5(%1) init(%1)+(13515)
#define def7(%1) init(%1)+(14025)
#define def8(%1) init(%1)+(14280)
#define def9(%1) init(%1)+(14535)
#define defa(%1) init(%1)+(24735)
#define defl(%1) init(%1)+(27540)
#define defm(%1) init(%1)+(27795)
#define defe(%1) init(%1)+(25755)
#define deff(%1) init(%1)+(26010)
#define defg(%1) init(%1)+(26265)
#define defh(%1) init(%1)+(26520)
#define defi(%1) init(%1)+(26775)
#define defj(%1) init(%1)+(27030)
#define def6(%1) init(%1)+(13770)
#define defk(%1) init(%1)+(27285)
#define defl(%1) init(%1)+(27540)
#define defm(%1) init(%1)+(27795)
#define defn(%1) init(%1)+(28050)
#define defo(%1) init(%1)+(28305)
#define defp(%1) init(%1)+(28560)
#define deft(%1) init(%1)+(29580)
#define defu(%1) init(%1)+(29835)
#define defv(%1) init(%1)+(30090)
#define defw(%1) init(%1)+(30345)
#define def@(%1) 0
#define iscmd retn
stock __@cmdvalue, __@loopv;
stock __@param[126];
public OnPlayerCommandText( playerid, cmdtext[] ) {
__@cmdvalue = 0;
__@loopv = 0;
__@param[0] = EOS;
while (cmdtext[++__@loopv] > ' ') {
__@cmdvalue += (0xff * tolower(cmdtext[__@loopv]));
}
while (strlen(cmdtext) > __@loopv && cmdtext[++__@loopv] == ' ') {}
if( __@loopv < strlen(cmdtext)) {
format(__@param, 125, "%s", cmdtext[__@loopv]);
}
#if defined icmd@___OnPlayerCommandText
return icmd@___OnPlayerCommandText(playerid, __@cmdvalue, __@param);
#else
return 0;
#endif
}
#if defined _ALS_OnPlayerCommandText
#undef OnPlayerCommandText
#else
#define _ALS_OnPlayerCommandText
#endif
#define OnPlayerCommandText icmd@___OnPlayerCommandText
#if defined icmd@___OnPlayerCommandText
forward icmd@___OnPlayerCommandText(playerid, commandid, params[]);
#endif
Novo Uso
Agora a callback OnPlayerCommandText foi modificada, e o uso dela serб o seguinte:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])
Commandid? Params?
Simples, commandid representa o ID do comando. E params[] representa os parвmetros do comando — caso o jogador tenha digitado algum, й claro
Alguns exemplos de uso:
/vida [valor]
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {
switch(commandid) {
case iscmd("v,i,d,a"): {
if(!params[0]) {
return SendClientMessage(playerid, -1, "[Erro]: Use /vida [valor]");
}
SetPlayerHealth(playerid, floatstr(params));
return true;
}
default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
}
return false;
}
/dinheiro [valor]
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {
switch(commandid) {
case iscmd("d,i,n,h,e,i,r,o"): {
if(!params[0]) {
return SendClientMessage(playerid, -1, "[Erro]: Use /dinheiro [valor]");
}
GivePlayerMoney(playerid, strval(params));
return true;
}
default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
}
return false;
}
/eu [mensagem]
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {
switch(commandid) {
case iscmd("e,u"): {
if(!params[0]) {
return SendClientMessage(playerid, -1, "[Erro]: Use /eu [mensagem]");
}
static szName[128];
GetPlayerName(playerid, szName, sizeof szName);
format(szName, 128, "O jogador %s ANUNCIOU: %s", szName, params);
SendClientMessageToAll(-1, szName);
return true;
}
default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
}
return false;
}
/vida /dinheiro /eu
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {
switch(commandid) {
case iscmd("v,i,d,a"): {
if(!params[0]) {
return SendClientMessage(playerid, -1, "[Erro]: Use /vida [valor]");
}
SetPlayerHealth(playerid, floatstr(params));
return true;
}
case iscmd("d,i,n,h,e,i,r,o"): {
if(!params[0]) {
return SendClientMessage(playerid, -1, "[Erro]: Use /dinheiro [valor]");
}
GivePlayerMoney(playerid, strval(params));
return true;
}
case iscmd("e,u"): {
if(!params[0]) {
return SendClientMessage(playerid, -1, "[Erro]: Use /eu [mensagem]");
}
static szName[128];
GetPlayerName(playerid, szName, sizeof szName);
format(szName, 128, "O jogador %s ANUNCIOU: %s", szName, params);
SendClientMessageToAll(-1, szName);
return true;
}
default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
}
return false;
}
Importante: Como puderam ver, ele funciona desta forma. Com switch case. Apesar de tambйm funcionar com if eu prefiro que usem com switch, por ser muito mais rбpido
Sempre que usarem
PHP код:
iscmd("string");
PHP код:
iscmd("s,t,r,i,n,g")
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {
switch(commandid) {
/*
/comando
*/
case iscmd("C,O,M,A,N,D,O"): {
if(!params[0]) {
// nгo digitou parametros
}
else
{
// digitou parametros
}
return true;
}
default: {
// comando desconhecido
}
}
return false;
}
Notas finais
Sei que muita gente jб tem um sistema de comandos preferencial. Mas eu quero deixar uma coisa clara: Se vocк quer velocidade, esse й o processador que vocк deverб usar. Apesar do difнcil uso dele, й tudo compensado na velocidade e na clareza de como ele funciona.
Nгo postarei aqui os testes de velocidade, vocкs podem fazer por si prуprios e verгo que o processador й em torno de duas vezes mais veloz que os processadores atuais. Enquanto os atuais processam 250 comandos em um segundo, este processa 500 comandos em um segundo.
Autoria
Este sistema foi criado por Bruno da Silva. Agradeзo ao tutorial pre-processor de ******
Equipe [iPs]TeaM!
Abraзos