Проблема со сканированьем. -
Artem_Loginov - 31.05.2017
Всем доброго времени суток , у меня такая проблема:
Вообщем бывает человек 10 - 11 попадает под этот баг при большом онлайне .
PHP код:
#define PlayerIsNotOnline "Игрок не в игре!"
Это переменная для
PHP код:
else if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xBEBEBEAA, PlayerIsNotOnline);
и если игрок в сети , он почему то его не видеть и так на любой команде , подскажите в чем может быть проблема.
Re: Проблема со сканированьем. -
Mutha_X - 31.05.2017
Использование params[*] в качестве "любое число, но не символ текста параметров" для лохов и говнокодеров.
Потому что вы в IsPlayerConnected() передаёте число от 33 до 127 или от 192 до 255, либо некоторые из диапазона от 129 до 191.
P.S.: ваша Ванга.
Re: Проблема со сканированьем. -
Artem_Loginov - 31.05.2017
как решить проблему?. я попросил помощи.
Re: Проблема со сканированьем. -
Mutha_X - 31.05.2017
Ваш срок бесплатной подписки на Вангу закончился.
Вообще-то вас даже троллить не нужно, вы сами шоу запилили.
Ну ладно... "Как быть?" значит? - Ладно, отвечу "использовать что-то иное, но не params[0]".
+в репу за помощь
Re: Проблема со сканированьем. -
Gettopro - 01.06.2017
Quote:
Originally Posted by Mutha_X
Ваш срок бесплатной подписки на Вангу закончился.
Вообще-то вас даже троллить не нужно, вы сами шоу запилили.
Ну ладно... "Как быть?" значит? - Ладно, отвечу "использовать что-то иное, но не params[0]".
+в репу за помощь
|
т.е. по Вашему код рода:
PHP код:
cmd:warn(playerid, params[]){
if(Player[playerid][pAdminPlayer] < LEVEL_WARN) return -1;
if(sscanf(params,"ds[30]",params[0],params[1])) return SendClientMessage(playerid, -1, ""ISSYSTEMSG"/warn [ID] [причина]");
GiveWarn(playerid,params[0],params[1]);
return true;
}
Является быдлокодом, а код вида:
PHP код:
cmd:warn(playerid, params[]){
if(Player[playerid][pAdminPlayer] < LEVEL_WARN) return -1;
new givedplayerid,warnreason[30];
if(sscanf(params,"ds[30]",givedplayerid,warnreason)) return SendClientMessage(playerid, -1, ""ISSYSTEMSG"/warn [ID] [причина]");
GiveWarn(playerid,givedplayerid,warnreason);
return true;
}
является грамотным?
Re: Проблема со сканированьем. -
DartfoL - 01.06.2017
ну вообще-то да
Re: Проблема со сканированьем. -
Artem_Loginov - 01.06.2017
Спасибо буду знать.
Re: Проблема со сканированьем. -
Mutha_X - 01.06.2017
Quote:
Originally Posted by Gettopro
т.е. по Вашему код рода:
Является быдлокодом, а код вида:
является грамотным?
|
Почитайте на тему (само)документирующегося кода.
Чтобы по быстрому понять какой новый смысл приобретает ячейка params[0] или params[1] вам надо было прописать соответствующий комментарий (а даже его у вас нет).
А если вам нужно тысячу таких команд проверить в сжатые сроки?
А если у вас команда в 500 строк? А если там ещё несколько раз меняет свой смысл params[0]? А если вы захотите модифицировать такую команду где-то посередине, а при этом забудете или перепутаете (проморгаете) строку, где меняется смысл params[0]?
Если вам нравится такой затратный по времени фетиш, можем только посочувствовать.
Re: Проблема со сканированьем. -
ZiGGi - 01.06.2017
Более того, обращение к ячейке массива происходит медленнее, чем к переменной. Но удобство чтения кода, конечно, куда более значимый пункт.
Re: Проблема со сканированьем. -
youngPimp - 02.06.2017
Убери оператор else перед проверками.
Re: Проблема со сканированьем. -
Artem_Loginov - 02.06.2017
спасибо попробую
Re: Проблема со сканированьем. -
Eims - 02.06.2017
Quote:
Originally Posted by Mutha_X
Почитайте на тему (само)документирующегося кода.
Чтобы по быстрому понять какой новый смысл приобретает ячейка params[0] или params[1] вам надо было прописать соответствующий комментарий (а даже его у вас нет).
А если вам нужно тысячу таких команд проверить в сжатые сроки?
А если у вас команда в 500 строк? А если там ещё несколько раз меняет свой смысл params[0]? А если вы захотите модифицировать такую команду где-то посередине, а при этом забудете или перепутаете (проморгаете) строку, где меняется смысл params[0]?
Если вам нравится такой затратный по времени фетиш, можем только посочувствовать.
|
Ко всему вышеперечисленному следует записать краш в случае, когда команда с таким вот params[0]/params[1], которые обрабатываются в sscanf и в которой учтена возможность необязательных параметров, вызывается без параметров вообще (просто ввод команды). То бишь, вот такой код:
PHP код:
CMD:commandname(playerid, params[])
{
sscanf(params, "I(-1)I(-1)", params[0], params[1]);
return true;
}
//
cmd::commandname(playerid, "");// Ну или игрок просто введёт команду без параметров
= краш, ибо sscanf отчаянно начнёт пытаться записывать данные в ячейки, которых просто не существует.
Re: Проблема со сканированьем. -
Artem_Loginov - 06.06.2017
Поменял все команды , и все же косяк остается.
Что посоветуете?