Kod na sprawdzenie czy gracz "strzelił...
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ą?
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.
Rivit
14.04.2014
Teraz mam takie coś:
Spoiler
Czy błąd może być w stocku? (++playerCnt zamiast playerCnt++)
sebul
22.04.2014
Nie, poczytaj sobie o post i pre inkrementacji.Czy błąd może być w stocku? (++playerCnt zamiast playerCnt++)