Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Ошибка при работе команды

Статус
В этой теме нельзя размещать новые ответы.

davayknam

Ученик
Всем привет)
Ситуация такая, все вроде бы работает нормально, но есть одно но) сделал систему (если так можно назвать) домашних авто. При покупки авто оно добавляется в базу, когда открываешь список всех домашних машин и хочешь ее заспавнить у дома если машина ранее не была установлена, предлагается ее установить.

В пвар записываю ид авто из базы той машины, которая не была установлена:


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 ид.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу