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

[ROZWIĄZANE] dodawanie do menu graczy z przeciwnego teamu


Najlepsza odpowiedź BlackPerfum , 31.07.2013 15:15

Chodziło mu o aby nie tworzyć zmiennej i dać tylko jeden warunek:



if(get_user_team(id2)  == team)    continue;

A przed pętlą sprawdzać czy czasem gracz nie jest nie przydzielony do żadnego temu lub czy jest na specu

 

A co do kompilacji to zamień:

menu_item_getinfo(menu, item, access, data, 1, _, _, callback);

Na:

menu_item_getinfo(menu, item, access, strid, 1, _, _, callback);
Przejdź do postu


  • Zamknięty Temat jest zamknięty
22 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2013 10:09

witam jak zrobic w tym kawalku kodu zeby do menu dodawalo tylko graczy z przeciwnego teamu?

public Gracz(id)
{
    new menu = menu_create("Wybierz gracza:", "Gracz_handler");
    
    for(new i=0, n=0; i<=32; i++)
    {
        if(!is_user_connected(i))
            continue;

        if(get_user_team(i) == 1 || get_user_team(i) == 2)
        {
        gracz_id[n++] = i;
        new nazwa_gracza[64];
        get_user_name(i, nazwa_gracza, 63)
        menu_additem(menu, nazwa_gracza, "0", 0);
        }
    }
    menu_display(id, menu);
}

  • +
  • -
  • 0

#2 Yakashi

    Wszechpomocny

  • Zbanowany

Reputacja: 32
Życzliwy

  • Postów:332
  • Imię:Krzysiek
  • Lokalizacja:Public Respawn(id)
Offline

Napisano 29.07.2013 10:32

tu masz podzial na druzyny

 

http://darkgl.amxx.p...brojenie-bomby/



#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2013 10:39

ale ktora to petla

 

wklej kod petli


  • +
  • -
  • 0

#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 29.07.2013 11:21

Lekko przerobiłem twoją pętelkę:

public Gracz(id)
{
	new menu = menu_create("Wybierz gracza:", "Gracz_handler")
    new Players[32], playerCount, team, id2, team2, nick[32], strid[2]
	team = get_user_team(id) //Zapisuję team gracza
	get_players(Players, playerCount, "h") // Pobieram pełną listę graczy na serwerze (omijam hltv)
	
	for(new i=0; i<playerCount; i++)
	{
		id2 = Players[i] // Pobieram id gracza z tablicy
        if(!is_user_connected(id2))	continue // Nie stety zawsze trzeba sprawdzić czy gracz jest podłączony do serera
		
		team2 = get_user_team(id2) // Zapisuję team gracza
		if(team2 == team || !team || team == 3)	continue; // Sprawdzam czy gracz jest w twojej dróżynie lub czy jest nie przydzielony do dróżyny albo czy jest na specu (jeśli tak to go omijam)

		get_user_name(id2, nick, 31)
		num_to_str(id2,strid,1) // Zamieniam id na ciąg znaków
		menu_additem(menu, nick, strid) // Dodaje info do itemu (info to id)
	}
	menu_display(id, menu)
}

Zakładam że zmienna globalna "gracz_id" jest po  to aby w funkcji "Gracz_handler" można było wiedzieć którego gracza wybrano. Ja ci przedstawiam troszkę lepszą metodę za pomocą info w przycisku :D tzn."strid".

Teraz w funkcji wychwytującej naciśnięcie przycisku robisz mniej więcej tak:

public Gracz_handler(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	new access, callback, strid[2],id2 // Marnowanie miejsca
	menu_item_getinfo(menu, item, access, data, 1, _, _, callback) //Pobieramy dane przycisku
	new id2 = str_to_num(strid) // id2 to id gracza którego nick został przydzielony do przyciśniętego przycisku :D
	
	// Dalszy kod twojej funkcji
}

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

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2013 12:14

WTF??? Kompletnie nie czaje. ja mam cos takiego:

public Gracz(id)
{
	new menu = menu_create("Wybierz gracza:", "Gracz_handler");
	
	for(new i=0, n=0; i<=32; i++)
	{
		if(!is_user_connected(i))
			continue;
		if(get_user_team(i) == 1 || get_user_team(i) == 2)
		{
		gracz_id[n++] = i;
		new nazwa_gracza[64];
		get_user_name(i, nazwa_gracza, 63)
		menu_additem(menu, nazwa_gracza, "0", 0);
		}
	}
	menu_display(id, menu);
}

