Jump to content

ZCMD + SSCANF.


Guest PlayON

Recommended Posts

Guest PlayON

LaZ" post="59337" timestamp="1299523329"]

Pana acum cateva zile foloseam o metoda similara cu cea al lui Zh3r0 de verificare a parametrilor, adica:

if ( sscanf( cmdtext, "u", cmdtext[ 0 ] ) )
    return ...
Dintr-un motiv sau altul, luam crash cand tastam o comanda facuta asa. Rareori, dar nu era prea bine. Ar fi indicat sa folositi o variabila, cel putin nu am mai avut nicio problema de cand folosesc aceasta metoda:
new var;
if ( sscanf( cmdtext, "d", var ) )
    return ...
else
{
    Kick( var );
}

Sa sti, cand am incercat o comanda /gotopos folosind specificatiile "fff" si params[ 0 ]  luam crash, se facea ecranu de parca ardea.

Dupa m-am decis sa fac cu new Float:Pos[ 3 ] si a mers brici.

Link to comment
Share on other sites

  • Replies 107
  • Created
  • Last Reply

Top Posters In This Topic

Guest PlayON

LaZ" post="59348" timestamp="1299523834"]

Perfect :). Am si confirmarea :D.

Ma duc sa-l intreb pe Y_Less care este diferenta intre params[ 0 ] si new Var1;

si dece ia crashu asta.

Revin cu un edit & raspuns.

Link to comment
Share on other sites

Am si eu o nelamurire ... Care e diferenta daca definesc parametrii sau folosesc params[ x ] ? Spre exemplu, care e diferenta dintre aceste 2 comenzi?

CMD:slap( playerid, params[ ] )
{
	if ( GetPVarInt( playerid, "Level" ) < 1 )
		return 1;

 	if ( sscanf( params, "u", params[ 0 ] ) )
	    return SendClientMessage( playerid, -1, ""COL_LIGHTBLUE"Usage:{FFFFFF} /slap <PlayerID>");

	if ( !IsPlayerConnected( params[ 0 ] ) )
	    return SendClientMessage( playerid, -1, ""COL_RED"Player is not connected.");

	new Float:pos[ 3 ];
	GetPlayerPos( params[ 0 ], pos[ 0 ], pos[ 1 ], pos[ 2 ] );
 	SetPlayerPos( params[ 0 ], pos[ 0 ], pos[ 1 ], pos[ 2 ] + 10 );
	return 1;
}
si
CMD:slap( playerid, params[ ] )
{
	if ( GetPVarInt( playerid, "Level" ) < 1 )
		return 1;

        new playername;
 	if ( sscanf( params, "u", playername ) )
	    return SendClientMessage( playerid, -1, ""COL_LIGHTBLUE"Usage:{FFFFFF} /slap <PlayerID>");

	if ( !IsPlayerConnected( playername ) )
	    return SendClientMessage( playerid, -1, ""COL_RED"Player is not connected.");

	new Float:pos[ 3 ];
	GetPlayerPos( playername, pos[ 0 ], pos[ 1 ], pos[ 2 ] );
 	SetPlayerPos( playername, pos[ 0 ], pos[ 1 ], pos[ 2 ] + 10 );
	return 1;
}

Ma refer ca e vreo diferenta in timpul de reactie? Cum e mai bine sa folosesc?

Am auzit de la cineva, cum ca, daca folosesc prea multi params[ x ], la un moment dat se va bugui? Ma poate lamuri si pe mine cineva?

Link to comment
Share on other sites

Guest PlayON

Am si eu o nelamurire ... Care e diferenta daca definesc parametrii sau folosesc params[ x ] ? Spre exemplu, care e diferenta dintre aceste 2 comenzi?

Foloseste varianta a 2 a deoarece uneori se intampla ca params[ 0 ] sa fie buguit! Este mult mai sigur sa faci varaianta a 2 a :)

Link to comment
Share on other sites

Foloseste varianta a 2 a deoarece uneori se intampla ca params[ 0 ] sa fie buguit! Este mult mai sigur sa faci varaianta a 2 a :)

Okay ... am inteles.

