mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-06 18:08:26 +00:00
Add FirstLogin to database and profile (#1234)
fix FirstLogin query for sqlite fix statsmenu query oopsie teehee :3 sql-create-tables-and-migrations.sp - fix queries for sqlite Simplify firstlogin column initialization
This commit is contained in:
parent
354c2445c2
commit
3d0cd96319
@ -53,6 +53,7 @@ enum
|
|||||||
Migration_DeprecateExactTimeInt,
|
Migration_DeprecateExactTimeInt,
|
||||||
Migration_AddPlayertimesAuthFK,
|
Migration_AddPlayertimesAuthFK,
|
||||||
Migration_FixSQLiteMapzonesROWID,
|
Migration_FixSQLiteMapzonesROWID,
|
||||||
|
Migration_AddUsersFirstLogin,
|
||||||
MIGRATIONS_END
|
MIGRATIONS_END
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ char gS_MigrationNames[][] = {
|
|||||||
"DeprecateExactTimeInt",
|
"DeprecateExactTimeInt",
|
||||||
"AddPlayertimesAuthFK",
|
"AddPlayertimesAuthFK",
|
||||||
"FixSQLiteMapzonesROWID",
|
"FixSQLiteMapzonesROWID",
|
||||||
|
"AddUsersFirstLogin",
|
||||||
};
|
};
|
||||||
|
|
||||||
static Database gH_SQL;
|
static Database gH_SQL;
|
||||||
@ -133,13 +135,13 @@ public void SQL_CreateTables(Database hSQL, const char[] prefix, int driver)
|
|||||||
if (driver == Driver_mysql)
|
if (driver == Driver_mysql)
|
||||||
{
|
{
|
||||||
FormatEx(sQuery, sizeof(sQuery),
|
FormatEx(sQuery, sizeof(sQuery),
|
||||||
"CREATE TABLE IF NOT EXISTS `%susers` (`auth` INT NOT NULL, `name` VARCHAR(32) COLLATE 'utf8mb4_general_ci', `ip` INT, `lastlogin` INT NOT NULL DEFAULT -1, `points` FLOAT NOT NULL DEFAULT 0, `playtime` FLOAT NOT NULL DEFAULT 0, PRIMARY KEY (`auth`), INDEX `points` (`points`), INDEX `lastlogin` (`lastlogin`)) ENGINE=INNODB;",
|
"CREATE TABLE IF NOT EXISTS `%susers` (`auth` INT NOT NULL, `name` VARCHAR(32) COLLATE 'utf8mb4_general_ci', `ip` INT, `lastlogin` INT NOT NULL DEFAULT -1, `firstlogin` INT NOT NULL DEFAULT -1, `points` FLOAT NOT NULL DEFAULT 0, `playtime` FLOAT NOT NULL DEFAULT 0, PRIMARY KEY (`auth`), INDEX `points` (`points`), INDEX `lastlogin` (`lastlogin`)) ENGINE=INNODB;",
|
||||||
gS_SQLPrefix);
|
gS_SQLPrefix);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FormatEx(sQuery, sizeof(sQuery),
|
FormatEx(sQuery, sizeof(sQuery),
|
||||||
"CREATE TABLE IF NOT EXISTS `%susers` (`auth` INT NOT NULL PRIMARY KEY, `name` VARCHAR(32), `ip` INT, `lastlogin` INTEGER NOT NULL DEFAULT -1, `points` FLOAT NOT NULL DEFAULT 0, `playtime` FLOAT NOT NULL DEFAULT 0);",
|
"CREATE TABLE IF NOT EXISTS `%susers` (`auth` INT NOT NULL PRIMARY KEY, `name` VARCHAR(32), `ip` INT, `lastlogin` INTEGER NOT NULL DEFAULT -1, `firstlogin` INTEGER NOT NULL DEFAULT -1, `points` FLOAT NOT NULL DEFAULT 0, `playtime` FLOAT NOT NULL DEFAULT 0);",
|
||||||
gS_SQLPrefix);
|
gS_SQLPrefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,6 +371,7 @@ void ApplyMigration(int migration)
|
|||||||
case Migration_DeprecateExactTimeInt: ApplyMigration_DeprecateExactTimeInt();
|
case Migration_DeprecateExactTimeInt: ApplyMigration_DeprecateExactTimeInt();
|
||||||
case Migration_AddPlayertimesAuthFK: ApplyMigration_AddPlayertimesAuthFK();
|
case Migration_AddPlayertimesAuthFK: ApplyMigration_AddPlayertimesAuthFK();
|
||||||
case Migration_FixSQLiteMapzonesROWID: ApplyMigration_FixSQLiteMapzonesROWID();
|
case Migration_FixSQLiteMapzonesROWID: ApplyMigration_FixSQLiteMapzonesROWID();
|
||||||
|
case Migration_AddUsersFirstLogin: ApplyMigration_AddUsersFirstLogin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -686,6 +689,20 @@ public void Trans_FixSQLiteMapzonesROWID_Error(Database db, any data, int numQue
|
|||||||
LogError("Timer error! SQLiteMapzonesROWID migration transaction failed. Reason: %s", error);
|
LogError("Timer error! SQLiteMapzonesROWID migration transaction failed. Reason: %s", error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ApplyMigration_AddUsersFirstLogin()
|
||||||
|
{
|
||||||
|
char sQuery[256];
|
||||||
|
FormatEx(sQuery, sizeof(sQuery), "ALTER TABLE %susers ADD `firstlogin` INT NOT NULL DEFAULT -1 %s;", gS_SQLPrefix, (gI_Driver == Driver_mysql) ? "AFTER `lastlogin`" : "");
|
||||||
|
QueryLog(gH_SQL, ApplyMigration_AddUsersFirstLogin2222222_Callback, sQuery, Migration_AddUsersFirstLogin, DBPrio_High);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyMigration_AddUsersFirstLogin2222222_Callback(Database db, DBResultSet results, const char[] error, any data)
|
||||||
|
{
|
||||||
|
char sQuery[256];
|
||||||
|
FormatEx(sQuery, sizeof(sQuery), "UPDATE %susers SET firstlogin = lastlogin WHERE lastlogin > 0;", gS_SQLPrefix);
|
||||||
|
QueryLog(gH_SQL, SQL_TableMigrationSingleQuery_Callback, sQuery, Migration_AddUsersFirstLogin, DBPrio_High);
|
||||||
|
}
|
||||||
|
|
||||||
public void SQL_TableMigrationSingleQuery_Callback(Database db, DBResultSet results, const char[] error, any data)
|
public void SQL_TableMigrationSingleQuery_Callback(Database db, DBResultSet results, const char[] error, any data)
|
||||||
{
|
{
|
||||||
InsertMigration(data);
|
InsertMigration(data);
|
||||||
|
|||||||
@ -2807,14 +2807,14 @@ public void OnClientAuthorized(int client, const char[] auth)
|
|||||||
if (gI_Driver == Driver_mysql)
|
if (gI_Driver == Driver_mysql)
|
||||||
{
|
{
|
||||||
FormatEx(sQuery, 512,
|
FormatEx(sQuery, 512,
|
||||||
"INSERT INTO %susers (auth, name, ip, lastlogin) VALUES (%d, '%s', %d, %d) ON DUPLICATE KEY UPDATE name = '%s', ip = %d, lastlogin = %d;",
|
"INSERT INTO %susers (auth, name, ip, lastlogin, firstlogin) VALUES (%d, '%s', %d, %d, %d) ON DUPLICATE KEY UPDATE name = '%s', ip = %d, lastlogin = %d;",
|
||||||
gS_MySQLPrefix, iSteamID, sEscapedName, iIPAddress, iTime, sEscapedName, iIPAddress, iTime);
|
gS_MySQLPrefix, iSteamID, sEscapedName, iIPAddress, iTime, iTime, sEscapedName, iIPAddress, iTime);
|
||||||
}
|
}
|
||||||
else // postgresql & sqlite
|
else // postgresql & sqlite
|
||||||
{
|
{
|
||||||
FormatEx(sQuery, 512,
|
FormatEx(sQuery, 512,
|
||||||
"INSERT INTO %susers (auth, name, ip, lastlogin) VALUES (%d, '%s', %d, %d) ON CONFLICT(auth) DO UPDATE SET name = '%s', ip = %d, lastlogin = %d;",
|
"INSERT INTO %susers (auth, name, ip, lastlogin, firstlogin) VALUES (%d, '%s', %d, %d, %d) ON CONFLICT(auth) DO UPDATE SET name = '%s', ip = %d, lastlogin = %d;",
|
||||||
gS_MySQLPrefix, iSteamID, sEscapedName, iIPAddress, iTime, sEscapedName, iIPAddress, iTime);
|
gS_MySQLPrefix, iSteamID, sEscapedName, iIPAddress, iTime, iTime, sEscapedName, iIPAddress, iTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryLog(gH_SQL, SQL_InsertUser_Callback, sQuery, GetClientSerial(client));
|
QueryLog(gH_SQL, SQL_InsertUser_Callback, sQuery, GetClientSerial(client));
|
||||||
|
|||||||
@ -890,9 +890,9 @@ Action OpenStatsMenu_Main(int steamid, int style, DataPack data)
|
|||||||
char sQuery[2048];
|
char sQuery[2048];
|
||||||
|
|
||||||
FormatEx(sQuery, sizeof(sQuery),
|
FormatEx(sQuery, sizeof(sQuery),
|
||||||
"SELECT 0, points, lastlogin, ip, playtime, name FROM %susers WHERE auth = %d\n" ...
|
"SELECT 0, points, lastlogin, firstlogin, ip, playtime, name FROM %susers WHERE auth = %d\n" ...
|
||||||
"UNION ALL SELECT 1, SUM(playtime), 0, 0, 0, '' FROM %sstyleplaytime WHERE auth = %d AND style = %d\n" ...
|
"UNION ALL SELECT 1, SUM(playtime), 0, 0, 0, 0, '' FROM %sstyleplaytime WHERE auth = %d AND style = %d\n" ...
|
||||||
"UNION ALL SELECT 2, COUNT(*), 0, 0, 0, '' FROM %susers u1\n" ...
|
"UNION ALL SELECT 2, COUNT(*), 0, 0, 0, 0, '' FROM %susers u1\n" ...
|
||||||
" JOIN (SELECT points FROM %susers WHERE auth = %d) u2\n" ...
|
" JOIN (SELECT points FROM %susers WHERE auth = %d) u2\n" ...
|
||||||
" WHERE u1.points >= u2.points",
|
" WHERE u1.points >= u2.points",
|
||||||
gS_MySQLPrefix, steamid,
|
gS_MySQLPrefix, steamid,
|
||||||
@ -960,6 +960,7 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
|||||||
|
|
||||||
float fPoints;
|
float fPoints;
|
||||||
char sLastLogin[32];
|
char sLastLogin[32];
|
||||||
|
char sFirstLogin[32];
|
||||||
char sCountry[64];
|
char sCountry[64];
|
||||||
char sPlaytime[16];
|
char sPlaytime[16];
|
||||||
|
|
||||||
@ -989,7 +990,11 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
|||||||
FormatTime(sLastLogin, 32, "%Y-%m-%d %H:%M:%S", iLastLogin);
|
FormatTime(sLastLogin, 32, "%Y-%m-%d %H:%M:%S", iLastLogin);
|
||||||
Format(sLastLogin, 32, "%T: %s", "LastLogin", client, (iLastLogin != -1)? sLastLogin:"N/A");
|
Format(sLastLogin, 32, "%T: %s", "LastLogin", client, (iLastLogin != -1)? sLastLogin:"N/A");
|
||||||
|
|
||||||
int iIPAddress = results.FetchInt(3);
|
int iFirstLogin = results.FetchInt(3);
|
||||||
|
FormatTime(sFirstLogin, 32, "%Y-%m-%d %H:%M:%S", iFirstLogin);
|
||||||
|
Format(sFirstLogin, 32, "%T: %s", "FirstLogin", client, (iFirstLogin != -1)? sFirstLogin:"N/A");
|
||||||
|
|
||||||
|
int iIPAddress = results.FetchInt(4);
|
||||||
char sIPAddress[32];
|
char sIPAddress[32];
|
||||||
IPAddressToString(iIPAddress, sIPAddress, 32);
|
IPAddressToString(iIPAddress, sIPAddress, 32);
|
||||||
|
|
||||||
@ -998,10 +1003,10 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
|||||||
sCountry = "Local Area Network";
|
sCountry = "Local Area Network";
|
||||||
}
|
}
|
||||||
|
|
||||||
float fPlaytime = results.FetchFloat(4);
|
float fPlaytime = results.FetchFloat(5);
|
||||||
FormatSeconds(fPlaytime, sPlaytime, sizeof(sPlaytime), false, true, true);
|
FormatSeconds(fPlaytime, sPlaytime, sizeof(sPlaytime), false, true, true);
|
||||||
|
|
||||||
results.FetchString(5, gS_TargetName[client], MAX_NAME_LENGTH);
|
results.FetchString(6, gS_TargetName[client], MAX_NAME_LENGTH);
|
||||||
ReplaceString(gS_TargetName[client], MAX_NAME_LENGTH, "#", "?");
|
ReplaceString(gS_TargetName[client], MAX_NAME_LENGTH, "#", "?");
|
||||||
}
|
}
|
||||||
else if (type == 1)
|
else if (type == 1)
|
||||||
@ -1056,8 +1061,8 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
|||||||
}
|
}
|
||||||
|
|
||||||
Menu menu = new Menu(MenuHandler_ProfileHandler);
|
Menu menu = new Menu(MenuHandler_ProfileHandler);
|
||||||
menu.SetTitle("%s's %T. [U:1:%u]\n%T: %s\n%s\n%s\n%T: %s\n",
|
menu.SetTitle("%s's %T. [U:1:%u]\n%T: %s\n%s\n%s\n%s\n%T: %s\n",
|
||||||
gS_TargetName[client], "Profile", client, gI_TargetSteamID[client], "Country", client, sCountry, sLastLogin,
|
gS_TargetName[client], "Profile", client, gI_TargetSteamID[client], "Country", client, sCountry, sFirstLogin, sLastLogin,
|
||||||
sRankingString, "Playtime", client, sPlaytime);
|
sRankingString, "Playtime", client, sPlaytime);
|
||||||
|
|
||||||
int[] styles = new int[gI_Styles];
|
int[] styles = new int[gI_Styles];
|
||||||
|
|||||||
@ -74,6 +74,10 @@
|
|||||||
{
|
{
|
||||||
"en" "Last Login"
|
"en" "Last Login"
|
||||||
}
|
}
|
||||||
|
"FirstLogin"
|
||||||
|
{
|
||||||
|
"en" "First Login"
|
||||||
|
}
|
||||||
"MapCompletions"
|
"MapCompletions"
|
||||||
{
|
{
|
||||||
"en" "Map completions"
|
"en" "Map completions"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user