Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±

    Краш сервера

    Репорт: https://pastebin.com/0QUSdak8
    Ответ на него: https://pastebin.com/SqDmKpxG
    При ответе на репорт сервер крашит, samp-server.exe закрывается
    Как решить?

    - - - Добавлено - - -

    Репорт:
    PHP код:
    CMD:report(playerid)
    {
        if(
    player[playerid][pAdmin] > 0)
            return 
    SCM(playeridCOLOR_RED, !"Вы не можете подавать жалобы в репорт, так как Вы администратор!");
        else
            
    DialogReport(playerid);
        return 
    true;
    }
     
    new 
    report_timer[MAX_PLAYERS],
        
    boolreport_check[MAX_PLAYERS char];
     
    stock DialogReport(playerid)
    {
        
    SPD(playerid16DSI, !"{00C0FF}Репорт",
            !
    "\
                {00C0FF}Введите свою жалобу в поле ниже\n\
                \n{F81414}В репорте запрещен оффтоп/оскорбления/попрошайничество!"
    , !"{00C0FF}Принять", !"{00C0FF}Отмена\
            "
    );
    }
    case 
    16:
            {
                if(
    response)
                {
                    new
                        
    len strlen(inputtext);
                    if(!
    len)
                    {
                        
    SCM(playeridCOLOR_RED, !"Вы ничего не ввели!");
                        
    DialogReport(playerid);
                        return 
    true;
                    }
                    if(
    report_check{playerid} == true)
                    {
                        
    SCM(playeridCOLOR_RED, !"Жалобу вы можете подавать не раньше раз в минуту!");
                        
    DialogReport(playerid);
                        return 
    true;
                    }
                    if(
    len 50)
                    {
                        
    SCM(playeridCOLOR_RED, !"Ваша жалоба слишком длинная, попробуйте ее сократить");
                        
    DialogReport(playerid);
                        return 
    true;
                    }
                    static
                        
    fmt_str[] = "Жалоба, которую вы отправили на рассмотрение администрации проекта Junction RP: %s",
                        
    fmt_str_adm[] = "Игрок %s[%d] оставил жалобу: %s";
                    new
                        
    string[sizeof(fmt_str)-1+50+86],
                        
    string_adm[sizeof(fmt_str_adm)-5+50+MAX_PLAYER_NAME+3+86];
                    
    format(stringsizeof(string), fmt_str, (inputtext));
                    
    format(string_admsizeof(string_adm), fmt_str_admGetName(playerid), playerid, (inputtext));
                    
    SCM(playeridCOLOR_YELLOWstring);
                    
    AdminChat(COLOR_REDstring_adm);
                    
    report_check{playerid} = true;
                    
    report_timer[playerid] = SetTimerEx("@_ReportTime"1000*60false"i"playerid);
                }
            }
     
    @
    _ReportTime(playerid);
    @
    _ReportTime(playerid)
    {
        
    report_check{playerid} = false;
        return 
    true;

    Ответ:

    PHP код:
    CMD:answer(playeridparams[])
    {
        if(
    player[playerid][pAdmin] == 0)
        {
            
    SCM(playeridCOLOR_RED, !"Вы не администратор!");
            return 
    false;
        }
     
        new
            
    targetid,
            
    answer[31];
     
        if(
    sscanf(params"us[31]"targetidanswer))
            return 
    SCM(playeridCOLOR_RED, !"Образец ответа на репорт: /kick [id] [reason]");
        if(!
    IsPlayerConnected(targetid))
            return 
    SCM(playeridCOLOR_RED, !"Игрок с введенным вами ID не в сети!");
        if(
    answer[30] != EOS)
            return 
    SCM(playeridCOLOR_RED, !"Максимальная длина ответа на репорт: 30 символов");
        if(
    report_check{targetid} == false)
            return 
    SCM(playeridCOLOR_RED, !"Игрок с данным ID не писал в репорт!");
     
        static const
            
    fmt_str[] = "[ADMIN] Администратор %s ответил на ваш репорт: %s",
            
    fmt_str2[] = "[ADMIN] Вы ответили игроку %s на репорт: %s";
     
        new
            
    str[sizeof(fmt_str)-4+MAX_PLAYER_NAME+30+1],
            
    str2[sizeof(fmt_str2)-4+MAX_PLAYER_NAME+30+1];
     
        
    format(strsizeof(str), fmt_strGetName(playerid), answer);
        
    format(str2sizeof(str2), fmt_str2GetName(playerid), answer);
        
    SCM(targetidCOLOR_REDfmt_str);
        
    SCM(playeridCOLOR_REDfmt_str2);
        
    report_check{targetid} = false;
        
    KillTimer(report_timer[targetid]);
        return 
    true;

    Последний раз редактировалось SteveStage; 10.11.2019 в 15:01.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Подключить crashdetect и посмотреть причину краша?
    Ну и да. Вместо вот этого извращения:
    1. static const
    2. fmt_str[] = "[ADMIN] Администратор %s ответил на ваш репорт: %s",
    3. fmt_str2[] = "[ADMIN] Вы ответили игроку %s на репорт: %s";
    4.  
    5. new
    6. str[sizeof(fmt_str)-4+MAX_PLAYER_NAME+30+1],
    7. str2[sizeof(fmt_str2)-4+MAX_PLAYER_NAME+30+1];
    8.  
    9. format(str, sizeof(str), fmt_str, GetName(playerid), answer);
    10. format(str2, sizeof(str2), fmt_str2, GetName(playerid), answer);
    11. SCM(targetid, COLOR_RED, fmt_str);
    12. SCM(playerid, COLOR_RED, fmt_str2);

    можно было сделать так:
    1. new
    2. string[144+1];
    3.  
    4. format(string, sizeof(string), "[ADMIN] Администратор %s ответил на ваш репорт: %s", GetName(playerid), answer);
    5. SCM(targetid, COLOR_RED, string);
    6. format(string, sizeof(string), "[ADMIN] Вы ответили игроку %s на репорт: %s", GetName(playerid), answer);
    7. SCM(playerid, COLOR_RED, string);

    Этим я только что сэкономил 4 строки, 53 ячейки стека и пару минут своей жизни.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    318
    Репутация:
    7 ±
    Краш был из-за того, что я, видимо пьяный, написал в SCM неформатированный fmt_str, а не str, а из-за символов спецификатора и крашило (%)

    ЗАКРЫТО

 

 

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

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

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

Ваши права

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