davayknam
Ученик
Всем привет)
Ситуация такая, все вроде бы работает нормально, но есть одно но) сделал систему (если так можно назвать) домашних авто. При покупки авто оно добавляется в базу, когда открываешь список всех домашних машин и хочешь ее заспавнить у дома если машина ранее не была установлена, предлагается ее установить.
В пвар записываю ид авто из базы той машины, которая не была установлена:
SetPVarInt(playerid, "IDHouseVehicle", HouseVehInfo[ihv][HVId][0]);
Команда установки машины:
Все работает нормально, НО если какой-то дом была продан, то все машины этого дома удаляются из базы и после этого если в каком-то из домов был добавлен новый транспорт начинаются проблемы, а если не было добавлено нового транспорта, то все работает
Если я правильно понял, то это возможно из-за того, что при удалении и создании новой записи в таблице ид в базе продолжается, а не занимается тот, который свободен. Если вручную сделать ид по порядку, все нормально
то есть, идет вот так:
при удалении и добавлении новых записей:
Ошибки:
[29/12/2016 19:30:52] [debug] Run time error 4: "Array index out of bounds"
[29/12/2016 19:30:52] [debug] Attempted to read/write array element at negative index -1
[29/12/2016 19:30:52] [debug] AMX backtrace:
[29/12/2016 19:30:52] [debug] #0 000d34e0 in public cmd_addveh (0, 38992468) from test.amx
Я так понимаю это из-за "-1", но если его убрать, то тогда не правильно выполняются действия. К примеру, устанавливаю машину с 3 ид из базы, а устанавливается та машина, которая имеет 4 ид.
Ситуация такая, все вроде бы работает нормально, но есть одно но) сделал систему (если так можно назвать) домашних авто. При покупки авто оно добавляется в базу, когда открываешь список всех домашних машин и хочешь ее заспавнить у дома если машина ранее не была установлена, предлагается ее установить.
В пвар записываю ид авто из базы той машины, которая не была установлена:
SetPVarInt(playerid, "IDHouseVehicle", HouseVehInfo[ihv][HVId][0]);
Команда установки машины:
PHP:
CMD:addveh(playerid, params[])
{
new sendername[24], string[15], Float:x, Float:y, Float:z, Float:a;
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
if(GetPVarInt(playerid, "addveh") == 1)
{
for(new i; i < sizeof(HouseInfo); i++)
{
if(IsPlayerInRangeOfPoint(playerid, 50.0, HouseInfo[i][hEnter][0], HouseInfo[i][hEnter][1], HouseInfo[i][hEnter][2]) && HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID] == i)
{
if(strcmp(sendername, HouseInfo[i][hOwner], true) == 0)
{
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVId][1] = Veh::Create(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVModel], x, y+1.5, z, a, HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVColor][0], HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVColor][1], 18000);
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVRespPos][0] = x;
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVRespPos][1] = y;
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVRespPos][2] = z;
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVRespPos][3] = a;
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVStatus] = 1;
HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVOwnerID] = Pl::Info[playerid][pID];
ToggleVehicleDoor(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVId][1], false);
if(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID] < 10)
{
format(string, sizeof(string), "h00%d-gw", HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID]);
SetVehicleNumberPlate(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVId][1], string);
}
else if(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID] < 100)
{
format(string, sizeof(string), "h0%d-gw",HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID]);
SetVehicleNumberPlate(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVId][1], string);
}
else if(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID] > 99)
{
format(string, sizeof(string), "h%d-gw",HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVHouseID]);
SetVehicleNumberPlate(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVId][1], string);
}
strmid(HouseVehInfo[GetPVarInt(playerid, "IDHouseVehicle")-1][HVNumber], string, 0, strlen(string), 64);
HVUpdate(GetPVarInt(playerid, "IDHouseVehicle")-1);
DeletePVar(playerid, "addveh");
DeletePVar(playerid, "IDHouseVehicle");
Send(playerid, COLOR_WHITE, "* Транспорт успешно установлен рядом с домом. Используйте \"/park\" для смены позиции парковки транспорта.");
}
}
}
return 1;
}
return 1;
}
Все работает нормально, НО если какой-то дом была продан, то все машины этого дома удаляются из базы и после этого если в каком-то из домов был добавлен новый транспорт начинаются проблемы, а если не было добавлено нового транспорта, то все работает
Если я правильно понял, то это возможно из-за того, что при удалении и создании новой записи в таблице ид в базе продолжается, а не занимается тот, который свободен. Если вручную сделать ид по порядку, все нормально
то есть, идет вот так:
при удалении и добавлении новых записей:
Ошибки:
[29/12/2016 19:30:52] [debug] Run time error 4: "Array index out of bounds"
[29/12/2016 19:30:52] [debug] Attempted to read/write array element at negative index -1
[29/12/2016 19:30:52] [debug] AMX backtrace:
[29/12/2016 19:30:52] [debug] #0 000d34e0 in public cmd_addveh (0, 38992468) from test.amx
Я так понимаю это из-за "-1", но если его убрать, то тогда не правильно выполняются действия. К примеру, устанавливаю машину с 3 ид из базы, а устанавливается та машина, которая имеет 4 ид.
