• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Array index out of bounds - не отображаються в чате сообщения для фракций

azazello

Новичок
Помогите пожалуйста решить проблему, которая в серверлоге выглядит следующий образом:
PHP:
[debug] Run time error 4: "Array index out of bounds"
[debug] Accessing element at index 316368272 past array upper bound 1000
[debug] AMX backtrace:
[debug] #0 0005da60 in ?? (1, -1853231105, 315827356, 311235960, 28978080, 316368272) from c-rp.amx
[debug] #1 0017a794 in public cmd_faction (0, 316368272) from c-rp.amx
Проблема судя по всему исходит от stock SendFactionMessageF, поскольку в чате не оторбражаються сообщения для фракций.

Код:
stock SendFactionMessageF(faction, color, const str[], {Float,_}:...)
{
    static
        args,
        start,
        end,
        string[144]
    ;
    #emit LOAD.S.pri 8
    #emit STOR.pri args

    if (args > 12)
    {
        #emit ADDR.pri str
        #emit STOR.pri start

        for (end = start + (args - 12); end > start; end -= 4)
        {
            #emit LREF.pri end
            #emit PUSH.pri
        }
        #emit PUSH.S str
        #emit PUSH.C 144
        #emit PUSH.C string
        #emit PUSH.C args
        #emit SYSREQ.C format

        foreach(Player, i)
        {
            if(!IsPlayerLogged(i) || PlayerInfo[i][pFaction] != faction || (PlayerInfo[i][pSettings] & togFaction))
                continue;

            SendClientMessage(i, color, string);
        }

        #emit LCTRL 5
        #emit SCTRL 4
        #emit RETN
        return 1;
    }

    foreach(Player, i)
    {
        if(!IsPlayerLogged(i) || PlayerInfo[i][pFaction] != faction || (PlayerInfo[i][pSettings] & togFaction))
            continue;

        SendClientMessage(i, color, str);
    }
    return 1;
}
На примере фракционного оос чата при команде /faction:
Код:
if(Factions[faction][fType] == FACTION_LEGAL)
    {
        if(strlen(params) > MAXLEN)
        {
            new pos = MAXLEN - 1;
            SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s %s: %.*s ... )) **", GetRankName(playerid), GetNameEx(playerid), pos, params);
            SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "... %s )) **", params[pos]);
        }
        else
            SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s %s: %s )) **", GetRankName(playerid), GetNameEx(playerid), params);
    }
    else
    {
        if(strlen(params) > MAXLEN)
        {
            new pos = MAXLEN - 1;
            SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s: %.*s ... )) **", GetNameEx(playerid), pos, params);
            SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "... %s )) **", params[pos]);
        }
        else
            SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s: %s )) **", GetNameEx(playerid), params);
    }
 
Сверху Снизу