• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Системе бензина личного транспорта

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 );
}



Слишком много букавак, я знаю. Простите... Кто сможет подсказать как сделать это проще, тому огромное спасибки)
 
Сверху Снизу