delete
Вид для печати
delete
Нескромный вопрос к автору темы: вы вообще проверяли свой код?
PHP код:
CMD:id(playerid, params[])
{
if(sscanf(params,"u",params[0])) return SendClientMessage(playerid, 0xAFAFAFFF, "Используйте: /id [ид игрока/часть ника]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xFFFF00FF, "Совпадении не найдено ");
new name[MAX_PLAYER_NAME], str[13+MAX_PLAYER_NAME];
GetPlayerName(params[0], name, sizeof(name));
format(str, sizeof(str), "%s - ID: %d", name, params[0]);
SendClientMessage(playerid, 0xFFFFFFFF, str);
return 1;
}
1. Если на сервере будет один единственный игрок под ID 0, то GetPlayerPoolSize() вернёт 0 (подробнее здесь).
В цикле for условие проверяется перед выполнением тела цикла. Первая же проверка условия (--i >= 0) выдаст false (переменная i окажется равна -1) и тело цикла не выполнится ни разу.
2. Как уже подметили выше, вместо получения никнейма каждого i-того игрока берётся ник игрока, который ввёл команду.
Поэтому если на сервере будет 5 или более человек и игрок введёт часть своего ника, команда профлудит сообщениями с его ником 5 раз.
3.
Что мешает выйти из цикла при инкременте переменной found_id на предыдущей итерации?PHP код:
if(found_id > 5)
break;
found_id++;
Можно было сделать примерно так:
Но нет, мы лёгких путей не выбираем: если достигнут лимит, проведём поиск ещё раз - и плевать, что найденный результат не будет использоваться.PHP код:
if(++found_id >= 5)
break;
4.
Зачем эти действия вообще нужны в цикле, если они должны выполняться однократно?PHP код:
else if(found_id == -1)
return SendClientMessage(playerid, 0xB4B5B7FF, "Совпадений не найдено");
else if(found_id >= 4)
SendClientMessage(playerid, 0xB4B5B7FF, "Показаны первые 5 совпадений");
5. Сообщение "Показаны первые 5 совпадений" будет выведено 2 раза, если на сервере будут хотя бы 5 игроков.
6. Если игрок введёт подстроку, которой нет в его никнейме, сообщение "Совпадений не найдено" будет показано столько раз, сколько игроков играют на сервере.
Из всего этого напрашивается вопрос: каким образом вы тестировали свою команду, если упустили столько ошибок, которые даже без тестирования бросаются в глаза? Тяп-ляп и в паблик? Not cool.
Daniel, вы полностью правы. Люди не очень понимают то, что они делают. Каждый программист должен понимать, все что он делает, он так же должен понимать как его программа работает, и что в ней происходит.