←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem z sprawdzeniem ostatnich graczy

Zablokowany

  • +
  • -
Andrzejek - zdjęcie 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?

 

Odpowiedz

GT Team - zdjęcie GT Team 21.05.2013

pokaz funkcje pobierz() i do
zabawa_hud = false;
ostatni_gracze = true;
daj
zabawa_hud = false;
ostatni_gracze = true;
ostatni_wiezien = false
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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
}

 

Odpowiedz

GT Team - zdjęcie 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;
    }
}
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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;
    }
}

 

:facepalm:

 

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 :D

 

Odpowiedz

GT Team - zdjęcie GT Team 21.05.2013

I gdzie tu różnica kodu? Po co nowa zmienna? Wytłumacz swój sposób myślenia
Po to, by zwracalo i nie potrzebnie tworzylo nową zmienną, mozna byloby to lepiej. Napisz jaki efekt chcesz uzyskac, bo lepiej jest napisac nowy kod.
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 22.05.2013

Gdy gracza żyjącego z TT rozłącz z serwera to sprawdza czy jest 2 lub 1 żywych graczy

Odpowiedz

GT Team - zdjęcie 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
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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

Odpowiedz

Pan Marian - zdjęcie 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
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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

Odpowiedz

GT Team - zdjęcie GT Team 22.05.2013

zamiast
public client_disconnect(id)
{
    Check()
}
daj
public sprawdz()
{
    Check()
}
i w plugin_init na koncu
set_task( 1.0, "sprawdz", _, _, _, "b" )
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 22.05.2013

Można zamknąć, po prostu zastosowałem tego sposobu, sprawdzania :)

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 22.05.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Temat zamknięty na prośbę użytkownika.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany