Carl_Onfroy
Ученик
Добрый вечер!
Делал систему с личным ТС, с загрузкой его из БД. Всё работает, кроме одного.
Я не могу понять как собственно привязать данные о бензине из Бд к правильной машине, и отнимать его.
Пожалуйста, кто знает как, подскажите!)))
Слишком много букавак, я знаю. Простите... Кто сможет подсказать как сделать это проще, тому огромное спасибки)
Делал систему с личным ТС, с загрузкой его из БД. Всё работает, кроме одного.
Я не могу понять как собственно привязать данные о бензине из Бд к правильной машине, и отнимать его.
Пожалуйста, кто знает как, подскажите!)))
Код:
enum vvInfo
{
vID,
vModel,
Float:vCar_x,
Float:vCar_y,
Float:vCar_z,
Float:vCar_a,
vColor1,
vColor2,
vWorld,
vInt,
vOwned,
vLock,
vFuel,
Float: vMileage
};
new VehicleInfo[MAX_VEHICLES][vvInfo];
Код:
stock LoadVehicle()
{
new Cache: result = mysql_query(dbHandle, "SELECT * FROM `vehicle`"),
tick = GetTickCount();
cache_get_row_count(OWNABLECAR);
for(new i; i < OWNABLECAR; i ++)
{
cache_get_value_name_int(i, "vID", VehicleInfo[i][vID]);
cache_get_value_name_int(i, "vModel", VehicleInfo[i][vModel]);
cache_get_value_name_float(i, "vCar_x", VehicleInfo[i][vCar_x]);
cache_get_value_name_float(i, "vCar_y", VehicleInfo[i][vCar_y]);
cache_get_value_name_float(i, "vCar_z", VehicleInfo[i][vCar_z]);
cache_get_value_name_float(i, "vCar_a", VehicleInfo[i][vCar_a]);
cache_get_value_name_int(i, "vColor1", VehicleInfo[i][vColor1]);
cache_get_value_name_int(i, "vColor2", VehicleInfo[i][vColor2]);
cache_get_value_name_int(i, "vWorld", VehicleInfo[i][vWorld]);
cache_get_value_name_int(i, "vInt", VehicleInfo[i][vInt]);
cache_get_value_name_int(i, "vLock", VehicleInfo[i][vLock]);
cache_get_value_name_int(i, "vFuel", VehicleInfo[i][vFuel]);
cache_get_value_name_float(i, "vMileage", VehicleInfo[i][vMileage]);
Vehicles[i] = AddStaticVehicleEx(VehicleInfo[i][vModel], VehicleInfo[i][vCar_x],VehicleInfo[i][vCar_y],VehicleInfo[i][vCar_z], VehicleInfo[i][vCar_a], VehicleInfo[i][vColor1], VehicleInfo[i][vColor2], 2 * 60);
SetVehicleToRespawn(Vehicles[i]);
//Fuel[i] = VehicleInfo[i][vFuel]; // Мои четные попытки это сделать
}
printf("[Server Log] Транспорт загружен | Всего %d шт (за %dмс)",OWNABLECAR, GetTickCount() - tick);
cache_delete(result);
return 1;
}
Код:
В 'OnPlayerStateChange' создаётся два таймера
SpeedTimer[playerid] = SetTimerEx("UpdateSpeedometr",200,1,"ii",playerid, GetPlayerVehicleID(playerid));
FuelTimer[playerid] = SetTimerEx("UpdateFuel",5000,1,"i",playerid);
forward UpdateSpeedometr(playerid, carid);
public UpdateSpeedometr(playerid, carid)
{
new Float: health, string[70];
GetVehicleHealth(carid, health);
format(string, sizeof(string), "%d", floatround(health, floatround_tozero));
PlayerTextDrawSetString(playerid, pSpeedometr[2][playerid], string); // ХП
format(string, sizeof(string), "%s", VehicleName[GetVehicleModel(carid)-400]);
PlayerTextDrawSetString(playerid, pSpeedometr[7][playerid], string); // Name Veh
if(VehicleSpeed(carid) > 0)
{
VehMilage[carid] += float(VehicleSpeed(carid))/20.0;
format(string, sizeof(string), "%d", VehicleSpeed(carid));
PlayerTextDrawSetString(playerid, pSpeedometr[1][playerid], string); // Скорость
}
return 1;
}
forward UpdateFuel(playerid); // Оть здеся я вообще поплыл, увидел на форуме как тут отнимали бенз, но всё равно потерялся((
public UpdateFuel(playerid)
{
/*for(new car = 1; car < MAX_VEHICLES; car++)
{
GetVehicleParamsEx(Vehicles[car],engine,lights,alarm,doors,bonnet,boot,objective);
if(VehicleInfo[Vehicles[car]][vFuel]) VehicleInfo[Vehicles[car]][vFuel] --; // Отнимаем литр бензина, если он есть
else SetVehicleParamsEx(Vehicles[car],VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective); // В противном случае - глушим двигатель
}
for(new u; u<MAX_VEHICLES; u++)
{
format(string, sizeof(string), "%d L", floatround(VehicleInfo[Vehicles[u]][vFuel], floatround_tozero));
PlayerTextDrawSetString(playerid, pSpeedometr[6][playerid], string); // FUEL
}
*/
if(IsPlayerInAnyVehicle(playerid))
{
for(new u; u<MAX_VEHICLES; u++)
{
GetVehicleParamsEx(Vehicles[u],engine,lights,alarm,doors,bonnet,boot,objective);
VehicleInfo[Vehicles[u]][vFuel] -= 1;
new string[6];
format(string, sizeof(string), "%d L", floatround(VehicleInfo[Vehicles[u]][vFuel], floatround_tozero));
PlayerTextDrawSetString(playerid, pSpeedometr[6][playerid], string); // FUEL
if(VehicleInfo[Vehicles[u]][vFuel] < 1 ) //Если бензина в машине игрока меньше 1 литра
{
//RemovePlayerFromVehicle(i); //Выстовляем игрока из машины
SetVehicleParamsEx(Vehicles[u],VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective); // В противном случае - глушим двигатель
SendClientMessage(playerid,0xffd400aa,"В этой машине нет бинзина"); //отпровляем игроку сообщение
}
}
}
return 1;
}
// Скорость Т\С
stock VehicleSpeed(carid)
{
new Float:X, Float:Y, Float:Z;
GetVehicleVelocity(carid,X,Y,Z);
return floatround( floatsqroot( X * X + Y * Y + Z * Z ) * 180.0 );
}
Слишком много букавак, я знаю. Простите... Кто сможет подсказать как сделать это проще, тому огромное спасибки)
