SQL Thread

Тема в разделе "Программирование / Скриптинг", создана пользователем truekreo, 14 мар 2016.

  1. truekreo

    truekreo

    Сообщения:
    18
    Симпатии:
    8
    Есть такой код, первый LogMessage где SCORE2 нормально выдает в логи, с числом, но второй LogMessage, где SCORE3 не пишет вообще, и дальше код не выполняется как будто, т.е. даже не выводит LogMessage("OK"); Хотя если закомментировать эти 2 строчки
    PHP:
    //new Score3 = GetTeamScore(GetClientTeam(client));
    //LogMessage("SCORE3 %i", Score3);
    То LogMessage("OK"); появляется в логах. Не могу понять в чем проблема.

    Вообще, мне надо в SQL_PlayerDisconnect каким-то образом узнать GetTeamScore, либо передать его в SQL_TQuery (хз как), либо в самом SQL_PlayerDisconnect пытаться узнать, что я и пробовал сделать, но не получилось.

    PHP:
    public OnClientDisconnect(client)
    {
        new 
    Score2 GetTeamScore(GetClientTeam(client));
        
    LogMessage("SCORE2 %i"Score2);

        
    decl String:myQuery[255], String:OCDsteam[24];
        
    GetClientAuthId(clientAuthId_Steam2OCDsteam32);
        
    Format(myQuery255"SELECT * FROM users WHERE steamid = '%s'"OCDsteam);
        
    SQL_TQuery(g_hDbSQL_PlayerDisconnectmyQueryclient);
    }

    public 
    SQL_PlayerDisconnect(Handle:ownerHandle:hndl, const String:error[], any:data)
    {
        if(
    hndl == INVALID_HANDLE){LogError("MYSQL ERROR. (%s)"error);}
        else
        {
            new 
    client data;
        
            new 
    Score3 GetTeamScore(GetClientTeam(client));
            
    LogMessage("SCORE3 %i"Score3);
        
            if (
    SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
            {
                
    LogMessage("OK");
            }
        }
    }
    --- Добавлено позже ---
    Или как в этой строке SQL_TQuery(g_hDb, SQL_PlayerDisconnect, myQuery, client); передать client и Score2
     
  2. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.970
    Симпатии:
    2.976
    datapack

    В sql запросах передавай не индекс игрока, а его юзер ид. А в каллбеке запроса (в ответе) получай обратно индекс. Если игрока уже нет на сервере то индекс станет 0.
     
  3. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.549
    Симпатии:
    1.141
    @truekreo, я не пойму зачем тебе передавать клиент? Если тебе нужен лишь счёт команд? так? То передавай сам счёт или команду. Судя по коду когда ты передаёшь клиент, то в калбак уже клиента нет на сервере и ты не сможешь выполнить код
    PHP:
     new Score3 GetTeamScore(GetClientTeam(client));
    и будет ошибка, по этому и не работал дальше код.
    PHP:
    public OnClientDisconnect(client)
    {
        new 
    iTeam GetClientTeam(client);
        new 
    Score2 GetTeamScore(iTeam);
        
    LogMessage("SCORE2 %i"Score2);

        
    decl String:myQuery[255], String:OCDsteam[24];
        
    GetClientAuthId(clientAuthId_Steam2OCDsteam32);
        
    Format(myQuery255"SELECT * FROM users WHERE steamid = '%s'"OCDsteam);
        
    SQL_TQuery(g_hDbSQL_PlayerDisconnectmyQueryiTeam);
    }

    public 
    SQL_PlayerDisconnect(Handle:ownerHandle:hndl, const String:error[], any:iTeam)
    {
        if(
    hndl == INVALID_HANDLE){LogError("MYSQL ERROR. (%s)"error);}
        else
        {
            new 
    Score3 GetTeamScore(iTeam);
            
    LogMessage("SCORE3 %i"Score3);
      
            if (
    SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
            {
                
    LogMessage("OK");
            }
        }
    }
    ---------------------------------------------------------------------------------------------
    public 
    OnClientDisconnect(client)
    {
        new 
    Score2 GetTeamScore(GetClientTeam(client));
        
    LogMessage("SCORE2 %i"Score2);

        
    decl String:myQuery[255], String:OCDsteam[24];
        
    GetClientAuthId(clientAuthId_Steam2OCDsteam32);
        
    Format(myQuery255"SELECT * FROM users WHERE steamid = '%s'"OCDsteam);
        
    SQL_TQuery(g_hDbSQL_PlayerDisconnectmyQueryScore2);
    }

    public 
    SQL_PlayerDisconnect(Handle:ownerHandle:hndl, const String:error[], any:Score3)
    {
        if(
    hndl == INVALID_HANDLE){LogError("MYSQL ERROR. (%s)"error);}
        else
        {
            
    LogMessage("SCORE3 %i"Score3);
      
            if (
    SQL_HasResultSet(hndl) && SQL_FetchRow(hndl))
            {
                
    LogMessage("OK");
            }
        }
    }
    Для лучшего понимаю напиши, что ты хочешь сделать, то и способы их решения будут разными.
     
    Последнее редактирование: 14 мар 2016
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.970
    Симпатии:
    2.976
    @Серый™, SQL_HasResultSet(hndl) можно не делать
     
  5. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.549
    Симпатии:
    1.141
    @R1KO, на это я вобще не смотрел, я тока пример как передать те значения:ab:
     
  6. truekreo

    truekreo

    Сообщения:
    18
    Симпатии:
    8
    Спасибо всем)
     
  7. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    if(owner == INVALID_HANDLE)
    ещё можно проверить, это будет выдаваться если mysql отвалился полностью.