public Gracz_handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	wybrany = gracz_id[item];
	get_user_name(wybrany, name, 32);

// i tu dalej moje rzeczy
}

  • +
  • -
  • 0

#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 29.07.2013 12:21

Ty pakujesz wszystkie id do jednej zmiennej a ja poprzez info przesyłam je do drugiej funkcji :D id2(u mnie) == wybrany(u ciebie) tylko u ciebie pętla obraca się 32 razy a u mnie tylko tyle co jest osób na serwerze - hltv. Jak nadal nie rozumiesz to napisz dokładnie czego


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

#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2013 12:30

z ta petla rozumiem

 

czyli to bedzie dzialalo Gracz(id)... ok

 

a co z gracz handler bo tego nie czaje

new access, callback, strid[2],id2 // Marnowanie miejsca
    menu_item_getinfo(menu, item, access, data, 1, _, _, callback) //Pobieramy dane przycisku
    new id2 = str_to_num(strid) // id2 to id gracza którego nick został przydzielony do przyciśniętego przycisku :D

 

jak podpiac to pod to:

public Gracz_handler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_CONTINUE;
    }
    wybrany = gracz_id[item];
    get_user_name(wybrany, name, 32);
 
// i tu dalej moje rzeczy
}

  • +
  • -
  • 0

#8 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 29.07.2013 12:39

Patrz:

Spoiler

Jeszcze dodam iż możesz usunąć zmienną "wybrany"


Użytkownik BlackPerfum edytował ten post 29.07.2013 12:40

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

#9 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2013 12:51

a za zmienna wybrany jest jaka nazwa?
 


  • +
  • -
  • 0

#10 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 29.07.2013 13:09

a za zmienna wybrany jest jaka nazwa?
 

 

