Jump to content
  • 0

pomoc ID


arci224

Dotaz

Zdravím potřeboval bych pomoci mam kód, který by dle mého názoru měl fungovat ale nefunguje, problém je v tom že pokuď jdu na server poté vykonám příkaz tak i tak mi to napíše že to ID neexistuje, když tam nemam IsPlayerConnected či jak to je, tak mi to vždy dá ID 0

a vyhazuje to warning

warning 203: symbol is never used: "id"

CMD:ban(playerid, params[])
{
	if(adminlevel(playerid) < 4) return noadmin(playerid);
	new string[1028], mezistring[128], message[128], messagea[128], reason[128], id; // Warning řádek
	if(sscanf(params, "us", id, reason)) return SendClientMessage(playerid, COLOR_RED, "Použij: /ban [PlayerID] [Důvod]");
	if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOR_GREY, "[!] Uživatel není připojen.");
	format(messagea, sizeof(messagea), "uživately %s z důvodu %s", GetName(id), reason);
	format(message, sizeof(message), "%s (%d)%s udělil Permanentní ban %s.", GetRank(playerid), playerid, GetName(playerid), messagea);
	SendClientMessageToAll(COLOR_RED, message);
	format(string, sizeof(string), "Byl ti udělen ban\n");
	format(mezistring, sizeof(mezistring), "Na jméno %s\n", GetName(id));
	strcat(string, mezistring);
	format(mezistring, sizeof(mezistring), "Od %s %s\n",GetRank(playerid), GetName(playerid));
	strcat(string, mezistring);
	format(mezistring, sizeof(mezistring), "Z důvodu %s\n", reason);
	strcat(string, mezistring);
	format(mezistring, sizeof(mezistring), "Na vždy\n", GetName(id));
	strcat(string, mezistring);
	ShowPlayerDialog(id, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Informace o zabanování", string, "Odejít", "");

	return 1;
}
Edited by arci224
Link to comment
Share on other sites

7 odpovědí na tuto otázku

Recommended Posts

  • 0

if(sscanf(params, "iu", id, reason))

u je pro jména a id hráčů, i je pro integer a čísla.

 

Ty potřebuješ jméno/id hráče a důvod(string): "us[128]" nebo "rs[128]"

 

 

~> Taky v tom máš totální bordel. Tuta stringů, zbytečného formátování... Tady máš můj příklad úpravy(jestli tam budou chyby, oprav si to, alespoň něco se naučíš).

 

 

CMD:ban(playerid, params[]) {
	if(adminlevel(playerid) < 4) return noadmin(playerid);
	
	new 
		id,
		reason[130 + 1];
	if(sscanf(params, "rs[130]", id, reason)) return SendClientMessage(playerid, COLOR_RED, "Použij: /ban [PlayerID] [Důvod]");
	if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOR_GREY, "[!] Uživatel není připojen.");
	new 
		String[1024];
	format(String, sizeof(String), "uživately %s z důvodu %s", GetName(id), reason); 
	SendClientMessageToAll(COLOR_RED, String);
	format(String, sizeof(String), "%s (%d)%s udělil Permanentní ban %s.", GetRank(playerid), playerid, GetName(playerid), messagea); 
	SendClientMessageToAll(COLOR_RED, String);
	format(mezistring, sizeof(mezistring), "Byl ti udělen ban\nNa jméno %s\nOd %s %s\nZ důvodu %s\nNa vždy", GetName(id), GetRank(playerid), GetName(playerid), reason);
	ShowPlayerDialog(id, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Informace o zabanování", String, "Odejít", "");
	return 1;
}

 

Link to comment
Share on other sites

  • 0

u je pro jména a id hráčů, i je pro integer a čísla.

 

Ty potřebuješ jméno/id hráče a důvod(string): "us[128]"

 

~> Taky v tom máš totální bordel. Tuta stringů, zbytečného formátování... Tady máš můj příklad úpravy(jestli tam budou chyby, oprav si to, alespoň něco se naučíš).

 

 

CMD:ban(playerid, params[]) {
	if(adminlevel(playerid) < 4) return noadmin(playerid);
	
	new 
		id,
		reason[130 + 1];
	if(sscanf(params, "us[130]", id, reason)) return SendClientMessage(playerid, COLOR_RED, "Použij: /ban [PlayerID] [Důvod]");
	if(!IsPlayerConnected(id)) return SendClientMessage(playerid, COLOR_GREY, "[!] Uživatel není připojen.");
	new 
		String[1024];
	format(String, sizeof(String), "uživately %s z důvodu %s", GetName(id), reason); 
	SendClientMessageToAll(COLOR_RED, String);
	format(String, sizeof(String), "%s (%d)%s udělil Permanentní ban %s.", GetRank(playerid), playerid, GetName(playerid), messagea); 
	SendClientMessageToAll(COLOR_RED, String);
	format(mezistring, sizeof(mezistring), "Byl ti udělen ban\nNa jméno %s\nOd %s %s\nZ důvodu %s\nNa vždy", GetName(id), GetRank(playerid), GetName(playerid), reason);
	ShowPlayerDialog(id, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Informace o zabanování", String, "Odejít", "");
	return 1;
}

 

Stále tam je problém, zřejmě tam je problém z ID, ale nevím jaký jelikož ten warning to tam píše.

Link to comment
Share on other sites

  • 0

pokud vím u je text s mezerou ne ?

Ahoj

Nie, je to parameter U je pre ID Hráča a Bota. 

Najlepšia a podla mňa najoptimálnejšia alternatíva je parameter R ktorý je čisto pre hráča. 

Edited by Matus.Cernava
Link to comment
Share on other sites

  • 0

Stále tam je problém, zřejmě tam je problém z ID, ale nevím jaký jelikož ten warning to tam píše.

Ve hře jsem to nezkoušel, ale compilace proběhne v pohodě. S tím varováním je chyba u tebe.

 

pokud vím u je text s mezerou ne ?

~> specifikátor u u sscanf má 2 funkce. V případě, že tam vepíšeš číslo, tak projede všechny na serveru, jestliže je nějaký hráč(bot) s tím id připojený a pokračuje v podmínce. V případě, že tam napíšeš string, například Ski, tak začne cyklus na všechny online hráče(boty), jestliže se tenhle string, či alespoň část neshoduje s nějakým z jména hráčů(botů) na serveru. Teoreticky řečeno, máš pravdu, je to string s mezerou, ale může být pouze jednoslovný a proběhne podmínka v pořádku, pokud nalezne nějakého hráče(bota) s části/celým tím stringem(jménem), takže do důvodu toho moc nevypíšeš. Pokud chceš ale obyč jednoslovný string stačí před ten specifikátor přidat mezeru(aka "s[10] "), a vezme tak dlouhý řetězec, dokud v něm nenalezne mezeru.(když tak na sscanf2 jsem tu dělal návod).

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...