Jump to content

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

Posted Image Posted Image

Guest Message by DevFuse
 

Photo

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


  • This topic is locked This topic is locked
4 replies to this topic

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1,319
Godlike

  • Postów:4,381
Offline

Posted 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

Posted 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,381
Offline

Posted 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

Posted 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,381
Offline

Posted 23.04.2014 17:23

Dobra.

 

ZAMKNAC


  • +
  • -
  • 0




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users