←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Kod na sprawdzenie czy gracz "strzelił...

Zablokowany

  • +
  • -
Rivit - zdjęcie Rivit 14.04.2014

Witam.

Napisałem takie coś:

public EventRoundEnd()
{
	if(bZapis)
	{
		for(new i = 1; i <= MAX_PLAYERS; i++)
		{
			new team = get_user_team(i), ile_przeciwnikow;
			
			switch(team)
			{
				case 1: ile_przeciwnikow = get_teamplayersnum(2)
                                case 2: ile_przeciwnikow = get_teamplayersnum(1)
                        }
			
			if(fragiRunda[i] >= ile_przeciwnikow && ile_przeciwnikow > 2)
			{
				ace_gracza[i]++
                                new name[33];
				get_user_name(i, name, 32);
				client_print(0, print_chat, "%s wykonal ACE!!!", name);
                        }
			
			fragiRunda[i] = 0;
		}
	}
}

stock get_teamplayersnum(team = -1)
{
	new playerCnt, i;
	for(i = 1; i <= MAX_PLAYERS; i++)
	{
		if(!is_user_connected(i)) continue;
		if(team > -1 && get_user_team(i) != team) continue;
		
		++playerCnt;
	}
	
	return playerCnt;
}

Jednak on coś szwankuje, bo mimo zabicia wszystkich z przeciwnej drużyny nie pojawia się info, ale czasem działa.

Co może być przyczyną?

Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 14.04.2014

Po 1 w EventRoundEnd w pętli nie sprawdzasz czy gracz żyje/jest połączony co spowoduje że kiedy na serwerze jest np. 20 osób to operacja będzie wywoływana na 32 identyfikatorach ( 12 pustych nieprawdziwych ) co doprowadzi do błędu.

 

Ja sprawdzałbym w DeathMsg ile osób żyje, jeżeli dwie z przeciwnych drużyn to włącza zmienną bool odpowiedzialną za to czy wyczuwamy/oczekujemy na Ace. Oczywiście wszystko w DeathMsg. 

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 14.04.2014

Teraz mam takie coś:

Spoiler

 

Czy błąd może być w stocku? (++playerCnt zamiast playerCnt++)

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 22.04.2014

Czy błąd może być w stocku? (++playerCnt zamiast playerCnt++)

Nie, poczytaj sobie o post i pre inkrementacji.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 23.04.2014

Dobra.

 

ZAMKNAC

Odpowiedz
Zablokowany