[Ajuda] Fazer sistema de ban por dias
#1

Alguйm me ajuda a fazer meu cmd de banir por dias? Nгo sei como fazer, olha como eu to fazendo...

Код:
new banned[MAX_PLAYERS], leftBANdia[MAX_PLAYERS], leftBANmes[MAX_PLAYERS], leftBANano[MAX_PLAYERS];
Код:
	CMD:ban(playerid, params[]) {
		if(admin[playerid] < 3) return 0;
		new id, days;
		new string[80], motivo[50];
		if(sscanf(params,"uis", id, days, motivo)) {
			SendClientMessage(playerid, -1, "Use: /ban [id] [days] [motivo]");
			return 1;
		}
		
		new Year, Month, Day;
		getdate(Year, Month, Day);
		leftBANdia[playerid] = Day;
		leftBANmes[playerid] = Month;
		leftBANano[playerid] = Year;
		
		
		
		Ban(id);
		format(string, sizeof(string), "AdmCmd: %s foi banido pelo admin %s. Razгo: %s.", PlayerName(id), PlayerName(playerid), motivo );
		SendClientMessageToAll(COLOR_LIGHTRED, string);
		return 1;
	}
public OnPlayerConnect(playerid)
Код:
	// BANIDO?
	if(banned[playerid] >= 1) {
		new Year, Month, Day;
		getdate(Year, Month, Day);
		if(Year != startVIPano[playerid]) {
			banned[playerid] = 0;
			leftBANdia[playerid] = 0;
			leftBANmes[playerid] = 0;
			leftBANano[playerid] = 0;
		}
		else if(Year == startVIPano[playerid] && Month > startVIPmes[playerid] && Day >=  startVIPdia[playerid])
		{
			banned[playerid] = 0;
			leftBANdia[playerid] = 0;
			leftBANmes[playerid] = 0;
			leftBANano[playerid] = 0;
		}
		else {
			SendClientMessage(playerid, COLOR_LIGHTRED, "Vocк estб banido e seu BAN sу sai %i, %i, %i");
			Kick(playerid);
		}
	}
Reply
#2

Ao invйs de salvar dia, mкs e ano separadamente, salve a timestamp em que o ban deve expirar.