Nie rozumiem do końca twojego pytania. Ale zakładam iż chodziło ci o to w jaki sposób przekazuje id pomiędzy dwoma funkcjami. Przekazuję id poprzez info w przycisku tzn. nie robię żadnej zmiennej globalnej (przynajmniej w pluginie nie wiem jak to jest przekazywane w amxx`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

#11 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2013 13:15

        get_user_name(id2, name, 31);
    cod_set_user_perk(wybrany, 0);

 

skoro nie ma juz teraz wybrany to jak mu wyrzucic perk? co podac za wybrany? id2?


  • +
  • -
  • 0

#12 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 29.07.2013 13:21

Tak id2 to id gracza którego nick wybrałeś w menu :D


  • +
  • -
  • 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 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 29.07.2013 14:23

Wystarczy coś takiego:

public Gracz(id)
{
    new menu = menu_create("Wybierz gracza:", "Gracz_handler");
    
    for(new i=0, n=0; i<=32; i++)
    {
        if(!is_user_connected(i))
            continue;
        
        if(get_user_team(i) == get_user_team(id))
            continue;
            
        gracz_id[n++] = i;
        new nazwa_gracza[64];
        get_user_name(i, nazwa_gracza, 63)
        menu_additem(menu, nazwa_gracza, "0", 0);
        
    }
    
    menu_display(id, menu);
}

  • +
  • -
  • 1

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#14 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 29.07.2013 16:03

Klakier twój kod podziała lecz:

- Pętla nie potrzebnie obraca się tyle razy

- Nie potrzebnie jest stworzona zmienna globalna

- Jak już robisz to zmienną globalną to musi być dwu wymiarowa a nie jedno (jak inny gracz otworzy to menu to wszystkie id się przestawią)

- "new nazwa_gracza[64]" nick może posiadać maksymalnie 31 znaków

- W najgorszym wypadku sprawdzasz 32 razy w jakim team'ie jest gracz(u którego wyświetla się menu) a wystarczy tylko jeden raz

 

To chyba tyle :D


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

#15 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 30.07.2013 06:58

Klakier twój kod podziała lecz:

- Pętla nie potrzebnie obraca się tyle razy

- Nie potrzebnie jest stworzona zmienna globalna

- Jak już robisz to zmienną globalną to musi być dwu wymiarowa a nie jedno (jak inny gracz otworzy to menu to wszystkie id się przestawią)

- "new nazwa_gracza[64]" nick może posiadać maksymalnie 31 znaków

- W najgorszym wypadku sprawdzasz 32 razy w jakim team'ie jest gracz(u którego wyświetla się menu) a wystarczy tylko jeden raz

 

petle mozna zrobic aby obrocila sie tyle razy ile jest osob na serwie

zmienna globalna? A w czym to przeszkadza??

dwuwymiarowa? a jak 3 graczy otworzy?

nazwa gracza... fakt zawsze sie daje 32

tego nie czaje. jak 32 razy?


  • +
  • -
  • 0

#16 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 30.07.2013 21:04


petle mozna zrobic aby obrocila sie tyle razy ile jest osob na serwie
Ale nie zrobił!!!


zmienna globalna? A w czym to przeszkadza??
Marnowanie miejsca tzn. serwer nie będzie mógł już spożytkować zabieranego przez nią miejsca a ona jest nie potrzebna


dwuwymiarowa? a jak 3 graczy otworzy?
Chyba nie wiesz co to są tablice dwu wymiarowe. Tak wygląda jedna z nich:"new zmienna[33][33]" do takiej zmiennej (teoretycznie) może 33 graczy wpakować 33 id innych graczy


tego nie czaje. jak 32 razy?
W jego pętli masz coś takiego:
if(get_user_team(i) == get_user_team(id))
            continue;

Jeśli by były 32 osoby na serwerze to 31 razy nie potrzebnie sprawdził być w jakim teamie jest gracz otwierające to menu tzn. wystarczy zamienić na to:

new team = get_user_team(id) // przed pętlą
if(get_user_team(i) == team)
            continue;//W pętli

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

#17 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 31.07.2013 07:25

public Gracz(id)
{
	new menu = menu_create("Wybierz gracza:", "Gracz_handler")
    	new Players[32], playerCount, team, id2, team2, nick[32], strid[2]
	team = get_user_team(id)
	get_players(Players, playerCount, "h")
	
	for(new i=0; i<playerCount; i++)
	{
		id2 = Players[i]
	        if(!is_user_connected(id2))	continue
		
		team2 = get_user_team(id2)
		if(team2 == team || !team || team == 3)	continue;

		get_user_name(id2, nick, 31)
		num_to_str(id2,strid,1)
		menu_additem(menu, nick, strid)
	}
	menu_display(id, menu)
}

public Gracz_handler(id, menu, item)
{
    	if(item == MENU_EXIT)
    	{
     	   menu_destroy(menu);
     	   return PLUGIN_CONTINUE;
   	}
	
	new access, callback, strid[2], id2, name[32];
   	menu_item_getinfo(menu, item, access, data, 1, _, _, callback);
   	new id2 = str_to_num(strid);
	
    	get_user_name(id2, name, 31);
	get_user_name(id, wyrzucajacy, 32);

	cod_set_user_perk(id2, 0);

to sie kompiluje ale są warny

np.

  • undefined symbol "data"
  • invalid expression assumed zero
  • expression has no effect

 

jak to naprawic? nie chce miec tych warnow


  • +
  • -
  • 0

#18 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 31.07.2013 11:26

dlaczego sobie tak komplikujecie życie ?

 team2 = get_user_team(id2) 
if(team2 == team || !team || team == 3)    continue;

  • +
  • -
  • 0

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#19 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 31.07.2013 12:15

@up

 

co proponujesz??


  • +
  • -
  • 0

#20 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 31.07.2013 15:15   Najlepsza odpowiedź

Chodziło mu o aby nie tworzyć zmiennej i dać tylko jeden warunek:



if(get_user_team(id2)  == team)    continue;

A przed pętlą sprawdzać czy czasem gracz nie jest nie przydzielony do żadnego temu lub czy jest na specu

 

A co do kompilacji to zamień:

menu_item_getinfo(menu, item, access, data, 1, _, _, callback);

Na:

menu_item_getinfo(menu, item, access, strid, 1, _, _, callback);

Użytkownik BlackPerfum edytował ten post 31.07.2013 15:17

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