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

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

    Сохранение

    Здравствуйте, начал разбираться в MySQL, не пойму, как записывается сохранение. Сделал диалог для выбора пола, который должен записываться и сохраняться, а так же скин. В БД переменные всегда = 0. Сохранения нет. Не знаю почему.

    Вот аккаунты записи:

    PHP код:
    stock CreateNewAccount(playeridpassword[])
    {
        new 
    query_string[70+MAX_PLAYER_NAME+30];
        
    format(query_stringsizeof(query_string), "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('%s', '%s')"pInfo[playerid][pName], password);
        
    mysql_function_query(mysql_connect_IDquery_stringfalse"""");
        return 
    1;
    }

    stock SaveAccount(playerid
    {
        new 
    query_string[(21)+(16+11)+(19+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `accounts` SET";
        
    format(query_stringsizeof(query_string), "%s `player_name` = '%s'"query_stringpInfo[playerid][pName]);
        
    format(query_stringsizeof(query_string), "%s `password` = '%s'"query_stringpInfo[playerid][pPassword]);
        
    format(query_stringsizeof(query_string), "%s `pol` = '%d'"query_stringpInfo[playerid][pSex]);
        
    format(query_stringsizeof(query_string), "%s `skin` = '%d'"query_stringpInfo[playerid][pChar]);
        
    format(query_stringsizeof(query_string), "%s WHERE `ID` = '%d'"query_stringpInfo[playerid][pID]);
        
    mysql_function_query(mysql_connect_IDquery_stringfalse""""); 
        return 
    1

    А вот сам диалог выбора пола:
    PHP код:
    case dPolIgroka:
            {
                if(
    response)
                {
                    
    SendClientMessage(playeridCOLOR_WHITE"Хорошо, ты {33aa33}Парень.");
                    
    pInfo[playerid][pSex] = 1;
                    
    SetPlayerSkin(playerid23);
                    
    pInfo[playerid][pChar] = 23;
                    return 
    true;
                }
                else
                {
                    
    SendClientMessage(playeridCOLOR_WHITE"Хорошо, ты {33aa33}Девушка.");
                    
    pInfo[playerid][pSex] = 2;
                    
    SetPlayerSkin(playerid90);
                    
    pInfo[playerid][pChar] = 90;
                    return 
    true;
                }
            } 
    Подскажите что я не так делаю?

  2. #2
    Аватар для Gressie
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2013
    Сообщений
    258
    Репутация:
    6 ±
    Попробуй так:
    PHP код:
    stock SaveAccount(playerid)  

        new 
    query_string[(21)+(16+11)+(19+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `accounts` SET"
        
    format(query_stringsizeof(query_string), "%s `player_name` = '%s',"query_stringpInfo[playerid][pName]); 
        
    format(query_stringsizeof(query_string), "%s `password` = '%s',"query_stringpInfo[playerid][pPassword]); 
        
    format(query_stringsizeof(query_string), "%s `pol` = '%d',"query_stringpInfo[playerid][pSex]); 
        
    format(query_stringsizeof(query_string), "%s `skin` = '%d',"query_stringpInfo[playerid][pChar]); 
        
    format(query_stringsizeof(query_string), "%s WHERE `ID` = '%d'"query_stringpInfo[playerid][pID]); 
        
    mysql_function_query(mysql_connect_IDquery_stringfalse"""");  
        return 
    1;  


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

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Нет,все так же.. в БД они = 0.

    - - - Добавлено - - -

    Может дело не в самой сохранке а выводе диалогов?
    Вот сами диалоги.

    PHP код:
        switch(dialogid)
        {
            case 
    dRegister:
            {
                if(!
    response) return Kick(playerid);
                if(!
    strlen(inputtext)) return ErrorDialogMessage(playeriddRegister0);
                else if(
    strlen(inputtext) < 4) return ErrorDialogMessage(playeriddRegister1);
                else if(
    strlen(inputtext) > 30) return ErrorDialogMessage(playeriddRegister2);
                for(new 
    strlen(inputtext)-1!= -1i--)
                {
                    switch(
    inputtext[i])
                    {
                        case 
    '0'..'9''а'..'я''a'..'z''А'..'Я''A'..'Z': continue;
                        default: return 
    ErrorDialogMessage(playeriddRegister3);
                    }
                }
                new 
    string[70];
                
    strins(pInfo[playerid][pPassword], inputtext0);
                
    CreateNewAccount(playeridpInfo[playerid][pPassword]);
                
    format(string,sizeof(string),"{FFDEAD}Аккаунт зарегистрирован\nВведи пароль для продолжения:");
                
    ShowPlayerDialog(playeriddRegister1,DIALOG_STYLE_PASSWORD,"Авторизация",string,"Вход","Отмена");
                return 
    1;
            }
            case 
    dLogin:
            {
                if(!
    response) return Kick(playerid);
                if(!
    strlen(inputtext)) return ErrorDialogMessage(playeriddLogin0);
                for(new 
    strlen(inputtext)-1!= -1i--)
                {
                    switch(
    inputtext[i])
                    {
                        case 
    '0'..'9''а'..'я''a'..'z''А'..'Я''A'..'Z': continue;
                        default: return 
    ErrorDialogMessage(playeriddLogin1);
                    }
                }
                if(!
    strcmp(pInfo[playerid][pPassword], inputtext)) 
                {
                    new 
    query_string[52+MAX_PLAYER_NAME];
                    
    format(query_stringsizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'"pInfo[playerid][pName]); 
                    
    mysql_function_query(mysql_connect_IDquery_stringtrue"UploadPlayerAccount","i"playerid); 
                }
                else 
    ErrorDialogMessage(playeriddLogin2);
                return 
    1;
            }
            case 
    dRegister1:
            {
                if(!
    response) return Kick(playerid);
                if(!
    strlen(inputtext)) return ErrorDialogMessage(playeriddRegister10);
                for(new 
    strlen(inputtext)-1!= -1i--)
                {
                    switch(
    inputtext[i])
                    {
                        case 
    '0'..'9''а'..'я''a'..'z''А'..'Я''A'..'Z': continue;
                        default: return 
    ErrorDialogMessage(playeriddRegister11);
                    }
                }
                if(!
    strcmp(pInfo[playerid][pPassword], inputtext))
                {
                    new 
    query_string[52+MAX_PLAYER_NAME];
                    
    format(query_stringsizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'"pInfo[playerid][pName]);
                    
    mysql_function_query(mysql_connect_IDquery_stringtrue"UploadPlayerAccount","i"playerid);
                }
                else
                {
                    
    ErrorDialogMessage(playeriddRegister12);
                    return 
    1;
                }
                
    ShowPlayerDialog(playerid,dPolIgroka,DIALOG_STYLE_MSGBOX,"Пол","{FFDEAD}Укажи свой пол","Парень","Девушка");
            }
            case 
    dPolIgroka:
            {
                if(
    response)
                {
                    
    SendClientMessage(playeridCOLOR_WHITE"Хорошо, ты {33aa33}Парень.");
                    
    pInfo[playerid][pSex] = 1;
                    
    SetPlayerSkin(playerid23);
                    
    pInfo[playerid][pSkin] = 23;
                    return 
    true;
                }
                else
                {
                    
    SendClientMessage(playeridCOLOR_WHITE"Хорошо, ты {33aa33}Девушка.");
                    
    pInfo[playerid][pSex] = 2;
                    
    SetPlayerSkin(playerid90);
                    
    pInfo[playerid][pSkin] = 90;
                    return 
    true;
                }
            } 

  4. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    OnGameModeInit, заходишь на сервер и кидаешь нам лог
    PHP код:
    mysql_log(LOG_ALL); 

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

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Код HTML:
    [07:24:39] [DEBUG] mysql_connect - host: "localhost", user: "root", database: "first_database", password: "****", port: 3306, autoreconnect: true, pool_size: 2
    [07:24:39] [DEBUG] CMySQLHandle::Create - creating new connection..
    [07:24:39] [DEBUG] CMySQLHandle::CMySQLHandle - constructor called
    [07:24:39] [DEBUG] CMySQLHandle::Create - connection created (id: 1)
    [07:24:39] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [07:24:39] [DEBUG] CMySQLConnection::Connect - connection was successful
    [07:24:39] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [07:24:39] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [07:24:39] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [07:24:39] [DEBUG] CMySQLConnection::Connect - connection was successful
    [07:24:39] [DEBUG] CMySQLConnection::Connect - connection was successful
    [07:24:39] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [07:24:39] [DEBUG] CMySQLConnection::Connect - connection was successful
    [07:24:39] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [07:25:05] [DEBUG] mysql_tquery - connection: 1, query: "SELECT `password` FROM `accounts` WHERE `player_name` = 'Kent_No", callback: "FindPlayerInTable", format: "i"
    [07:25:06] [DEBUG] CMySQLQuery::Execute[FindPlayerInTable] - starting query execution
    [07:25:06] [DEBUG] CMySQLQuery::Execute[FindPlayerInTable] - query was successfully executed within 1.135 milliseconds
    [07:25:06] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [07:25:06] [DEBUG] Calling callback "FindPlayerInTable"..
    [07:25:06] [DEBUG] cache_get_data - connection: 1
    [07:25:06] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called
    [07:25:10] [DEBUG] mysql_tquery - connection: 1, query: "INSERT INTO `accounts` (`player_name`, `password`) VALUES ('Kent", callback: "(null)", format: "(null)"
    [07:25:10] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [07:25:10] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 17.60 milliseconds
    [07:25:10] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
    [07:25:13] [DEBUG] mysql_tquery - connection: 1, query: "SELECT * FROM `accounts` WHERE `player_name` = 'Kent_No'", callback: "UploadPlayerAccount", format: "i"
    [07:25:13] [DEBUG] CMySQLQuery::Execute[UploadPlayerAccount] - starting query execution
    [07:25:13] [DEBUG] CMySQLQuery::Execute[UploadPlayerAccount] - query was successfully executed within 0.428 milliseconds
    [07:25:13] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [07:25:13] [DEBUG] Calling callback "UploadPlayerAccount"..
    [07:25:13] [DEBUG] cache_get_field_content_int - row: 0, field_name: "ID", connection: 1
    [07:25:13] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "ID", data: "23"
    [07:25:13] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called
    [07:25:56] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `accounts` SET `player_name` = 'Kent_No', `password` = '1", callback: "(null)", format: "(null)"
    [07:25:56] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [07:25:56] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `ID` = '23'' at line 1
    [07:25:56] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Ошибка есть, походу стринг маленький судя по всему...
    Для точности сделай так, и не выходя из игры кинь лог что выведет в чат:
    PHP код:
    stock SaveAccount(playerid)
    {
         new 
    string_test[500];
        new 
    query_string[(21)+(16+11)+(19+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `accounts` SET";
        
    format(query_stringsizeof(query_string), "%s `player_name` = '%s',"query_stringpInfo[playerid][pName]);
        
    format(query_stringsizeof(query_string), "%s `password` = '%s',"query_stringpInfo[playerid][pPassword]);
        
    format(query_stringsizeof(query_string), "%s `pol` = '%d',"query_stringpInfo[playerid][pSex]);
        
    format(query_stringsizeof(query_string), "%s `skin` = '%d',"query_stringpInfo[playerid][pChar]);
        
    format(query_stringsizeof(query_string), "%s WHERE `ID` = '%d'"query_stringpInfo[playerid][pID]);
        
    format(string_testsizeof(string_test), "%s"query_string);
        
    SendClientMessageToAll(0xFFCD00ffstring_test);
        
    mysql_function_query(mysql_connect_IDquery_stringfalse"""");
        return 
    1;

    OnPlayerUpdate
    PHP код:
     /* НА ВРЕМЯ!! */
    SaveAccount(playerid

  7. #7
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Я бы проще сделал. Например:
    Диалог выбора пола
    PHP код:
    case dPolIgroka

        if(
    response)
        {
            
    pInfo[playerid][pSex] = 1// мужчина
            
    SendClientMessage(playerid,-1,"Хорошо, вы теперь мужчина"); 
            
    SetPlayerSkin(playerid23);
        }
        if(!
    response
        {
            
    pInfo[playerid][pSex] = 2// женщина
            
    SendClientMessage(playerid,-1,"Хорошо, вы теперь женщина"); 
            
    SetPlayerSkin(playerid90);
        }
        
    pInfo[playerid][pChar] = GetPlayerSkin(playerid);

    Ps. транслит - не лучший вариант понимания кода. Сделал бы dPlayerSex и т.д.

    На счет сохранения. Попробуй для теста увеличить количество ячеек, например 1054. Потом проверь, создается ли аккаунт, если да, то просто вычисли точное количество ячеек и будет тебе счастье :)
    Последний раз редактировалось Desulaid; 21.03.2015 в 15:06.

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

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Ну вообщем в чат выводится это, постоянно.
    PHP код:
    [14:17:18] [DEBUGmysql_tquery connection1query"INSERT INTO `accounts` (`player_name`, `password`) VALUES ('Kent"callback"(null)"format"(null)"
    [14:17:18] [DEBUGCMySQLQuery::Execute[] - starting query execution
    [14:17:18] [DEBUGCMySQLQuery::Execute[] - query was successfully executed within 48.407 milliseconds
    [14:17:18] [DEBUGCMySQLQuery::Execute[] - no callback specifiedskipping result saving
    [14:17:21] [DEBUGmysql_tquery connection1query"SELECT * FROM `accounts` WHERE `player_name` = 'Kent_No'"callback"UploadPlayerAccount"format"i"
    [14:17:21] [DEBUGCMySQLQuery::Execute[UploadPlayerAccount] - starting query execution
    [14:17:21] [DEBUGCMySQLQuery::Execute[UploadPlayerAccount] - query was successfully executed within 0.538 milliseconds
    [14:17:21] [DEBUGCMySQLResult::CMySQLResult() - constructor called
    [14:17:21] [DEBUGCalling callback "UploadPlayerAccount"..
    [
    14:17:21] [DEBUGcache_get_field_content_int row0field_name"ID"connection1
    [14:17:21] [DEBUGCMySQLResult::GetRowDataByName row'0'field"ID"data"24"
    [14:17:21] [DEBUGCMySQLResult::~CMySQLResult() - deconstructor called
    [14:17:21] [DEBUGmysql_tquery connection1query"UPDATE `accounts` SET `player_name` = 'Kent_No', `password` = '1"callback"(null)"format"(null)"
    [14:17:21] [DEBUGCMySQLQuery::Execute[] - starting query execution
    [14:17:21] [ERRORCMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `ID` = '24'' at line 1
    [14:17:21] [DEBUGCMySQLQuery::Execute[] - error will be triggered in OnQueryError
    [14:17:21] [DEBUGmysql_tquery connection1query"UPDATE `accounts` SET `player_name` = 'Kent_No', `password` = '1"callback"(null)"format"(null)"
    [14:17:21] [DEBUGCMySQLQuery::Execute[] - starting query execution 

  9. #9
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Вот в этом
    PHP код:
    stock SaveAccount(playerid)
    {
        new 
    string_test[500];
        new 
    query_string[(21)+(16+11)+(19+MAX_PLAYER_NAME)+(16+30)] = "UPDATE `accounts` SET";
        
    format(query_stringsizeof(query_string), "%s `player_name` = '%s',"query_stringpInfo[playerid][pName]);
        
    format(query_stringsizeof(query_string), "%s `password` = '%s',"query_stringpInfo[playerid][pPassword]);
        
    format(query_stringsizeof(query_string), "%s `pol` = '%d',"query_stringpInfo[playerid][pSex]);
        
    format(query_stringsizeof(query_string), "%s `skin` = '%d',"query_stringpInfo[playerid][pChar]);
        
    format(query_stringsizeof(query_string), "%s WHERE `ID` = '%d'"query_stringpInfo[playerid][pID]);
        
    format(string_testsizeof(string_test), "%s"query_string);
        
    SendClientMessageToAll(0xFFCD00ffstring_test);
        
    mysql_function_query(mysql_connect_IDquery_stringfalse"""");
        return 
    1;

    Найди это:
    PHP код:
        format(query_stringsizeof(query_string), "%s `skin` = '%d',"query_stringpInfo[playerid][pChar]);
        
    format(query_stringsizeof(query_string), "%s WHERE `ID` = '%d'"query_stringpInfo[playerid][pID]); 
    и замени на это:
    PHP код:
    format(query_stringsizeof(query_string), "%s `skin` = '%d'"query_stringpInfo[playerid][pChar]);
    format(query_stringsizeof(query_string), "%s WHERE `ID` = '%d'"query_stringpInfo[playerid][pID]); 
    И ошибка в логах пропадут

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Skyline Посмотреть сообщение
    Ну вообщем в чат выводится это, постоянно.
    PHP код:
    [14:17:18] [DEBUGmysql_tquery connection1query"INSERT INTO `accounts` (`player_name`, `password`) VALUES ('Kent"callback"(null)"format"(null)"
    [14:17:18] [DEBUGCMySQLQuery::Execute[] - starting query execution
    [14:17:18] [DEBUGCMySQLQuery::Execute[] - query was successfully executed within 48.407 milliseconds
    [14:17:18] [DEBUGCMySQLQuery::Execute[] - no callback specifiedskipping result saving
    [14:17:21] [DEBUGmysql_tquery connection1query"SELECT * FROM `accounts` WHERE `player_name` = 'Kent_No'"callback"UploadPlayerAccount"format"i"
    [14:17:21] [DEBUGCMySQLQuery::Execute[UploadPlayerAccount] - starting query execution
    [14:17:21] [DEBUGCMySQLQuery::Execute[UploadPlayerAccount] - query was successfully executed within 0.538 milliseconds
    [14:17:21] [DEBUGCMySQLResult::CMySQLResult() - constructor called
    [14:17:21] [DEBUGCalling callback "UploadPlayerAccount"..
    [
    14:17:21] [DEBUGcache_get_field_content_int row0field_name"ID"connection1
    [14:17:21] [DEBUGCMySQLResult::GetRowDataByName row'0'field"ID"data"24"
    [14:17:21] [DEBUGCMySQLResult::~CMySQLResult() - deconstructor called
    [14:17:21] [DEBUGmysql_tquery connection1query"UPDATE `accounts` SET `player_name` = 'Kent_No', `password` = '1"callback"(null)"format"(null)"
    [14:17:21] [DEBUGCMySQLQuery::Execute[] - starting query execution
    [14:17:21] [ERRORCMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `ID` = '24'' at line 1
    [14:17:21] [DEBUGCMySQLQuery::Execute[] - error will be triggered in OnQueryError
    [14:17:21] [DEBUGmysql_tquery connection1query"UPDATE `accounts` SET `player_name` = 'Kent_No', `password` = '1"callback"(null)"format"(null)"
    [14:17:21] [DEBUGCMySQLQuery::Execute[] - starting query execution 
    Дак ты используешь код исправленный от Maks5 или свой?
    Зайди в игру в чат, выведит сообщение с запросом, заскринь его и кинь сюда

 

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

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

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

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

Ваши права

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