CMD:invite(playerid, params[])
{
if(IsAbleToInvite(playerid) || (PI[playerid][pMember] > 0 && strcmp(GetName(playerid),FracInfo[PI[playerid][pMember]][fAssistant],true) == 0))
{
new targetid;
if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /invite [id игрока]");
else if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
else if(PlayerLogged[targetid] == false) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotAuthorized);
else if(PI[targetid][pLeader] > 0) return SendClientMessage(playerid, COLOR_GREY, "Игрок лидер другой организации!");
else if(PI[targetid][pMember] > 0) return SendClientMessage(playerid, COLOR_GREY, "Игрок находиться в другой организации!");
else if(PI[targetid][pWarn] > 0) return SendClientMessage(playerid, COLOR_GREY, "У игрока предупреждение!");
else if(IsPlayerInAnyVehicle(targetid)) return SendClientMessage(playerid, COLOR_GREY, "Игрок не должен находиться в транспорте!");
else if(!IsPlayerInRangeOfPlayer(8.0, playerid, targetid)) return SendClientMessage(playerid, COLOR_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(targetid, D_INVITEFRAC, 0, "{FFCC00}Вступление во фракцию",string,"Да","Нет");
SetPVarInt(playerid, "actplayerid", targetid);
}
else SendClientMessage(playerid, COLOR_GREY, YouCanNot);
return 1;
}
case D_INVITEFRAC:
{
if(!response) return 1;
new actplayerid = GetPVarInt(playerid, "actplayerid");
new memberid = PI[playerid][pMember];
new mes[128];
for(new i; i < 8; i++)
{
new skinid = gFractionSkin[memberid-1][i];
if(!skinid) break;
if(!i) format(mes, sizeof(mes), "Скин %d [%d]", i+1, skinid);
else format(mes, sizeof(mes), "%s\nСкин %d [%d]", mes, i+1, skinid);
}
SendClientMessage(actplayerid, COLOR_BLUE, "Ждите, пока лидер выберет одежду для Вас");
ShowPlayerDialog(playerid, D_INVITESKIN, 2, "{FFCC00}Выбор скина", mes, "Принять", "");
}
[06:25:29] [debug] Run time error 4: "Array index out of bounds"
[06:25:29] [debug] Accessing element at negative index -1
[06:25:29] [debug] AMX backtrace:
[06:25:29] [debug] #0 00070508 in public OnDialogResponse (1, 18, 1, -1, 4569720) from new.amx
new skinid = gFractionSkin[memberid-1][i];
По хорошему стоит писать исходные данные: какие ид у игроков были и какие значения переменных были до этого события, последнее узнаётся через принты.
А вообще вот это смущает (индекс =-1, если memberid минимальный - 0) Код:
new skinid = gFractionSkin[memberid-1][i]; |
new gFractionSkin
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
};
а поконкретней как фиксануть?
PHP код:
|
По хорошему стоит писать исходные данные: ... и какие значения (ВСЕХ ИСПОЛЬЗУЕМЫХ) переменных были до этого события, последнее узнаётся через принты.
|
new skinid = gFractionSkin[memberid-1][i];
case D_INVITEFRAC:
{
if(!response) return 1;
new actplayerid = GetPVarInt(playerid, "actplayerid");
new memberid = PI[playerid][pMember];
new mes[128];
for(new i; i < 8; i++)
{
new skinid = gFractionSkin[memberid-1][i];
if(!skinid) break;
if(!i) format(mes, sizeof(mes), "Скин %d [%d]", i+1, skinid);
else format(mes, sizeof(mes), "%s\nСкин %d [%d]", mes, i+1, skinid);
}
SendClientMessage(actplayerid, COLOR_BLUE, "Ждите, пока лидер выберет одежду для Вас");
ShowPlayerDialog(playerid, D_INVITESKIN, 2, "{FFCC00}Выбор скина", mes, "Принять", "");
}
[13:11:12] [debug] Run time error 4: "Array index out of bounds"
[13:11:12] [debug] Accessing element at negative index -1
[13:11:12] [debug] AMX 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