Форум DEVDS Project

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум DEVDS Project » Оптимизация в Павно » Оптимизация циклов MAX_PLAYERS


Оптимизация циклов MAX_PLAYERS

Сообщений 1 страница 2 из 2

1

Замена 1

Код:
#if defined MAX_PLAYERS 
#undef MAX_PLAYERS 
#define MAX_PLAYERS 100 
#else 
#define MAX_PLAYERS 100 
#endif

Замена 2

Код:
new PLIDs[MAX_PLAYERS];
new MaxPlayers = 0;

Очистим весь массив PLIDs при инициализации мода OnGameModInit:

Код:
for(new i=0;i<sizeof(PLIDs);i++){PLIDs[i] = -1;}

Теперь надо добавить в паблик OnPlayerConnect  необходимые операции с глобальными переменными:

Код:
PLIDs[MaxPlayers] = playerid; 
MaxPlayers++;

С пабликом OnPlayerDisconnect все немного сложнее. Игрок выходит, тоесть слот в PLIDs который занимала его ИД надо очистить. Но мне не нужен пустой слот, поэтому я присваиваю ему значение самого последнего слота PLIDs, и вот последний уже очищаю:

Код:
for(new i=0;i<MaxPlayers;i++) 
{ 
    if(PLIDs[i] == playerid) 
    { 
        MaxPlayers--; 
        PLIDs[i] = PLIDs[MaxPlayers]; 
        PLIDs[MaxPlayers] = -1; 
        break; 
    } 
}

Пример:

Код:
for(new i=0;i<MaxPlayers;i++) 
{ 
    SendClientMessage(PLIDs[i], -1, "Message"); 
}

2

by White_116

Код:
#if defined MAX_PLAYERS
#undef MAX_PLAYERS
#define MAX_PLAYERS 250
#else
#define MAX_PLAYERS 250
#endif

new PLIDs[MAX_PLAYERS char];//={255,...};
new MaxPlayers[1 char];

public OnPlayerConnect(playerid)
{
	if(!IsPlayerNPC(playerid))
	{
    PLIDs{MaxPlayers{0}} = playerid;
    ++MaxPlayers{0};
	}
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	for(new i=0;i<MaxPlayers{0};++i)
	{
	    if(PLIDs{i} == playerid)
	    {
	        --MaxPlayers{0};
	        PLIDs{i} = PLIDs{MaxPlayers{0}};
	        //PLIDs{MaxPlayers{0}} = 255;
	        break;
	    }
	}
	return 1;
}

Пример:

Код:
for(new i;i<MaxPlayers{0};++i)
{
    SendClientMessage(PLIDs{i}, -1, "Message");
}

Вы здесь » Форум DEVDS Project » Оптимизация в Павно » Оптимизация циклов MAX_PLAYERS