Проблема с командой
#1

Всем доброго времени суток! Сразу перейду к теме, принимаю игрока в организацию как лидер - отправляю приглошение он жмёт "Да" и 0 реакции.


PHP код:
CMD:invite(playeridparams[])
{
    if(
IsAbleToInvite(playerid) || (PI[playerid][pMember] > && strcmp(GetName(playerid),FracInfo[PI[playerid][pMember]][fAssistant],true) == 0))
    {
        new 
targetid;
        if(
sscanf(params"u"targetid)) return SendClientMessage(playeridCOLOR_WHITE"Введите: /invite [id игрока]");
        else if(!
IsPlayerConnected(targetid)) return SendClientMessage(playeridCOLOR_GREYPlayerIsNotOnline);
        else if(
PlayerLogged[targetid] == false) return SendClientMessage(playeridCOLOR_GREYPlayerIsNotAuthorized);
        else if(
PI[targetid][pLeader] > 0) return SendClientMessage(playeridCOLOR_GREY"Игрок лидер другой организации!");
        else if(
PI[targetid][pMember] > 0) return SendClientMessage(playeridCOLOR_GREY"Игрок находиться в другой организации!");
        else if(
PI[targetid][pWarn] > 0) return SendClientMessage(playeridCOLOR_GREY"У игрока предупреждение!");
        else if(
IsPlayerInAnyVehicle(targetid)) return SendClientMessage(playeridCOLOR_GREY"Игрок не должен находиться в транспорте!");
        else if(!
IsPlayerInRangeOfPlayer(8.0playeridtargetid)) return SendClientMessage(playeridCOLOR_GREY"Игрок слишком далеко!");
        
SendMes(playerid,COLOR_BLUE,"Вы предложили %s присоединиться в вашу организацию",GetName(targetid));
        new 
string[128];
        
format(string,sizeof(string),"%s %s предлагает вам присоединиться к \"%s\"\n\nВы согласны?",FracRank[PI[playerid][pMember]][PI[playerid][pRank]], GetName(playerid), FracInfo[PI[playerid][pMember]][fName]);
        
ShowPlayerDialog(targetidD_INVITEFRAC0"{FFCC00}Вступление во фракцию",string,"Да","Нет");
        
SetPVarInt(playerid"actplayerid"targetid);
    }
    else 
SendClientMessage(playeridCOLOR_GREYYouCanNot);
    return 
1;

Сам кейс
PHP код:
    case D_INVITEFRAC:
        {
            if(!
response) return 1;
            new 
actplayerid GetPVarInt(playerid"actplayerid");
            new 
memberid PI[playerid][pMember];
            new 
mes[128];
            for(new 
i8i++)
            {
                new 
skinid gFractionSkin[memberid-1][i];
                if(!
skinid) break;
                if(!
iformat(messizeof(mes), "Скин %d [%d]"i+1skinid);
                else 
format(messizeof(mes), "%s\nСкин %d [%d]"mesi+1skinid);
            }
            
SendClientMessage(actplayeridCOLOR_BLUE"Ждите, пока лидер выберет одежду для Вас");
            
ShowPlayerDialog(playeridD_INVITESKIN2"{FFCC00}Выбор скина"mes"Принять""");
        } 
Crashdetect:
PHP код:
[06:25:29] [debugRun time error 4"Array index out of bounds"
[06:25:29] [debug]  Accessing element at negative index -1
[06:25:29] [debugAMX backtrace:
[
06:25:29] [debug#0 00070508 in public OnDialogResponse (1, 18, 1, -1, 4569720) from new.amx 
Reply
#2

По хорошему стоит писать исходные данные: какие ид у игроков были и какие значения переменных были до этого события, последнее узнаётся через принты.

А вообще вот это смущает (индекс =-1, если memberid минимальный - 0)
Код:
new skinid = gFractionSkin[memberid-1][i];
Reply
#3

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
По хорошему стоит писать исходные данные: какие ид у игроков были и какие значения переменных были до этого события, последнее узнаётся через принты.

А вообще вот это смущает (индекс =-1, если memberid минимальный - 0)
Код:
new skinid = gFractionSkin[memberid-1][i];
На любой ID игрока, не работает.
Reply
#4

Quote:
Originally Posted by Surprice
Посмотреть сообщение
На любой ID игрока, не работает.
Выход за пределы массива. Тут:
PHP код:
new gFractionSkin 
Reply
#5

Quote:
Originally Posted by Mcc
Посмотреть сообщение
Выход за пределы массива. Тут:
PHP код:
new gFractionSkin 
а поконкретней как фиксануть?
PHP код:
new gFractionSkin[MAX_FRACTION-1][8] = {
    {
17,59,187,164,165,141,240,150}, // Мэрия LS
    
{280,284,282,283,266,285,265,211}, // LSPD
    
{280,284,282,283,266,285,265,211}, // SFPD
    
{163,164,165,166,211,295,285,286}, // FBI
    
{274,275,276,70,148,150,71,295}, // Больница LS
    
{11,189,171,172,0,0,0,0}, // Автошкола
    
{105,106,107,195,269,270,271,0}, // Grove Street
    
{102,103,104,195,0,0,0,0}, // The Ballas
    
{173,174,175,226,273,0,0,0}, // The Rifa
    
{193,114,115,116,292,0,0,0}, // Varios Los Aztecas
    
{108,109,110,56,0,0,0,0}, // Los Santos Vagos
    
{287,191,61,255,295,0,0,0}, // Национальная гвардия
    
{189,0,0,0,0,0,0,0}, // Казино Caligula
    
{189,0,0,0,0,0,0,0}, // Казино Red Dragon
    
{223,124,127,290,113,117,98,93}, // LCN
    
{117,118,120,122,123,294,169,263}, // Yakuza
    
{46,111,112,126,125,272,233,43}, // RM
    
{187,186,170,188,20,141,150,219}, // СМИ
    
{280,284,282,283,266,285,265,211// LVPD
}; 
Reply
#6

Quote:
Originally Posted by Surprice
Посмотреть сообщение
а поконкретней как фиксануть?
PHP код:
new gFractionSkin[MAX_FRACTION-1][8] = {
    {
17,59,187,164,165,141,240,150}, // Мэрия LS
    
{280,284,282,283,266,285,265,211}, // LSPD
    
{280,284,282,283,266,285,265,211}, // SFPD
    
{163,164,165,166,211,295,285,286}, // FBI
    
{274,275,276,70,148,150,71,295}, // Больница LS
    
{11,189,171,172,0,0,0,0}, // Автошкола
    
{105,106,107,195,269,270,271,0}, // Grove Street
    
{102,103,104,195,0,0,0,0}, // The Ballas
    
{173,174,175,226,273,0,0,0}, // The Rifa
    
{193,114,115,116,292,0,0,0}, // Varios Los Aztecas
    
{108,109,110,56,0,0,0,0}, // Los Santos Vagos
    
{287,191,61,255,295,0,0,0}, // Национальная гвардия
    
{189,0,0,0,0,0,0,0}, // Казино Caligula
    
{189,0,0,0,0,0,0,0}, // Казино Red Dragon
    
{223,124,127,290,113,117,98,93}, // LCN
    
{117,118,120,122,123,294,169,263}, // Yakuza
    
{46,111,112,126,125,272,233,43}, // RM
    
{187,186,170,188,20,141,150,219}, // СМИ
    
{280,284,282,283,266,285,265,211// LVPD
}; 
new gFractionSkin[MAX_FRACTION-1][8] = {
new skinid = gFractionSkin[memberid-1][i];

Сначала сдвиг при объявлении, затем в цикле. В итоге -2 = array index of bounds. Выбрать что то одно.
Reply
#7

Quote:
Originally Posted by Mutha_X
Посмотреть сообщение
По хорошему стоит писать исходные данные: ... и какие значения (ВСЕХ ИСПОЛЬЗУЕМЫХ) переменных были до этого события, последнее узнаётся через принты.
Quote:
Originally Posted by Surprice
Посмотреть сообщение
На любой ID игрока, не работает.
Тугодум, давай цифры.
Reply
#8

Строка:
PHP код:
new skinid gFractionSkin[memberid-1][i]; 
Полный кейс:
PHP код:
    case D_INVITEFRAC:
        {
            if(!
response) return 1;
            new 
actplayerid GetPVarInt(playerid"actplayerid");
            new 
memberid PI[playerid][pMember];
            new 
mes[128];
            for(new 
i8i++)
            {
                new 
skinid gFractionSkin[memberid-1][i];
                if(!
skinid) break;
                if(!
iformat(messizeof(mes), "Скин %d [%d]"i+1skinid);
                else 
format(messizeof(mes), "%s\nСкин %d [%d]"mesi+1skinid);
            }
            
SendClientMessage(actplayeridCOLOR_BLUE"Ждите, пока лидер выберет одежду для Вас");
            
ShowPlayerDialog(playeridD_INVITESKIN2"{FFCC00}Выбор скина"mes"Принять""");
        } 
Crashdetect:
PHP код:
[13:11:12] [debugRun time error 4"Array index out of bounds"
[13:11:12] [debug]  Accessing element at negative index -1
[13:11:12] [debugAMX backtrace:
[
13:11:12] [debug#0 0008cd9c in public OnDialogResponse (playerid=1, dialogid=18, response=1, listitem=-1, inputtext[]=@0058b22c "") at E:\Сервер\gamemodes\new.pwn:9936 
Reply
#9

Quote:
Originally Posted by Surprice
Посмотреть сообщение
PHP код:
#define MAX_FRACTION (20), должно быть 19. 
Пожалуйста.
Quote:
Originally Posted by Mcc
Посмотреть сообщение
Отсюда убрать единичку с минусом.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)