Jump to content
  • 0

pomoc Unban


IchNar

Dotaz

Popis problému:

Mám problém v tom,že keď napíšem hráčove meno neodstráni tú zložku v scriptlfiles + je to,keď napíšem meno čo nemá ban tak to nič nespraví.

 

Chyby/varování kompilátoru a při běhu:

 

 

Kód:

 

//ten prikaz[code=:0]
CMD:unban(playerid,params[])
{
	new UnbanName[MAX_PLAYER_NAME],dovod[128],string[128],cesta[16+15];
	if(AdminLevel[playerid] < 3)return SendClientMessage(playerid,COLOR_RED,"[!] {FFFFFF}Nemáš oprávnenie na tento príkaz");
	if(sscanf(params,"s[MAX_PLAYER_NAME],s[128]",UnbanName,dovod))return SendClientMessage(playerid,COLOR_RED,"[!] {FFFFFF}Musíš zadať /unban [MenoHráča] [Dôvod]");
	format(cesta,sizeof(cesta),"Banneds/%s.ini",PlayerIP(playerid));
	format(string,sizeof(string),"%s{FF3300}%s odbanoval hráča %s [Dôvod: %s]",GetPlayerAdminTitle(playerid),Meno(playerid),UnbanName,dovod);
          if(!strcmp(UnbanName,DOF2_GetString(cesta,"MenoHraca"),false))
	      {
		     DOF2_RemoveFile(cesta);
		     SendClientMessageToAll(COLOR_RED,string);
	      }
	      else
	      {
             SendClientMessage(playerid,COLOR_RED,"[!] {FFFFFF}Zlé meno");
	      }
	return 1;
}
[/code]

 

 

 

Dodatečné poznámky:

--

Link to comment
Share on other sites

20 odpovědí na tuto otázku

Recommended Posts

  • 0
s[MAX_PLAYER_NAME]

Toto bohuzial nefunguje. Pouzi: s[24]. Taktiez by si mal pouzit new UnbanName[MAX_PLAYER_NAME+1] a s[25], inak ti najdlhsie meno nebude fungovat. String potrebuje +1 znak pre NULL terminator.

 

Niekde som snaď čítal, že do SA-MPu sa aj tak nepripojíš s 24 znakovým Nickom, 

 

Ako máš uložené niekoho v tom Banneds/%s.txt ?? 

A skús si poslať  do message akú hodno tu ti vráti PlayerIP(playerid))

a možno to zbadáš.

Link to comment
Share on other sites

  • 0

Este tam medzi tym nema byt ciarka.

 

"s[25]s[128]"


 

Niekde som snaď čítal, že do SA-MPu sa aj tak nepripojíš s 24 znakovým Nickom, 

To je pravda, na pripojenie je limit 20 znakov, ale na SetPlayerName je 24. A ak niekedy v buducnosti spravi [AFK] pred meno alebo nieco a bude mu to blbnut, tak sa mu to uz bude tazko vsade hladat.
Link to comment
Share on other sites

  • 0

Stále mi to nefunguje dám /unban a meno v zložke a nič sa nedeje...Zložku banneds mám tak...,no pošlem vám screenshoty.

https://ctrlv.cz/BUOz

https://ctrlv.cz/ZNe9

https://ctrlv.cz/vSAe

A ja to chcem spraviť tak,že keď admin napíše /unban meno tak,že to odbanuje toho,kto má to meno..

AKo to mám spraviť?

Edited by IchNar
Link to comment
Share on other sites

  • 0
  • Globální moderátor

if(sscanf(params,"s[MAX_PLAYER_NAME],s[128]",UnbanName,dovod))return SendClientMessage(playerid,COLOR_RED,"[!] {FFFFFF}Musíš zadať /unban [MenoHráča] [Dôvod]");

format(cesta,sizeof(cesta),"Banneds/%s.ini",PlayerIP(playerid));

 

 

 

Úplně asi nechápu čeho tu chceš docílit. Proč máš soubory podle IPček adminů? No každopádně ti to nefunguje, protože se soubor jmenuje 1270.0.1 (správně 127.0.0.1)

Link to comment
Share on other sites

  • 0
  • Administrátor

kdyz banujes preved jmeno na male znaky a pak to same udelej u unbanu. Vyhnes se chyba stylu Ewwe,ewwe,eWwe atd.

 

Jméno stačí 21 znaků protože samp client tě nepustí s delším ( 24 je tam nadefinováno z důvodu fce SetPlayerName ) 

 

Printe ? Jsi si jistý že v paramsech sscanfu fungují constanty ?

 

BTW soubor se jmenuje podle Ip hráče a ty porovnáváš se jménem. BTW ta ip je uložená nějak  nemocně...

Link to comment
Share on other sites

  • 0

A čo ti vlastne akú hodnotu vracia, banuješ ích na IP alebo na MENO ? lebo z PlayerIP ti asi vracia hodnotu IP hráča,
Ja by som to banoval na meno, a ak je toto myslené ako IPBan tak použi miesto /unban Nick Dovod... /unban IP Dovod
A skúšaš to na localhoste alebo ?

PlayerIP(playerid)

a neviem či ti funguje toto:
 

if(sscanf(params,"s[MAX_PLAYER_NAME],s[128]",UnbanName,dovod))

ale ja som to použival takto:
 

if(sscanf(params,"ss",UnbanName,dovod))
Edited by XpresS
Link to comment
Share on other sites

  • 0

Hej banujem to na IPčku,ale ja som to chcel tak,že vy to kontrolovalo každú zložku v Banneds a ak v tej zložke je meno,to čo napíše admin do príkazu /unban Meno tak mu to tu zložku vymaže,dostane unban.

Link to comment
Share on other sites

  • 0

1. Vždycky kontroluj všechno, kde nepotřebuješ nic jiného kromě playerid, co nejdříve. Ať zbytečně nedeklaruješ proměnné.

 

	if (AdminLevel[playerid] < 3) return SendClientMessage(playerid, COLOR_RED, "[!] {FFFFFF}Nemáš oprávnenie na tento príkaz");
	new 
		Nick[MAX_PLAYER_NAME + 1],
		Reason[120 + 1],
		String[144 + 1],
		Cesta[34 + 1];
2. sscanf2 a 2 řetězce vedle sebe nejde moc do sebe. Nejlepší je nějakým způsobem rozeznat. Buď číslem mezi nimi a nebo mezerou(to už tu myslím někdo psal):

	if (sscanf(params, "s[21] s[121]", Nick, Reason)) return SendClientMessage(playerid, COLOR_RED, "[!] {FFFFFF}Musíš zadať /unban [MenoHráča] [Dôvod]");
3. Pak samozřejmě musíš vědět, jestli ten soubor, co zadává, tak vůbec existuje(prozatím řekněme, že hledáš soubory podle nicku, víc později):

	format(Cesta, sizeof Cesta, "Banneds/%s.ini", Nick);
	if (!DOF2_FileExists(Cesta)) return SendClientMessage(playerid,COLOR_RED,"[!] {FFFFFF}Zlé meno");
4. tady děláš chybu:

format(cesta,sizeof(cesta),"Banneds/%s.ini",PlayerIP(playerid));
Protože, pokud hádám správně, tak ta fce vrací ip daného hráče a tahle ti bude neustále vracet ip admina, co zadal ten příkaz, nikoliv toho, co potřebuješ.

Proto máš několik možností. Buď se smíříš s nejlepší možností a to ukládat soubory podle jména a pak je jednodušeji hledat.

Nebo každého hráče co banuješ, tak ještě jeho ip ukládat do speciálního souboru, kde by key[] byla jeho ip a value[] jeho nick, něco jako:

[i]12.33.44.23=Franta444
44.33.22.12=Pepe123[/i]
A pak porovnáš, a se zjištěnými údaji hledáš daný soubor, který si pojmenuješ ipčkou, ale není to moc dobrý nápad, protože jak známe, hráči můžou některé bany obejít změnou ip a nechat si stejný nick.

 

5. Pak už je to snadné. Vymažeš soubor a odešleš zprávu:

 

	DOF2_RemoveFile(Cesta);
	format(String, sizeof(String), "%s{FF3300}%s odbanoval hráča %s [Dôvod: %s]", GetPlayerAdminTitle(playerid), Meno(playerid), Nick, Reason);
	SendClientMessageToAll(COLOR_RED, String);
Edited by Ernst Remer
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...