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

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

    PHP код:
    // представим что это какой-то сток
    GetPlayerName(playeridpInfo[playerid][pName], MAX_PLAYER_NAME);
    new 
    query_string[49+MAX_PLAYER_NAME-4];
    format(query_stringsizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'"pInfo[playerid][pName]);
    mysql_function_query(mysql_connect_idquery_stringtrue"FindPlayerInTable","i"playerid); 
    PHP код:
    forward FindPlayerInTable(playerid);
    public 
    FindPlayerInTable(playerid)
    {
        new 
    rowsfields;
        
    cache_get_data(rowsfields);
        if(!
    rows)
        {
            
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""Введите пароль для регистрации нового аккаунта:""Регистрация""Выход");
        }
        else
        {
            
    ShowPlayerDialog(playeriddLoginDIALOG_STYLE_INPUT"Авторизация""Введите пароль от аккаунта для того, чтоб продолжить игру:""Вход""Выход");
            
    cache_get_field_content(0"password"pInfo[playerid][pPassword], mysql_connect_id31);
        }
        return 
    1;

    MySQL поддерживает и однопоточные запросы (отправил запрос и тут же его обработал). Автор темы начал плясать в верном направлении, но не смог добить до конца...

    PHP код:
    stock MySQLGetPlayerParam(name[], param[]) 

        new 
    query[128], 
            
    value[56], 
            
    Name[MAX_PLAYER_NAME], 
            
    Param[50]; 
        
    mysql_real_escape_string(nameName); 
        
    mysql_real_escape_string(paramParam); 
        
    format(querysizeof(query), "SELECT `%s` FROM `Accounts` WHERE `NickName` = '%s' LIMIT 1"ParamName); 
        new 
    Cache:result mysql_query(connectsquery);      
        
    cache_get_row(0ParamvalueconnectsMAX_PLAYER_NAME);
        
    cache_delete(result);
        return 
    value

    Примерно, так. Но подобная функция (пытаться грузить каждый столбец отдельным запросом) - зашквар полный.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  2. Пользователь сказал cпасибо:
    Redsan (04.07.2016)
  3. #12
    Аватар для TimXXX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.07.2016
    Сообщений
    15
    Репутация:
    1 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    MySQL поддерживает и однопоточные запросы (отправил запрос и тут же его обработал). Автор темы начал плясать в верном направлении, но не смог добить до конца...

    PHP код:
    stock MySQLGetPlayerParam(name[], param[]) 

        new 
    query[128], 
            
    value[56], 
            
    Name[MAX_PLAYER_NAME], 
            
    Param[50]; 
        
    mysql_real_escape_string(nameName); 
        
    mysql_real_escape_string(paramParam); 
        
    format(querysizeof(query), "SELECT `%s` FROM `Accounts` WHERE `NickName` = '%s' LIMIT 1"ParamName); 
        new 
    Cache:result mysql_query(connectsquery);      
        
    cache_get_row(0ParamvalueconnectsMAX_PLAYER_NAME);
        
    cache_delete(result);
        return 
    value

    Примерно, так. Но подобная функция (пытаться грузить каждый столбец отдельным запросом) - зашквар полный.
    спасибо большое

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

    Цитата Сообщение от Redsan Посмотреть сообщение
    Нельзя в стоке делать запрос и сразу же кэшировать полученный результат. Результат нужно кэшировать в отдельном паблике.
    Пример:

    PHP код:
    // представим что это какой-то сток
    GetPlayerName(playeridpInfo[playerid][pName], MAX_PLAYER_NAME);
    new 
    query_string[49+MAX_PLAYER_NAME-4];
    format(query_stringsizeof(query_string), "SELECT * FROM `accounts` WHERE `player_name` = '%s'"pInfo[playerid][pName]);
    mysql_function_query(mysql_connect_idquery_stringtrue"FindPlayerInTable","i"playerid); 
    PHP код:
    forward FindPlayerInTable(playerid);
    public 
    FindPlayerInTable(playerid)
    {
        new 
    rowsfields;
        
    cache_get_data(rowsfields);
        if(!
    rows)
        {
            
    ShowPlayerDialog(playeriddRegisterDIALOG_STYLE_INPUT"Регистрация нового пользователя""Введите пароль для регистрации нового аккаунта:""Регистрация""Выход");
        }
        else
        {
            
    ShowPlayerDialog(playeriddLoginDIALOG_STYLE_INPUT"Авторизация""Введите пароль от аккаунта для того, чтоб продолжить игру:""Вход""Выход");
            
    cache_get_field_content(0"password"pInfo[playerid][pPassword], mysql_connect_id31);
        }
        return 
    1;

    Что ты скажешь на это?
    PHP код:
    stock LoadATM()
    {
        new 
    Cache:result mysql_query(connects"SELECT * FROM `bankomats` ORDER BY  `bankomats`.`bID` ASC"true);
        new 
    rows,fields,time GetTickCount();
        
    cache_get_data(rowsfieldsconnects);
        if(!
    rows) return printf("stock LoadATM() - not loaded.");
        for(new 
    idx 1idx <= rowsidx++)
        {
            
    Bankomat[idx][bID] = cache_get_row_int(idx-1,0connects);
            
    Bankomat[idx][bX] = cache_get_row_float(idx-1,1connects);
            
    Bankomat[idx][bY] = cache_get_row_float(idx-1,2connects);
            
    Bankomat[idx][bZ] = cache_get_row_float(idx-1,3connects);
            
    Bankomat[idx][brX] = cache_get_row_float(idx-1,4connects);
            
    Bankomat[idx][brY] = cache_get_row_float(idx-1,5connects);
            
    Bankomat[idx][brZ] = cache_get_row_float(idx-1,6connects);
            
    BANKOMAT[idx] = CreateObject(2754Bankomat[idx][bX], Bankomat[idx][bY], Bankomat[idx][bZ], Bankomat[idx][brX], Bankomat[idx][brY], Bankomat[idx][brZ]);
            
    TOTALBNKMT++;
          }
        
    printf("[ Загрузка ... ] %d - банкомата успешно загружено (%d мс)"TOTALBNKMT,GetTickCount()- time);
        
    cache_delete(result);
        return 
    true;

    в OnGameModeInit
    PHP код:
    LoadATM() 

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    03.07.2016
    Сообщений
    15
    Репутация:
    1 ±
    Да, закройте тему

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

    Статус
    Оффлайн
    Регистрация
    03.07.2016
    Сообщений
    15
    Репутация:
    1 ±
    только добавил мод, почему то выдает ошибку на следующую строку
    cache_get_row(0, Param, value, connects, MAX_PLAYER_NAME);

    PHP код:
    error 035argument type mismatch (argument 2

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

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

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

    Steve Pavlina

 

 
Страница 2 из 2 ПерваяПервая 1 2

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

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

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

Ваши права

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