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, вы полностью правы. Люди не очень понимают то, что они делают. Каждый программист должен понимать, все что он делает, он так же должен понимать как его программа работает, и что в ней происходит.
Обновил.
не оскорбление а грубость скорее)
как раз таки на этом форуме в большей части можно высказывать свои мнения,проверено)
а на счет вежливости,то,как-бы сказать,если и встретишь то оочень редко человека с такой вежливостью что-ли,да и по сути на любом форуме много маленьких быдло кодеров которые только чужих мамок в кино умеют водить,на счет Сальвакора я честно говоря не знаю,видимо со стороны ваш комментарий был поход на "лизоблюдство",но,на это у каждого свой взгляд,проще не обращай внимание.
p.s. а по сути твоя манера общения мне даже нравится)
Это здорово, что вы согласны с чьей-то точкой зрения, но в чём смысл оставлять пост, если вы просто пересказываете чужую идею?
Не следует путать конструктивное обсуждение с набиванием постов. В конце концов, если вы согласны с чьим-то мнением, но вам нечего добавить, и вы просто хотите как-то выразить своё согласие - под каждым постом есть кнопка "Спасибо".
Когда я оставил свой предыдущий пост, я не заметил, что в found_id начинается с -1, а не с 0.
Могу поинтересоваться, почему вы сделали именно так? Вы как-нибудь представляете себе -1 игроков? Или -1 метр?
К тому же, в функцию format приходится передавать не found_id, а found_id + 1.
Кроме того, вы ищете до 5 игроков, но в условии прерывания поиска приходится указывать 4, что только ещё больше запутывает ваш код.
И да, ещё. Что послужило причиной того, что вы сделали foreach.inc обязательным?