I w sumie to mnie masz. Brawo ty.Nie mam powodów by narzekać funkcja get_playersnum() pobiera aktualna ilość graczy należycie ponadto ma parametr który wyklucza badz włącza graczy którzy dopiero sie łączą z serwerem.
Załóżmy następującą sytuację:
Wchodzi gracz, dostaje id 1
wchodzi kolejny, dostaje id 2
itd..
mamy na serwerze 10 graczy, których id jest od 1 do 10.
wychodzą gracze o id 3, 4, 5
mamy na serwerze 7 graczy o id: 1,2,6,7,8,9,10
funkcja get_playersnum() zwraca nam 7, bo tylu jest graczy.
Dajesz pętlę:for(new a=1;a<=get_playersnum();a++)pętla wykonuje się 7 razy dla id: 1,2,3,4,5,6,7
wykonujesz operacje na nieistniejących bytach 3,4,5 natomiast pomijasz graczy o id 8,9,10.
W efekcie może wystąpić błąd Segmentation Fault, albo inny powodujący crash, może lecz nie musi. Pewne jest jedno: pomijasz 3 graczy.
Czy aby na pewno na serwerze x-slotowym gracz nie może dostać id x+1?Funkcja get_maxplayers() tak na dobra sprawę pobiera ci ilość slotów
Zakładając, że masz 25 slotowy serwer to petla powtórzy sie 25 razy nawet jak będzie tylko 3 graczy.
Wydaje mi się, że taką sytuację miałem kiedyś, serwer miał 15 slotów a ktoś miał id 16.
Dlatego uważam, że powtarzanie pętli 32 razy i sprawdzanie w środku czy dany gracz istnieje, jest połączony, żywy itd. zależnie od potrzeb, jest napewniejszą i najbezpieczniejszą metodą, a przy tym względnie optymalną.
Pamiętaj, że gracz żywy to nie zawszę gracz połączony.
A nie odwrotnie? Jak coś nie istnieje to ja może być żywe?
Choć to sytuację czysto hipotetyczne ilość graczy się zmienia ktoś wchodzi, ktoś wychodzi ciężko pominąć gracza, ale to możliwe.
Spokojnie, to że mam ilość graczy nie znaczy, że na każdym mogę bezbłędnie wykonać operację, dlatego też przed wykonaniem jakichś operacji jest szereg warunków i ewentualne przejście do kolejnego powtórzenia pętli o ile warunek nie został spełniony.
Nie, nie odwrotnie. A grankee napisałem, że byt nie istnieję??
A jeżeli zostanie zerwane połączenie miedzy klientem a serwerem i w tym czasie zostaną wykonane jakieś funkcję to byt zostanie od razu zniszczony a klient rozłączony?? Nawet po dłuższym lagu ( ale bez przesady )możesz wrócić do gry.
Popracuj jeśli chcesz na najnowszym ZP tam czasem potrafią sie dziać cuda
W sumie to najlepszym sposobem byłoby tu zastosowanie pętli i instrukcji continue.
Zgadzasz sie grankee ??