Отнимаются значения.

Rostu

Добрая душа
Сообщения
986
Реакции
623
Здравствуйте. В моем "прекрасном" коде идет сохранение позиций hud'a и заметил то что при выходе все значения сохраняются (в sql ) но уже при входе значение убавляется на -0.01. и из-за этого hud смещается
PHP:
float posWR[2] = {-0.88, -0.96};
float posPB[2] = {-0.88, -0.93};
float posRANK[2] = {-0.31, -0.21};
float posSTAGE[2] = {-0.31, -0.18};
float posTIMELEFT[2] = {-0.31, -0.15};
float posSYNC[2] = {-0.31, -0.41};
float        g_wrx[MAXPLAYERS + 1];
float        g_wry[MAXPLAYERS + 1];
float        g_pbx[MAXPLAYERS + 1];
float        g_pby[MAXPLAYERS + 1];
float        g_rankx[MAXPLAYERS + 1];
float        g_ranky[MAXPLAYERS + 1];
float        g_stagex[MAXPLAYERS + 1];
float        g_stagey[MAXPLAYERS + 1];
float        g_timeleftx[MAXPLAYERS + 1];
float        g_timelefty[MAXPLAYERS + 1];
float        g_syncx[MAXPLAYERS + 1];
float        g_syncy[MAXPLAYERS + 1];
PHP:
public void OnPluginStart()
{   
Database.Connect(ConnectCallBack, "timer_hud_pos");
    
}
public void ConnectCallBack(Database hDatabase, const char[] sError, any data) 
{
    if (hDatabase == null)    
    {
        SetFailState("Database failure: %s", sError);
        return;
    }

    g_hDatabase = hDatabase; 
    
    
    SQL_LockDatabase(g_hDatabase); 

    g_hDatabase.Query(SQL_Callback_CheckError,    "CREATE TABLE IF NOT EXISTS `table_stats` (\
                                                            `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
                                                            `auth` VARCHAR(32) NOT NULL,\
                                                            `name` VARCHAR(32) NOT NULL default 'unknown',\
                                                            `last_connect` INTEGER UNSIGNED NOT NULL,\
                                                            `poswrx` INTEGER NOT NULL default '0',\
                                                            `poswry` INTEGER NOT NULL default '0',\
                                                            `pospbx` INTEGER NOT NULL default '0',\
                                                            `pospby` INTEGER NOT NULL default '0',\
                                                            `posrankx` INTEGER NOT NULL default '0',\
                                                            `posranky` INTEGER NOT NULL default '0',\
                                                            `posstagex` INTEGER NOT NULL default '0',\
                                                            `posstagey` INTEGER NOT NULL default '0',\
                                                            `postimeleftx` INTEGER NOT NULL default '0',\
                                                            `postimelefty` INTEGER NOT NULL default '0',\
                                                            `possyncx` INTEGER NOT NULL default '0',\
                                                            `possyncy` INTEGER NOT NULL default '0');");
    SQL_UnlockDatabase(g_hDatabase); 
    
    
    g_hDatabase.SetCharset("utf8"); 
}

public void SQL_Callback_CheckError(Database hDatabase, DBResultSet results, const char[] szError, any data)
{
    if(szError[0])
    {
        LogError("SQL_Callback_CheckError: %s", szError);
    }
}

public void OnClientPostAdminCheck(int iClient)
{
    if(!IsFakeClient(iClient))
    {
        char szQuery[256], szAuth[32];
        GetClientAuthId(iClient, AuthId_Engine, szAuth, sizeof(szAuth), true); // Получаем SteamID игрока
        FormatEx(szQuery, sizeof(szQuery), "SELECT `id`, `poswrx`, `poswry`, `pospbx`, `pospby`, `posrankx`, `posranky`, `posstagex`, `posstagey`, `postimeleftx`, `postimelefty`, `possyncx`, `possyncy` FROM `table_stats` WHERE `auth` = '%s';", szAuth);  
        g_hDatabase.Query(SQL_Callback_SelectClient, szQuery, GetClientUserId(iClient)); 
    }
}


public void SQL_Callback_SelectClient(Database hDatabase, DBResultSet hResults, const char[] sError, any iUserID)
{
    if(sError[0]) 
    {
        LogError("SQL_Callback_SelectClient: %s", sError); 
        return; 
    }
    
    int iClient = GetClientOfUserId(iUserID);
    if(iClient)
    {
        char szQuery[512], szName[MAX_NAME_LENGTH*2+1];
        GetClientName(iClient, szQuery, MAX_NAME_LENGTH);
        g_hDatabase.Escape(szQuery, szName, sizeof(szName)); 

        if(hResults.FetchRow())   
        {
            // Получаем значения из результата
            g_iClientID[iClient] = hResults.FetchInt(0);    // id
            g_wrx[iClient] = hResults.FetchFloat(1);
            g_wry[iClient] = hResults.FetchFloat(2);
            g_pbx[iClient] = hResults.FetchFloat(3);
            g_pby[iClient] = hResults.FetchFloat(4);
            g_rankx[iClient] = hResults.FetchFloat(5);
            g_ranky[iClient] = hResults.FetchFloat(6);
            g_stagex[iClient] = hResults.FetchFloat(7);
            g_stagey[iClient] = hResults.FetchFloat(8);
            g_timeleftx[iClient] = hResults.FetchFloat(9);
            g_timelefty[iClient] = hResults.FetchFloat(10);
            g_syncx[iClient] = hResults.FetchFloat(11);
            g_syncy[iClient] = hResults.FetchFloat(12);

            FormatEx(szQuery, sizeof(szQuery), "UPDATE `table_stats` SET `last_connect` = %i, `name` = '%s' WHERE `id` = %i;", GetTime(), szName, g_iClientID[iClient]);
            g_hDatabase.Query(SQL_Callback_CheckError, szQuery);
        }
        else
        {
            g_wrx[iClient] = posWR[0];
            g_wry[iClient] = posWR[1];
            g_pbx[iClient] = posPB[0];
            g_pby[iClient] = posPB[1];
            g_rankx[iClient] = posRANK[0];
            g_ranky[iClient] = posRANK[1];
            g_stagex[iClient] = posSTAGE[0];
            g_stagey[iClient] = posSTAGE[1];
            g_timeleftx[iClient] = posTIMELEFT[0];
            g_timelefty[iClient] = posTIMELEFT[1];
            g_syncx[iClient] = posSYNC[0];
            g_syncy[iClient] = posSYNC[1];


            char szAuth[32];
            GetClientAuthId(iClient, AuthId_Engine, szAuth, sizeof(szAuth));
            FormatEx(szQuery, sizeof(szQuery), "INSERT INTO `table_stats` (`auth`, `name`, `last_connect`) VALUES ( '%s', '%s', %i);", szAuth, szName, GetTime());
    //        FormatEx(szQuery, sizeof(szQuery), "UPDATE `table_stats` SET `poswrx` = %.2f, `poswry` = %.2f, `pospbx` = %.2f, `pospby` = %.2f, `posrankx` = %.2f, `posranky` = %.2f, `posstagex` = %.2f, `posstagey` = %.2f, `postimeleftx` = %.2f, `postimelefty` = %.2f, `possyncx` = %.2f, `possyncy` = %.2f WHERE `id` = %i;", g_wrx[iClient], g_wry[iClient], g_pbx[iClient], g_pby[iClient], g_rankx[iClient], g_ranky[iClient], g_stagex[iClient],g_stagey[iClient], g_timeleftx[iClient], g_timelefty[iClient], g_syncx[iClient],  g_syncy[iClient], g_iClientID[iClient]);
            g_hDatabase.Query(SQL_Callback_CreateClient, szQuery, GetClientUserId(iClient));
        }
        CGOPrintToChat(iClient, "%.2f ... %.2f ... %.2f ...\n %.2f,,, %.2f,,,,%.2f,,,\n %.2f....%.2f...%.2f...\n%.2f....%.2f....%.2f...", g_wrx[iClient], g_wry[iClient],
        g_pbx[iClient], g_pby[iClient], g_rankx[iClient],g_ranky[iClient], g_stagex[iClient], g_stagey[iClient], g_timeleftx[iClient], g_timelefty[iClient], g_syncx[iClient], g_syncy[iClient]);
    }
}

public void SQL_Callback_CreateClient(Database hDatabase, DBResultSet results, const char[] szError, any iUserID)
{
    if(szError[0])
    {
        LogError("SQL_Callback_CreateClient: %s", szError);
        return;
    }
    
    int iClient = GetClientOfUserId(iUserID);
    if(iClient)
    {
        g_iClientID[iClient] = results.InsertId;
    }
}

public void OnClientDisconnect(int iClient)
{
    if(!IsFakeClient(iClient))
    {
        char szQuery[512];
        FormatEx(szQuery, sizeof(szQuery), "UPDATE `table_stats` SET `poswrx` = %.2f, `poswry` = %.2f, `pospbx` = %.2f, `pospby` = %.2f, `posrankx` = %.2f, `posranky` = %.2f, `posstagex` = %.2f, `posstagey` = %.2f, `postimeleftx` = %.2f, `postimelefty` = %.2f, `possyncx` = %.2f, `possyncy` = %.2f WHERE `id` = %i;", g_wrx[iClient], g_wry[iClient], g_pbx[iClient], g_pby[iClient], g_rankx[iClient], g_ranky[iClient], g_stagex[iClient],g_stagey[iClient], g_timeleftx[iClient], g_timelefty[iClient], g_syncx[iClient],  g_syncy[iClient], g_iClientID[iClient]);
        g_hDatabase.Query(SQL_Callback_CheckError, szQuery);
        CGOPrintToChatAll("debug вышел %.2f ... %.2f ... %.2f ...\n %.2f,,, %.2f,,,,%.2f,,,\n %.2f....%.2f...%.2f...\n%.2f....%.2f....%.2f...", g_wrx[iClient], g_wry[iClient],
        g_pbx[iClient], g_pby[iClient], g_rankx[iClient],g_ranky[iClient], g_stagex[iClient], g_stagey[iClient], g_timeleftx[iClient], g_timelefty[iClient], g_syncx[iClient], g_syncy[iClient]);
    }
}
Все это можно увидеть на скринах:
1 Скриншот он обнуляет все до стандартных значений ( Но это не имеет значения хоть ты 3 раза перезайди 3 раза отнимится по 0.01. 2 скриншот он выходит и значения те же. Но на 3 скриншота уже при входе отнялось 0.01 ( Было -0.95 стало -0.94 )
 

Вложения

  • 20170425200926_1.jpg
    20170425200926_1.jpg
    333.4 КБ · Просмотры: 36
  • 20170425200934_1.jpg
    20170425200934_1.jpg
    335.2 КБ · Просмотры: 34
  • 20170425200951_1.jpg
    20170425200951_1.jpg
    333 КБ · Просмотры: 35

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Возможно проблема в округлении при UPDATE запросе. Выведите два числа - полное и округлённое, если они будут различаться на 0.01, тогда придется вручную округлять (как вариант, умножать на 100 и округлять как целое, а затем делить на 100).
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
я правильно понял, что у тебя числа с плавающей запятой (float) хранятся как целые (integer)?
--- Добавлено позже ---
`poswrx` INTEGER NOT NULL default '0',\
`poswry` INTEGER NOT NULL default '0',\
`pospbx` INTEGER NOT NULL default '0',\
`pospby` INTEGER NOT NULL default '0',\
FormatEx(szQuery, sizeof(szQuery), "UPDATE `table_stats` SET `poswrx` = %.2f, `poswry` = %.2f, `pospbx` = %.2f, `pospby` = %.2f,
 

Rostu

Добрая душа
Сообщения
986
Реакции
623
@Grey83, Получается это не правильно и надо делать что вместо INTEGER - REAL?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
@Rostu, я тебе писал об этом. ты либо не видел, либо не хотел видеть
 

Rostu

Добрая душа
Сообщения
986
Реакции
623
Последнее редактирование:
Сверху Снизу