Skocz do zawartości

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

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Sprawdzenie czy jakiś gracz z ADMIN_LEVEL_G jest online


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
13 odpowiedzi w tym temacie

#1 Jadek

    Wszechwidzący

  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 29.05.2014 18:05

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.


  • +
  • -
  • 0

#2 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 29.05.2014 18:09

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

  • +
  • -
  • 0

#3 Jadek

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 29.05.2014 19:14

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?


  • +
  • -
  • 0

#4 szelbi

    Hero

  • Power User

Reputacja: 373
Wszechpomocny

  • Postów:1 032
  • Steam:steam
  • Imię:Norbert
  • Lokalizacja:Częstochowa
Offline

Napisano 29.05.2014 19:16

To ponownie uruchamiasz funkcję i liczy ci od nowa.


  • +
  • -
  • 0

#5 Jadek

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 29.05.2014 19:25

To ponownie uruchamiasz funkcję i liczy ci od nowa.

Masz na myśli for?


  • +
  • -
  • 0

#6 szelbi

    Hero

  • Power User

Reputacja: 373
Wszechpomocny

  • Postów:1 032
  • Steam:steam
  • Imię:Norbert
  • Lokalizacja:Częstochowa
Offline

Napisano 29.05.2014 19:30

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.


  • +
  • -
  • 0

#7 Jadek

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 29.05.2014 19:41

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

  • +
  • -
  • 0

#8 szelbi

    Hero

  • Power User

Reputacja: 373
Wszechpomocny

  • Postów:1 032
  • Steam:steam
  • Imię:Norbert
  • Lokalizacja:Częstochowa
Offline

Napisano 29.05.2014 19:59

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


  • +
  • -
  • 0

#9 Jadek

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 29.05.2014 20:14

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

  • +
  • -
  • 0

#10 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 31.05.2014 22:02

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;
}

  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#11 Jadek

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 31.05.2014 22:40


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.
  • +
  • -
  • 0

#12 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 31.05.2014 23:24

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ś??


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#13 Jadek

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 80
Zaawansowany

  • Postów:288
  • GG:
  • Imię:Daniel
  • Lokalizacja:Polska
Offline

Napisano 01.06.2014 18:56

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


  • +
  • -
  • 0

#14 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 01.06.2014 19:26


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
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych