Прочему показывает только 18 ячеек, вместо 42?
и не срабатывает почему то первая ячейка.Код:for(new i=0; i < 42; i++) {
код.
}
http://i.imgur.com/yPvKNS9.png
Вид для печати
Прочему показывает только 18 ячеек, вместо 42?
и не срабатывает почему то первая ячейка.Код:for(new i=0; i < 42; i++) {
код.
}
http://i.imgur.com/yPvKNS9.png
Эмм, больше кода. Как создаются текстдравы? Как показываешь? Сейчас ты спросил почему у тебя автомобиль не работает, при этом назвав лишь его марку.
Код:stock OpenInventory(playerid)
{
PlayerTextDrawSetPreviewModel(playerid,Inventory[playerid][42], GetPlayerSkin(playerid));
PlayerTextDrawShow(playerid,Inventory[playerid][42]);
for(new i; i < 13; i++) TextDrawShowForPlayer(playerid,Button[i]);
for(new i; i < 43; i++)
{
PlayerTextDrawShow(playerid,Inventory[playerid][i]);
if(PlayerInfo[playerid][pInvSlot][i] == 0) PlayerTextDrawSetPreviewModel(playerid,Inventory[playerid][i + 1], 19461),PlayerTextDrawSetPreviewRot(playerid, Inventory[playerid][i + 1], 0.000000, 0.000000, 90.000000, 0.100000);
else PlayerTextDrawSetPreviewModel(playerid,Inventory[playerid][i + 1], Items_All[PlayerInfo[playerid][pInvSlot][i]][invObject]),PlayerTextDrawSetPreviewRot(playerid, Inventory[playerid][i + 1], 0.000000, 0.000000, 0.000000, 1.000000);
}
return 1;
}
Если логирование сделать, все 43 итерации происходит? Очень похоже, что выход за пределы массива есть. Потому и не показывает
Ну а как раньше искали сгоревшую лампочку в гирлянде? Брали целую и каждую лампочку поочерёдно проверяли (ну я так делал :crazy:). Так же и тут. Берём любую функцию, что отсылает данные в удобный нам источник (чат/консоль) и отсылаем "сигналы". Из функций есть: print, ptintf, SendClientMessage, SendClientMessageToAll. Выбирай любую и логируй так, чтоб тебе можно было определить проблемный момент.
P.S. Для начала попробуй сам. Ибо мы тут, вообще-то, скриптингу учимся, а не пользуемся бесплатными услугами скриптеров :) Логирование - не такая уж и сложная наука, но очень полезная
Спасибо, одну проблему решил (TD не показывало, потому что в БД записывало 20 значений, а нужно было 42 :) ). А вот почему не работает 1-ая ячейка....
Это уже на код, который при нажатии срабатывает, смотреть надо
это
Код:public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
for(new i; i < 43; i++)
{
if(playertextid == Inventory[playerid][i])
{
if(Inventory[playerid][i] == Inventory[playerid][42]) return 1;
if(GetPVarInt(playerid,"ChangeSlot") == 0)
{
SetPVarInt(playerid,"SelectSlot",i);
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] == 0) { }
else
{
SetPVarInt(playerid,"ChangeSlot",GetPVarInt(playerid,"SelectSlot"));
PlayerTextDrawBackgroundColor(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")], 0xf2ddc6ff);
PlayerTextDrawShow(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")]);
}
}
else if(GetPVarInt(playerid,"ChangeSlot") != 0)
{
SetPVarInt(playerid,"SelectSlot",i);
PlayerTextDrawBackgroundColor(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")], -1061109505);
PlayerTextDrawShow(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")]);
UpdateInventory(playerid);
ObjInventory(playerid);
SetPVarInt(playerid,"ChangeSlot",0);
SetPVarInt(playerid,"SelectSlot",0);
return 1;
}
}
}
return 1;
}
Сдеай логирование каждого условия и при нажатии на первую ячейку смотри на каком условии прерывается код
Первая ячейка нажимается,
Код:if(playertextid == Inventory[playerid][i]) printf("%i", i);
Блин, ну я рад. Только что это нам даёт? Сделай хотя бы так...
PHP код:
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
print("\nOnPlayerClickPlayerTextDraw");
for(new i; i < 43; i++)
{
printf("\nЯчейка %i", i);
if(playertextid == Inventory[playerid][i])
{
print("Выбранная ячейка найдена");
if(Inventory[playerid][i] == Inventory[playerid][42]) return 1;
if(GetPVarInt(playerid,"ChangeSlot") == 0)
{
print("ChangeSlot == 0");
SetPVarInt(playerid,"SelectSlot",i);
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] == 0) { }
else
{
SetPVarInt(playerid,"ChangeSlot",GetPVarInt(playerid,"SelectSlot"));
PlayerTextDrawBackgroundColor(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")], 0xf2ddc6ff);
PlayerTextDrawShow(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")]);
}
}
else if(GetPVarInt(playerid,"ChangeSlot") != 0)
{
print("ChangeSlot != 0");
SetPVarInt(playerid,"SelectSlot",i);
PlayerTextDrawBackgroundColor(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")], -1061109505);
PlayerTextDrawShow(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")]);
UpdateInventory(playerid);
ObjInventory(playerid);
SetPVarInt(playerid,"ChangeSlot",0);
SetPVarInt(playerid,"SelectSlot",0);
return 1;
}
}
}
print("OnPlayerClickPlayerTextDraw End\n");
return 1;
}
открывающая скобка послеPHP код:
error 021: symbol already defined: "OnPlayerClickPlayerTextDraw"
Код:public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
Код HTML:[13:27:57] OnPlayerClickPlayerTextDraw
[13:27:57] Ячейка 0
[13:27:57] Выбранная ячейка найдена
[13:27:57] ChangeSlot != 0
Зря ты вообще эту систему выбрал :) Брал её уже один участник сего форума и я ему её практически полностью переписал, ибо жутко она кривая.
Ну логируй значения ChangeSlot и SelectSlot
бред какой то, проблема вот с этим TD
Код:Inventory[playerid][0] = CreatePlayerTextDraw(playerid, 260.500000, 126.377746, "");
PlayerTextDrawLetterSize(playerid, Inventory[playerid][0], 0.000000, 0.000000);
PlayerTextDrawTextSize(playerid, Inventory[playerid][0], 35.000000, 40.222198);
PlayerTextDrawAlignment(playerid, Inventory[playerid][0], 1);
PlayerTextDrawColor(playerid, Inventory[playerid][0], -1);
PlayerTextDrawSetShadow(playerid, Inventory[playerid][0], 0);
PlayerTextDrawSetOutline(playerid, Inventory[playerid][0], 0);
PlayerTextDrawBackgroundColor(playerid, Inventory[playerid][0], -1061109505);
PlayerTextDrawFont(playerid, Inventory[playerid][0], 5);
PlayerTextDrawSetProportional(playerid, Inventory[playerid][0], 1);
PlayerTextDrawSetShadow(playerid, Inventory[playerid][0], 0);
PlayerTextDrawSetSelectable(playerid, Inventory[playerid][0], true);
PlayerTextDrawSetPreviewModel(playerid, Inventory[playerid][0], 19461);
PlayerTextDrawSetPreviewRot(playerid, Inventory[playerid][0], 0.000000, 0.000000, 0.000000, -1.000000);
Я же сказал тебе что логировать. В этих двух pVar хранятся ID ячеек, данные которых изменяются. И именно где-то там проблема (я бы обратил внимание на UpdateInventory и на ObjInventory. Именно в каком-то из этих двух идёт передача данных из одной ячейки в другую).
А сами текстдравы тут не причём. Криво сделана сама система действий
тут вроде бы все нормально.
Код:stock ObjInventory(playerid)
{
if(GetPVarInt(playerid,"ChangeSlot") == GetPVarInt(playerid,"SelectSlot")) return SetPVarInt(playerid,"ChangeSlot",0);
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] != 0 && PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] != PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1]) return SetPVarInt(playerid,"ChangeSlot",0);
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] == PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1])
{
PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1] = 0;
PlayerInfo[playerid][pInvKol][GetPVarInt(playerid,"SelectSlot") - 1] += PlayerInfo[playerid][pInvKol][GetPVarInt(playerid,"ChangeSlot") - 1];
PlayerInfo[playerid][pInvKol][GetPVarInt(playerid,"ChangeSlot") - 1] = 0;
}
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] == 0)
{
PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] = PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1];
PlayerInfo[playerid][pInvKol][GetPVarInt(playerid,"SelectSlot") - 1] = PlayerInfo[playerid][pInvKol][GetPVarInt(playerid,"ChangeSlot") - 1];
PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1] = 0;
PlayerInfo[playerid][pInvKol][GetPVarInt(playerid,"ChangeSlot") - 1] = 0;
}
return 1;
}
Код:stock UpdateInventory(playerid)
{
if(GetPVarInt(playerid,"ChangeSlot") == GetPVarInt(playerid,"SelectSlot")) return SetPVarInt(playerid,"ChangeSlot",0);
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] != 0 && PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"SelectSlot") - 1] != PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1]) return SetPVarInt(playerid,"ChangeSlot",0);
if(PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1] != 0)
{
new item = PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1];
PlayerTextDrawSetPreviewModel(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")], 19461),PlayerTextDrawSetPreviewRot(playerid, Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")], 0.000000, 0.000000, 90.000000, 0.100000);
PlayerTextDrawSetPreviewModel(playerid,Inventory[playerid][GetPVarInt(playerid,"SelectSlot")], Items_All[PlayerInfo[playerid][pInvSlot][GetPVarInt(playerid,"ChangeSlot") - 1]][invObject]),PlayerTextDrawSetPreviewRot(playerid, Inventory[playerid][GetPVarInt(playerid,"SelectSlot")], 0.000000, 0.000000, 0.000000, 1.000000);
if(item == 4 || item == 9 || item == 10 || item == 13 || item == 14) PlayerTextDrawSetPreviewRot(playerid, Inventory[playerid][GetPVarInt(playerid,"SelectSlot")], 270.000000, 0.000000, 180.000000, 1.000000);
PlayerTextDrawShow(playerid,Inventory[playerid][GetPVarInt(playerid,"ChangeSlot")]);
PlayerTextDrawShow(playerid,Inventory[playerid][GetPVarInt(playerid,"SelectSlot")]);
}
return 1;
}