PDA

Просмотр полной версии : [Native] GetPlayerPoolSize



Daniel_Cortez
18.10.2015, 15:33
Описание:

Возвращает самый большой ID игрока, играющего на сервере.

Параметры:

Функция не принимает параметров.


Возвращаемое значение:

Возвращает самый большой ID игрока, играющего на сервере, или 0, если сервер пуст.

Примечания:
Данная функция была добавлена в SA:MP 0.3.7 и не работает в более ранних версиях.
Функция возвращает 0 в двух случаях: если сервер пуст и если на сервере только один игрок с ID равным нулю.
Чтобы отличить эти два случая, проверяйте подключение игрока 0:

if (GetPlayerPoolSize() == 0) // Неоднозначная ситуация.
{
if(IsPlayerConnected(0) == 0)
print("На сервере нет ни одного игрока.");
else
// ...
}


Пример использования:

CMD:online(playerid, params[])
{
// Перебор всех игроков на сервере с подсчётом онлайна.
// Если i-тый игрок подключен, к переменной "c" прибавится 1,
// если нет - не прибавится ничего.
new c = 0;
for (new i = GetPlayerPoolSize()+1; i-- != 0;)
c += IsPlayerConnected(i);
// Форматирование и вывод сообщения с результатом.
static const fmt_str[] = "Текущий онлайн: %d игроков";
new string[sizeof(fmt_str) - 2 + 4];
format(string, sizeof(string), fmt_str, c);
return SendClientMessage(playerid, -1, string);
}

См. также:

[Native] GetVehiclePoolSize (http://pro-pawn.ru/showthread.php?12761-GetVehiclePoolSize)



Статью подготовил: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)


Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено.

L0ndl3m
18.10.2015, 15:40
Очередной костыль от kye. Почему в проверке IsPlayerConnected лучше использовать "== 0" нежели "!" перед функцией? Функция возвращает только 2 значения: 1 и 0.

Daniel_Cortez
18.10.2015, 15:48
Очередной костыль от kye. Почему в проверке IsPlayerConnected лучше использовать "== 0" нежели "!" перед функцией? Функция возвращает только 2 значения: 1 и 0.
При сравнении с нулём после вызова IsPlayerConnected генерируется только одна инструкция перехода (jz/jnz - зависит от случая), а с "!" после IsPlayerConnected происходит сначала отрицание (инструкция not), а только потом переход (jnz/jz). Даже при включенных оптимизациях (ключ -O1) компилятор оставляет "лишнюю" инструкцию not.
Если не считать этого, то использование "!" вместо сравнения с 0 - всего лишь дело удобства. Если нужно, могу изменить пример в статье.

Unreal
18.10.2015, 19:01
При сравнении с нулём после вызова IsPlayerConnected генерируется только одна инструкция перехода (jz/jnz - зависит от случая), а с "!" после IsPlayerConnected происходит сначала отрицание (инструкция not), а только потом переход (jnz/jz). Даже при включенных оптимизациях (ключ -O1) компилятор оставляет "лишнюю" инструкцию not.
Если не считать этого, то использование "!" вместо сравнения с 0 - всего лишь дело удобства. Если нужно, могу изменить пример в статье.

я видел что используют даже так

if(0 == IsPlayerConnected(playerid))

оно ведь не отличается от ?

if(IsPlayerConnected(playerid) == 0)

[ForD]
18.10.2015, 19:30
я видел что используют даже так

if(0 == IsPlayerConnected(playerid))

оно ведь не отличается от ?

if(IsPlayerConnected(playerid) == 0)

нет,не должно,в данном случае

L0ndl3m
18.10.2015, 20:53
Unreal, условия читаются данным способом:

левое == правое
следовательно проверка:

правое == левое
будет типичной.
Напоминает коммутативность.

Unreal
18.10.2015, 21:38
Unreal, условия читаются данным способом:

левое == правое
следовательно проверка:

правое == левое
будет типичной.
Напоминает коммутативность.

т.е тот код с

if(0 == IsPlayerConnected(playerid)) просто так? или есть и похожие на это "что - либо" ?

------ добавлено ---------

вот нашел. http://pro-pawn.ru/showthread.php?5471-giveveh-(dc_cmd-zcmd)-sscanf :smile:

Daniel_Cortez
18.10.2015, 21:49
я видел что используют даже так

if(0 == IsPlayerConnected(playerid))

оно ведь не отличается от ?

if(IsPlayerConnected(playerid) == 0)
В обоих случаях сначала выполнится функция IsPlayerConnected, а затем возвращённое ей значение будет сравниваться с нулём.

Unreal
18.10.2015, 22:36
вот что я нашел, может кому будет интересно
http://img.uz/d/2015/10/5623e66da7c40.png

сори за оффтоп

Геннадий Акимов
19.10.2015, 01:49
А зачем это ? не легче открыть Tab и там посмотреть ?

Daniel_Cortez
19.10.2015, 07:07
А зачем это ? не легче открыть Tab и там посмотреть ?
Функции нужны для сервера, а не для клиента. Или вы вместо IsPlayerConnected тоже заставляете сервер "открыть Tab и там посмотреть"?