09.04.2011, 17:23
GetMaxPlayers() лучше любого foreach, т.к. зачастую надо прогонять все доступные слоты и инициализировать в них переменные, поэтому лучше всего просто устанавливать максимальное кол-во слотов для игроков примерно столько, сколько в среднем у вас играет или может играть в среднем.
Если слотов мало, то в конфиге увеличивается кол-во и делается рестарт. От рестарта ещё ни кто не умер.
В создании динамических массивов вижу смысл только для застрименых тачек, чтобы не гонять цыклы от 1 до 2000, т.к. в сампе нету ф-ии определения загруженных на данный момент общего кол-ва тачек (типа GetMaxVehicles() ).
МОжно попытаться типа так
но при системе владения авто, которая удаляет тачки после их смерти, образуются большие дыры. По-этому этот способ тоже не из лучших.
Лучше писать самому что то на подобие
При использовании foreach у меня сервер зависает, что типа работает но ни одно команда, даже через удалённую консоль, не отрабатывается. Т.е. приходится ФСом крашить сервер.
Если слотов мало, то в конфиге увеличивается кол-во и делается рестарт. От рестарта ещё ни кто не умер.
В создании динамических массивов вижу смысл только для застрименых тачек, чтобы не гонять цыклы от 1 до 2000, т.к. в сампе нету ф-ии определения загруженных на данный момент общего кол-ва тачек (типа GetMaxVehicles() ).
МОжно попытаться типа так
pawn Code:
stock GetHighestVehicleID()
{
for(new vid = 1; vid < (MAX_VEHICLES-1); vid++)
{
if( GetVehicleModel(vid) == 0 &&
GetVehicleModel(vid+1) == 0 &&
GetVehicleModel(vid+2) == 0)
{
return vid;
}
}
return 0;
}
Лучше писать самому что то на подобие
pawn Code:
public OnVehicleStreamIn(vehicleid, forplayerid)
{ //Вызывается при появлении тачки vehicleid в поле зрения игрока forplayerid.
Itter_Add(StreamedVehicle[forplayerid], vehicleid); // Добавляем в динамическии цикл новую итерацию для этого игрока.
...