SA-MP Forums Archive
Проблема со сканированьем. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Проблема со сканированьем. (/showthread.php?tid=635068)



Проблема со сканированьем. - Artem_Loginov - 31.05.2017

Всем доброго времени суток , у меня такая проблема:
Вообщем бывает человек 10 - 11 попадает под этот баг при большом онлайне .
PHP код:
#define PlayerIsNotOnline                "Игрок не в игре!" 
Это переменная для
PHP код:
else if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid0xBEBEBEAAPlayerIsNotOnline); 
и если игрок в сети , он почему то его не видеть и так на любой команде , подскажите в чем может быть проблема.


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(playeridparams[]){
    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(playeridparams[]){
    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(playeridparams[])
{
    
sscanf(params"I(-1)I(-1)"params[0], params[1]); 
    return 
true;
}
//
cmd::commandname(playerid"");// Ну или игрок просто введёт команду без параметров 
= краш, ибо sscanf отчаянно начнёт пытаться записывать данные в ячейки, которых просто не существует.


Re: Проблема со сканированьем. - Artem_Loginov - 06.06.2017

Поменял все команды , и все же косяк остается.
Что посоветуете?