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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±

    Не успевает отправляться запрос на создание аккаунта

    Здравствуйте, не успевает отправляться запрос на регистрацию аккаунта. Проблема вот в чем, отправляю запрос на создание аккаунта, и сразу же отправляю запрос на загрузку аккаунта (где в свое время есть проверка, на то, существует ли аккаунт, или нет). Код:

    PHP код:
    stock RegisterPlayer(playerid)
    {
        new 
    query[220];
        
    mysql_format(mysql_connect_IDquerysizeof(query),
            
    "INSERT INTO `accounts` (`id`, `nickname`, `password`, `email`, `referal`, `sex`, `skin`) \
            VALUES('', '%e', '%e', '%e', '%e', '%d', '230')"
    ,
            
    PlayerInfo[playerid][pNickname], // ник
            
    PlayerInfo[playerid][pPassword], // пароль
            
    PlayerInfo[playerid][pEmail], // емайл
            
    PlayerInfo[playerid][pReferal], // реферал
            
    PlayerInfo[playerid][pSex// пол
        
    );
        
    mysql_pquery(mysql_connect_IDquery"","");
        
        
    SendClientMessage(playeridCWHITE"Поздравляем Вас с успешной регистрацией!");
        
    SendClientMessage(playeridCGREEN"Подсказка: Направляйтесь на работу грузчика (( Используйте /gps >> По работе >> Работа грузчика ))");
        
    SendClientMessage(playeridCGREEN"Подсказка: Грузчиком вы можете заработать на водительские права");
        
    SendClientMessage(playeridCGREEN"Подсказка: Рядом с вами есть остановка, где можно дождаться автобус (ВнутриГородской)");
        
    SendClientMessage(playeridCGREEN"Подсказка: А также любой тексист отвезет вас на работу бесплатно");
        
    SendClientMessage(playeridCWHITE"Подсказка: Мы настоятельно рекомендуем вам прочесть 'Помощь'");
        
    SendClientMessage(playeridCWHITE"Используйте следующие команды для активной игры на проекте: /gps, /mm");
        new 
    query2[80];
        
    format(query2sizeof(query2), "SELECT * FROM `accounts` WHERE `nickname` = '%s'"PlayerInfo[playerid][pNickname]);
        
    mysql_pquery(mysql_connect_IDquery2"LoadPlayerData""i"playerid);
        return 
    true;
    }

    forward LoadPlayerData(playerid);
    public 
    LoadPlayerData(playerid)
    {
        new 
    rows;
        
    cache_get_row_count(rows);
        if(!
    rows) return SendClientMessage(playeridCGRAY"[ERROR #999] Ошибка, сообщите об ошибке на форум!"), NewKick(playerid);
        
    cache_get_value_name_int(0"id"PlayerInfo[playerid][pID]);
        
    cache_get_value_name(0"nickname"PlayerInfo[playerid][pNickname], 24);
        
    cache_get_value_name(0"password"PlayerInfo[playerid][pPassword], 16);
        
    cache_get_value_name(0"email"PlayerInfo[playerid][pEmail], 32);
        
    cache_get_value_name(0"referal"PlayerInfo[playerid][pReferal], 24);
        
    cache_get_value_name_int(0"warn"PlayerInfo[playerid][pSex]);
        
    cache_get_value_name_int(0"skin"PlayerInfo[playerid][pSkin]);
        
    cache_get_value_name_int(0"level"PlayerInfo[playerid][pLevel]);
        
    pTemp[playerid][pLogined] = true;
        
    SpawnPlayer(playerid);
        return 
    true;

    В итоге запрос отправляется на создание аккаунта и за ним сразу загрузка аккаунта, но такое чувство как будто запрос не успевает отправляться на регистрацию и игроку пишет 999 ошибку (см. условие if(!rows) return ...;), но если перезайти, после авторизации отправится запрос на авторизацию и тогда все хорошо загрузится..

    Что делать?

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    А что нельзя сделать создание аккаунта в отдельном вызове функции?
    За 2 зайцами плохо гнаться))

    Кстате для этого существует orm функции(двухсторонний обмен данными одним вызовом) или как то так(инклуд ковырни и почитай о них)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  3. #3
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    почему бы не добавить загрузку аккаунта в паблик вызываемый после запроса создания?

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

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Не пойму зачем вам загрузка нужно, так как при создание аккаунта у вас уже есть данные

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

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от vasyok28 Посмотреть сообщение
    Не пойму зачем вам загрузка нужно, так как при создание аккаунта у вас уже есть данные
    Не все данные, в основном есть только имя/пароль/емайл/скин и пол, все остальное выставляется по дефолту в базе, поэтому и нужно загружать... Каждую переменную по дефолту выставлять при регистрации не вариант

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

    Как минимум нужно загрузить ид аккаунта (который с каждым новым аккаунтом увеличивается на +1, в базе стоит AUTO_INCREMENT), без запроса я никак этот id не получу. Ибо у меня все сохранение и тд реализовано на айди аккаунта.. По нику не вариант, т.к. ник могут сменить, и придется везде, во всех логах и тд менять ник..

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

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    106
    Репутация:
    8 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Не все данные, в основном есть только имя/пароль/емайл/скин и пол, все остальное выставляется по дефолту в базе, поэтому и нужно загружать... Каждую переменную по дефолту выставлять при регистрации не вариант

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

    Как минимум нужно загрузить ид аккаунта (который с каждым новым аккаунтом увеличивается на +1, в базе стоит AUTO_INCREMENT), без запроса я никак этот id не получу. Ибо у меня все сохранение и тд реализовано на айди аккаунта.. По нику не вариант, т.к. ник могут сменить, и придется везде, во всех логах и тд менять ник..
    Это все решается и без запроса на выборку. Просто я так понял вас интересует решение именно по вашему коду, тогда поставьте задержку на загрузку. Но ваш код аля рлс, лучше делать правильно сразу, чем потом переделать

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

    Для теста отключите загрузку из БД, и создайте аккаунт, и проверьте если создается

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

    Статус
    Оффлайн
    Регистрация
    01.03.2015
    Сообщений
    245
    Репутация:
    55 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Здравствуйте, не успевает отправляться запрос на регистрацию аккаунта. Проблема вот в чем, отправляю запрос на создание аккаунта, и сразу же отправляю запрос на загрузку аккаунта (где в свое время есть проверка, на то, существует ли аккаунт, или нет). Код:

    PHP код:
    stock RegisterPlayer(playerid)
    {
        new 
    query[220];
        
    mysql_format(mysql_connect_IDquerysizeof(query),
            
    "INSERT INTO `accounts` (`id`, `nickname`, `password`, `email`, `referal`, `sex`, `skin`) \
            VALUES('', '%e', '%e', '%e', '%e', '%d', '230')"
    ,
            
    PlayerInfo[playerid][pNickname], // ник
            
    PlayerInfo[playerid][pPassword], // пароль
            
    PlayerInfo[playerid][pEmail], // емайл
            
    PlayerInfo[playerid][pReferal], // реферал
            
    PlayerInfo[playerid][pSex// пол
        
    );
        
    mysql_pquery(mysql_connect_IDquery"","");
        
        
    SendClientMessage(playeridCWHITE"Поздравляем Вас с успешной регистрацией!");
        
    SendClientMessage(playeridCGREEN"Подсказка: Направляйтесь на работу грузчика (( Используйте /gps >> По работе >> Работа грузчика ))");
        
    SendClientMessage(playeridCGREEN"Подсказка: Грузчиком вы можете заработать на водительские права");
        
    SendClientMessage(playeridCGREEN"Подсказка: Рядом с вами есть остановка, где можно дождаться автобус (ВнутриГородской)");
        
    SendClientMessage(playeridCGREEN"Подсказка: А также любой тексист отвезет вас на работу бесплатно");
        
    SendClientMessage(playeridCWHITE"Подсказка: Мы настоятельно рекомендуем вам прочесть 'Помощь'");
        
    SendClientMessage(playeridCWHITE"Используйте следующие команды для активной игры на проекте: /gps, /mm");
        new 
    query2[80];
        
    format(query2sizeof(query2), "SELECT * FROM `accounts` WHERE `nickname` = '%s'"PlayerInfo[playerid][pNickname]);
        
    mysql_pquery(mysql_connect_IDquery2"LoadPlayerData""i"playerid);
        return 
    true;
    }

    forward LoadPlayerData(playerid);
    public 
    LoadPlayerData(playerid)
    {
        new 
    rows;
        
    cache_get_row_count(rows);
        if(!
    rows) return SendClientMessage(playeridCGRAY"[ERROR #999] Ошибка, сообщите об ошибке на форум!"), NewKick(playerid);
        
    cache_get_value_name_int(0"id"PlayerInfo[playerid][pID]);
        
    cache_get_value_name(0"nickname"PlayerInfo[playerid][pNickname], 24);
        
    cache_get_value_name(0"password"PlayerInfo[playerid][pPassword], 16);
        
    cache_get_value_name(0"email"PlayerInfo[playerid][pEmail], 32);
        
    cache_get_value_name(0"referal"PlayerInfo[playerid][pReferal], 24);
        
    cache_get_value_name_int(0"warn"PlayerInfo[playerid][pSex]);
        
    cache_get_value_name_int(0"skin"PlayerInfo[playerid][pSkin]);
        
    cache_get_value_name_int(0"level"PlayerInfo[playerid][pLevel]);
        
    pTemp[playerid][pLogined] = true;
        
    SpawnPlayer(playerid);
        return 
    true;

    В итоге запрос отправляется на создание аккаунта и за ним сразу загрузка аккаунта, но такое чувство как будто запрос не успевает отправляться на регистрацию и игроку пишет 999 ошибку (см. условие if(!rows) return ...;), но если перезайти, после авторизации отправится запрос на авторизацию и тогда все хорошо загрузится..

    Что делать?
    Зачем использовать тогда функции, о которых не знаешь?
    mysql_tquery - обрабатывает запрос в порядке очереди
    mysql_pquery - обрабатывает запрос без очереди, какой первый дойдет, тот и будет выполнен
    Соответственно mysql_pquery заменить на mysql_tquery

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Sp1ke Посмотреть сообщение
    Зачем использовать тогда функции, о которых не знаешь?
    mysql_tquery - обрабатывает запрос в порядке очереди
    mysql_pquery - обрабатывает запрос без очереди, какой первый дойдет, тот и будет выполнен
    Соответственно mysql_pquery заменить на mysql_tquery
    Вангую что у него эти 2 stock вызываются сразу вместе и функция мускула чу чуть не успевает к условию на проверку существования аккаунта
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  9. #9
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    PHP код:
    stock RegisterPlayer(playerid

        new 
    query[220]; 
        
    mysql_format(mysql_connect_IDquerysizeof(query), 
            
    "INSERT INTO `accounts` (`id`, `nickname`, `password`, `email`, `referal`, `sex`, `skin`) \ 
            VALUES('', '%e', '%e', '%e', '%e', '%d', '230')"

            
    PlayerInfo[playerid][pNickname], // ник 
            
    PlayerInfo[playerid][pPassword], // пароль 
            
    PlayerInfo[playerid][pEmail], // емайл 
            
    PlayerInfo[playerid][pReferal], // реферал 
            
    PlayerInfo[playerid][pSex// пол 
        
    ); 
        
    mysql_tquery(mysql_connect_IDquery"OnAccountCreate","d",playerid); 
        return 
    1;


    forward OnAccountCreate(playerid);
    public 
    OnAccountCreate(playerid)
    {
        
    SendClientMessage(playeridCWHITE"Поздравляем Вас с успешной регистрацией!"); 
        
    SendClientMessage(playeridCGREEN"Подсказка: Направляйтесь на работу грузчика (( Используйте /gps >> По работе >> Работа грузчика ))"); 
        
    SendClientMessage(playeridCGREEN"Подсказка: Грузчиком вы можете заработать на водительские права"); 
        
    SendClientMessage(playeridCGREEN"Подсказка: Рядом с вами есть остановка, где можно дождаться автобус (ВнутриГородской)");
        
    SendClientMessage(playeridCGREEN"Подсказка: А также любой тексист отвезет вас на работу бесплатно"); 
        
    SendClientMessage(playeridCWHITE"Подсказка: Мы настоятельно рекомендуем вам прочесть 'Помощь'"); 
        
    SendClientMessage(playeridCWHITE"Используйте следующие команды для активной игры на проекте: /gps, /mm"); 
        new 
    query2[80]; 
        
    format(query2sizeof(query2), "SELECT * FROM `accounts` WHERE `nickname` = '%s'"PlayerInfo[playerid][pNickname]); 
        
    mysql_tquery(mysql_connect_IDquery2"LoadPlayerData""i"playerid); 
        return 
    true
    }

    forward LoadPlayerData(playerid); 
    public 
    LoadPlayerData(playerid

        new 
    rows
        
    cache_get_row_count(rows); 
        if(!
    rows) return SendClientMessage(playeridCGRAY"[ERROR #999] Ошибка, сообщите об ошибке на форум!"), NewKick(playerid); 
        
    cache_get_value_name_int(0"id"PlayerInfo[playerid][pID]); 
        
    cache_get_value_name(0"nickname"PlayerInfo[playerid][pNickname], 24); 
        
    cache_get_value_name(0"password"PlayerInfo[playerid][pPassword], 16); 
        
    cache_get_value_name(0"email"PlayerInfo[playerid][pEmail], 32); 
        
    cache_get_value_name(0"referal"PlayerInfo[playerid][pReferal], 24); 
        
    cache_get_value_name_int(0"warn"PlayerInfo[playerid][pSex]); 
        
    cache_get_value_name_int(0"skin"PlayerInfo[playerid][pSkin]); 
        
    cache_get_value_name_int(0"level"PlayerInfo[playerid][pLevel]); 
        
    pTemp[playerid][pLogined] = true
        
    SpawnPlayer(playerid); 
        return 
    true


  10. Пользователь сказал cпасибо:
    StevenH (09.04.2017)
  11. #10
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Закройте

 

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

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

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

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

Ваши права

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