ps: Asta inseamna ca am de modificat vreo 1k randuri de comenzi ... Ceas !

Later Edit: Gata, le`am modificat pe toate ... acum vin cu alta intrebare. Am vazut pe forum, ca la comenzile fara params, unii folosesc #pragma unused params. E vreo problema daca nu folosesc asa ceva pt comenzile fara params, gen, /help, /commands, etc ?

Link to comment
Share on other sites

Guest PlayON

Okay ... am inteles.

ps: Asta inseamna ca am de modificat vreo 1k randuri de comenzi ... Ceas !

Later Edit: Gata, le`am modificat pe toate ... acum vin cu alta intrebare. Am vazut pe forum, ca la comenzile fara params, unii folosesc #pragma unused params. E vreo problema daca nu folosesc asa ceva pt comenzile fara params, gen, /help, /commands, etc ?

Nu, aia e din cauza ca or schimbat de la DCMD la ZCMD ca la DCMD daca nu foloseai deloc params iti dadea un warning, si deaia foloseai pragma.

Link to comment
Share on other sites

Guest PlayON

Bun, gata, am reusit intr`un final sa le fac toate. Are vreo importanta daca la toate comenzile am dat new temptext; pentru string ... pe scurt, daca am numit toate variabilele string la fiecare comanda cu 'temptext', se poate sa se incurce intre ele ?

Nu, atata timp cat nu este globala, adica creat inafara oricarui callback.

Orice este creat intr-un callback, functie, stock, acolo ramane, atata timp cat nu este transferata informatia altei variabile, care este globala.

Link to comment
Share on other sites

Zi-mi ce vrei sa-ti arat:))

Pana acum am asa.

CMD:createcar(playerid, params[])
{
	new veh,color1,color2;
 	if (!sscanf(params, "iii", veh, color1,color2))
  	{
		new Float:x, Float:y, Float:z;
  		GetPlayerPos(playerid, x,y,z);
  		AddStaticVehicle(veh, x,y,z,0,color1, color2);
    }
    else SendClientMessage(playerid, 0xFFFFFFFF, "Usage: //veh <carid> <c1> <c2>");
    return 1;
}
CMD:raporteaza(playerid, params[])
	{
	if(IsPlayerConnected(playerid))
 	{
  		/*if(JustReported[playerid] == 1)
  		{
    		SendClientMessage(playerid, COLOR_GREY, "   Wait 2 minutes after sending a next report ! ");
      		return 1;
        }*/
        new giveplayerid, text[128];
		new string[128];
  		new sendername[MAX_PLAYER_NAME];
		new giveplayer[MAX_PLAYER_NAME];
		GetPlayerName(playerid, sendername, sizeof(sendername));
		if (!sscanf(params, "us[128]", giveplayerid, text))
		{
			if(IsPlayerConnected(giveplayerid))
			{
			    if(giveplayerid != INVALID_PLAYER_ID)
			    {
			        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
			        format(string, sizeof(string), "Report from: [ID:%d]%s, Reported player: [ID:%d]%s", playerid, sendername, giveplayerid, giveplayer);
					ABroadCast(0xE19898AA,string,1);
					format(string, sizeof(string), "Report text: %s", (text));
					ABroadCast(0xE19898AA,string,1);
					ABroadCast(0xA04C4CAA,"Type '/acceptreport [reporter id]' or '/trashreport [reporter id]'",1);
					SendClientMessage(playerid, 0x96C184AA, "  Reportul tau a fost trimis adminilor AG:RP.");
					//JustReported[playerid] = 1;
					//PlayerNeedsHelp[playerid] = 1;
					//SetTimerEx("ReportReset", 120000, false, "i", playerid);
				}
			}
		}
        else SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /report <playerid> <text>");
	}
	return 1;
}
si
CMD:setvip(playerid, params[])
{
	if(IsPlayerConnected(playerid))
	{
	    if(PlayerInfo[playerid][pAdmin] >=6)
	    {
	        new sendername[MAX_PLAYER_NAME];
	        new giveplayername[MAX_PLAYER_NAME];
	    	new giveplayerid,level;
	    	if (!sscanf(params, "ii", giveplayerid,level))
	    	{
	    	    if (giveplayerid != INVALID_PLAYER_ID)
     			{
     				new string[128];
     				format(string, sizeof(string), "Adminul %d te-a facut VIP de nivel %d",sendername,level);
					SendClientMessage(giveplayerid, COLOR_GRAD1, string);
					format(string, sizeof(string), "L-ai facut VIP de nivel %d pe %d",level,giveplayername);
					SendClientMessage(playerid, COLOR_GRAD1, string);
					PlayerInfo[giveplayerid][pVip] = level;
					OnPlayerUpdateEx(giveplayerid);
				}
			}
			else SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /setvip [playerid] [level]");
		}
		else SendClientMessage(playerid, 0xFF0000FF, "Numai adminii pot folosi aceasta comanda!!");
	}
	return 1;
}

Link to comment
Share on other sites

Guest PlayON

Scuze de 2x post, dar Zh3r0, cum fac sa am o comanda de genul /buy spray, /buy soap (astea mi-au venit in minte :)) ) ca la strcmp faceam cu x_nr. Aici cum se face?

Nu ai nevoie de sscanf sa faci asta, deacea exista acel parametru numit "params", treaba lui sscanf este sa faca tot felu de checkuri si tot felu de aranjari si specificatii.


CMD:buy( playerid, params[ ] )

{

if ( !strlen( params ) ) return SendClientMessage( playerid, -1, "USAGE: /buy [soap/coke/cup]" );

if ( !strcmp( params, "soap" ) )

{

  //Soap code

}

else if ( !strcmp( params, "coke" ) )

{

  //Coke code

}

else if ( !strcmp( params, "cup" ) )

{

    //Cup code

}

else return SendClientMessage( playerid, -1, "INVALID ELEMENT: You can only buy: [soap/coke/cup]" );

return 1;

}


Link to comment
Share on other sites

Daca folosesc cu y_stringhash cum ar arata? Eu am incercat ceva de genul: dar nu stiu daca e bine.

CMD:buy( playerid, params[ ] )
{
   if ( !strlen( params ) ) return SendClientMessage( playerid, -1, "USAGE: /buy [soap/coke/cup]" );
	switch (YHash(str))
   	{
    	case _H<soap>:
    	{
        // soap
    	}
    	case _H<coke>:
    	{
    	    //coke
    	}
    	case _H<cup>:
    	{
    	    //cup
    	}
	}
    else return SendClientMessage( playerid, -1, "INVALID ELEMENT: You can only buy: [soap/coke/cup]" );
   	return 1;
}

Link to comment
Share on other sites

Guest PlayON

Te-am intrebat doar daca e bine :-??

LE: Y_Less: pantelimonfl: Looks OK, though change "str" to "params".

Pai nu stiu de unde ti-a sarit str ala, dar na.

Te complici su y_stringhash degeaba...

Link to comment
Share on other sites

Numai folositi tot felul de prostii complicate si proaste in acelasi timp , folositi ce va dat Zh3r0 aici  :wink:

'prostii' ? Explica`mi te rog tu mie cum ai ajuns la concluzia ca y_stringhash e prostie?

Cum poti sa zici ca e proasta? Hai sa zicem ca e mai complicata pt un incepator, pentru ca nu stie exact ce face ... dar proasta? Fii serios. Pot paria ca habar n`ai ce e ala y_stringhash ( nu ca eu as stii ) dar te bagi p`aci aiurea, sa`l pupi in ... pe Zh3r0.

Poate amaru vrea sa invete ceva nou in scripting, nu doar sa faca o chestie sa fie facuta ? Poate vrea sa foloseasca in totalitate include`le facute de Y_Less?

Cu toate ca topic`ul e despre ZCMD + sscanf ... pana mea.

Link to comment
Share on other sites

Guest PlayON

Intrebarea lui a fost despre zcmd, cum sa foloseasca y_stringhas cu zcmd si sscanf.

@PaZzi y_stringhash este o functie mai rapida ca strcmp de a compara stringurile.

Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.