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

Przypisanie wartosci


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

#1 AventoR

    Nowy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:6
  • Imię:Patryk
  • Lokalizacja:Pomorskie
Offline

Napisano 21.08.2019 22:26

Czesc siemanko mam do was od wielu dni zastanawiające mnie pytanie. Jeżeli bym chciał konkretnemu graczą przypisać dowolną zmienną coś w stylu user_countmember[id] <-- zmienna która przechowuje gracza i pozniej ma pokazywać ilość wszystkich graczy której przypisana została ta zmienna (tymczasowo na runde), przykład: 

public WybierzGracza(id)
{
	if(!(get_user_flags(id) & ADMIN_IMMUNITY))
		return PLUGIN_HANDLED;
	
	static menu, tytul[512];
	
	formatex(tytul, charsmax(tytul), "Menu");
	menu = menu_create(tytul,"WybierzGracza_Handler");
	
	for(new i=0, n=0; i<=32; i++)
	{
		if(!is_user_connected(i))
			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);
	return PLUGIN_HANDLED;
}
public WybierzGracza_Handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	wybrany = gracz_id[item];
	get_user_name(wybrany, name, 32);
	
        >> TUTAJ BYM CHCIAŁ ŻEBY PODLICZAŁO GO DO zmiennej user_countmember

	console_cmd(id, "messagemode ile");
		
	return PLUGIN_HANDLED;
}

<< TUTAJ BYM CHCIAŁ ŻEBY PODLICZAŁO GO DO zmiennej user_countmember, a następnie coś takiego
 

ColorChat(id, "%i graczy", user_countmember[id])

  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 582
Godlike

  • Postów:12 051
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 21.08.2019 23:59

Przeleć tablice pętlą od 0 do wielkości i zlicz ile występuje danej wartości
  • +
  • -
  • 0

#3 AventoR

    Nowy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:6
  • Imię:Patryk
  • Lokalizacja:Pomorskie
Offline

Napisano 22.08.2019 00:11

Ok jest pętla itd.

for(new i=0; i<33; i++) {
user_countmember[i]
i++;
}

A Jakbym chciał zrobić tak że jeżeli gracz zostanie przypisany do user_countmember i pozniej chcialbym zwiekszac o 1 jakas tablice globalna od kazdego gracza? Tutaj wyjasnie moze o co chodzi
Gracz zostaje przypisany do user_countmember - zwieksza sie zmienna members o 1 drugi gracz zostanie przypisany do user_countmember to zmienna members zwiekszy się ponownie.
  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 22.08.2019 09:26

To nie wystarczy do members dodawać w handlerze od menu?

 

Strasznie zawile wytłumaczyłeś to, proszę opisać to zrozumiale.

 

Natomiast jeśli chcesz zliczyć ile graczy ma ustawioną tą zmienną to:

int cnt = 0;
for(new i = 1; i < 33; i++){

	if(!is_user_connected(i)) continue;
	if(user_countmember[i]){
		cnt++;
	}
}

//cnt trzyma teraz ile graczy ma ustawiona wartosc w user_countmember

  • +
  • -
  • 0

#5 Toldi

    Czempion

  • Power User

Reputacja: 259
Wszechwidzący

  • Postów:841
  • Imię:Mateusz
  • Lokalizacja:wies
Offline

Napisano 22.08.2019 09:33

Nie bardzo rozumiem o co Ci chodzi

new member, bool:user_countmember[33];

public WybierzGracza(id)
{
	if(!(get_user_flags(id) & ADMIN_IMMUNITY))
		return PLUGIN_HANDLED;
	
	static menu, tytul[512];
	
	formatex(tytul, charsmax(tytul), "Menu");
	menu = menu_create(tytul,"WybierzGracza_Handler");
	
	for(new i=0, n=0; i<=32; i++)
	{
		if(!is_user_connected(i))
			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);
	return PLUGIN_HANDLED;
}
public WybierzGracza_Handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	wybrany = gracz_id[item];
	get_user_name(wybrany, name, 32);
	
	// TUTAJ BYM CHCIAŁ ŻEBY PODLICZAŁO GO DO zmiennej user_countmember
	user_countmember[id]=true; 	// true = znajduje sie w gronie tych osob
	member+=1; 			// zwieksza ilosc graczy znajdujacych sie w gronie
	ColorChat(id, "%i graczy", member)
	
	console_cmd(id, "messagemode ile");
		
	return PLUGIN_HANDLED;
}

public client_disconnect(id)
{
	if(user_countmember[id]) // gracz wychodzacy znajduje sie w grupie osob
	{
		user_countmember[id]=false; // usun go z listy wybranych graczy
		member-=1;	// wiec zmniejsze ilosc osob w tej grupie
	}
}

  • +
  • -
  • 0

#6 K@MILOVVSKY

    Zaawansowany

  • Użytkownik

Reputacja: 37
Życzliwy

  • Postów:121
  • Steam:steam
  • Imię:Kamil
Offline

Napisano 22.08.2019 10:15

@up 

Nie może być "user_countmember[id] = true" tylko "user_countmember[wybrany]", bo w takim wypadku true zmieni się dla osoby korzystającej z menu, a nie dla wybranej z menu.

 

WybierzGracza_Handler zmień na 

public WybierzGracza_Handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	wybrany = gracz_id[item];
	get_user_name(wybrany, name, 32);
	
	user_countmember[wybrany]=true; 	// true = znajduje sie w gronie tych osob

        new markedUsers = 0;

        for(new i = 1; i < 33; i++)
        {
            if(!user_countmember[i])
                continue; // kazdy kto nie jest oznaczony jest pomijany w petli

            markedUsers++;
       }

        ColorChat(id, GREEN, "Ilosc: %d;", markedUsers);
	
	console_cmd(id, "messagemode ile");
		
	return PLUGIN_HANDLED;
}

Jeśli będziesz chciał zwrócić ilość oznaczonych graczy gdzieś indziej w pluginie, przygotowałem dla Ciebie stock'a, który zwraca ich ilość. Wklej go na koniec pluginu. 

stock CheckUsers()
{
    new markedUsers = 0;
    
    for(new i = 1; i < 33; i++)
    {
        if(!user_countmember[i])
            continue; // kazdy kto nie jest oznaczony jest pomijany w petli
       
        markedUsers++;
    }

    return markedUsers;
}

Użycie jest banalne. Przykładowo gdzieś w kodzie: 

client_print(id, print_chat, "Aktualnie jest oznaczonych %d graczy!", CheckUsers());

Nie kompilowałem nawet, ale raczej styknie. 


Użytkownik K@MILOVVSKY edytował ten post 22.08.2019 10:16

  • +
  • -
  • 0

#7 AventoR

    Nowy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:6
  • Imię:Patryk
  • Lokalizacja:Pomorskie
Offline

Napisano 22.08.2019 11:12

dzięki tylko teraz problem zauwazylem ze ta zmienna user_countmember sie nie resetuje na koncu rundy
 

public KoniecRundy()
{
 
for(new i=0;i<33;i++) {
 user_countmember[i] = 0;
}
 
}

Użytkownik AventoR edytował ten post 22.08.2019 11:14

  • +
  • -
  • 0

#8 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 22.08.2019 12:16

To do plugin_init:

register_event("HLTV", "NewRound", "a", "1=0", "2=0");

A to zamiast twojego KoniecRundy()

public NewRound()
{
	member = 0;
	for(new i=0;i<33;i++) {
		user_countmember[i] = 0;
	}
}

(nie wiem, której wersji użyłeś, ale zamist zmiennej member mozesz wstawic inną, która przechowuje zliczoną ilośc graczy)


  • +
  • -
  • 0

#9 AventoR

    Nowy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:6
  • Imię:Patryk
  • Lokalizacja:Pomorskie
Offline

Napisano 22.08.2019 12:33

Niestety nie działa. Sprawdzałem czy zresetuje komendą i zresetowało

public say(id) {for(new i=0;i<33;i++) {
user_countmember[i] = 0;
}}

  • +
  • -
  • 0

#10 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 22.08.2019 12:35

Pokaż cały kod bo w tej chwili to na ślepo robimy.


  • +
  • -
  • 0

#11 AventoR

    Nowy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:6
  • Imię:Patryk
  • Lokalizacja:Pomorskie
Offline

Napisano 22.08.2019 12:52

#include <amxmodx>
#include <fun>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <colorchat>

new gracz_id[33], wybrany, name[33]
new ilosc[33], opcja
new bool:user_countmember[33];

public plugin_init() {
	register_plugin("Zarzadzaj monetami", "1.0", "Unknown");
	
	register_clcmd("say /dodaj", "WybierzGracza");
	
	register_event("HLTV", "NewRound", "a", "1=0", "2=0");
}

public WybierzGracza(id)
{
	if(!(get_user_flags(id) & ADMIN_IMMUNITY))
		return PLUGIN_HANDLED;
	
	static menu, tytul[512];
	
	formatex(tytul, charsmax(tytul), "Menu");
	menu = menu_create(tytul,"WybierzGracza_Handler");
	
	for(new i=0, n=0; i<=32; i++)
	{
		if(!is_user_connected(i))
			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);
	return PLUGIN_HANDLED;
}
public WybierzGracza_Handler(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	wybrany = gracz_id[item];
	get_user_name(wybrany, name, 32);
	
        user_countmember[wybrany] = 1;

	console_cmd(id, "messagemode ile");
		
	return PLUGIN_HANDLED;
}

public Dodaj(id)
{
	if(opcja == 1)
	{
		if(str_to_num(ilosc) > 0)
		{		
			cs_set_user_money(wybrany, cs_get_user_money(wybrany) + str_to_num(ilosc))
			ColorChat(id, GREEN, "Dales graczowi^x04 %s^x04 +%i^x03 monet! To juz %i gracz", name, str_to_num(ilosc), CheckUsers());
			ColorChat(wybrany, GREEN, "Wygrales monety, %i osob dostalo monet!", CheckUsers());
		}
		else if(cs_get_user_money(id) >= str_to_num(ilosc) <= 0)
		{
			ColorChat(id, GREEN, "Bledna wartosc");
		}
	}
}

public NewRound()
{
	for(new i=0;i<33;i++) {
		user_countmember[i] = 0;
	}

}

stock CheckUsers()
{
	new markedUsers = 0;
	for(new i=1;i<33;i++){
		if(!user_countmember[i]) continue;

	markedUsers++
	}
	return markedUsers;
}

Użytkownik AventoR edytował ten post 22.08.2019 12:53

  • +
  • -
  • 0

#12 AventoR

    Nowy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:6
  • Imię:Patryk
  • Lokalizacja:Pomorskie
Offline

Napisano 22.08.2019 14:02

co ciekawe nawet takie cos nie dziala (nic sie nie pokazuje po smierci)

 

public DeathMsg()
{
ColorChat(0, GREEN, "ZRESETOWANO");
}

  • +
  • -
  • 0

#13 K@MILOVVSKY

    Zaawansowany

  • Użytkownik

Reputacja: 37
Życzliwy

  • Postów:121
  • Steam:steam
  • Imię:Kamil
Offline

Napisano 22.08.2019 15:31

W NewRound nie powinno być zamiast

for(new i=0;i<33;i++)

>>

for(new i=1;i<33;i++)

?


  • +
  • -
  • 0

#14 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 22.08.2019 15:45

W NewRound nie powinno być zamiast

for(new i=0;i<33;i++)

>>

for(new i=1;i<33;i++)

?

 

Nie, to nic nie zmienia.

 

 

 

 

dodaj jakiś log_amx do new round i zobacz czy wypisuje cos w logi


  • +
  • -
  • 0

#15 Toldi

    Czempion

  • Power User

Reputacja: 259
Wszechwidzący

  • Postów:841
  • Imię:Mateusz
  • Lokalizacja:wies
Offline

Napisano 22.08.2019 21:01

@up 

Nie może być "user_countmember[id] = true" tylko "user_countmember[wybrany]", bo w takim wypadku true zmieni się dla osoby korzystającej z menu, a nie dla wybranej z menu.

 

Nie dopatrzyłem. Masz rację.

 

W przypadku gdy zmienna jest logiczna przypisuj jej wartość true/false

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

	console_cmd(id, "messagemode ile");
		
	return PLUGIN_HANDLED;
}
public NewRound()
{
	log_amx("Nowa Runda")
	log_amx("Oznaczeni gracze: %i", CheckUsers());
	for(new i = 1; i <= 32; i++)
	{
		if(!is_user_connected(id)) continue;
				
		user_countmember[i] = false;
		
	}
	log_amx("Oznaczeni gracze po resecie: %i", CheckUsers());
}

  • +
  • -
  • 0




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

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