[Ajuda] O que eu fiz errado nesse loop?
#1

Esse loop era o seguinte gente>
Dar dinheiro e skills pra todos os COPs por perto, ta funcionando, mas ta repitindo, tipo era pra dar uma vez pra cada COP, se tem 2 cops ta dando 2 vezes pra cada cop

Veja o for, vcs vгo entender
Код:
		for(new i; i < MAX_PLAYERS; i++) {
			if(IsACop(i) && morto[i] == 0 && admstatus[i] != 1) {
				if(IsPlayerInRangeOfPoint(i, 30.0, Pos[0], Pos[1], Pos[2])) {
					GameTextForPlayer(i, "~Y~ARRASTED CRIMINAL", 5000, 1);
					GivePlayerMoneyEx(i, dinheiroARREST[id]);
					COPskills[i] += skillsARREST[id];
					PlayerPlaySound(i, 5204, 0.0, 0.0, 0.0);
					format(string, sizeof(string), "Current COP Skill: %i (DINHEIRO:%i SKILL:%i)", COPskills[playerid], dinheiroARREST[id], skillsARREST[id] );
					SendClientMessage(playerid, COLOR_NEWS, string);
				}
			}
		}
Reply
#2

Pq isso ta repitindo pra cada cop por perto? era pra ser uma vez sу pra cada cop

Tipo se tiver 10 cops os 10 recebem isso 10 vezes, era pra cada um receber uma vez
Reply
#3

Alguйm por favor poderia me ajudar
Reply
#4

Tem algum timer junto?
Reply
#5

Comando inteiro
Код:
CMD:arrest(playerid, params[]) {
	new id, string[128];
	if(sscanf(params,"u", id)) return SendClientMessage(playerid, -1, "Use: /arrest [id]");

	if(id != INVALID_PLAYER_ID)
	{
		if(morto[playerid] == 1) return SendClientMessage(playerid, COLOR_RED, "You can not use this command killed.");
		new Float:Pos[3];
		GetPlayerPos(id, Pos[0], Pos[1], Pos[2]);
		if(!IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) return SendClientMessage(playerid, COLOR_RED, "Vocк nгo estб perto desse jogador.");

		if(preso[id] > 0) return SendClientMessage(playerid, COLOR_RED, "Esse jogador jб foi condenado.");
		if(wanted[id] == 0) return SendClientMessage(playerid, COLOR_RED, "Esse jogador nгo й procurado.");
		if(PlayerCuffed[id] == 0) return SendClientMessage(playerid, COLOR_RED, "This player is not handcuffed! Use: /cuff ID");
		PlayerPlaySound(id, 5206, 0.0, 0.0, 0.0);
		preso[id] = 1;
		if(VIP[id] == 0) { presotime[id] = wanted[id] * 2; }
		else { presotime[id] = wanted[id] * 3; }		
		new autobail = presotime[id] * 20;
		bank[id] -= autobail;

		PlayerCuffed[id] = 0;
		maconha[id] = 0;
		sementes[id] = 0;
		mortotime[id] = 2;

		if(wanted[id] >= 1 && wanted[id] <= 2)	{
			dinheiroARREST[id] = 1000;
			skillsARREST[id] = 0;
		}
		else if(wanted[id] >= 3 && wanted[id] <= 30)	{
			dinheiroARREST[id] = 2000;
			skillsARREST[id] = 1;
		}
		else if(wanted[id] >= 31 && wanted[id] <= 50)	{
			dinheiroARREST[id] = 3000;
			skillsARREST[id] = 2;
		}
		else if(wanted[id] >= 51 && wanted[id] <= 99)	{
			dinheiroARREST[id] = 4000;
			skillsARREST[id] = 2;
		}
		else if(wanted[id] >= 100)	{
			dinheiroARREST[id] = 5000;
			skillsARREST[id] = 3;
		}
		// pra nego n ficar farmando skills
		if(CRIMINALskills[id] > 2) {
			CRIMINALskills[id] -= 2;
			format(string, sizeof(string), "Current Criminal Skill: %i", CRIMINALskills[id] );
			SendClientMessage(id, COLOR_NEWS, string);
		}
		else {
			skillsARREST[id] = 0;
			dinheiroARREST[id] = 0;
		}

		wanted[id] = 0;
		for(new i; i < MAX_PLAYERS; i++) {
			if(IsACop(i) && morto[i] == 0 && admstatus[i] != 1) {
				if(IsPlayerInRangeOfPoint(i, 30.0, Pos[0], Pos[1], Pos[2])) {
					GameTextForPlayer(i, "~Y~ARRASTED CRIMINAL", 5000, 1);
					GivePlayerMoneyEx(i, dinheiroARREST[id]);
					COPskills[i] += skillsARREST[id];
					PlayerPlaySound(i, 5204, 0.0, 0.0, 0.0);
					format(string, sizeof(string), "Current COP Skill: %i (MONEY:+%i SKILL:+%i)", COPskills[playerid], dinheiroARREST[id], skillsARREST[id] );
					SendClientMessage(playerid, COLOR_NEWS, string);
				}
			}
		}
	}
	return 1;
}
Reply
#6

Vocк nгo inicializou a variбvel i.

Tente desta forma:
Код:
for(new i=0; i < MAX_PLAYERS; i++)
Nгo hб um comportamento especнfico (como o compilador vai adivinhar o valor?).
Reply
#7

Quote:
Originally Posted by dxhj
Посмотреть сообщение
Vocк nгo inicializou a variбvel i.

Tente desta forma:
Код:
for(new i=0; i < MAX_PLAYERS; i++)
Nгo hб um comportamento especнfico (como o compilador vai adivinhar o valor?).
Qnd cria uma variavel no pawn ela por padrгo й setada 0

Isso й a msm coisa \/
Код:
		for(new i; i < MAX_PLAYERS; i++) {
		for(new i=0; i < MAX_PLAYERS; i++) {
Reply
#8

:S:S:S
Reply
#9

Vocк estб enviando a mensagem de que o policial recebeu o skill e o dinheiro para o jogador que digitou o comando. Coloque para enviar apenas para o jogador que de fato recebeu o skill.

Vocк tambйm estб exibindo apenas o skill do jogador que digitou o comando.

Ainda recomendo, que por ser um loop para jogadores, verifique se o ID a ser trabalhado estб conectado, usando IsPlayerConnected.
Reply
#10

Quote:
Originally Posted by arakuta
Посмотреть сообщение
Vocк estб enviando a mensagem de que o policial recebeu o skill e o dinheiro para o jogador que digitou o comando. Coloque para enviar apenas para o jogador que de fato recebeu o skill.

Vocк tambйm estб exibindo apenas o skill do jogador que digitou o comando.

Ainda recomendo, que por ser um loop para jogadores, verifique se o ID a ser trabalhado estб conectado, usando IsPlayerConnected.
Nгo entendi o que vc quis dizer, tirando a parte do player connected, pra puxar menos do processador mudei um pouco o comnado, me explica melhor em cima do novo cmd o pq ta dando erro
Код:
CMD:arrest(playerid, params[]) {
	new id, string[128];
	if(sscanf(params,"u", id)) return SendClientMessage(playerid, -1, "Use: /arrest [id]");
	if(id != INVALID_PLAYER_ID) {
		if(morto[playerid] == 1) return SendClientMessage(playerid, COLOR_RED, "You can not use this command killed.");
		new Float:Pos[3];
		GetPlayerPos(id, Pos[0], Pos[1], Pos[2]);
		if(!IsPlayerInRangeOfPoint(playerid, 5.0, Pos[0], Pos[1], Pos[2])) return SendClientMessage(playerid, COLOR_RED, "Vocк nгo estб perto desse jogador.");

		if(preso[id] > 0) return SendClientMessage(playerid, COLOR_RED, "Esse jogador jб foi condenado.");
		if(wanted[id] == 0) return SendClientMessage(playerid, COLOR_RED, "Esse jogador nгo й procurado.");
		if(PlayerCuffed[id] == 0) return SendClientMessage(playerid, COLOR_RED, "This player is not handcuffed! Use: /cuff ID");
		PlayerPlaySound(id, 5206, 0.0, 0.0, 0.0);
		preso[id] = 1;
		if(VIP[id] == 0) { presotime[id] = wanted[id] * 2; }
		else { presotime[id] = wanted[id] * 3; }		
		new autobail = presotime[id] * 20;
		bank[id] -= autobail;

		PlayerCuffed[id] = 0;
		maconha[id] = 0;
		sementes[id] = 0;
		mortotime[id] = 2;

		if(wanted[id] >= 1 && wanted[id] <= 2)	{
			dinheiroARREST[id] = 1000;
			skillsARREST[id] = 0;
		}
		else if(wanted[id] >= 3 && wanted[id] <= 30)	{
			dinheiroARREST[id] = 2000;
			skillsARREST[id] = 1;
		}
		else if(wanted[id] >= 31 && wanted[id] <= 50)	{
			dinheiroARREST[id] = 3000;
			skillsARREST[id] = 2;
		}
		else if(wanted[id] >= 51 && wanted[id] <= 99)	{
			dinheiroARREST[id] = 4000;
			skillsARREST[id] = 2;
		}
		else if(wanted[id] >= 100)	{
			dinheiroARREST[id] = 5000;
			skillsARREST[id] = 3;
		}
		// pra nego n ficar farmando skills
		if(CRIMINALskills[id] > 2) {
			CRIMINALskills[id] -= 2;
			format(string, sizeof(string), "Current Criminal Skill: %i", CRIMINALskills[id] );
			SendClientMessage(id, COLOR_NEWS, string);
		}
		else {
			skillsARREST[id] = 0;
			dinheiroARREST[id] = 0;
		}

		wanted[id] = 0;
		for(new i=0; i < MAX_PLAYERS; i++) {
			if(!IsPlayerConnected(i)) continue;
			if(IsACop(i) && morto[i] == 0 && admstatus[i] != 1) {
				if(IsPlayerInRangeOfPoint(i, 30.0, Pos[0], Pos[1], Pos[2])) {
					GameTextForPlayer(i, "~Y~ARRASTED CRIMINAL", 5000, 1);
					GivePlayerMoneyEx(i, dinheiroARREST[id]);
					COPskills[i] += skillsARREST[id];
					PlayerPlaySound(i, 5204, 0.0, 0.0, 0.0);
					format(string, sizeof(string), "Current COP Skill: %i (MONEY:+%i SKILL:+%i)", COPskills[playerid], dinheiroARREST[id], skillsARREST[id] );
					SendClientMessage(playerid, COLOR_NEWS, string);
				}
			}
		}
	}
	return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)