←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Sprawdzenie czy jakiś gracz z ADMIN_LEVEL_...

  • +
  • -
Jadek - zdjęcie Jadek 29.05.2014

Witam. Jak mam sprawdzić czy jakiś gracz z ADMIN_LEVEL_G jest na serwerze? Bo chodzi o to, że jeśli jest jakikolwiek gracz z tą flagą to wykonuję 1.IF a jeśli nie ma nikogo z taką flagą to 2.IF.

Dziękuję z góry.

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 29.05.2014

new zmienna;
for(new i = 0;i<32;i++)
{
if(get_user_flags(i) & ADMIN_LEVEL_G)
++zmienna;
 
if(!zmienna)
{
////
}
else
{
///
}
}
Odpowiedz

  • +
  • -
Jadek - zdjęcie Jadek 29.05.2014

new zmienna;
for(new i = 0;i<32;i++)
{
if(get_user_flags(i) & ADMIN_LEVEL_G)
++zmienna;
 
if(!zmienna)
{
////
}
else
{
///
}
}

No dobrze, ale z tego co widzę to nie będzie zerować np gdy dany gracz wyjdzie. Racja?

Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 29.05.2014

To ponownie uruchamiasz funkcję i liczy ci od nowa.

Odpowiedz

  • +
  • -
Jadek - zdjęcie Jadek 29.05.2014

To ponownie uruchamiasz funkcję i liczy ci od nowa.

Masz na myśli for?

Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 29.05.2014

Masz taki kod:

public funkcja2()
{
	new zmienna = 0; // tworzysz zmienna, gdzie bedzie zapisywana liczba adminow
	
	for(new i=1;i<33;i++) // liczysz adminow
	{
		if(get_user_flags(i) & ADMIN_LEVEL_G)
		++zmienna;
	}
	
	if(!zmienna) // nie ma adminow
	{
		// co ma sie stac jesli nie ma adminow
	}
	else // sa admini
	{
		// co ma sie stac jesi sa admini
	}
}

I za każdym razem, kiedy chcesz wykonać coś, jeśli są admini lub ich nie ma to musisz uruchomić tę funkcję, więc zawsze ci liczy tych adminów od nowa.

Możesz tez liczyć inaczej, np. w client_authorized i client_disconnect, ale wtedy będzie to wyglądało inaczej.

Odpowiedz

  • +
  • -
Jadek - zdjęcie Jadek 29.05.2014

Masz taki kod:

public funkcja2()
{
	new zmienna = 0; // tworzysz zmienna, gdzie bedzie zapisywana liczba adminow
	
	for(new i=1;i<33;i++) // liczysz adminow
	{
		if(get_user_flags(i) & ADMIN_LEVEL_G)
		++zmienna;
	}
	
	if(!zmienna) // nie ma adminow
	{
		// co ma sie stac jesli nie ma adminow
	}
	else // sa admini
	{
		// co ma sie stac jesi sa admini
	}
}

I za każdym razem, kiedy chcesz wykonać coś, jeśli są admini lub ich nie ma to musisz uruchomić tę funkcję, więc zawsze ci liczy tych adminów od nowa.

Możesz tez liczyć inaczej, np. w client_authorized i client_disconnect, ale wtedy będzie to wyglądało inaczej.

Niestety to co podałeś nie działa. Nie wykonuje ani jednego warunku.

Ogólnie u mnie wygląda to tak:

new users_with_flag = 0;
        for(new i = 0;i<32;i++)
        {
            if(get_user_flags(i) & ADMIN_LEVEL_G)
            ++users_with_flag;
        }
 
        if(!users_with_flag)
        {    
            if(!dane_gracza[id] && ((get_user_time(id,1)+CzasGry[id]) < pCvarTiem) && !is_user_admin(id))
            {
                ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak]^x01 Masz za malo czasu przegrane na serwerze by grac w CT! Potrzebujesz %d minut.", pCvarTiem/60);
                return JAIL_FORCE_TT;
            }
            else
            {
                ColorChat(id, GREEN, "Dolaczyles do straznikow, poniewaz nie ma innego straznika z flaga");
                return JAIL_CONTINUE;
            }
        }
        else
        {
            if(get_user_flags(id) & ADMIN_LEVEL_G)
            {
                ColorChat(id, GREEN, "Dolaczyles do straznikow.");
                return JAIL_CONTINUE;
            }
            else
            {
                ColorChat(id, GREEN, "Aby dolaczyc do straznikow zloz podanie na forum(free) lub wpisz komende /sklepsms");
                return JAIL_FORCE_TT;
            }
        }

Użytkownik Jadek edytował ten post 29.05.2014 19:45
Odpowiedz

  • +
  • -
szelbi - zdjęcie szelbi 29.05.2014

Spójrz na pętlę w moim kodzie i na tą w swoim.

Odpowiedz

  • +
  • -
Jadek - zdjęcie Jadek 29.05.2014

Spójrz na pętlę w moim kodzie i na tą w swoim.

Teraz mam taką jak ty czyli:

for(new i=1;i<33;i++)
        {
            if(get_user_flags(i) & ADMIN_LEVEL_G)
            ++users_with_flag;
        }

I to samo. Omija ify

Znowu robiąc tak:

new users_with_flag = 0;
        for(new i=1;i<33;i++)
        {
            if(get_user_flags(i) & ADMIN_LEVEL_G)
            ++users_with_flag;
        
 
        if(!users_with_flag)
        {    
            if(!dane_gracza[id] && ((get_user_time(id,1)+CzasGry[id]) < pCvarTiem) && !is_user_admin(id))
            {
                ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak]^x01 Masz za malo czasu przegrane na serwerze by grac w CT! Potrzebujesz %d minut.", pCvarTiem/60);
                return JAIL_FORCE_TT;
            }
            else
            {
                ColorChat(id, GREEN, "Dolaczyles do straznikow, poniewaz nie ma innego straznika z flaga");
                return JAIL_CONTINUE;
            }
        }
        else
        {
            if(get_user_flags(id) & ADMIN_LEVEL_G)
            {
                ColorChat(id, GREEN, "Dolaczyles do straznikow.");
                return JAIL_CONTINUE;
            }
            else
            {
                ColorChat(id, GREEN, "Aby dolaczyc do straznikow zloz podanie na forum(free) lub wpisz komende /sklepsms");
                return JAIL_FORCE_TT;
            }
      }
        }

Niby pokazuje informacje ale jest osoba która ma flage "s" a mi pokazuje, ten colorchat:

ColorChat(id, GREEN, "Dolaczyles do straznikow, poniewaz nie ma innego straznika z flaga");

Użytkownik Jadek edytował ten post 29.05.2014 20:21
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 31.05.2014

Ja bym to tak zrobił:

for(new i=1;i<33;i++)
{
    if(get_user_flags(i) & ADMIN_LEVEL_G)
    {
        if(get_user_flags(id) & ADMIN_LEVEL_G)
        {
            ColorChat(id, GREEN, "Dolaczyles do straznikow.");
            return JAIL_CONTINUE;
        }
        else
        {
            ColorChat(id, GREEN, "Aby dolaczyc do straznikow zloz podanie na forum(free) lub wpisz komende /sklepsms");
            return JAIL_FORCE_TT;
        }
    }
}

if(!dane_gracza[id] && ((get_user_time(id,1)+CzasGry[id]) < pCvarTiem) && !is_user_admin(id))
{
    ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak]^x01 Masz za malo czasu przegrane na serwerze by grac w CT! Potrzebujesz %d minut.", pCvarTiem/60);
    return JAIL_FORCE_TT;
}
else
{
    ColorChat(id, GREEN, "Dolaczyles do straznikow, poniewaz nie ma innego straznika z flaga");
    return JAIL_CONTINUE;
}
Odpowiedz

  • +
  • -
Jadek - zdjęcie Jadek 31.05.2014


Ja bym to tak zrobił:

for(new i=1;i<33;i++)
{
    if(get_user_flags(i) & ADMIN_LEVEL_G)
    {
        if(get_user_flags(id) & ADMIN_LEVEL_G)
        {
            ColorChat(id, GREEN, "Dolaczyles do straznikow.");
            return JAIL_CONTINUE;
        }
        else
        {
            ColorChat(id, GREEN, "Aby dolaczyc do straznikow zloz podanie na forum(free) lub wpisz komende /sklepsms");
            return JAIL_FORCE_TT;
        }
    }
}

if(!dane_gracza[id] && ((get_user_time(id,1)+CzasGry[id]) < pCvarTiem) && !is_user_admin(id))
{
    ColorChat(id, TEAM_COLOR, "^x04[PrisonBreak]^x01 Masz za malo czasu przegrane na serwerze by grac w CT! Potrzebujesz %d minut.", pCvarTiem/60);
    return JAIL_FORCE_TT;
}
else
{
    ColorChat(id, GREEN, "Dolaczyles do straznikow, poniewaz nie ma innego straznika z flaga");
    return JAIL_CONTINUE;
}
W twoim przypadku gdy gracz ma powyzej x minut/na serwerze to go wpuści do CT z info ze dolaczyles bo nie ma innego strażnika.
Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 31.05.2014

W twoim przypadku gdy gracz ma powyzej x minut/na serwerze to go wpuści do CT z info ze dolaczyles bo nie ma innego strażnika.

nie ma innego strażnika z flagą*

 

 

Tak zgadzam się lecz to ty tak zrobiłeś ja jedynie pozbyłem sie zmiennej "users_with_flag" i paru instrukcji. Jeśli nie tego chciałeś to napisz czego oczekujesz bo nie jestem jasnowidzem. Sam przecież tak zrobiłeś??

Odpowiedz

  • +
  • -
Jadek - zdjęcie Jadek 01.06.2014

Nie no kolego ja tak nie zrobiłem, ja zrobiłem z tym czasem przegranym wtedy gdy nie ma żadnego gracza z flagą "s".

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 01.06.2014


Nie no kolego ja tak nie zrobiłem, ja zrobiłem z tym czasem przegranym wtedy gdy nie ma żadnego gracza z flagą "s".

No u mnie jest tak jak u ciebie. Przyjrzyj sie
Odpowiedz