Problem z sprawdzeniem ostatnich graczy
Andrzejek
21.05.2013
Siemka, mam taki mały problem ze sprawdzeniem graczy np.
public client_disconnect(id)
{
if(wlaczone == 1)
{
Ostatni()
}
}
public Ostatni()
{
pobierz()
if(!ostatni_gracze && zywi == 2)
{
zabawa_hud = false;
ostatni_gracze = true;
}
else if(!ostatni_wiezien && zywi == 1)
{
ostatni_gracze = false;
ostatni_wiezien = true;
}
}
I problem polega na tym gdy jest 3 żywych graczy z TT, wyrzucę jednego gracza z TT z tych 3, to nie sprawdza tego if(!ostatni_gracze && zywi == 2) a gdy wyrzuce jeszcze jednego to sprwdza else if(!ostatni_wiezien && zywi == 1) możecie mi wyjaśnij dlaczego tak to działa?
GT Team 21.05.2013
zabawa_hud = false; ostatni_gracze = true;daj
zabawa_hud = false; ostatni_gracze = true; ostatni_wiezien = false
Andrzejek
21.05.2013
pobierz() to jest stock który pobiera wartość graczy, po co ostatni_wiezien = false jak ustawiłem początkową wartość na false
stock pobierz() { zywi = active_players(CS_TEAM_T, true); } stock active_players(CsTeams:team, bool:aliveonly = false) { static players[32], inum, i, active, CsTeams:playerteam (aliveonly) ? get_players(players, inum, "ah") : get_players(players, inum, "h") active = 0 for (i = 0; i < inum; ++i) { playerteam = cs_get_user_team(players[i]) if(playerteam == team) active++ } return active }
GT Team 21.05.2013
stock pobierz() { zywi = active_players(CS_TEAM_T, true); return zywi; } stock active_players(CsTeams:team, bool:aliveonly = false) { static players[32], inum, i, active, CsTeams:playerteam (aliveonly) ? get_players(players, inum, "ah") : get_players(players, inum, "h") active = 0 for (i = 0; i < inum; ++i) { playerteam = cs_get_user_team(players[i]) if(playerteam == team) active++ } return active } public Ostatni() { new alivess alivess = pobierz() if(!ostatni_gracze && alivess == 2) { zabawa_hud = false; ostatni_gracze = true; return; } if(!ostatni_wiezien && alivess == 1) { ostatni_gracze = false; ostatni_wiezien = true; return; } }
Andrzejek
21.05.2013
stock pobierz() { zywi = active_players(CS_TEAM_T, true); return zywi; } stock active_players(CsTeams:team, bool:aliveonly = false) { static players[32], inum, i, active, CsTeams:playerteam (aliveonly) ? get_players(players, inum, "ah") : get_players(players, inum, "h") active = 0 for (i = 0; i < inum; ++i) { playerteam = cs_get_user_team(players[i]) if(playerteam == team) active++ } return active } public Ostatni() { new alivess alivess = pobierz() if(!ostatni_gracze && alivess == 2) { zabawa_hud = false; ostatni_gracze = true; return; } if(!ostatni_wiezien && alivess == 1) { ostatni_gracze = false; ostatni_wiezien = true; return; } }
I gdzie tu różnica kodu? Po co nowa zmienna? Wytłumacz swój sposób myślenia
Po ponownym sprawdzeniu działania, działa to tak że gdy rozłączy się 1 gracz z 3 graczy to nic się nie dzieje, gdy rozłączę kolejnego gracza to włącza się if(!ostatni_gracze && alivess == 2) o co z tym chodzi
GT Team 21.05.2013
I gdzie tu różnica kodu? Po co nowa zmienna? Wytłumacz swój sposób myśleniaPo to, by zwracalo i nie potrzebnie tworzylo nową zmienną, mozna byloby to lepiej. Napisz jaki efekt chcesz uzyskac, bo lepiej jest napisac nowy kod.
Andrzejek
22.05.2013
Gdy gracza żyjącego z TT rozłącz z serwera to sprawdza czy jest 2 lub 1 żywych graczy
GT Team 22.05.2013
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "author" public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) // Add your code here... } public client_disconnect(id) { Check() } public Check() { new alive = 0 for(new i; i <= get_maxplayers(); i++) { if(!is_user_connected(i) || !is_user_alive(i) || is_user_hltv(i) || get_user_team(i) != 1) continue if(get_user_team(i) == 1) alive++ } if(alive == 1) { //kod } if(alive == 2) { //kod } }zmienna alive to liczba zyjacych tt
Andrzejek
22.05.2013
Nie działa, dzieje się tak: zostaje 2 żywych nic się nie dzieje, zostaje 1 żywy włącza się pierwszy if
Pan Marian 22.05.2013
Spróbuj tak samo, tylko najpierw sprawdź, czy jest dwóch graczy, a dopiero potem, czy jest ostatni, nie jestem pewien, no ale na chłopski rozum, jak będzie 1 ostatni, to nie sprawdzi potem czy jest dwóch ostatnich, nie wiem, czy ewentualnie by to nie zadziałało, jakby przed drugim ifem dodać else, sprawdź.
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "author" public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) // Add your code here... } public client_disconnect(id) { Check() } public Check() { new alive = 0 for(new i; i <= get_maxplayers(); i++) { if(!is_user_connected(i) || !is_user_alive(i) || is_user_hltv(i) || get_user_team(i) != 1) continue if(get_user_team(i) == 1) alive++ } if(alive == 2) { //kod } if(alive == 1) { //kod } }
Użytkownik Pan Marian edytował ten post 22.05.2013 13:49
Andrzejek
22.05.2013
Nadal to samo się dzieje, zostanie 2 nic się nie dzieje, zostanie 1 włącza się if od 2 graczy. Ale to się tylko dzieje z rozłączeniem gracza, a gdy ktoś zginie jest OKEJ
GT Team 22.05.2013
public client_disconnect(id) { Check() }daj
public sprawdz() { Check() }i w plugin_init na koncu
set_task( 1.0, "sprawdz", _, _, _, "b" )
sebul
22.05.2013
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL