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.
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.
Czy aby na pewno na serwerze x-slotowym gracz nie może dostać id x+1?
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?