Szerző Téma: fcmd - Parancsfeldolgozó  (Megtekintve 766 alkalommal)

dexi

  • Vendég
fcmd - Parancsfeldolgozó
« Dátum: 2012. június 03. - 09:27:27 »
+2 Show voters
Készítõ: Fl0rian (Horváth Flórián)
Egyszerû kis parancsfeldolgozó, ami a paramétereket is támogatja.
Használatára egy példa parancs:
 

public OnPlayerCommandText( playerid, cmdtext[] ) {
new params[8][64 + 1]; // Ez fogja tárolni a paramétereket.
if( fCommand(cmdtext, \"/parancs\") ) { // Ezt kell használni egy parancs ellenõrzéséhez.
    fSliceParams( cmdtext, params, 2 ); // Ezt a sort kihagyhatjuk abban az esetben ha nem kell paraméter a parancshoz. a 3 paraméter jelenti a parancs maximum paramétereinek számát.
   
    if( fParamsNotUsed(params, 2) ) return SendClientMessage( playerid, -1, \"Használata: /parancs <param1> <param2>\" ); // Ezzel tudjuk ellenõrizni azt hogy az adott paraméter üres-e. a függvény 2. paraméterénél kell megadni a max. paramétereket.
 
    printf( \"%s | %s\", params[0], params[1] );
}
return 1;
}

 

stock fParamsNotUsed( params[][], maxparams ) {
maxparams--;
if( params[maxparams][0] == \'\\0\' ) return true;
return false;
}
stock fNull(params[][], maxparams) {
for( new i = 0; i < maxparams; i++ ) {
    for( new a = 0; a < strlen(params); a++ ) {
   params[a] = 0;
}
}
}
stock fCommand(cmdtext[], cmd[] ) {
new ok;
new karakterek;
 
for( new i = 0; i < strlen(cmd); i++ ) {
    if( cmd == cmdtext ) {
    ok++;
}
karakterek++;
}
// ----------------------------------
new FP = fGetFirstDelim( cmdtext );
new felhasz[128 + 1];
format( felhasz, sizeof(felhasz), \"%s\", cmdtext );
strdel( felhasz, FP, strlen(felhasz) );
if( strlen(felhasz) != strlen(cmd) ) return false;
// ----------------------------------
if( ok == strlen(cmd) && karakterek == strlen(cmd) ) return true;
return false;
}
stock fGetFirstDelim(txt[], const delim=\' \') {
new space = strlen(txt);
for( new i = 0; i < strlen(txt); i++ ) {
    if( txt == delim && i < space ) {
        space = i;
}
}
return space;
}
stock fSliceParams(command[], params[][], maxparams, const delim=\' \') {
fNull( params, maxparams );
new pNum = 0;
new idxNum;
new len;
new idxNumPLUS;
new delimeter[16 + 1];
format( delimeter, sizeof(delimeter), \"%s\", delim );
strdel( command, 0, fGetFirstDelim(command) + 1 );
strins( command, delimeter, strlen(command), (128 + 1) );
while( idxNum <= strlen(command) ) {
    if( command[idxNum] == delim && pNum < maxparams ) {
   len = strmid( params[pNum], command, idxNumPLUS, idxNum , (128 + 1) );
 
   if( maxparams != 1 ) {
       if( (maxparams-pNum) != 1 ) {
         pNum++;
         idxNumPLUS = idxNum + 1;
         params[pNum][len] = 0;
      }
   }
}
idxNum++;
}
return 1;
}

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal