Здравствуйте. В моем "прекрасном" коде идет сохранение позиций hud'a и заметил то что при выходе все значения сохраняются (в sql ) но уже при входе значение убавляется на -0.01. и из-за этого hud смещается
Все это можно увидеть на скринах:
1 Скриншот он обнуляет все до стандартных значений ( Но это не имеет значения хоть ты 3 раза перезайди 3 раза отнимится по 0.01. 2 скриншот он выходит и значения те же. Но на 3 скриншота уже при входе отнялось 0.01 ( Было -0.95 стало -0.94 )
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 )