PHP код:
expirar gettime() + (dias 86400); 
E na hora de verificar:
PHP код:
if(gettime() < expirar) {
    
// ainda banido
}
else {
    
// banimento expirou

Reply
#3

Quote:
Originally Posted by zPain
Посмотреть сообщение
Ao invйs de salvar dia, mкs e ano separadamente, salve a timestamp em que o ban deve expirar.

PHP код:
expirar gettime() + (dias 86400); 
E na hora de verificar:
PHP код:
if(gettime() < expirar) {
    
// ainda banido
}
else {
    
// banimento expirou

Putz bem mais simples!!! Obrigadгo!!! +rep

E pra mandar na msg qnt tempo falta?

Код:
	// BANIDO?
	if(banned[playerid] >= 1) {
		if(gettime() < expirarban[playerid]) {
			SendClientMessage(playerid, COLOR_LIGHTRED, "Essa conta esґta banida e o banimento dela expira em: ...");
			Kick(playerid);
		}
		else {
			banned[playerid] = 0;
		}
	}
Reply
#4

Quote:
Originally Posted by gmstrikker
Посмотреть сообщение
Putz bem mais simples!!! Obrigadгo!!! +rep

E pra mandar na msg qnt tempo falta?

Код:
	// BANIDO?
	if(banned[playerid] >= 1) {
		if(gettime() < expirarban[playerid]) {
			SendClientMessage(playerid, COLOR_LIGHTRED, "Essa conta esґta banida e o banimento dela expira em: ...");
			Kick(playerid);
		}
		else {
			banned[playerid] = 0;
		}
	}
Aн depende de como й esse "tempo", se for em horas basta um calculo matemбtico bбsico, caso queira mostrar a data e hora vocк vai precisar de um conversor de timestamp, recomendo usar CTime plugin nesse caso.
Reply
#5

Conforme dito acima, vocк pode usar o CTime pra informar a data em que o registro expira.

Para informar quantos dias faltam, pode fazer o seguinte.

PHP код:
new Float:days = ((expirarban[playerid] - gettime()) / 86400);
format(messagesizeof message"Faltam %.2f dias."days);
SendClientMessage(playerid, -1message); 
Reply
#6

Eu acho que ta funcionando agora, mas pq nenhuma MSG ta indo? Sу aparece
Server closed connection, mas antes era pra aparecer msgs, se liga \/

Parte
Код:
		new stringdialog[256];
		format(stringdialog,sizeof(stringdialog),"AdmCmd: %s foi banido pelo admin %s. Razгo: %s.", PlayerName(id), PlayerName(playerid), motivo );
		ShowPlayerDialog(id,10000,DIALOG_STYLE_MSGBOX,"BANIDO:",stringdialog,"Ok","");
		
		// nao pode banir um adm porra
		banned[id] = 1;
		expirarban[id] = gettime() + (days * 86400);
		format(string, sizeof(string), "AdmCmd: %s foi banido pelo admin %s. Razгo: %s.", PlayerName(id), PlayerName(playerid), motivo );
		SendClientMessageToAll(COLOR_LIGHTRED, string);
Inteiro
Код:
	CMD:ban(playerid, params[]) {
		if(admin[playerid] < 3) return 0;
		new id, days;
		new string[80], motivo[50];
		if(sscanf(params,"uis", id, days, motivo)) {
			SendClientMessage(playerid, -1, "Use: /ban [id] [days] [motivo]");
			return 1;
		}
		new stringdialog[256];
		format(stringdialog,sizeof(stringdialog),"AdmCmd: %s foi banido pelo admin %s. Razгo: %s.", PlayerName(id), PlayerName(playerid), motivo );
		ShowPlayerDialog(id,10000,DIALOG_STYLE_MSGBOX,"BANIDO:",stringdialog,"Ok","");
		
		// nao pode banir um adm porra
		banned[id] = 1;
		expirarban[id] = gettime() + (days * 86400);
		format(string, sizeof(string), "AdmCmd: %s foi banido pelo admin %s. Razгo: %s.", PlayerName(id), PlayerName(playerid), motivo );
		SendClientMessageToAll(COLOR_LIGHTRED, string);
		
		OnPlayerSave(playerid);
		Kick(id);
		//Ban(id);
		banned[id] = 0; // pro proximo q logar nгo entrar com a variavel banido = 1
		return 1;
	}
Reply
#7

Pq as msgs nгo estгo aparecendo gente?
Reply
#8

Quote:
Originally Posted by gmstrikker
Посмотреть сообщение
Pq as msgs nгo estгo aparecendo gente?
http://forum.sa-mp.com/showpost.php?...postcount=2486
Reply
#9

Quote:
Originally Posted by MultiKill
Посмотреть сообщение
Obrigado! Arrumei! Isso!

Quote:
Originally Posted by zPain
Посмотреть сообщение
Conforme dito acima, vocк pode usar o CTime pra informar a data em que o registro expira.

Para informar quantos dias faltam, pode fazer o seguinte.

PHP код:
new Float:days = ((expirarban[playerid] - gettime()) / 86400);
format(messagesizeof message"Faltam %.2f dias."days);
SendClientMessage(playerid, -1message); 
Ta dando bosta
Essa conta estб banida e o banimento dela expira em: 0.00 dias.
Reply
#10

Porque a divisгo й arredondada pra baixo, 1 segundo apуs o banimento do jogador seu sistema vai dizer que falta 1 dia.

Vocк pode obter o resto da divisгo e apresentar o restante em horas, que melhora a precisгo.

PHP код:
new bandays = (unixfinal unixinicial) / dias// dias
new horas = ((unixfinal unixinicial) % dias) /  3600// horas que sobraram 
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)