-
Участники
Выводит только одного человека который на зоне, остальных не показывают, подскажите в чем ошибка?
PHP код:
foreach(Player, i)
{
if(!IsPlayerConnected(i)) continue;
if(InZone[i] == false) continue;
new string[MAX_PLAYER_NAME*20],
players;
players++;
format(string, sizeof string, "{FFDEAD}%s[%d]\n",pInfo[i][pName], i);
ShowPlayerDialog(playerid, dDm_Players, DIALOG_STYLE_MSGBOX, !"{FFFFFF}Участники", string, !"Обновить", !"Назад");
}
-
По моему такую ошибку с таким же кодом кто то кидал сюда и её решали,
я даже функцию давал как правильно пинать игрока с зоны...
-
PHP код:
new string[MAX_PLAYER_NAME*20],
players;
foreach(Player, i)
{
if(InZone[i] == false) continue;
players++;
format(string, sizeof string, "%s{FFDEAD}%s[%d]\n", string, pInfo[i][pName], i);
}
ShowPlayerDialog(playerid, dDm_Players, DIALOG_STYLE_MSGBOX, !"{FFFFFF}Участники", string, !"Обновить", !"Назад");
-
Лучше создать отдельный итератор, который будет содержать идентификаторы игроков. Перебор игроков получится чуть быстрее, поскольку в цикле не будет проверяться нахождение игрока на сервере и на зоне (урок). Кстати, переменную players можно удалить, поскольку вместо неё можно использовать Iter_Count.
Ещё, я думаю, лучше инициализировать массив и переменные вне цикла, ибо при каждой итерации будет создаваться новый массив, а после завершения итерации - освобождаться. Очевидно, что выполнение таких действий замедлит работу кода.
Пример:
PHP код:
// В глобальной области видимости
new Iteartor:ZoneIter[MAX_PLAYERS /* или любое другое значение, например, максимальное количество игроков на зоне */];
// В функции
new string[MAX_PLAYER_NAME * 20];
foreach(new i : ZoneIter) {
format(string, sizeof string, "%s{FFDEAD}%s[%d]\n", string, pInfo[i][pName], i);
}
ShowPlayerDialog(playerid, dDm_Players, DIALOG_STYLE_MSGBOX, !"{FFFFFF}Участники", string, !"Обновить", !"Назад");