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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±

    Забавный баг, при авторизации на сервере.

    Доброго времени суток, суть в том, что я заметил забавный баг, при авторизации на сервере.
    Как обстоит дело:
    Подключаются 2 игрока. Подключаюсь например я, и Я с другого компа.
    Так вот, вводит кто-то из меня первый пароль, и собственно авторизовывается, и потом ввожу второй я пароль, и тоже прохожу авторизацию.
    Или ещё такой прикол, когда одновременно ввести пароль, 1 игрок авторизуется, второй нет...
    Суть в том, что у одного из меня получается ник -1...
    Не пойму в чём суть...

    Немного по игравшись с принтами, выяснилось
    Запрос:

    PHP код:
            GetPlayerName(playeridPI[playerid][pName], MAX_PLAYER_NAME);
            new 
    query121[75+MAX_PLAYER_NAME+4];
            
    format(query121sizeof(query121), "SELECT `acc_id`,`pass`,`salt_pass` FROM `account` WHERE `nick`='%s'"PlayerInfo[playerid][pName]);
            
    mysql_function_query(MysqlConnectquery121true"OnRegCheckCallBack","d",playerid); 
    Ответ:
    PHP код:
    forward OnRegCheckCallBack(playerid);
    public 
    OnRegCheckCallBack(playerid)
    {
        new 
    rowsfields;    
        
    cache_get_data(rowsfields,MysqlConnect);
        if(
    rows)
        {
            
    PlayerInfo[playerid][pID] = cache_get_field_content_int(0"acc_id"MysqlConnect);
            
    cache_get_field_content(0"pass"PlayerInfo[playerid][pPassword], MysqlConnect33);
            
    cache_get_field_content(0"salt_pass"PlayerInfo[playerid][salt_pass], MysqlConnect11);
            
    printf("ID: %d",PI[playerid][pID]);
            
    printf("Password: %s",PI[playerid][pPassword]);
            
    printf("salt_pass: %s",PI[playerid][salt_pass]);
            
    OnPlayerDialogD_REG_AUTOS(playerid,1);// показываю диалог авторизации
        
    }
        else 
    OnPlayerDialogD_REG_AUTOS(playerid,2);// показываю диалог регистрации
        
    return 1;

    Смешно стало после того, как я добавил принт, захожу, нормально всё, убираю принт, всё печально, одного пропускает, второй:

    PHP код:
    [03:44:16Отправляем ид mysqlID144 |plNTest_One
    [03:44:16Отправляем ид mysqlID44 |plN: -
    Главное первого спавнит, всё нормально, второй зависает, и окно авторизации падает, выключаем сервер.
    Включаем снова, принт активный, и всё равно, 1-го спавнит, второй завис..

    Действия в самом диалоге после верного ввода пароля:

    PHP код:
                    new query2[51+11+2];
                    
    format(query2sizeof(query2), "SELECT * FROM `account` WHERE `acc_id`='%d'"PlayerInfo[playerid][pID]);
                    
    mysql_function_query(MysqlConnectquery2true"OnPlayerLoginCallBack""dd",PlayerInfo[playerid][pID], playerid); 
    Из этой всей кучи, логический вопрос, что я стал делать не так?


    Логи, после того как ник игрока снова стал -1

    PHP код:
    Первый аккаунт:
    ID144
    Password
    принт чёткая тема
    salt_pass
    и это

    Второй
    :
    ID58
    Password
    принт чёткая тема
    salt_pass
    и это 
    В самом диалоге после успешного ввода пароля:
    PHP код:
    Первый аккаунт:
    Пароль верныйTest_One144 (это mysql_id)
    Отправляем ид m144 |playerid0
    Второй аккаунт
    :
    Пароль верный: -44
    Отправляем ид m
    44 |pl
    Последний раз редактировалось Сергей; 20.02.2019 в 06:02.

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну смотри все случаи, когда ты перезаписываешь pName. Если в print выводишь данные только из этого массива, то без перезаписи данные не могут волшебным образом измениться сами.
    Этот бажок возникает только тогда, когда на двух аккаунатах одновременно подтверждаю пароль. Ну т.е происходит сама авторизация.

    Я в одну и туже секунду начинаю авторизовываться, и о чудо, 1 игрок авторизовался, а второй почему-то нет, у него и диалог авторизации падает...
    Последний раз редактировалось Сергей; 21.02.2019 в 04:07.

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Вообщем, провёл ещё несколько тестов и выяснил.

    Захожу я значит с аккаунта Test_AccountOne по ип адресу: 127.0.0.1
    А с Test_AccountTwo по другому ип адресу, и выясняется, что один из них может авторизоваться, а второй нет, ибо у него всё просто падает.

    Второй тест, захожу я по внешнему ИП адресу сервера:

    В одну и туже секунду ввожу пароли, и подтверждаю их нажатием на 'ENTER'
    и сервер падает вообще....

    Подключив crashdetect получаю:
    PHP код:
    Registers:

    EAX0x00000001    EBX0x00000000    ECX0x05B3CB60    EDX0x0101A8C0

    ESI
    0x05B3CB60    EDI0x05B3CB60    EBP0x0019FC4C    ESP0x0019F818

    EFLAGS
    0x00010206



    Stack
    :

    +
    00000x00000001   0x0048A155   0x0310E6E0   0x0251C7A0

    +00100x0101A8C0   0x00454579   0x0019FC7C   0x05B3BE12

    +00200x05B3BE10   0x0251C7A0   0x02510096   0x00000000

    +00300x02519108   0x00000002   0x0019F8B8   0x77E8ED70

    +00400xEA090CCF   0xFFFFFFFE   0x0019F88C   0x77E4B4E8

    +00500x00000000   0x05B11458   0x0019F9AC   0x05B11458

    +00600x00000006   0xFFFFFFFF   0x00000000   0x0048763B

    +00700x004ADC98   0x0019F8C8   0x004921F1   0x02510000

    +00800x00000000   0x004921F6   0x0019F9AC   0x00000001

    +00900x00000006   0x0019F9AC   0x0019F8A0   0x0019FAB4

    +00A00x0019FB18   0x004965F8   0x004B1230   0xFFFFFFFF

    +00B00x004921F6   0x0044E0C9   0x05B11458   0x0047CF39

    +00C00x30467B0A   0x43383645   0xE0E2D37D   0xECE5E0E6

    +00D00x0019F984   0x0019F968   0x0052AE00   0x0000001E

    +00E00x0019F948   0x77E53272   0x0019F99C   0x0000001C

    +00F00x0019F928   0x0052AE10   0x77E532A1   0x9DE0DEB7

    +01000x0019F974   0xC0000139   0x0052AE00   0x00000000

    +01100x0000001C   0x00000000   0xEDF3E0EA   0xE220E0F2

    +01200x0019FE00   0x77E8ED70   0x0000002B   0x00000800

    +01300x00000000   0x0019F951   0x1F841201   0x0040C267



    -------------------------- 
    Из log_text

    PHP код:
    [02:38:34] [debugServer crashed due to an unknown error
    [02:38:34] [debugNative backtrace:
    [
    02:38:34] [debug#0 00481ff3 in ?? () in samp-server-cr.exe
    [02:38:34] [debugRegisters:
    [
    02:38:34] [debugEAX00000001 EBX00000000 ECX059d3bc8 EDX0101a8c0
    [02:38:34] [debugESI059d3bc8 EDI059d3bc8 EBP0019fc4c ESP0019f818
    [02:38:34] [debugEIP00481ff3 EFLAGS00010206
    [02:38:34] [debugStack:
    [
    02:38:34] [debugESP+0000000000000001 0048a155 02ffe578 0249c7a0
    [02:38:34] [debugESP+0000002005888168 0249c7a0 02490096 00000081
    [02:38:34] [debugESP+000000401a8faaca fffffffe 0019f88c 77e4b4e8
    [02:38:34] [debugESP+0000006000000006 ffffffff 00000000 0048763b
    [02:38:34] [debugESP+0000008000000000 004921f6 0019f9ac 00000001
    [02:38:34] [debugESP+000000a00019fb18 004965f8 004b1230 ffffffff
    [02:38:34] [debugESP+000000c030467b0a 43383645 e0e2d37d ece5e0e6
    [02:38:34] [debugESP+000000e030303030 2d50497d e5f0e4e0 467b20f1
    [02:38:34] [debugESP+00000100f620c20a f5ffebe5 e7e5e120 f1e0efee
    [02:38:34] [debugESP+00000120e8e4e5e2 7b20e5f2 0000002b 00000800
    [02:38:34] [debugESP+0000014030467b2e 43383645 cf0a0a7d e5e2eef0
    [02:38:34] [debugESP+00000160e2e220fc 20e0e4ee f7feebea 20e820e0
    [02:38:34] [debugESP+000001804332337b 7d323344 eee2c227 0a0a27e4
    [02:38:34] [debugESP+000001a00047cd00 3443447b 7d373437 ece8edc2
    [02:38:34] [debugESP+000001c002956bb8 00000bf9 000017f2 00000000
    [02:38:34] [debugESP+000001e0e8edc27d e8ede0ec c20421e5 06e4eee2
    [02:38:34] [debugESP+0000020060636361 54455320 6e6f6020 656e696c
    [02:38:34] [debugESP+0000022060204552 64695f70 30273d60 02e10027
    [02:38:34] [debugESP+0000024000000800 00000000 0019fa65 040f3b01
    [02:38:34] [debugESP+0000026002956bb8 00000fca 00000005 00000000
    [02:38:34] [debugESP+0000028000000000 00000000 00000000 00000000
    [02:38:34] [debugESP+000002a00019fad4 00000000 0046878a 00000044
    [02:38:34] [debugESP+000002c00019fb24 059d3bc8 059ec650 0048322e
    [02:38:34] [debugESP+000002e00019fb04 0000007e b368d696 00000000
    [02:38:34] [debugESP+0000030068965f61 0019fb34 00000001 00000000
    [02:38:34] [debugESP+0000032000000000 00000001 0019fc5c 689792ef
    [02:38:34] [debugESP+0000034068979309 00000000 02e140c0 00000000
    [02:38:34] [debugESP+0000036000000000 6d667a7e c000007a 0019fc50
    [02:38:34] [debugESP+0000038077e57bdf 02e140c0 0019fc80 0019fbfc
    [02:38:34] [debugESP+000003a000000000 00000086 0067c0e8 00e140c0
    [02:38:34] [debugESP+000003c00019fc04 68965f61 0019fbf8 00000001
    [02:38:34] [debugESP+000003e002956388 77e4c6a9 6d667d02 00660000 
    Инклуд и плагин, если что обновил, и перекомпилировал мод.
    Последний раз редактировалось Сергей; 21.02.2019 в 04:40.

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Вообщем, спустя ower100500 тестов, я всё таки понял в чём была проблема.

    Убрав из запроса:

    PHP код:
    GetPlayerName(playeridPI[playerid][pName], MAX_PLAYER_NAME);
            new 
    query121[75+MAX_PLAYER_NAME+4];
            
    format(query121sizeof(query121), "SELECT `acc_id`,`pass`,`salt_pass` FROM `account` WHERE `nick`='%s'"PlayerInfo[playerid][pName]);
            
    mysql_function_query(MysqlConnectquery121true"OnRegCheckCallBack","d",playerid); 
    И сделав его таким:
    PHP код:
    GetPlayerName(playeridPI[playerid][pName], MAX_PLAYER_NAME);
            new 
    query121[75+MAX_PLAYER_NAME+4];
            
    format(query121sizeof(query121), "SELECT * FROM `account` WHERE `nick`='%s'"PlayerInfo[playerid][pName]);
            
    mysql_function_query(MysqlConnectquery121true"OnRegCheckCallBack","d",playerid); 
    Всё стало работать как по маслу...
    Если честно не знаю с чем это может быть связанно.

    Так к слову, пришлось конечно облазить весь форум, и найти тему, где Deimos сделал систему регистрации на r39 and r40
    Пришлось там смотреть, и всматриваться в код, пробовать его, может там такой-же баг, но как оказалось, всё там нормально, и попробовать пойти по тому-же принципу, оказалось верным решением.
    Последний раз редактировалось Сергей; 21.02.2019 в 08:33.

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

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

    Раз вопрос решён, тему закрываю. Если вдруг ещё появятся проблемы с регистрацией - создай ещё одну тему и объединю их потом.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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