01.02.2014, 12:46
Quote:
|
Немного о пикапах.
Когда мы создаем пикап, и хотим его в будущем удалить, нам надо запомнить его ID. Значит берем переменную, и присваиваем к ней создание пикапа. Но при удалении пикапа по этой переменной, сама переменная ведь не очищается? И поэтому, если на этом же ID пикапа будет позже другое действие, ее надо очистить, иначе будет путаница ID. Ведь так? И еще, что будет если удалить пикап, привязанный к пустой переменной, или даже удалить несуществующий пикап? Вообщем объясню суть проблемы на примере. Есть команда, создающая в определенном месте, к переменной автомобиля пикап. Code:
CMD:pick(playerid)
{
Veh[GetVehicleID(playerid)][Pickup] = CreatePickup(19131,23,x,y,z); // сами координаты непричем
return 1;
}
Code:
OnVehicleSpawn(vehicleid)
{
DestroyPickup(vehicleid][Pickup]); //скрываем сам пикап
Veh[vehicleid][Pickup] = 0; // *
return 1;
}
Ну так вот, после загрузки мода все в норме. Но стоит мне запустить спавн всех авто на сервере, а потом в первой попавшейся создать пикап, так странность! ID пикапа равен не 997(а он по идее должен быть такой), а равен НУЛЮ. Но если сядем в другое авто(после создания НУЛЕВОГО пикапа) и создадим следующий пикап, то опять все будет в норме до тех пор, пока не заспавним одну из машин! Если заспавнили, то опять первый созданный пикап после спавна авто пикап будет НУЛЕВОЙ! А потом опять все последующие пикапы под правильными ID, и так может до бесконечности (спавним, нулевой, норма..). В чем может быть проблема? Или какой совет дадите? |
При удалении несуществующего пикапа вообще ни чего не будет.
Лучше делать так:
Code:
#define INVALID_PICKUP_ID (-1)
CMD:pick(playerid) {
new vehicleId = GetVehicleID(playerid);
if (!vehicleId) return 0;
if (Veh[vehicleId][Pickup] != INVALID_PICKUP_ID) {
DestroyPickup(Veh[vehicleId][Pickup]);
}
Veh[vehicleId][Pickup] = CreatePickup(19131,23,x,y,z);
return 1;
}
CMD:pickupDie(playerid) {
new vehicleId = GetVehicleID(playerid);
if (!vehicleId) return 0;
if (Veh[vehicleId][Pickup] != INVALID_PICKUP_ID) {
DestroyPickup(Veh[vehicleId][Pickup]);
}
Veh[vehicleId][Pickup] = INVALID_PICKUP_ID;
return 1;
}


