Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Kod na sprawdzenie czy gracz "strzelił" ACE'a nie działa


  • Zamknięty Temat jest zamknięty
4 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.04.2014 16:15

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ą?


  • +
  • -
  • 0

#2 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 14.04.2014 17:37

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. 


  • +
  • -
  • 0

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 14.04.2014 18:33

Teraz mam takie coś:

Spoiler

 

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


  • +
  • -
  • 0

#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 22.04.2014 15:28

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

Nie, poczytaj sobie o post i pre inkrementacji.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.04.2014 17:23

Dobra.

 

ZAMKNAC


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych