PDA

Просмотр полной версии : [Вопрос] Перестает работать команда



Vasya_Pupkin
17.07.2016, 11:37
Всем привет.
Перестает работать команда после покупки предмета
Вот диалог из за которого перестает работать

case dAccesShopBuing:
{
new objectid,objs, type = GetPVarInt(playerid, "AcessType"), z = GetPVarInt(playerid, "SelectSKIN")-1, price;
if(type == 1) objs = 7, objectid = floatround(AcessOchki[z][0]), price = floatround(AcessOchki[z][1]);
else if(type == 2) objs = 8, objectid = floatround(AcessKepki[z][0]), price = floatround(AcessKepki[z][1]);
else if(type == 3) objs = 8, objectid = floatround(AcessShapki[z][0]), price = floatround(AcessShapki[z][1]);
else if(type == 4) objs = 9, objectid = floatround(AcessMaski[z][0]), price = floatround(AcessMaski[z][1]);
if(response)
{
if(GetPlayerMoney(playerid) < price) return SendClientMessage(playerid, CRED, "x {AC0000}[Ошибка] {FFFFFF}У Вас недостаточно денег");
new str[40];
format(str, sizeof(str), "~r~ -%d$",price);
GameTextForPlayer(playerid,str,2000,1);
if(type == 1)
{
PlayerInfo[playerid][pOchkiAcess] = objectid;//Очки
printf("objectid = %d", objectid);
}
else if(type == 2)
{
PlayerInfo[playerid][pKepkiAcess] = objectid;//Кепка
printf("objectid = %d", objectid);
}
else if(type == 3)
{
PlayerInfo[playerid][pShapkiAcess] = objectid;//Шапка
printf("objectid = %d", objectid);
}
else if(type == 4)
{
PlayerInfo[playerid][pMaskiAcess] = objectid;//Маска
printf("objectid = %d", objectid);
}
SendClientMessage(playerid,0x66CC00FF, "Поздравляем с покупкой! Для управления инвентарем введите {0099FF}/inv");
for(new t = 0; t < 11; t++)
{
if(Accessories[playerid][t] != PlayerText:INVALID_TEXT_DRAW)
{
PlayerTextDrawDestroy(playerid, Accessories[playerid][t]);
Accessories[playerid][t] = PlayerText:INVALID_TEXT_DRAW;
}
}
CancelSelectTextDraw(playerid);
pTemp[playerid][pAcessBuying] = false;
pTemp[playerid][pAcessBuyingW] = false;
DeletePVar(playerid, "SelectSKIN");
DeletePVar(playerid, "AcessType");
objs = GetPVarInt(playerid, "AcessSLOT");
if(IsPlayerAttachedObjectSlotUsed(playerid, objs) && objs != 0) RemovePlayerAttachedObject(playerid, objs);
DeletePVar(playerid, "AcessSLOT");
}
else
{
SendClientMessage(playerid, -1, "Вы отказались от покупки");
}
return true;
}

А вот команда которая не работает:(но пока не покупаю все работает)

CMD:inv(playerid, params[])
{
if(PlayerInfo[playerid][pOchkiAcess])//очки
{
PlayerTextDrawSetPreviewModel(playerid, AccsesuarInventory[playerid][14], PlayerInfo[playerid][pOchkiAcess]);//очки
PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][14], 0.000000, 0.000000, 66.000000, 1.000000);
if(pTemp[playerid][pOdelOcki] == true)
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][14], -16777046);
}
else
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][14], 96);
}
PlayerTextDrawShow(playerid,AccsesuarInventory[playerid][14]);
}
if(PlayerInfo[playerid][pKepkiAcess])//Кепка
{
PlayerTextDrawSetPreviewModel(playerid, AccsesuarInventory[playerid][15], PlayerInfo[playerid][pKepkiAcess]);
PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][15], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][2], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][3], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][4], 1.0);
if(pTemp[playerid][pOdelKepky] == true)
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][15], -16777046);
}
else
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][15], 96);
}
PlayerTextDrawShow(playerid,AccsesuarInventory[playerid][15]);
}
if(PlayerInfo[playerid][pShapkiAcess])//шапка
{
PlayerTextDrawSetPreviewModel(playerid, AccsesuarInventory[playerid][16], PlayerInfo[playerid][pShapkiAcess]);
PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][16], AcessShapki[PlayerInfo[playerid][pShapkiAcess]][2], AcessShapki[PlayerInfo[playerid][pShapkiAcess]][3], AcessShapki[PlayerInfo[playerid][pShapkiAcess]][4], 1.0);
if(pTemp[playerid][pOdelShapky] == true)
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][16], -16777046);
}
else
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][16], 96);
}
PlayerTextDrawShow(playerid,AccsesuarInventory[playerid][16]);
}
if(PlayerInfo[playerid][pMaskiAcess])//маска
{
PlayerTextDrawSetPreviewModel(playerid, AccsesuarInventory[playerid][17], PlayerInfo[playerid][pMaskiAcess]);
PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][17], AcessMaski[PlayerInfo[playerid][pMaskiAcess]][2], AcessMaski[PlayerInfo[playerid][pMaskiAcess]][3], AcessMaski[PlayerInfo[playerid][pMaskiAcess]][4], 1.0);
if(pTemp[playerid][pOdelMasky] == true)//
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][17], -16777046);
}
else
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][17], 96);
}
PlayerTextDrawShow(playerid,AccsesuarInventory[playerid][17]);
}
if(pTemp[playerid][pAppSumka] == true)//Сумка
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][13], -16777046);
}
else
{
PlayerTextDrawBackgroundColor(playerid, AccsesuarInventory[playerid][13], 96);
}
PlayerTextDrawSetPreviewModel(playerid, AccsesuarInventory[playerid][3], GetPlayerSkin(playerid));//скин
for(new g;g<14; g++)
{
PlayerTextDrawShow(playerid,AccsesuarInventory[playerid][g]);
}
SelectTextDraw(playerid, 0xFF0000FF);
printf("objectidddd");
return 1;
}

DeimoS
17.07.2016, 14:01
crashdetect молчит?

Vasya_Pupkin
17.07.2016, 14:52
Молчит :(

Vasya_Pupkin
17.07.2016, 16:42
Во вот крешар выдал:


[17:38:45] [debug] Run time error 4: "Array index out of bounds"
[17:38:45] [debug] Accessing element at index 18926 past array upper bound 12
[17:38:45] [debug] AMX backtrace:
[debug] #0 003c7114 in public cmd_inv (playerid=0, params[]=@004e7844 "") at E:\gamemodes\sss.pwn:29197
[17:38:46] [save] Vasya_Pupkin the server (13.12.11.10)
[17:38:46] [debug] Run time error 4: "Array index out of bounds"
[17:38:46] [debug] Accessing element at index 5 past array upper bound 4
[17:38:46] [debug] AMX backtrace:

А вот строка:

PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][15], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][2], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][3], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][4], 1.0);

De_Lay
17.07.2016, 17:44
Выход за придела массива!!!

PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][15], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][2], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][3], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][4], 1.0);
В данной функции ты используешь 4 переменных с двухмерными массивами.

AccsesuarInventory[playerid][15]
AcessMaski[переменная][2]
AcessMaski[переменная][3]
AcessMaski[переменная][4]
Посмотри какое ты количество ячеек задал в этих переменных.
Последняя ячейка недолжна использоваться так как, она нужна для хранения идентификатора массива.

Например:

new AcessMaski[MAX_PLAYERS][5];

//Использование
AcessMaski[playerid][0];
AcessMaski[playerid][1];
AcessMaski[playerid][2];
AcessMaski[playerid][3];
AcessMaski[playerid][4];

(Последняя экстра – ячейка – 5 не используется никогда, она нужна для хранения идентификатора массива)

Vasya_Pupkin
17.07.2016, 18:29
Вот если ту строку заменить на эту

PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][15], 0.000000, 0.000000, 66.000000, 1.000000);
то все робит но положение обьекто сбито он должен грузить их от сюда

static const Float:AcessMaski[][] = { // Маски
{18912.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18913.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18914.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18915.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18916.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18917.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18918.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18919.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{18920.0, 2100.0, -125.0, 25.0, 0.0}, // готово
{19036.0, 3600.0, 0.0, 0.0, 70.0}, // готово
{19037.0, 3600.0, 0.0, 0.0, 70.0}, // готово
{19038.0, 3600.0, 0.0, 0.0, 70.0}, // готово
{19137.0, 7000.0, -70.0, -65.0, -80.0}
};
и вот как должно

PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][15], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][2], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][3], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][4], 1.0);
но когда оно так оно не работает =(

Vasya_Pupkin
18.07.2016, 22:37
UP!!! крешар выдал:


[17:38:45] [debug] Run time error 4: "Array index out of bounds"
[17:38:45] [debug] Accessing element at index 18926 past array upper bound 12
[17:38:45] [debug] AMX backtrace:
[debug] #0 003c7114 in public cmd_inv (playerid=0, params[]=@004e7844 "") at E:\gamemodes\sss.pwn:29197
[17:38:46] [save] Vasya_Pupkin the server (13.12.11.10)
[17:38:46] [debug] Run time error 4: "Array index out of bounds"
[17:38:46] [debug] Accessing element at index 5 past array upper bound 4
[17:38:46] [debug] AMX backtrace:

А вот строка:

PlayerTextDrawSetPreviewRot(playerid, AccsesuarInventory[playerid][15], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][2], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][3], AcessMaski[PlayerInfo[playerid][pKepkiAcess]][4], 1.0);

что значит это искал не мог найти такие ошибки =(

Geebrox
19.07.2016, 13:25
логируй PlayerInfo[playerid][pKepkiAcess]