summaryrefslogtreecommitdiff
path: root/sourcemod/scripting/gokz-localranks/db/cache_pbs.sp
blob: 12c3ed264b5f4e4fcf1ba0c34c30f07d865d7f11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
	Caches the player's personal best times on the map.
*/



void DB_CachePBs(int client, int steamID)
{
	char query[1024];
	
	Transaction txn = SQL_CreateTransaction();
	
	// Reset PB exists array
	for (int course = 0; course < GOKZ_MAX_COURSES; course++)
	{
		for (int mode = 0; mode < MODE_COUNT; mode++)
		{
			for (int timeType = 0; timeType < TIMETYPE_COUNT; timeType++)
			{
				gB_PBExistsCache[client][course][mode][timeType] = false;
			}
		}
	}
	
	int mapID = GOKZ_DB_GetCurrentMapID();
	
	// Get Map PBs
	FormatEx(query, sizeof(query), sql_getpbs, steamID, mapID);
	txn.AddQuery(query);
	// Get PRO PBs
	FormatEx(query, sizeof(query), sql_getpbspro, steamID, mapID);
	txn.AddQuery(query);
	
	SQL_ExecuteTransaction(gH_DB, txn, DB_TxnSuccess_CachePBs, DB_TxnFailure_Generic, GetClientUserId(client), DBPrio_High);
}

public void DB_TxnSuccess_CachePBs(Handle db, int userID, int numQueries, Handle[] results, any[] queryData)
{
	int client = GetClientOfUserId(userID);
	if (client < 1 || client > MaxClients || !IsClientAuthorized(client) || IsFakeClient(client))
	{
		return;
	}
	
	int course, mode;
	
	while (SQL_FetchRow(results[0]))
	{
		course = SQL_FetchInt(results[0], 1);
		mode = SQL_FetchInt(results[0], 2);
		gB_PBExistsCache[client][course][mode][TimeType_Nub] = true;
		gF_PBTimesCache[client][course][mode][TimeType_Nub] = GOKZ_DB_TimeIntToFloat(SQL_FetchInt(results[0], 0));
	}
	
	while (SQL_FetchRow(results[1]))
	{
		course = SQL_FetchInt(results[1], 1);
		mode = SQL_FetchInt(results[1], 2);
		gB_PBExistsCache[client][course][mode][TimeType_Pro] = true;
		gF_PBTimesCache[client][course][mode][TimeType_Pro] = GOKZ_DB_TimeIntToFloat(SQL_FetchInt(results[1], 0));
	}
}