Jump to content
  • 0

pomoc Problém s sscanf


Marks

Dotaz

Dobrý den. Mám problém s touto funkcí. Tuto funkci používám na získání informací z příkazu například /kick hrač důvod.

if(!strcmp(cmdtext, "/kick", true, 5)){
      if(Rank[playerid] == 3 || Rank[playerid] == 4){//pokud je hráč admin
	    new num,message[256],text[256];
		if(!sscanf(cmdtext[6],"is[256]",num,message)){
			SendClientMessageToAllLang(0x0000FFFF,"|Server| - {FA710C}Admin kicked player","|Server| - {FA710C}Admin kikl hráče");
			if(Language[playerid] == 1){
				format(text,256,"|Server| - {FA710C}You will be kicked because: %s",message);
			}if(Language[playerid] == 2){
				format(text,256,"|Server| - {FA710C}Budete kiknuti protože: %s",message);
			}
			SendClientMessage(playerid,0x0000FFFF,text);
			SetTimerEx("UdeleniKicku",100,false,"%i",playerid);
	   	}else{
		    SendClientMessageLang(playerid,0x0000FFFF,"|Server| - {FA710C}Bad format: use {1FCC06}/kick playerID","|Server| - {FA710C}Špatný formát: použij {1FCC06}/kick hračovoID");
		}
	}else{
	 	SendClientMessageLang(playerid,0x0000FFFF,"|Server| - {FA710C}You don't have permision!","|Server| - {FA710C}Nemáte oprávnění!");
 	}
	return 1;
} 

Při napsání do chatu příkazu /kick a parametrů, tak mi to neustále hlásí špatný formát a to i v případě, že zadané parametry jsou správně.
Toto chování mě dost zaráží, protože pár dnů před jsem vytvořil podobný příkaz, který využíval této metody a funguje bezchybně. Zde je jeho ukázka:
 

if(!strcmp(cmdtext, "/creathouse",true,11)){
    new Float:PozPX,Float:PozPY,Float:PozPZ,Float:inside1,Float:inside2,Float:inside3,name[256],price,text[256];
    GetPlayerPos(playerid,PozPX,PozPY,PozPZ);
    if(Rank[playerid] == 4){
	if(!sscanf(cmdtext[12],"fffs[256]i",inside1,inside2,inside3,name,price)){
                       //nějaký kód
	}else{
		SendClientMessageLang(playerid,0x0000FFFF,"|Server| - {FA710C}Bad format: use {1FCC06}/createhouse InX InY InZ Name Price","|Server| - {FA710C}Špatný formát: použij {1FCC06}/createhouse VnitrekX VnitrekY VnitrekZ Jmeno Cena");
	}
     }else{
	   SendClientMessageLang(playerid,0x0000FFFF,"|Server| - {FA710C}You don't have permission!","|Server| - {FA710C}Nemáte oprávnění!");
     }
     return 1;
}

 Proto bych se chtěl zeptat, kde dělám chybu, nebo neznáte-li někdo jiné řešení?
Díky předem.

Link to comment
Share on other sites

7 odpovědí na tuto otázku

Recommended Posts

  • 0

Osobne bych to udelal takto. Rozhodne to bude rychlejsi nez sscanf

if(!strcmp(cmdtext, "/kick",true,5))
{
	new pos = chrfind(' ',cmdtext,6)+1,id = strval(cmdtext[6]),text[144];
	if(!(3 <= Rank[playerid] == <= 4))SendClientMessageLang(playerid,0x0000FFFF,"|Server| - {FA710C}You don't have permision!","|Server| - {FA710C}Nemáte oprávnění!");
	else if(!cmdtext[6] || pos == 0) return SendClientMessageLang(playerid,0x0000FFFF,"|Server| - {FA710C}Bad format: use {1FCC06}/kick playerID","|Server| - {FA710C}Špatný formát: použij {1FCC06}/kick hračovoID");
	else if(!IsPlayerConnected(id)) return SendClientMessage(playerid,-1,"Not connected playyerid");
	else
	{
		SendClientMessageToAllLang(0x0000FFFF,"|Server| - {FA710C}Admin kicked player","|Server| - {FA710C}Admin kikl hráče");
		if(Language[playerid] == 1 format(text,sizeof(text),"|Server| - {FA710C}You will be kicked because: %s",cmdtext[pos]);
		else/* if(Language[playerid] == 2) */format(text,sizeof(text),"|Server| - {FA710C}Budete kiknuti protože: %s",cmdtext[pos]);
		SendClientMessage(id,0x0000FFFF,text);
		SetTimerEx("UdeleniKicku",100,false,"%i",playerid);
 	}return 1;
}
	
Edited by ATomas
Link to comment
Share on other sites

  • 0

ATomas:

Díky, chtěl bych se zepat, jestli není na webu někde ukázka jak tento příkaz funguje, popřípadě jak se jmenuje.

Ten jsem te uplne nepochopil...

Link to comment
Share on other sites

  • 0

ATomas:

Díky, chtěl bych se zepat, jestli není na webu někde ukázka jak tento příkaz funguje, popřípadě jak se jmenuje.

Ak spravne chapem, chces vedet ako funguje funkcia sscanf().

Tu je ofik thread kde je vsetko vysvetlene. Pokial viem, hentu ostaru zatial nikdo neprelozil.

http://forum.sa-mp.com/showthread.php?t=570927 (please no ban)

 

A poznamka pre buducnost, je to funkica, nie prikaz. /kick je prikaz. 

 

Link to comment
Share on other sites

  • 0

Ak spravne chapem, chces vedet ako funguje funkcia sscanf().

Tu je ofik thread kde je vsetko vysvetlene. Pokial viem, hentu ostaru zatial nikdo neprelozil.

http://forum.sa-mp.com/showthread.php?t=570927 (please no ban)

 

A poznamka pre buducnost, je to funkica, nie prikaz. /kick je prikaz. 

 

 

Ale přeložil a i pozměnil. I když jen základní použití, ale neznám moc lidí, co by se zabývalo složitější částí: http://pawno.cz/topic/53521-sscanf2-int-string-enum-pole/

Díky, jestli tedy chápu správně, proč mi nešel příkaz /kick Jmeno Hrače a Zpráva, tak to bylo díky tomu, že jsem tam měl špatný formát? Místo u což je jméno hráče nebo ID, tak jsem tam měl s jako string?

:hallo:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...