Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 19
  1. #1
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±

    Проблема с загрузкой авто (mysql r41-3)

    Доброго времени суток, господа.

    В общем, столкнулся с проблемой загрузки автомобилей с базы данных.
    Если насильно (дебаг) узнать ID в базе этого автомобиля, то один из автомобилей будет иметь ID 0. С чем это связано - неизвестно для меня, поэтому я решил обратиться к вам.

    Скриншот: https://imgur.com/a/cWIDh

    Лог загрузки авто
      Открыть/закрыть
    [14:42:23] Загружен транспорт: vID: 1, ID: 1, Fraction: 7
    [14:42:23] Загружен транспорт: vID: 3, ID: 2, Fraction: 7
    [14:42:23] Загружен транспорт: vID: 4, ID: 3, Fraction: 7


    Колбэк загрузки авто
      Открыть/закрыть
    Код:
    @LoadFractionVehicle();
    @LoadFractionVehicle()
    {
        new time = GetTickCount();
        new rows;
        new id = VEHS;
        cache_get_row_count(rows);
        if(!rows) return print("- Динамические авто не найдены");
        for(new i; i < rows; i++)
        {
            cache_get_value_name_int(i, "f_v_id", VehicleInfo[id][vID]);
            cache_get_value_name_int(i, "f_v_model", VehicleInfo[id][vModel]);
            cache_get_value_name_int(i, "f_v_fraction", VehicleInfo[id][vFraction]);
            cache_get_value_name_int(i, "f_v_color1", VehicleInfo[id][vColor1]);
            cache_get_value_name_int(i, "f_v_color2", VehicleInfo[id][vColor2]);
            cache_get_value_name_float(i, "f_v_posX", VehicleInfo[id][vX]);
            cache_get_value_name_float(i, "f_v_posY", VehicleInfo[id][vY]);
            cache_get_value_name_float(i, "f_v_posZ", VehicleInfo[id][vZ]);
            cache_get_value_name_float(i, "f_v_posA", VehicleInfo[id][vA]);
            VehicleInfo[id][vVehicle] = AddTeamVehicle(VehicleInfo[id][vFraction], VehicleInfo[id][vModel], VehicleInfo[id][vX], VehicleInfo[id][vY], VehicleInfo[id][vZ], VehicleInfo[id][vA], VehicleInfo[id][vColor1], VehicleInfo[id][vColor2]);
            printf("Загружен транспорт: vID: %d, ID: %d, Fraction: %d", VehicleInfo[id][vID], VehicleInfo[id][vVehicle], VehicleInfo[id][vFraction]);
            VEHS++;
        }
        printf("[Загружено динамических автомобилей]: <%i>. Потрачено: <%i ms>.", rows, GetTickCount() - time);
        return 1;
    }


    Функция создания авто
      Открыть/закрыть
    Код:
    stock AddTeamVehicle(fraction, modelid, Float: X, Float: Y, Float: Z, Float: A, Color1, Color2)
    {
        new vehicleid = CreateVehicle(modelid, X, Y, Z, A, Color1, Color2, 300);
        if(vehicleid == INVALID_VEHICLE_ID) return 0;
        
        VehicleInfo[vehicleid][vFuel] = 100.0;
        VehicleInfo[vehicleid][vFraction] = fraction;
        printf("Создан транспорт vID: %i, ID: %d", VehicleInfo[vehicleid][vID], vehicleid);
        
        SetVehicleNumberPlate(vehicleid, "San Andreas");
        SetVehicleParamsEx(vehicleid, false, false, false, false, false, false, false);
        ToggleLock(vehicleid, 0);
                
        if(fraction == TEAM_FBI)
        {
            SignalTick[vehicleid][1] = -1;
            LightsObject[vehicleid][0] = -1;
            LightsObject[vehicleid][1] = -1;
            LightsObject[vehicleid][2] = -1;
            LightsObject[vehicleid][3] = -1;
        }
        switch(modelid)
        {
            case 430, 446, 452, 453, 454, 472, 473, 484, 493: VehicleState[vehicleid] = VEHICLE_STATE_BOAT;
            case 417, 425, 447, 460, 469, 476, 487, 488, 497, 511, 512, 513, 519, 520, 548, 553,
                 563, 577, 592, 593:  VehicleState[vehicleid] = VEHICLE_STATE_PLANE;
            case 581, 522, 461, 521, 523, 463, 468, 471, 586: VehicleState[vehicleid] = VEHICLE_STATE_BIKE;
            case 509, 481, 510: VehicleState[vehicleid] = VEHICLE_STATE_VELIK;
            case 462, 448: VehicleState[vehicleid] = VEHICLE_STATE_MOPED;
            case 538, 537: VehicleState[vehicleid] = VEHICLE_STATE_TRAIN;
            default: VehicleState[vehicleid] = VEHICLE_STATE_CAR;
        }
        return vehicleid;
    }


    Также при редактировании координат этого авто, естественно они не редактируются, поскольку транспорта с ID 0 в базе нет.
    Последний раз редактировалось Kucklovod00; 20.12.2017 в 16:39.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, может я чего не углядел, но у тебя в загрузке авто сначала создаётся переменная id, которой присваивается значение VEHS, при загрузке данных используется значение переменной id, но в конце цикла уже изменяется значение VEHS. То бишь, все данные грузятся в одну ячейку, как я понимаю.
    Тебе нужно было логировать именно значения i, id и VEHS после того, как проверил значение массива. А лучше сразу проверять стоило.

    В общем, если я правильно понял логику кода, удаляй "new id..." и все id заменяй на VEHS. Хотя если значение VEHS совпадает с i, то и VEHS не нужна. Ну или i... В общем, нужно логировать и смотреть, если ответ хочешь получить
    Последний раз редактировалось DeimoS; 20.12.2017 в 17:53.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, может я чего не углядел, но у тебя в загрузке авто сначала создаётся переменная id, которой присваивается значение VEHS, при загрузке данных используется значение переменной id, но в конце цикла уже изменяется значение VEHS. То бишь, все данные грузятся в одну ячейку, как я понимаю.
    Тебе нужно было логировать именно значения i, id и VEHS после того, как проверил значение массива. А лучше сразу проверять стоило.

    В общем, если я правильно понял логику кода, удаляй "new id..." и все id заменяй на VEHS. Хотя если значение VEHS совпадает с i, то и VEHS не нужна. Ну или i... В общем, нужно логировать и смотреть, если ответ хочешь получить
    Спасибо, на самом деле написал чушь какую-то. Убрал VEHS, в качестве ИДа использую i. Проблема не решена.

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Так код покажи новый
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #5
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так код покажи новый
     Скриншот

     Колбэк
    PHP код:
    @LoadFractionVehicle();
    @
    LoadFractionVehicle()
    {
        new 
    time GetTickCount();
        new 
    rows;
        
    cache_get_row_count(rows);
        if(!
    rows) return print("- Динамические авто не найдены");
        for(new 
    irowsi++)
        {
            
    cache_get_value_name_int(i"f_v_id"VehicleInfo[i][vID]);
            
    cache_get_value_name_int(i"f_v_model"VehicleInfo[i][vModel]);
            
    cache_get_value_name_int(i"f_v_fraction"VehicleInfo[i][vFraction]);
            
    cache_get_value_name_int(i"f_v_color1"VehicleInfo[i][vColor1]);
            
    cache_get_value_name_int(i"f_v_color2"VehicleInfo[i][vColor2]);
            
    cache_get_value_name_float(i"f_v_posX"VehicleInfo[i][vX]);
            
    cache_get_value_name_float(i"f_v_posY"VehicleInfo[i][vY]);
            
    cache_get_value_name_float(i"f_v_posZ"VehicleInfo[i][vZ]);
            
    cache_get_value_name_float(i"f_v_posA"VehicleInfo[i][vA]);
            
    printf("Загружен транспорт: vID: %d, vVehicle: %d, ID: %d"VehicleInfo[i][vID], VehicleInfo[i][vVehicle], i);
            
    VehicleInfo[i][vVehicle] = AddTeamVehicle(VehicleInfo[i][vFraction], VehicleInfo[i][vModel], VehicleInfo[i][vX], VehicleInfo[i][vY], VehicleInfo[i][vZ], VehicleInfo[i][vA], VehicleInfo[i][vColor1], VehicleInfo[i][vColor2]);
        }
        
    printf("[Загружено динамических автомобилей]: <%i>. Потрачено: <%i ms>."rowsGetTickCount() - time);
        return 
    1;


     AddTeamVehicle
    PHP код:
    stock AddTeamVehicle(fractionmodelidFloatXFloatYFloatZFloatAColor1Color2)
    {
        new 
    vehicleid CreateVehicle(modelidXYZAColor1Color2300);
        if(
    vehicleid == INVALID_VEHICLE_ID) return 0;
        
        
    VehicleInfo[vehicleid][vFuel] = 100.0;
        
    VehicleInfo[vehicleid][vFraction] = fraction;
        
    printf("- // - Создан транспорт vID: %i, ID в игре: %d"VehicleInfo[vehicleid][vID], vehicleid);
        
        
    SetVehicleNumberPlate(vehicleid"San Andreas");
        
    SetVehicleParamsEx(vehicleidfalsefalsefalsefalsefalsefalsefalse);
        
    ToggleLock(vehicleid0);
                
        if(
    fraction == TEAM_FBI)
        {
            
    SignalTick[vehicleid][1] = -1;
            
    LightsObject[vehicleid][0] = -1;
            
    LightsObject[vehicleid][1] = -1;
            
    LightsObject[vehicleid][2] = -1;
            
    LightsObject[vehicleid][3] = -1;
        }
        switch(
    modelid)
        {
            case 
    430446452453454472473484493VehicleState[vehicleid] = VEHICLE_STATE_BOAT;
            case 
    417425447460469476487488497511512513519520548553,
                 
    563577592593:  VehicleState[vehicleid] = VEHICLE_STATE_PLANE;
            case 
    581522461521523463468471586VehicleState[vehicleid] = VEHICLE_STATE_BIKE;
            case 
    509481510VehicleState[vehicleid] = VEHICLE_STATE_VELIK;
            case 
    462448VehicleState[vehicleid] = VEHICLE_STATE_MOPED;
            case 
    538537VehicleState[vehicleid] = VEHICLE_STATE_TRAIN;
            default: 
    VehicleState[vehicleid] = VEHICLE_STATE_CAR;
        }
        return 
    vehicleid;


     Лог загрузки / лог AddTeamVehicle
    PHP код:
    [10:09:26Загружен транспортvID1vVehicle0ID0
    [10:09:26] - // - Создан транспорт vID: 0, ID в игре: 1
    [10:09:26Загружен транспортvID3vVehicle0ID1
    [10:09:26] - // - Создан транспорт vID: 0, ID в игре: 2
    [10:09:26Загружен транспортvID4vVehicle0ID2
    [10:09:26] - // - Создан транспорт vID: 0, ID в игре: 3 

  6. #6
    Аватар для #teredokot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.07.2017
    Сообщений
    2
    Репутация:
    0 ±
    Приравняй переменную vID к единице.

  7. #7
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от #teredokot Посмотреть сообщение
    Приравняй переменную vID к единице.
    Разверните ответ более подробно. Что мне это даст? В каком месте ее приравнять?

  8. #8
    Аватар для #teredokot
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.07.2017
    Сообщений
    2
    Репутация:
    0 ±

    Кинь код этого места.

  9. #9
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от #teredokot Посмотреть сообщение

    Кинь код этого места.
     /debug_v
    PHP код:
    CMD:debug_v(playerid)
    {
        if(!
    IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playeridCOLOR_GREY"Вы должны находиться в транспорте!");
        new 
    vehicleid GetPlayerVehicleID(playerid);
        new 
    str[30];
        
    format(strsizeof(str), "vID: %i, ID: %i, Fraction: %i"VehicleInfo[vehicleid][vID], vehicleidVehicleInfo[vehicleid][vFraction]);
        
    SendClientMessage(playerid, -1str);
        return 
    1;


  10. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А может просто стоит вникнуть в код, а не делать абы как?
    У тебя при загрузке авто данные сохраняются в ячейки согласно порядковому номеру строки в результате SQL запроса, а уже дальше ты обращаешься к данным через vehicleid с чего-то.
    Вся проблема в загрузке. Точнее, в том, что загрузка у тебя никак не связана с дальнейшим форматом работы с массивом
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •