[ROZWIĄZANE] losowanie gracza - prośba o p...
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;
speedkill
31.08.2014
xenos
31.08.2014
public Losowanie() { losuj = random_num(1, 32); if(!is_user_alive(losuj)) Losowanie() wylosuj_bonus(losuj) }
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ć
@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
speedkill
31.08.2014
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.
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) } }
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.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.
xenos
31.08.2014
W tym przypadku rekurencja bardziej jest opłacalna niż pętla z użyciem tablicy.Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.
A sposób zabezpieczenia wystarczy pobrać czy na serwerze jest więcej niż 0 graczy i tyle
sebul
31.08.2014
W tym przypadku rekurencja bardziej jest opłacalna niż pętla z użyciem tablicy.Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.
A sposób zabezpieczenia wystarczy pobrać czy na serwerze jest więcej niż 0 graczy i tyle
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.
xenos
31.08.2014
W tym przypadku rekurencja bardziej jest opłacalna niż pętla z użyciem tablicy.Tutaj nie ma co dopracowywać, bo po prostu ten sposób jest bardzo nieoptymalny, skorzystaj z kodu, który został Ci podany.
A sposób zabezpieczenia wystarczy pobrać czy na serwerze jest więcej niż 0 graczy i tyle
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
Oporowiec 31.08.2014
dobra, dzięki wszystkim za odpowiedzi / podpowiedzi
wezmę kod który podał 13249.
temat do zamknięcia.
sebul
31.08.2014
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.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
sebul
31.08.2014
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL