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

Problem z losowaniem gracza


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

#1 Snejk47

    Zaawansowany

  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 09:48

Witam, ciągle mam problemy z losowaniem gracza :/
Mam kod
do{
    whos = random_num(1, 32)
}
while(is_user_alive(whos))
który (tak myślę) losuje liczbę z przedziału {1,32} i sprawdza czy ktoś z tej liczby jest żywy (myślę, że tu jest błąd), jeżeli jest żywy to leci dalej, nie wykonuje pętli 2 raz, a id wylosowanego gracza jest zapisane w whos. Dobrze myślę? Tylko, że to nie działa :/ (kompiluje się, ale jak potem chcę np. dodać hp to nie działa [ set_user_health(whos, 150) ])

#2 wazniaK

    Zaawansowany

  • Zbanowany

Reputacja: 16
Początkujący

  • Postów:85
  • GG:
  • Lokalizacja:Opoczno
Offline

Napisano 07.12.2009 10:25

z jakiego to modu jest jailbreak ?????

#3 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 07.12.2009 10:26

while(is_user_alive(whos))

losuje dopóki gracz jest żywy

Spróbuj jedną z tych funkcji:
stock losuj_gracza()
{
	new players[32], num
	get_players(players, num)
	
	new Array:gracze
	gracze = ArrayCreate(1)
	for (new i=0; i<num; i++) ArrayPushCell(gracze, players[i])	

	new tmp, rnd
	while (ArraySize(gracze)>0)
	{
		rnd = random_num(0, ArraySize(gracze)-1)
		tmp = ArrayGetCell(gracze, rnd)
		if (!is_user_alive(tmp))
			ArrayDeleteItem(gracze, rnd)
		else
			return tmp
	}
	return -1
}

stock losuj_gracza2()
{
	new players[32], num
	get_players(players, num, "a") //bez martwych
	
	if (num>0)
		return players[random_num(0, num-1)]
	
	return -1
}

Druga jest prostsza, optymalniejsza i w ogóle. Ale korzysta z niepewnej funkcji get_players (z flagami) ;>
  • +
  • -
  • 0

#4 Snejk47

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 16:05

Pavulon, a faktycznie ;P
Druga mi się bardziej podoba :P Ale dlaczego niepewnej (funkcji)?

z jakiego to modu jest jailbreak ?????

?

#5 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 07.12.2009 16:08

"We don't really support get_players() with flags anymore. It was a bad idea and if it was our choice, it would have never been added to the original AMX Mod." - BAILOPAN

Dlatego.

Już np w AR są czasem efekty tego jak rush wyłącza się pomimo iż są gracze.

Dlatego zbytnio nie ufam tej funkcji.
  • +
  • -
  • 0

#6 Snejk47

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 16:11

Pavulon, aha ;P
A jak mogę wylosować połowę graczy (np. gra 14 graczy, i chce żeby 7 gracza np. dodało 150 hp)? Myślałem robić jakieś pętle, ale nie wiem jak to by działało :s. Albo gdy jest 15 graczy, to żeby wylosowało 7 i 8, a nie 7.5

#7 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.12.2009 16:14

jeśli napiszesz coś takiego to
new a = 15/2;
to a będzie równe 7 działasz na liczbach całkowitych
  • +
  • -
  • 0

#8 Snejk47

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 16:21

DarkGL, ok, to teraz jak chciałbym wylosować 7 różnych graczy, to mam wykonać pętle 7 razy, potem sprawdzać czy ten gracz nie był już wylosowany, jeżeli był to losować jeszcze raz? Myślę, że można by to jakoś inaczej rozwiązać, ale nic nie przychodzi mi do głowy :/

#9 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 07.12.2009 16:23

Powiedz wprost co chcesz zrobić: losować 7 graczy czy jednego 7 razy ?
  • +
  • -
  • 0

#10 Snejk47

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 16:27

Pavulon, chcę z x graczy wylosować połowe, żeby potem wykonywać na nich jakieś czynności (np. zmiana grawitacji, hp..)

#11 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.12.2009 16:35

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Home"

new globalna_to_zlooo[33];

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
}

public jakas_tam_funkcja(){
	new cos_tam = get_maxplayers()
	new tab[33];
	new asd= 0;
	for(new i = 1;i<cos_tam;i++){
		if(is_user_connected(i)){
			tab[asd] = i;
			asd ++;
		}
	}
	asd = 0;
	new wylosowana;
	for(new i = 0;i<cos_tam/2;i++){
		wylosowana = random_num(0,cos_tam-i)
		globalna_to_zlooo[asd] = tab[wylosowana];
		new asd2 = tab[cos_tam-i];
		tab[cos_tam-i] = tab[wylosowana]; 
		tab[wylosowana] = asd2;
	}
}

znając mnie pewnie coś sknociłem :]
  • +
  • -
  • 0

#12 Snejk47

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 18:37

DarkGL, no kompiluje się (jeszcze nie testowałem), ale gdzie zwracani są wylosowani gracze? w globalnej?

#13 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.12.2009 18:59

tak w tablicy globalna_to_zlooo tylko przenieś sobie zmienną asd do globalu żebyś potem wiedział ile wylosowało ;)
  • +
  • -
  • 0

#14 Snejk47

    Zaawansowany

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:78
  • GG:
  • Imię:Snejk
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2009 19:35

Nie powinno być
/* Plugin generated by AMXX-Studio */ 

#include <amxmodx> 
#include <amxmisc> 

#define PLUGIN "New Plug-In" 
#define VERSION "1.0" 
#define AUTHOR "Home" 

new globalna_to_zlooo[33]; 

public plugin_init() { 
    register_plugin(PLUGIN, VERSION, AUTHOR) 
    
} 

public jakas_tam_funkcja(){ 
    new cos_tam = get_maxplayers() 
    new tab[33]; 
    new asd= 0; 
    for(new i = 1;i<cos_tam;i++){ 
        if(is_user_connected(i)){ 
            tab[asd] = i; 
            asd ++; 
        } 
    } 
    asd = 0; 
    new wylosowana; 
    for(new i = 0;i<cos_tam/2;i++){ 
        wylosowana = random_num(0,cos_tam-i) 
        globalna_to_zlooo[asd] = tab[wylosowana]; 
        asd ++;                                                                     <------- tu
        new asd2 = tab[cos_tam-i]; 
        tab[cos_tam-i] = tab[wylosowana]; 
        tab[wylosowana] = asd2; 
    } 
}

Tak teraz zauważyłem.

#15 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 983
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.12.2009 19:38

mówiłem że gdzieś jest błąd :)
  • +
  • -
  • 0




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

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