Minap rájöttem hogy az f_command egy irgalmatlanul bugos f*stalicska (a paraméterek szétvágása miatt). Mivel az ékezetet meg akarom tartani a parancsokban úgy gondoltam írok egy olyan kis dolgot amivel ékezetes parancsokat tudunk írni sscanf segítségével.
Készítette: Fl0rian (Horváth Flórián)
A kód:
forward AccidentSSCANF( playerid, command[], params[] );
public OnPlayerCommandText( playerid, cmdtext[ ] ) {
new params[ 356 + 1 ],
Spaces,
i_Space,
g_szrCommand[ 192 + 1 ];
i_Space = strfind( cmdtext, \" \" );
format( g_szrCommand, (192), \"%s\", cmdtext );
strdel( g_szrCommand, i_Space, strlen(cmdtext) );
format( params, (356), \"%s\", cmdtext );
strdel( params, (0), i_Space + 1 );
for( new x; x < strlen(params); x++ ) {
if( params
Spaces ++;
}
}
if( i_Space == (-1) || Compare(params, g_szrCommand) || Spaces == strlen(params) ) return CallLocalFunction( \"AccidentSSCANF\", \"iss\", playerid, g_szrCommand, \" \" );
CallLocalFunction( \"AccidentSSCANF\", \"iss\", playerid, g_szrCommand, params );
return 1;
}
Használata:
public AccidentSSCANF( playerid, command[], params[] ) {
if( strcmp(command, \"/parancs\") ) { // MIT CSINÁLJON }
}
Nekem nem annyira, nem értem mire jó ez az egész, egy példával valaki szemléltethetné, és leírhatná mi van benne ami különlegessé teszi.
Ránézésre csak ennyit látok ami túl lett bonyolítva:
public OnPlayerCommandText( playerid, cmdtext[ ] )
{
if(strcmp(cmdtext, \"/parancs\") ) { // MIT CSINÁLJON }
és nem találom a fõposztban a sscanf alkalmazását sem.
public AccidentSSCANF( playerid, command[], params[] ) {
if( strcmp(command, \"/parancs\") ) {
new ID;
if( sscanf(params, \"u\", ID) ) return SendClientMessage( playerid, (-1), \"HASZNÁLAT: /parancs <id>\" );
return 1;
}
return 1;
}
Remélem így már érthetõ, hogy miért egyszerûbb mint az általad írt verziónál a paraméteres parancsok létrehozása.
Ok értem, és így talán nem mûködne?
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, \"/parancs\"))
{
new
ID;
if(sscanf(cmdtext[8], \"u\", ID)) return SendClientMessage( playerid, (-1), \"HASZNÁLAT: /parancs <id>\" );
return 1;
}
return 0;
}
Ok értem, és így talán nem mûködne?
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, \"/parancs\"))
{
new
ID;
if(sscanf(cmdtext[8], \"u\", ID)) return SendClientMessage( playerid, (-1), \"HASZNÁLAT: /parancs <id>\" );
return 1;
}
return 0;
}
Nem mûködne. Próbáld ki.