Вопросы

Daf
Освоившийся

Здравствуйте, уважаемые знатоки Pawn! У меня осталась одна нерешённая проблема, и я был бы очень признателен за вашу помощь. Я пытался найти информацию о том, как её решить, и изучал, за что отвечает функции. Однако, несмотря на кажущуюся простоту, я не смог разобраться в этом вопросе. Надеюсь, вы сможете объяснить мне, в чём заключается проблема.

 

Проблема: я решил добавить реал кары на проект. Всё сделал правильно, даже обращался по этому вопросу. Когда я меняю ID машины, который изначально был в ракете, на свой, машина появляется в игре. Я захожу в автосалон, сажусь, чтобы приобрести её, но диалог не отображается. Если я натягиваю модельку на тот ID, который был изначально, то моделька не появляется, а диалог появляется. Какой-то казус. Ниже код, который кажется подозрительным. Надеюсь, вы поможете, спасибо.

 

 if(GetVehicleModelEx(vehicleid) == 427) SetPlayerArmour(playerid, 0.0);

        if(veh_info[vehicleid][v_npoType] == NPO_PUB_SALON)
        {
            p_temp[playerid][veh_id_buy] = vehicleid;
            if(veh_info[vehicleid][v_npoId] == NPO_CUSTOM_VEH)
            {
                new custom_id = GetSlotVehicleModelSync(veh_info[vehicleid][v_model]);
                if(custom_id == -1return SendError(playerid, "Неизвестная ошибка: RC3007");
                STRING_GLOBAL[0] = EOS;
                format(STRING_GLOBAL, sizeof(STRING_GLOBAL), ""W"\
                    Название: "I"%s (ID: %d)"W"\n\n\
                    Стоимость: "I"%d FM"W"\n\
                    Макс. скорость: "I"%d KM/H"W"\n\
                    Макс. вместимость бака: "I"%d"W"\n\n\
                    Класс: "I"%s"W"\n\
                    Тип: "I"%s"W"\n\n\
                    "I"1."W" Приобрести\n\
                    "I"2."W" Тест-драйв",
                    GetVehicleName(INVALID_VEHICLE_ID, customVehModels[custom_id][CustomID]), customVehModels[custom_id][CustomID],
                    customVehModels[custom_id][ModelPrice], floatround(customVehModels[custom_id][ModelMaxSpeed]-50.0),
                    GetVehicleData(customVehModels[custom_id][ModelID], E_VD_MAX_FUEL), vehicle_class_name[GetVehicleData(customVehModels[custom_id][ModelID], E_VD_CLASS)], vehicle_type_name[GetVehicleData(customVehModels[custom_id][ModelID], E_VD_TYPE)]);
                ShowPlayerDialog(playerid, D_AVTOSALON_BUY, DIALOG_STYLE_INPUT, ""I"Покупка транспорта", STRING_GLOBAL, "Да""Нет");
            }
            else
CreateVehicleVEx(npoType, npoId, modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay = 180, addsiren = 0, tc_veh = 0)
{
    new vehicle, custom_id = -1;
    if(!(400 <= modelid <= 15000))
    {
        custom_id = GetSlotVehicleModelSync(modelid);
        if(custom_id == -1return print("топчик");
        modelid = customVehModels[custom_id][ModelID];
    }

    if(modelid == 538) vehicle = AddStaticVehicleEx(modelid, x, y, z, angle, color1, color2, respawn_delay, addsiren);
    else vehicle = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay, addsiren);
    if(vehicle == INVALID_VEHICLE_ID) return 0;
    sc_CreateVehicle(vehicle);

    for(new i = 0; i < 8; i++) veh_info[vehicle][v_passenger][i] = INVALID_PLAYER_ID;

    SetVehicleParamsVEx(vehicle, falsefalse, alarm, false, bonnet, boot, objective);
    veh_info[vehicle][v_mysql_id] = 0;
    veh_info[vehicle][v_admin] = 0;

    veh_info[vehicle][v_model] = custom_id == -1 ? modelid : customVehModels[custom_id][CustomID];

    veh_info[vehicle][v_custom_text] = INVALID_3DTEXT_ID;
    if(custom_id != -1)
    {
        STRING_GLOBAL[0] = EOS;
        f(STRING_GLOBAL, "\n%s", customVehModels[custom_id][ModelName]);
        veh_info[vehicle][v_custom_text] = CreateDynamic3DTextLabel(STRING_GLOBAL, COLOR_ORANGE, x, y, z, 20.0, INVALID_PLAYER_ID, vehicle);

        SetVehicleMaxSpeed(vehicle, customVehModels[custom_id][ModelMaxSpeed]+50.0);
        SetVehicleAcceleration(vehicle, 50.0);
    }
 if(vehicle_model > 611)
            {
                custom_id = GetSlotVehicleModelSync(vehicle_model);
                if(custom_id == -1)
                {
                    SendError(playerid, "Произошла неизвестная ошибка: RC3007_2");
                    RemovePlayerFromVehicle(playerid);
                    return 1;
                }
AddVehicleToPlayer(playerid, modelid, typeid, price = 0)
{
    if(modelid < 400return 1;
    new custom_id = -1;
    if(!(400 <= modelid <= 612))
    {
        custom_id = GetSlotVehicleModelSync(modelid);
        if(custom_id == -1return SendError(playerid, "Данного автомобиля нет в списке Real Cars");
    }
    new rows = GetPlayerCountCars(p_info[playerid][ID], GetVehicleData(modelid, E_VD_TYPE)),
        count_limit = GetPlayerLimiteCars(playerid, GetVehicleData(modelid, E_VD_TYPE));
    if(rows < count_limit)
    {
GetVehicleData(vidx, E_VEHICLE_INFO:typeID)
{
    if(vidx <= 611)
    {
        if(vidx >= 400) vidx -= 400;
    }
    else
    {
        new custom_id = GetSlotVehicleModelSync(vidx);
        if(custom_id == -1return -1;
        vidx = 212+custom_id;
    }
    switch(typeID)
    {
        case E_VD_ID:
            return gVehicleData[vidx][E_VD_ID];
        case E_VD_PRICE:
            return gVehicleData[vidx][E_VD_PRICE];
        case E_VD_MAX_SPEED:
            return gVehicleData[vidx][E_VD_MAX_SPEED];
        case E_VD_MAX_FUEL:
            return gVehicleData[vidx][E_VD_MAX_FUEL];
        case E_VD_CLASS:
            return gVehicleData[vidx][E_VD_CLASS];
        case E_VD_TYPE:
            return gVehicleData[vidx][E_VD_TYPE];
    }
    return -1;
}

Вот эта тема смущает больше всего!

Поделиться сообщением


Ссылка на сообщение

2 ответа на этот вопрос

  • 0
RayanBueno
Освоившийся

Переписанный CreateVehicleVEx (SAFE)

 

CreateVehicleVEx(
    npoType,
    npoId,
    input_modelid,        // может быть GTA ID или CustomID
    Float:x,
    Float:y,
    Float:z,
    Float:angle,
    color1,
    color2,
    respawn_delay = 180,
    addsiren = 0,
    tc_veh = 0
)
{
    new vehicleid;
    new gta_modelid;
    new custom_id = -1;

    // --- Определяем тип ID ---
    if(input_modelid >= 400 && input_modelid <= 611)
    {
        // обычная GTA-машина
        gta_modelid = input_modelid;
    }
    else
    {
        // Real Car
        custom_id = GetSlotVehicleModelSync(input_modelid);
        if(custom_id == -1)
        {
            printf("[CreateVehicleVEx] Unknown CustomID: %d", input_modelid);
            return INVALID_VEHICLE_ID;
        }

        gta_modelid = customVehModels[custom_id][ModelID];
    }

    // --- Создание транспорта ---
    if(gta_modelid == 538)
        vehicleid = AddStaticVehicleEx(gta_modelid, x, y, z, angle, color1, color2, respawn_delay, addsiren);
    else
        vehicleid = CreateVehicle(gta_modelid, x, y, z, angle, color1, color2, respawn_delay, addsiren);

    if(vehicleid == INVALID_VEHICLE_ID)
    {
        printf("[CreateVehicleVEx] CreateVehicle failed (gta_modelid=%d)", gta_modelid);
        return INVALID_VEHICLE_ID;
    }

    // --- Инициализация ---
    sc_CreateVehicle(vehicleid);

    for(new i = 0; i < 8; i++)
        veh_info[vehicleid][v_passenger][i] = INVALID_PLAYER_ID;

    SetVehicleParamsVEx(vehicleid, falsefalse, alarm, false, bonnet, boot, objective);

    veh_info[vehicleid][v_mysql_id] = 0;
    veh_info[vehicleid][v_admin]   = 0;
    veh_info[vehicleid][v_npoType] = npoType;
    veh_info[vehicleid][v_npoId]   = npoId;

    // --- ГЛАВНОЕ: сохраняем модель ---
    if(custom_id != -1)
        veh_info[vehicleid][v_model] = input_modelid; // CustomID
    else
        veh_info[vehicleid][v_model] = gta_modelid;   // обычная GTA

    veh_info[vehicleid][v_custom_text] = INVALID_3DTEXT_ID;

    // --- Настройки Real Cars ---
    if(custom_id != -1)
    {
        STRING_GLOBAL[0] = EOS;
        format(STRING_GLOBAL, sizeof STRING_GLOBAL, "\n%s", customVehModels[custom_id][ModelName]);

        veh_info[vehicleid][v_custom_text] =
            CreateDynamic3DTextLabel(
                STRING_GLOBAL,
                COLOR_ORANGE,
                x, y, z,
                20.0,
                INVALID_PLAYER_ID,
                vehicleid
            );

        SetVehicleMaxSpeed(vehicleid, customVehModels[custom_id][ModelMaxSpeed] + 50.0);
        SetVehicleAcceleration(vehicleid, 50.0);
    }

    return vehicleid;
}

 

Отредактировано пользователем misha7

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Korochansky
      От Korochansky
      Настало время объявить о скором выпуске первого релиза среды разработки под названием Spawn.

      В настоящее время программа находится на заключительных этапах доработки кода и локализации интерфейса.
      Таким образом, в течение следующей недели будет выпущена быстрая и современная среда разработки, обладающая следующими возможностями (о которых я расскажу сейчас, а о других — позже):
       
      Полнофункциональный локальный Git: 
      Индексирование, фиксации, индикаторы состояния и мягкий/жесткий сброс до любой точки сохранения одним щелчком мыши. Разрабатывайте свой игровой сервер, не боясь его сломать.
      Новички могут рассматривать это как историю кодовой базы вашего сервера (что и есть на самом деле).
       
      Чистый UTF-8 (без BOM): 
      Полный отказ от устаревшей кодировки Windows-1251 (CP1251) для абсолютной стабильности и идеальной совместимости с Git.
      Реализация поддержки CP1251 привела бы к нестабильному поведению программы и ухудшила бы пользовательский опыт.
       
      История изменений строк: Редактор выделяет измененные строки в реальном времени в полях рядом с номерами строк. Это позволяет мгновенно видеть границы изменений, внесенных с момента открытия файла.
       
      Сопоставление и выделение фигурных скобок: мгновенное выделение открывающих и закрывающих фигурных скобок для быстрой навигации по структуре кода и защиты от ошибок компиляции.
       
      Интеграция с SAMPCTL: готовая к использованию автоматизация процессов. Сборка, запуск сервера и менеджер зависимостей (управление библиотеками и плагинами) работают напрямую из интерфейса редактора.
       
      И многое другое...
       
      И самое главное: проект будет с открытым исходным кодом под лицензией GPLv3!
      Следите за новостями о выпуске в репозитории: https://github.com/daniilkorochansky/spawn
    • KodBi
      От KodBi
      шапка
      по одиночке работают
      нужны оба