Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 21
  1. #11
    Аватар для Danny_Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.11.2015
    Сообщений
    29
    Репутация:
    0 ±
    А я всё же попробую. На нём же и попрактикуюсь. Раз уж начал с этого мода в 2014 году, так и продолжу. Глядишь, может что - то из этого выйдет стоящее.
    Последний раз редактировалось Danny_Marcelo; 07.06.2016 в 06:00.

  2. #12
    Аватар для Danny_Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.11.2015
    Сообщений
    29
    Репутация:
    0 ±
    Не скоро версия 2.4. Каждый день заниматься модом не могу. Но чтобы вы не переживали, вот вам несколько скриншотов с разработки:

     Клик









    P.S. Это не всё. Тянем интрижку))
    Последний раз редактировалось Danny_Marcelo; 07.06.2016 в 06:03.

  3. #13
    Аватар для Danny_Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.11.2015
    Сообщений
    29
    Репутация:
    0 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Краткий обзор.



    Понты.
    Псевдооператор foreach используется независимо от того, найден инклуд или нет.
    Если компилятор не найдёт инклуд, он начнёт выплёвывать ошибки не на строке подключения инклуда, а по всему моду, где используется foreach.
    Те, кто говорят, что "#tryinclude" удобнее, чем "#include" (привет, г-и) - либо пустословы, либо редкостные мазохисты.



    Ещё понты.
    Функция уже объявлена в sscanf2.inc, зачем ещё раз объявлять её в моде?



    Циклы для слабаков.



    http://lurkmo.re/%D0%98%D0%BD%D0%B4%...BA.D0.BE.D0.B4



    Автор этого мода не только быдлокодер, но ещё и петросян.



    Сам собой напрашивается вопрос: зачем вообще к моду подключен sscanf2? Ради пары отрывков кода, которые лень переделать?
    Кстати, sscanf2 используется в моде всего 5 раз.
    Вот самое первое место, где он встречается:

    Параметры команды отделяются от названия сразу двумя способами, в лучших быдлокодерских традициях.
    И присмотритесь внимательно к форматной строке в sscanf: "s[32]s[128]". В переменную params ничего не запишется, вместо этого и название, и параметры окажутся в command. Мало того, если длина команды и параметров в сумме больше 31 символа, sscanf выплюнет сообщение в лог "sscanf warning: String buffer overflow" - и после этого гадай, откуда берётся такое сообщение.
    В остальных 4 случаях с помощью sscanf2 в командах (OnPlayerCommandText) обрабатываются параметры из params, но поскольку в params ничего нет, то команды будут работать не так, как задумано.



    Донор склероза.

    Ещё из той же команды:
    Код:
    new Cache: resultCache = mysql_query(dbHandle,adminsa,true);
    rows = cache_num_rows();
    if(rows < 1) return SCM(playerid,COLOR_GRAD2, "Этот игрок не менял имен.");
    // ...
    cache_delete(resultCache);
    Во-первых, можно устроить флуд этой командой (благо, от игрока требуется только ввести после неё чей-нибудь ник) - сервер начнёт лагать из-за однопоточных запросов.
    Во-вторых, если игрок ни разу не менял ник, кэш с результатами SQL-запроса не выгружается - получаем утечку памяти. Btw, таких утечек ещё полно по всему моду.
    Даже если сервер при флуде не будет зависать от однопоточных запросов, то из-за утечек у него вскоре закончится доступная память и хостер отрубит процесс.


    Итог:
    1. Код - эталон убожества.
    2. sscanf2 используется всего 5 раз... и все 5 раз неправильно.
    3. Куча возможностей положить сервер.
    Уважаемый Daniel_Cortez. Я учёл все ваши замечания и многое изменил в моде. И про sscanf ваш комментарий подтвердился.

    Начал использовать в командах sscanf и в итоге допустим взяв команду /msg. Если я в команде /msg использовал больше символов, то она не срабатывала, а вот в консоли выбивало вот именно такое сообщение:

    PHP код:
    "sscanf warning: String buffer overflow" 
    Я пробовал увеличивать колличество символов вот тут:

    PHP код:
    if(sscanf(params"s[50]"params[0])) return SendClientMessage(playeridCOLOR_LIGHTGREY"Используйте /msg [текст]"); 
    Но ничего не изменилось. И по этому у меня к вам такой вопрос. Если вас не затруднит, объясните пожалуйста мне, как же все таки мне правильно подключить sscanf к моду? Я сначала гуглил, но в итоге большинство тем находив, видел тоже самое, что у себя в моде. По этому приходится спросить у вас. Заранее благодарю за ответ.

    Вот изменил собственно подключение:

    Было так:

    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    string[256];
        new 
    tmp[128],idx;
        new 
    cmd[128];
        new 
    giveplayerid;
        
    cmd strtok(cmdtext,idx);
        
    // sscanf
        
    new command[32], params[128];
        
    sscanf(cmdtext"s[32]s[128]"commandparams); 
    А стало вот так:

    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
         new 
    string[256];
        new 
    tmp[128],idx;
        new 
    cmd[128];
        new 
    giveplayerid;
        
    cmd strtok(cmdtext,idx);
        
    // sscanf
        
    new command[128], params[128];
        
    sscanf(cmdtext"s[128]s[128]"commandparams); 
    Но я не уверен, что правильно сделал. По этому прошу Вашей помощи.
    Последний раз редактировалось Danny_Marcelo; 07.06.2016 в 08:58.

  4. #14
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. #15
    Аватар для Danny_Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.11.2015
    Сообщений
    29
    Репутация:
    0 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не понимаю, зачем сразу психовать? Я же по нормальному спросил. Да и потом, у вас в подписи написано:

    PHP код:
    Индивидуально в PM и Skype по скриптингу не помогаюЗадавайте все свои вопросы здесь (click). 
    Я Вам в скайпе не стучал, в ЛС тоже, а просто, чтобы не создавать тему новую, напрямую тут спросил. Все равно вы тут расписали всё.

  6. #16
    Аватар для Danny_Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.11.2015
    Сообщений
    29
    Репутация:
    0 ±
    Мод обновлён до версии 2.4.

  7. #17
    Аватар для SlimX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2015
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от Danny_Marcelo Посмотреть сообщение
    Уважаемый Daniel_Cortez. Я учёл все ваши замечания и многое изменил в моде. И про sscanf ваш комментарий подтвердился.

    Начал использовать в командах sscanf и в итоге допустим взяв команду /msg. Если я в команде /msg использовал больше символов, то она не срабатывала, а вот в консоли выбивало вот именно такое сообщение:

    PHP код:
    "sscanf warning: String buffer overflow" 
    Я пробовал увеличивать колличество символов вот тут:

    PHP код:
    if(sscanf(params"s[50]"params[0])) return SendClientMessage(playeridCOLOR_LIGHTGREY"Используйте /msg [текст]"); 
    Но ничего не изменилось. И по этому у меня к вам такой вопрос. Если вас не затруднит, объясните пожалуйста мне, как же все таки мне правильно подключить sscanf к моду? Я сначала гуглил, но в итоге большинство тем находив, видел тоже самое, что у себя в моде. По этому приходится спросить у вас. Заранее благодарю за ответ.

    Вот изменил собственно подключение:

    Было так:

    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    string[256];
        new 
    tmp[128],idx;
        new 
    cmd[128];
        new 
    giveplayerid;
        
    cmd strtok(cmdtext,idx);
        
    // sscanf
        
    new command[32], params[128];
        
    sscanf(cmdtext"s[32]s[128]"commandparams); 
    А стало вот так:

    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
         new 
    string[256];
        new 
    tmp[128],idx;
        new 
    cmd[128];
        new 
    giveplayerid;
        
    cmd strtok(cmdtext,idx);
        
    // sscanf
        
    new command[128], params[128];
        
    sscanf(cmdtext"s[128]s[128]"commandparams); 
    Но я не уверен, что правильно сделал. По этому прошу Вашей помощи.
    Переполнение массива кол-вом символов.
    Максимальная длина строки в чате - 128 символов.

  8. #18
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Я буду краток

    PHP код:
    case 2:
    {
        switch(
    PlayerInfo[playerid][pRang])
        {
            case 
    10atext "Мэр города";
            case 
    9atext "Заместитель мэра";
            case 
    8atext "Депутат";
            case 
    7atext "Старший лицензёр";
            case 
    6atext "Лицензёр";
            case 
    5atext "Старший секретарь";
            case 
    4atext "Секретарь";
            case 
    3atext "Начальник охраны";
            case 
    2atext "Охранник";
            case 
    1atext "Водитель";
        }

    PHP код:
    case 2:
    {
        static const
            
    atext[][] =
            {
                
                {
    "Водитель"},
                {
    "Охранник"},
                {
    "Начальник охраны"},
                {
    "Секретарь"},
                {
    "Старший секретарь"},
                {
    "Лицензёр"},
                {
    "Старший лицензёр"},
                {
    "Депутат"},
                {
    "Заместитель мэра"},
                {
    "Мэр города"}
            };
        
    atext[PlayerInfo[playerid][pRang]-1];

    Последний раз редактировалось m1n1vv; 07.07.2016 в 08:05.

  9. #19
    Аватар для Danny_Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.11.2015
    Сообщений
    29
    Репутация:
    0 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Я буду краток

    PHP код:
    case 2:
    {
        switch(
    PlayerInfo[playerid][pRang])
        {
            case 
    10atext "Мэр города";
            case 
    9atext "Заместитель мэра";
            case 
    8atext "Депутат";
            case 
    7atext "Старший лицензёр";
            case 
    6atext "Лицензёр";
            case 
    5atext "Старший секретарь";
            case 
    4atext "Секретарь";
            case 
    3atext "Начальник охраны";
            case 
    2atext "Охранник";
            case 
    1atext "Водитель";
        }

    PHP код:
    case 2:
    {
        static const
            
    atext[][]
            {
                
                {
    "Водитель"},
                {
    "Охранник"},
                {
    "Начальник охраны"},
                {
    "Секретарь"};
                {
    "Старший секретарь"},
                {
    "Лицензёр"},
                {
    "Старший лицензёр"},
                {
    "Депутат"},
                {
    "Заместитель мэра"},
                {
    "Мэр города"}
            };
        
    atext[PlayerInfo[playerid][pRang]-1];

    Спасибо, я вас услышал! :)

  10. #20
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    8 ±
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[]) 

        new 
    cmd[32], params[128];
        
    sscanf(cmdtext"s[32]s[128]"cmdparams);
        if(!
    strcmp(cmd"/msg"true)) 
        {
            
    //...
            
    return 1;
        }
        return 
    0;


 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •