Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 10 из 10
  1. #1
    Аватар для vovandolg
    Пользователь

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

    Выход за пределы

    В коннекте таймер замутил:
    PHP код:
        SetTimerEx("LoadConnect",17500,0,"d",playerid); 
    Далее примерно такая конструкция кода:

      Открыть/закрыть
    PHP код:
            forward LoadConnect(playerid);
        public 
    LoadConnect(playerid)
        {
            
    format(mysql_query,sizeof(mysql_query),"SELECT `Name` FROM `Accounts` WHERE `Name` = '%s'",PlayerInfo[playerid][pNames]);
            
    mysql_function_query(connectsmysql_query,true,"PlayerRegCheck","d",playerid);
            
    RemoveBuildingForPlayer(playerid82291142.03131362.500012.48440.25);
            
    URL[playerid] = TextDrawCreate(509.0000003.000000"RP");// íàçâàíèå, è êîîðäèíàòû
            
    TextDrawFont(URL[playerid], 1);// ñòèëü òåêñòà
            
    TextDrawColor(URL[playerid], COLOR_ULTI);//öâåò òåêñòà - ãîëóáîé
            
    TextDrawLetterSize(URL[playerid], 0.36001.500000);// ðàçìåðû
            
    TextDrawSetOutline(URL[playerid], 2);
            
    TextDrawShowForPlayer(playeridURL[playerid]);
            
    FPS[playerid] = TextDrawCreate(8.000000428.000000"FPS: 30");
            
    TextDrawBackgroundColor(FPS[playerid], 255);
            
    TextDrawFont(FPS[playerid], 3);
            
    TextDrawLetterSize(FPS[playerid], 0.2800001.500000);
            
    TextDrawColor(FPS[playerid], COLOR_ULTI);
            
    TextDrawSetOutline(FPS[playerid], 2);
            
    TextDrawSetProportional(FPS[playerid], 1);
            
    //==============================================
            
    Text[playerid] = TextDrawCreate(400.010.0"Text");
            
    TextDrawBackgroundColor(Text[playerid], COLOR_BLACK);
            
    TextDrawColor(Text[playerid], 0x0BB814FF);
            
    TextDrawFont(Text[playerid], 3);
            
    //==============================================
            
    Bar1 CreateProgressBar(playerid,468.00,420.00,100.00,4.00,0xFFA600AA,100.0);
            
    HideProgressBar(playerid,Bar1);
            
    Bar2 CreateProgressBar(playerid,548.00,28.00,60.00,3.20,0x0265B6AA,100.0);
            
    HideProgressBar(playerid,Bar2);
            
    PlayerTimerID[playerid] = SetTimerEx("PlayerUpdate"2501"d"playerid);
            return 
    1;
        } 


    Когда на сервер входит 24ый игрок или выше вот такие ошибки в логах:
      Открыть/закрыть
    PHP код:
    [16:45:25] [debugRun time error 4"Array index out of bounds"
    [16:45:25] [debug]  Accessing element at index 24 past array upper bound 23
    [16:45:25] [debugAMX backtrace:
    [
    16:45:25] [debug#0 0027368c in public LoadConnect (24) from beta41.amx 

    Выход за пределы вижу, но где он скрывается я не пойму

  2. #2
    Аватар для untonyst
    Младший сержант

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    664
    Репутация:
    234 ±
    Но ведь загрузку можно делать всего один раз, а ТД создавать при коннекте 9((
    Младший сержант Стяжкин | ЧСВ группа в ВКонтакте NEW

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Но ведь загрузку можно делать всего один раз, а ТД создавать при коннекте 9((
    Я просто увидел в каком то коде что ТД при коннекте создают вот и делаю так, а что в этом плохого?

  4. #4
    Аватар для VVWVV
    Проверенный

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    607
    Репутация:
    289 ±
    Очевидно же, что из-за playerid происходит выход за пределы массива, и нам необходимо искать все, что связанно с ним. В вашем коде большое количество разнообразных массивов, которые используют playerid. Во-первых, проверьте все массивы на максимальный размер; если увидите число 23, то это тот массив, который нам нужен. Далее, нам нужно изменить максимальный размер данного массива на MAX_PLAYERS.

    Во-вторых, вам необходимо прочитать:

  5. #5
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    161
    Репутация:
    243 ±
    Покажи код обьявления массивов URL, FPS, Text и PlayerTimerID.

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±
    PHP код:
    Text:URL[MAX_PLAYERS]
    Text:Text[MAX_PLAYER_NAME]
    PlayerTimerID[MAX_PLAYERS
    - - - Добавлено - - -

    Цитата Сообщение от VVWVV Посмотреть сообщение
    Во-первых, проверьте все массивы на максимальный размер; если увидите число 23, то это тот массив, который нам нужен. Далее, нам нужно изменить максимальный размер данного массива на MAX_PLAYERS.[/LIST][/INDENT]
    Таких цифр нету уже проверял до того как выложить =( Вот и пишу сюда..
    Последний раз редактировалось vovandolg; 05.01.2016 в 18:58. Причина: ZZ исправил на Text перепутал

  7. #7
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    161
    Репутация:
    243 ±
    Text:Text[MAX_PLAYER_NAME] ошибка тут.
    Константа MAX_PLAYER_NAME и равна 24.
    Решение:
    PHP код:
    Text:Text[MAX_PLAYERS

  8. Пользователь сказал cпасибо:
    vovandolg (05.01.2016)
  9. #8
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,360
    Репутация:
    113 ±
    А для чего [MAX_PLAYER_NAME] использовать лучше всего?
    Помимо GetPlayerName

  10. #9
    Аватар для untonyst
    Младший сержант

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    664
    Репутация:
    234 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    А для чего [MAX_PLAYER_NAME] использовать лучше всего?
    Помимо GetPlayerName
    PHP код:
    if(strlen(name) < MAX_PLAYER_NAME && strlen(name) > 5)
    {
        
    SendClientMessage(playerid, -1"У вас шикарное количество символов в имени!");

    Младший сержант Стяжкин | ЧСВ группа в ВКонтакте NEW

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    А для чего [MAX_PLAYER_NAME] использовать лучше всего?
    Помимо GetPlayerName
    Эмм, советую прочесть статьи о макросах, ибо Вы совсем не имеете представления о том, что это такое, как я вижу
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  12. Пользователь сказал cпасибо:
    vovandolg (05.01.2016)
 

 

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

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

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

Ваши права

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