←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] losowanie gracza - prośba o p...

Zablokowany

Oporowiec - zdjęcie Oporowiec 31.08.2014

cześć.

możecie mi poprawić ten kod? Nie chce się skompilować :(

public Losowanie(id)
{
	losuj = random_num(1, 32);
	
	if(!is_user_alive(losuj))
		losuj()
	
	wylosuj_bonus(id)
}

zmienna:

new losuj;
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 31.08.2014

Losowanie jest złe, użyj tego: http://amxx.pl/topic...gracza-z-teamu/
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 31.08.2014

Zmienna nie może się nazywać tak samo, jak jakaś funkcja.
Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 31.08.2014

public Losowanie()
{
    losuj = random_num(1, 32);
    
    if(!is_user_alive(losuj))
        Losowanie()
    
    wylosuj_bonus(losuj)
}
Odpowiedz

Oporowiec - zdjęcie Oporowiec 31.08.2014

Losowanie jest złe, użyj tego: http://amxx.pl/topic...gracza-z-teamu/

dlaczego złe ?

 

public Losowanie()
{
    losuj = random_num(1, 32);
    
    if(!is_user_alive(losuj))
        Losowanie()
    
    wylosuj_bonus(losuj)
}

zaraz sprawdzę i dam znać :P

@edit
xenos, Twoja wersja się kompiluje // zaraz dam znać czy działa

@edit 2
xenos, Twoja wersja działa jednak "losuje kilka razy" :/
dasz radę ogarnąć ?


Użytkownik RPK. Macior edytował ten post 31.08.2014 21:42
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 31.08.2014

Jak myślisz co się stanie jak nie będzie żadnego gracza? Chyba tłumaczyć nie muszę ;)
Odpowiedz

Oporowiec - zdjęcie Oporowiec 31.08.2014

domyślam się - crash ? :(
13249 a jest możliwość żeby w moim kodzie nie było tego bugu gdy serwer jest pusty?
chodzi mi o jakieś dopracowanie go.

Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 31.08.2014

public Losowanie()
{
if(get_playersnum()!=0)
{

losuj = random_num(1, 32);
    
if(!is_user_alive(losuj))
        Losowanie();
else 
wylosuj_bonus(losuj)
}
}


Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 31.08.2014

domyślam się - crash ? sad.png
13249 a jest możliwość żeby w moim kodzie nie było tego bugu gdy serwer jest pusty?
chodzi mi o jakieś dopracowanie go.

Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.
Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 31.08.2014

Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.

W tym przypadku rekurencja bardziej jest opłacalna niż pętla z użyciem tablicy.
A sposób zabezpieczenia wystarczy pobrać czy na serwerze jest więcej niż 0 graczy i tyle :]
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 31.08.2014

Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.

W tym przypadku rekurencja bardziej jest opłacalna niż pętla z użyciem tablicy.
A sposób zabezpieczenia wystarczy pobrać czy na serwerze jest więcej niż 0 graczy i tyle :]

facepalm.png
Gdy na serwerze będzie mało graczy (a szczególnie gdy będzie jeden) to losowanie na sztywno liczby od 1 do 32 nie jest czymś optymalnym, bo poprawne id może wylosować się dopiero po X razie (przy jednym graczu jest 1/32 szansy na to), więc żadna rekurencja nie będzie tutaj bardziej opłacalna. A pętla i tablica? To w żaden sposób nie przeciąży serwera, a średnio na pewno będzie wymagać mniejszych zasobów niż taka rekurencja.
Odpowiedz

  • +
  • -
xenos - zdjęcie xenos 31.08.2014

Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.

W tym przypadku rekurencja bardziej jest opłacalna niż pętla z użyciem tablicy.
A sposób zabezpieczenia wystarczy pobrać czy na serwerze jest więcej niż 0 graczy i tyle :]

facepalm.png
Gdy na serwerze będzie mało graczy (a szczególnie gdy będzie jeden) to losowanie na sztywno liczby od 1 do 32 nie jest czymś optymalnym, bo poprawne id może wylosować się dopiero po X razie (przy jednym graczu jest 1/32 szansy na to), więc żadna rekurencja nie będzie tutaj bardziej opłacalna. A pętla i tablica? To w żaden sposób nie przeciąży serwera, a średnio na pewno będzie wymagać mniejszych zasobów niż taka rekurencja.


O pluginie wiemy jedynie że ma losować gracza,nie ma informacji w jakich warunkach.
Może losowanie odbywać się przy pełnym serwerze.
Zawsze wartość 32 można zamienić na get_playersnum() czyli na aktualną ilość osób.
A z tego co kiedyś uczyli na algorytmice, pętla+tablica -> rząd N
Odpowiedz

Oporowiec - zdjęcie Oporowiec 31.08.2014

dobra, dzięki wszystkim za odpowiedzi / podpowiedzi :)
wezmę kod który podał 13249.

temat do zamknięcia.

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 31.08.2014

O pluginie wiemy jedynie że ma losować gracza,nie ma informacji w jakich warunkach.
Może losowanie odbywać się przy pełnym serwerze.
Zawsze wartość 32 można zamienić na get_playersnum() czyli na aktualną ilość osób.
A z tego co kiedyś uczyli na algorytmice, pętla+tablica -> rząd N

O ile w ostatnim zdaniu masz rację, o tyle id gracza może być większe od "get_playersnum", jak już można tam wstawić "get_maxplayers" (a najlepiej pobrać to tylko raz), wtedy nie wiem co będzie bardziej optymalne/opłacalne, ale według mnie ta rekurencja i tak jest tutaj najgorszym sposobem losowania, mimo że sam kiedyś coś podobnego zrobiłem.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 31.08.2014

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany