Szukasz optymalizacji nie tam gdzie trzeba... Nawet jeśli pętla wykonuje się przy każdej śmierci gracza, załóżmy że śmierć wywołuje się średnio raz na 5 sekund, a pętla po graczach wykona się w ile? 0.0001 sekundy? Rozumiem, czasem w pętli jest faktycznie dużo do zrobienia, ale taka pętla:
for (new id=1; id<=maxplayers; ++id) {
if (!client_connected(id))
continue;
// jakiś dłużej wykonujący się kod
}
to próba skrócenia tej pętli w jakikolwiek sposób skróci czas jej wykonywania o 0.5% może troszkę więcej, bo przecież i tak kod wewnątrz pętli się dla nieistniejących graczy nie wykona, a sprawdzenie czy gracz jest połączony i pominięcie danej iteracji pętli gdy nie jest zajmuje ułamek sekundy...
Jeśli z jakiegoś powodu chcesz, by pętla wykonała się dokładnie tyle razy, ile masz graczy użyj:
new Players[32], Num, i;
get_players(Players, Num);
for(i=0; i < Num; i++)
{
new id=Players[i];
// jakiś dalszy kod
}
ale ma to sens gdy z jakiegoś naprawdę konkretnego powodu chcesz by pętla nie wykonała się ani razu więcej, np licznik i z pętli wykorzystujesz gdzieś dalej do określenia ile razy pętla się wykonała (np gdy szukasz tą pętlą gracza konkretnego i na nim zatrzymujesz pętlę a następnie chcesz określić z jakiegoś powodu który z kolei był to gracz).
dużo ważniejsze jest optymalizowanie wywołań długiego kodu w eventach takich jak prethink, add to fullpack, niwelowanie wykonujących się co chwilę tasków, niwelowanie kodu który wstrzymuje serwer na dłuższą chwilę (bo np zawiera pętlę która wykonuje się 10000 razy). Warto użyć do tego typu optymalizacji profilera:
https://forums.allie...00&postcount=87ale pamiętaj, że nie nadaje się on na działające serwery, jedynie do szukania problemów i rzeczy do zoptymalizowania.