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

Тема: ORM запросы

  1. #1
    Аватар для _MegaMix_
    Пользователь

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

    ORM запросы

    Здравствуйте, возникла такая проблема, сделал команду выдачи vip, должно записать в бд 3 параметра, но почему-то 1 параметр записывает как 0.

    Параметр vip_id записывает как 0.
    В логах такие ошибки:

    PHP код:
    orm_setkeyorm errorvariable not found 
    [ERRORCOrm::UpdateKeyValue inserted id is zero 

    PHP код:
    COMMAND:makevip(adminid,params[])
    {
        
    CheckAdminLevel(adminidADMIN_LVL_makeadmin);

        
    extract params -> new playeridlevelday; else
        {
            return 
    SendClientMessage(adminidHEX_COLOR_ERROR,
                !
    "Используйте: /makevip [playerid] [уровень] [дни]");
        }

        else if(!
    IsPlayerConnected(playerid))
            return 
    CMD_INVALID_PLAYER_ID;

        else if(
    admin[adminid][admin_level] < admin[playerid][admin_level])
            return 
    CMD_INVALID_PERMISSIONS;

        else if(!(-
    level MAX_VIP_LEVEL))
            return 
    SendClientMessage(adminidHEX_COLOR_ERROR, !"Уровень не может быть больше чем "#MAX_VIP_LEVEL" и меньше чем 0!");

        
    else if(!(day 365))
            return 
    SendClientMessage(adminidHEX_COLOR_ERROR, !"Количество дней должно быть от 1 до 365!");

        else if(
    level == vip[playerid][v_level])
            return 
    SendClientMessage(adminidHEX_COLOR_ERROR, !"У игрока уже установлен данный уровень!");

        else if(
    == level)
        {
            
    vip[playerid][v_level] = 0;
            
    orm_delete(vip[playerid][vip_orm]);

            static const 
    string_content[] = ""COLOR_ERROR"%s "COLOR_NOTE"забрал VIP привелегии у "COLOR_ERROR"%s";
            new 
    string[sizeof string_content - (2*3) + MAX_ADMIN_RANK + (MAX_PLAYER_NAME*2)];

            
    format(stringsizeof stringstring_contentplayer[adminid][player_name], player[playerid][player_name]);
            
    SendMessageToAdmins(string);
            
    SendMessageToVips(string);

            
    format(stringsizeof string""COLOR_ERROR"%s "COLOR_NOTE" забрал у вас VIP привелегии!"player[adminid][player_name]);
            
    SendClientMessage(playeridHEX_COLOR_NOTEstring);
            return 
    1;
        }
        else if(!
    vip[playerid][v_level])
        {
            static const 
    string_content[] = ""COLOR_ERROR" %s "COLOR_NOTE" выдал вам VIP уровень: "COLOR_ERROR"%s";
            new 
    string[sizeof string_content + (-MAX_PLAYER_NAME) + (-9)];
            
    format(stringsizeof stringstring_contentplayer[adminid][player_name], vip_level[level]);
            
    SendClientMessage(playeridHEX_COLOR_NOTEstring);

            static const 
    string_content2[] = ""COLOR_ERROR" %s "COLOR_NOTE" выдал "COLOR_ERROR"%s "COLOR_NOTE"VIP уровень: "COLOR_ERROR"%s";
            new 
    string2[sizeof string_content2 + (-MAX_PLAYER_NAME)*+ (-9)];
            
    format(string2sizeof string2string_content2player[adminid][player_name], player[playerid][player_name], vip_level[level]);
            
    SendMessageToAdmins(string2);

            
    vip[playerid][vip_day] = 86400 day;
            
    vip[playerid][v_id] = player[playerid][player_unique_id];
            
    vip[playerid][v_level] = level;

            
    orm_setkey(vip[playerid][vip_orm], "vad");
            
    orm_insert(vip[playerid][vip_orm]);
            return 
    1;
        }
        else
        {
            
    vip[playerid][v_level] = level;
            
    vip[playerid][vip_day] = 86400 day;
            
    vip[playerid][v_id] = player[playerid][player_unique_id];
            
    orm_update(vip[playerid][vip_orm]);
        }
        return 
    true;

    PHP код:
    enum VIP_DATA
    {
        
    ORMvip_orm,
        
    v_level,
        
    vip_day,
        
    v_id
    };

    new 
        
    vip[MAX_PLAYERS][VIP_DATA]; 

    PHP код:
    public OnPlayerSpawn(playerid)
    {
        if(
    IsPVarSet(playerid"_adsss_connect")
            && 
    player[playerid][player_status] == PLAYER_STATUS_LOGGED)
        {
            
    vip[playerid][vip_orm] = orm_create("vips");

            
    orm_addvar_int(vip[playerid][vip_orm],
                
    vip[playerid][v_id], "vip_id");

            
    orm_addvar_int(vip[playerid][vip_orm],
                
    vip[playerid][v_level], "vip_level");

            
    orm_addvar_int(vip[playerid][vip_orm],
                
    vip[playerid][vip_day], "vip_days");

            
    orm_setkey(vip[playerid][vip_orm], "vip_id");

            
    orm_select(vip[playerid][vip_orm], "CheckPlayerForVip""i"playerid);

            
    DeletePVar(playerid"_adsss_connect");
        }
        
    #if defined adsv_OnPlayerSpawn
            
    return adsv_OnPlayerSpawn(playerid);
        
    #else
            
    return 1;
        
    #endif
    }
    #if defined _ALS_OnPlayerSpawn
        #undef OnPlayerSpawn
    #else
        #define _ALS_OnPlayerSpawn
    #endif
    #define OnPlayerSpawn adsv_OnPlayerSpawn
    #if defined adsv_OnPlayerSpawn
        
    forward adsv_OnPlayerSpawn(playerid);
    #endif


    public OnPlayerConnect(playerid)
    {
        
    vip[playerid] = clear_vip_data;
        
    SetPVarInt(playerid"_adsss_connect"1);
        
    #if defined adsv_OnPlayerConnect
            
    return adsv_OnPlayerConnect(playerid);
        
    #else
            
    return 1;
        
    #endif
    }
    #if defined _ALS_OnPlayerConnect
        #undef OnPlayerConnect
    #else
        #define _ALS_OnPlayerConnect
    #endif
    #define OnPlayerConnect adsv_OnPlayerConnect
    #if defined adsv_OnPlayerConnect
        
    forward adsv_OnPlayerConnect(playerid);
    #endif


    public OnPlayerDisconnect(playeridreason)
    {
        if(
    vip[playerid][v_level]
            && 
    player[playerid][player_status] == PLAYER_STATUS_LOGGED)
        {
            
    orm_update(vip[playerid][vip_orm]);
            
    orm_destroy(vip[playerid][vip_orm]);
        }
        
    #if defined adsv_OnPlayerDisconnect
            
    return adsv_OnPlayerDisconnect(playeridreason);
        
    #else
            
    return 1;
        
    #endif
    }
    #if defined _ALS_OnPlayerDisconnect
        #undef OnPlayerDisconnect
    #else
        #define _ALS_OnPlayerDisconnect
    #endif
    #define OnPlayerDisconnect adsv_OnPlayerDisconnect
    #if defined adsv_OnPlayerDisconnect
        
    forward adsv_OnPlayerDisconnect(playeridreason);
    #endif 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    orm_setkey(vip[playerid][vip_orm], "vad"); 
    Так вот тут ты пытаешься установить переменную, которую не объявлял, в качестве ключа, не?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    25.12.2016
    Сообщений
    31
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так вот тут ты пытаешься установить переменную, которую не объявлял, в качестве ключа, не?
    У меня при спавне ставится ключ : orm_setkey(vip[playerid][vip_orm], "vip_id"); , я пробовал такой же в команде вызывать, результат не изменился. А как правильно нужно ключ установить?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от _MegaMix_ Посмотреть сообщение
    У меня при спавне ставится ключ : orm_setkey(vip[playerid][vip_orm], "vip_id"); , я пробовал такой же в команде вызывать, результат не изменился. А как правильно нужно ключ установить?
    Нужно указывать имя того столбца, по которому нужно делать выборку в запросе. В твоём случае это vip_id, как я понимаю.
    Измени на него, отчисти лог MySQL и попробуй повторно использовать команду. Будут ли ошибки в MySQL лог при этом?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    25.12.2016
    Сообщений
    31
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Нужно указывать имя того столбца, по которому нужно делать выборку в запросе. В твоём случае это vip_id, как я понимаю.
    Измени на него, отчисти лог MySQL и попробуй повторно использовать команду. Будут ли ошибки в MySQL лог при этом?
    05/15/17 17:42:02] [ERROR] orm_setkey: orm error: variable not found (58 строчка)
    [05/15/17 17:42:02] [ERROR] COrm::UpdateKeyValue - inserted id is zero

    А вот эта строчка :

    orm_setkey(vip[playerid][vip_orm], "vip_id");

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    25.12.2016
    Сообщений
    31
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Покажи весь код, что относится к orm для этой системы и пометь эту 58 строку
    А это весь код что есть

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Не уверен, что причиной ошибки является именно то, о чём я сейчас буду говорить (с ORM в плагине особо не работал), но вот тут
    Тебе следовало установить значение для
    PHP код:
    vip[playerid][v_id
    прежде чем вызывать эту строку:
    PHP код:
            orm_addvar_int(vip[playerid][vip_orm], 
                
    vip[playerid][v_id], "vip_id"); 
    А потом и эту
    PHP код:
    orm_setkey(vip[playerid][vip_orm], "vip_id"); 
    Ибо сейчас у тебя, как я понимаю, этой строкой
    PHP код:
    vip[playerid] = clear_vip_data
    идёт обнуление данных в массиве и, соответственно, ID аккаунта в "vip[playerid][v_id]" равен нулю, когда ты устанавливаешь его в качестве ключа для запроса
    PHP код:
    orm_select(vip[playerid][vip_orm], "CheckPlayerForVip""i"playerid); 
    из-за чего в дальнейшем и аккаунт не находится при входе, и, возможно, ошибка эта появляется в логах.




    В общем, попробуй вот так:
    PHP код:
    public OnPlayerSpawn(playerid

        if(
    IsPVarSet(playerid"_adsss_connect"
            && 
    player[playerid][player_status] == PLAYER_STATUS_LOGGED
        { 
            new 
    ORM:ormid vip[playerid][vip_orm] = orm_create("vips"); 

            
    orm_addvar_int(ormid, (vip[playerid][v_id] = player[playerid][player_unique_id]), "vip_id"); 

            
    orm_addvar_int(ormidvip[playerid][v_level], "vip_level"); 

            
    orm_addvar_int(ormidvip[playerid][vip_day], "vip_days"); 

            
    orm_setkey(ormid"vip_id"); 

            
    orm_select(ormid"CheckPlayerForVip""i"playerid); 

            
    DeletePVar(playerid"_adsss_connect"); 
        } 
        
    #if defined adsv_OnPlayerSpawn 
            
    return adsv_OnPlayerSpawn(playerid); 
        
    #else 
            
    return 1
        
    #endif 

    #if defined _ALS_OnPlayerSpawn 
        #undef OnPlayerSpawn 
    #else 
        #define _ALS_OnPlayerSpawn 
    #endif 
    #define OnPlayerSpawn adsv_OnPlayerSpawn 
    #if defined adsv_OnPlayerSpawn 
        
    forward adsv_OnPlayerSpawn(playerid); 
    #endif 
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  10. #10
    Аватар для _MegaMix_
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.12.2016
    Сообщений
    31
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
      Открыть/закрыть
    Не уверен, что причиной ошибки является именно то, о чём я сейчас буду говорить (с ORM в плагине особо не работал), но вот тут
    Тебе следовало установить значение для
    PHP код:
    vip[playerid][v_id
    прежде чем вызывать эту строку:
    PHP код:
            orm_addvar_int(vip[playerid][vip_orm], 
                
    vip[playerid][v_id], "vip_id"); 
    А потом и эту
    PHP код:
    orm_setkey(vip[playerid][vip_orm], "vip_id"); 
    Ибо сейчас у тебя, как я понимаю, этой строкой
    PHP код:
    vip[playerid] = clear_vip_data
    идёт обнуление данных в массиве и, соответственно, ID аккаунта в "vip[playerid][v_id]" равен нулю, когда ты устанавливаешь его в качестве ключа для запроса
    PHP код:
    orm_select(vip[playerid][vip_orm], "CheckPlayerForVip""i"playerid); 
    из-за чего в дальнейшем и аккаунт не находится при входе, и, возможно, ошибка эта появляется в логах.




    В общем, попробуй вот так:
    PHP код:
    public OnPlayerSpawn(playerid

        if(
    IsPVarSet(playerid"_adsss_connect"
            && 
    player[playerid][player_status] == PLAYER_STATUS_LOGGED
        { 
            new 
    ORM:ormid vip[playerid][vip_orm] = orm_create("vips"); 

            
    orm_addvar_int(ormid, (vip[playerid][v_id] = player[playerid][player_unique_id]), "vip_id"); 

            
    orm_addvar_int(ormidvip[playerid][v_level], "vip_level"); 

            
    orm_addvar_int(ormidvip[playerid][vip_day], "vip_days"); 

            
    orm_setkey(ormid"vip_id"); 

            
    orm_select(ormid"CheckPlayerForVip""i"playerid); 

            
    DeletePVar(playerid"_adsss_connect"); 
        } 
        
    #if defined adsv_OnPlayerSpawn 
            
    return adsv_OnPlayerSpawn(playerid); 
        
    #else 
            
    return 1
        
    #endif 

    #if defined _ALS_OnPlayerSpawn 
        #undef OnPlayerSpawn 
    #else 
        #define _ALS_OnPlayerSpawn 
    #endif 
    #define OnPlayerSpawn adsv_OnPlayerSpawn 
    #if defined adsv_OnPlayerSpawn 
        
    forward adsv_OnPlayerSpawn(playerid); 
    #endif 
    К сожалению, всё равно 0 записывается
    Последний раз редактировалось DeimoS; 18.05.2017 в 22:09.

 

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

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

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

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

Ваши права

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