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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±

    Ошибка с SetPlayerExtra (Система оповещения)

    Вот допустим у меня диалог с которым я работаю
    PHP код:
    case 667:
            {
                if(
    response)
                {
                    if(!
    IsACop(playerid))
                    {
                        
    WantedPoints[playerid]+=2;
                        
    PlayerInfo[playerid][pWanted]+=2;
                        
    SetPlayerExtra(playerid,255"Проникновение в хранилище банка");
                        
    SetPPos(playerid,2147.862,1601.332,1006.168);
                        
    SetPlayerInterior(playerid,1);
                        
    PlayerInfo[playerid][pInt] = 1;
                        
    SetPlayerVirtualWorld(playerid,3);
                        
    SetPlayerFacingAngle(playerid180.0);
                        
                    }
                }
            } 
    Если убрать строчку
    PHP код:
    SetPlayerExtra(playerid,255"Проникновение в хранилище банка"); 
    То всё кашерно проходит, а с этим стоком(SetPlayerExtra) в логах ошибка высвечивается:
    PHP код:
    [02:33:26] [debugRun time error 4"Array index out of bounds"
    [02:33:26] [debug]  Accessing element at index 255 past array upper bound 49
    [02:33:26] [debugAMX backtrace:
    [
    02:33:26] [debug#0 000db2e4 in ?? (0, 255, 5422964) from beta39.amx
    [02:33:26] [debug#1 0006b834 in public OnDialogResponse (0, 667, 1, -1, 6420012) from beta39.amx 
    Вот сам stock SetPlayerExtra
      Открыть/закрыть
    PHP код:
    stock SetPlayerExtra(playerid,declare,reason[])
    {
        if(
    IsPlayerConnected(playerid))
        {
            new 
    turner[64];
            
    strmid(PlayerCrime[playerid][pAccusedof], reason0strlen(reason), 255);
            if (declare == 
    INVALID_PLAYER_ID)
            {
                
    format(turnersizeof(turner), "Неизвестный");
                
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(turner), 255);
            }
            else
            {
                if(
    IsPlayerConnected(declare))
                {
                    
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255);
                    
    strmid(PlayerCrime[declare][pBplayer], PlayerInfo[declare][pNames], 0strlen(PlayerInfo[declare][pNames]), 255);
                    
    strmid(PlayerCrime[declare][pAccusing], reason0strlen(reason), 255);
                }
            }
            
    SendMes(playerid,COLOR_LIGHTRED,"Вы совершили преступление: [%s]. Сообщил: %s.",reason,PlayerInfo[declare][pNames]);
            if(
    PlayerInfo[playerid][pWanted] > 0)
            {
                new 
    yesno;
                if(
    PlayerInfo[playerid][pWanted] != 0) { if(gTeam[playerid] == 3gTeam[playerid] = 4yesno 1; }
                if(
    yesno)
                {
                    
    SendMes(playerid,COLOR_YELLOW,"Текущий уровень розыска: %d"PlayerInfo[playerid][pWanted]);
                    
    SetPlayerWantedLevel(playeridPlayerInfo[playerid][pWanted]);
                    foreach(
    Player,i)
                    {
                        if(
    IsPlayerConnected(i)) { if(IsACop(i) || IsACru(i)) SendMes(i,0xFEBC41AA,"[Рация] Подозреваемый: {E23F3F}%s{FEBC41}. Преступление: %s. Сообщает:  %s.",PlayerInfo[playerid][pNames],reason,PlayerInfo[declare][pNames]); }
                    }
                }
            }
        }
    //not connected



    Кто подскажет в чём тут трабла?

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

    Статус
    Оффлайн
    Регистрация
    16.06.2015
    Сообщений
    7
    Репутация:
    1 ±
    Попробуй так

    PHP код:
    SetPlayerExtra(playerid,INVALID_PLAYER_ID,"Проникновение в хранилище банка"); 

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Подключите crashdetect и откомпилируйте мод с отладкой -d3
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Также можно получить более подробную информацию (например строки кода, на которых происходит ошибка, имена функций, параметры и т.д.), скомпилировав скрипт в режиме отладки следующим образом:
    1. Открыть блокнот и ввести "-d3" (без кавычек).
    2. Сохранить файл как "pawn.cfg" (под именем указать параметр "Все файлы") в папку с Pawno.
    3. Заново скомпилировать мод.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  4. #4
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Подключите crashdetect и откомпилируйте мод с отладкой -d3
    Он и так у меня стоит плагин этот и скомпилирован с такой отладкой) Юзер выше в правильном направлении пошёл, почти в правильном...

    Цитата Сообщение от Reim Посмотреть сообщение
    Попробуй так

    PHP код:
    SetPlayerExtra(playerid,INVALID_PLAYER_ID,"Проникновение в хранилище банка"); 
    PHP код:
    [15:44:11] [debugRun time error 4"Array index out of bounds"
    [15:44:11] [debug]  Accessing element at index 65535 past array upper bound 49
    [15:44:11] [debugAMX backtrace:
    [
    15:44:11] [debug#0 000db188 in ?? (3, 65535, 5422940) from beta39.amx
    [15:44:11] [debug#1 0006b7a0 in public OnDialogResponse (3, 667, 1, -1, 6419700) from beta39.amx 
    Попробовал подставить MAX_PLAYERS тоже вылетела эта шляпа Accessing element at index 65535 past array upper bound 49
    Поставил MAX_PLAYERS-1 и заработал наполовину код, почему наполовину потому:
    PHP код:
    Вы совершили преступление: [Грабёж]. Сообщил: . 
    А должно выглядеть так:
    PHP код:
    Вы совершили преступление: [Грабёж]. СообщилНеизвестный

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Он и так у меня стоит плагин этот и скомпилирован с такой отладкой) Юзер выше в правильном направлении пошёл, почти в правильном...


    PHP код:
    [15:44:11] [debugRun time error 4"Array index out of bounds"
    [15:44:11] [debug]  Accessing element at index 65535 past array upper bound 49
    [15:44:11] [debugAMX backtrace:
    [
    15:44:11] [debug#0 000db188 in ?? (3, 65535, 5422940) from beta39.amx
    [15:44:11] [debug#1 0006b7a0 in public OnDialogResponse (3, 667, 1, -1, 6419700) from beta39.amx 
    Попробовал подставить MAX_PLAYERS тоже вылетела эта шляпа Accessing element at index 65535 past array upper bound 49
    Поставил MAX_PLAYERS-1 и заработал наполовину код, почему наполовину потому:
    PHP код:
    Вы совершили преступление: [Грабёж]. Сообщил: . 
    А должно выглядеть так:
    PHP код:
    Вы совершили преступление: [Грабёж]. СообщилНеизвестный
    Ткните мне пальцем где мод откомпилирован с отладккой -d3
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Ткните мне пальцем где мод откомпилирован с отладккой -d3
    Типо тыыкаю)):
    rghost

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Наводка: У вас вызов функции SendMes: аргумент "declare" может быть совершенно любым числом. Из-за этого и выход за пределы массива.

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Типо тыыкаю)):
    rghost
    wtf?

    Open pawn.cfg
    -3d
    Down:
    http://rghost.ru/8WpjcqcJ6

  9. 2 пользователя(ей) сказали cпасибо:
    $continue$ (29.11.2015) vovandolg (29.11.2015)
  10. #9
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    ТС, попробуйте заменить эту часть кода:
    PHP код:
    if (declare == INVALID_PLAYER_ID)
    {
        
    format(turnersizeof(turner), "Неизвестный");
        
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(turner), 255);
    }
    else
    {
        if(
    IsPlayerConnected(declare))
        {
            
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255);
            
    strmid(PlayerCrime[declare][pBplayer], PlayerInfo[declare][pNames], 0strlen(PlayerInfo[declare][pNames]), 255);
            
    strmid(PlayerCrime[declare][pAccusing], reason0strlen(reason), 255);
        }
    }
    SendMes(playerid,COLOR_LIGHTRED,"Вы совершили преступление: [%s]. Сообщил: %s.",reason,PlayerInfo[declare][pNames]); 
    на эту:
    PHP код:
    if (declare == INVALID_PLAYER_ID)
    {
        
    format(turnersizeof(turner), "Неизвестный");
        
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(turner), 255);
    }
    else
    {
        if(
    IsPlayerConnected(declare))
        {
            
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255);
            
    strmid(PlayerCrime[declare][pBplayer], PlayerInfo[declare][pNames], 0strlen(PlayerInfo[declare][pNames]), 255);
            
    strmid(PlayerCrime[declare][pAccusing], reason0strlen(reason), 255);
            
    SendMes(playerid,COLOR_LIGHTRED,"Вы совершили преступление: [%s]. Сообщил: %s.",reason,PlayerInfo[declare][pNames]);
        }


  11. Пользователь сказал cпасибо:
    Daniel_Cortez (29.11.2015)
  12. #10
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    на эту:
    PHP код:
    if (declare == INVALID_PLAYER_ID)
    {
        
    format(turnersizeof(turner), "Неизвестный");
        
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(turner), 255);
    }
    else
    {
        if(
    IsPlayerConnected(declare))
        {
            
    strmid(PlayerCrime[playerid][pVictim], PlayerInfo[playerid][pNames], 0strlen(PlayerInfo[playerid][pNames]), 255);
            
    strmid(PlayerCrime[declare][pBplayer], PlayerInfo[declare][pNames], 0strlen(PlayerInfo[declare][pNames]), 255);
            
    strmid(PlayerCrime[declare][pAccusing], reason0strlen(reason), 255);
            
    SendMes(playerid,COLOR_LIGHTRED,"Вы совершили преступление: [%s]. Сообщил: %s.",reason,PlayerInfo[declare][pNames]);
        }

    И что мы сделаем?
    Уберём мессейдж если будет неизвестный...
    Может лучше if (declare == MAX_PLAYERS) так прописать?

 

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

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

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

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

Ваши права

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