· 8 years ago · Aug 03, 2018, 10:02 PM
1void GetPlayerData(int client)
2{
3 char steamid[32];
4 GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), true);
5 char query[255];
6 FormatEx(query, sizeof(query), "SELECT * FROM %sweapons WHERE steamid = '%s'", g_TablePrefix, steamid);
7 db.Query(T_GetPlayerDataCallback, query, GetClientUserId(client));
8}
9
10public void T_GetPlayerDataCallback(Database database, DBResultSet results, const char[] error, int userid)
11{
12 int clientIndex = GetClientOfUserId(userid);
13 if(IsValidClient(clientIndex))
14 {
15 if (results == null)
16 {
17 LogError("Query failed! %s", error);
18 }
19 else if (results.RowCount == 0)
20 {
21 char steamid[32];
22 GetClientAuthId(clientIndex, AuthId_Steam2, steamid, sizeof(steamid), true);
23 char query[255];
24 FormatEx(query, sizeof(query), "INSERT INTO %sweapons (steamid) VALUES ('%s')", g_TablePrefix, steamid);
25 DataPack pack = new DataPack();
26 pack.WriteString(steamid);
27 pack.WriteString(query);
28 db.Query(T_InsertCallback, query, pack);
29 for(int i = 0; i < sizeof(g_WeaponClasses); i++)
30 {
31 g_iSkins[clientIndex][i] = 0;
32 g_iStatTrak[clientIndex][i] = 0;
33 g_iStatTrakCount[clientIndex][i] = 0;
34 g_NameTag[clientIndex][i] = "";
35 g_fFloatValue[clientIndex][i] = 0.0;
36 }
37 g_iKnife[clientIndex] = 0;
38 }
39 else
40 {
41 if(results.FetchRow())
42 {
43 for(int i = 2, j = 0; j < sizeof(g_WeaponClasses); i += 5, j++)
44 {
45 g_iSkins[clientIndex][j] = results.FetchInt(i);
46 g_fFloatValue[clientIndex][j] = results.FetchFloat(i + 1);
47 g_iStatTrak[clientIndex][j] = results.FetchInt(i + 2);
48 g_iStatTrakCount[clientIndex][j] = results.FetchInt(i + 3);
49 results.FetchString(i + 4, g_NameTag[clientIndex][j], 128);
50 }
51 g_iKnife[clientIndex] = results.FetchInt(1);
52 }
53 char steamid[32];
54 GetClientAuthId(clientIndex, AuthId_Steam2, steamid, sizeof(steamid), true);
55 char query[255];
56 FormatEx(query, sizeof(query), "REPLACE INTO %sweapons_timestamps (steamid, last_seen) VALUES ('%s', %d)", g_TablePrefix, steamid, GetTime());
57 DataPack pack = new DataPack();
58 pack.WriteString(query);
59 db.Query(T_TimestampCallback, query, pack);
60 }
61 }
62}
63
64public void T_InsertCallback(Database database, DBResultSet results, const char[] error, DataPack pack)
65{
66 pack.Reset();
67 char steamid[32];
68 pack.ReadString(steamid, 32);
69 if (results == null)
70 {
71 char buffer[1024];
72 pack.ReadString(buffer, 1024);
73 LogError("Insert Query failed! query: \"%s\" error: \"%s\"", buffer, error);
74 }
75 else
76 {
77 char query[255];
78 FormatEx(query, sizeof(query), "REPLACE INTO %sweapons_timestamps (steamid, last_seen) VALUES ('%s', %d)", g_TablePrefix, steamid, GetTime());
79 DataPack newPack = new DataPack();
80 newPack.WriteString(query);
81 db.Query(T_TimestampCallback, query, newPack);
82 }
83 CloseHandle(pack);
84}
85
86public void T_TimestampCallback(Database database, DBResultSet results, const char[] error, DataPack pack)
87{
88 if (results == null)
89 {
90 pack.Reset();
91 char buffer[1024];
92 pack.ReadString(buffer, 1024);
93 LogError("Timestamp Query failed! query: \"%s\" error: \"%s\"", buffer, error);
94 }
95 CloseHandle(pack);
96}
97
98void UpdatePlayerData(int client, char[] updateFields)
99{
100 char steamid[32];
101 GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid), true);
102 char query[1024];
103 FormatEx(query, sizeof(query), "UPDATE %sweapons SET %s WHERE steamid = '%s'", g_TablePrefix, updateFields, steamid);
104 DataPack pack = new DataPack();
105 pack.WriteString(query);
106 db.Query(T_UpdatePlayerDataCallback, query, pack);
107}
108
109public void T_UpdatePlayerDataCallback(Database database, DBResultSet results, const char[] error, DataPack pack)
110{
111 if (results == null)
112 {
113 pack.Reset();
114 char buffer[1024];
115 pack.ReadString(buffer, 1024);
116 LogError("Update Player failed! query: \"%s\" error: \"%s\"", buffer, error);
117 }
118 CloseHandle(pack);
119}
120
121public void SQLConnectCallback(Database database, const char[] error, any data)
122{
123 if (database == null)
124 {
125 LogError("Database failure: %s", error);
126 }
127 else
128 {
129 db = database;
130 char createQuery[20480];
131 char dbIdentifier[10];
132
133 int index = 0;
134
135 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
136 CREATE TABLE IF NOT EXISTS %sweapons ( \
137 steamid varchar(32) NOT NULL PRIMARY KEY, \
138 knife int(4) NOT NULL DEFAULT '0', \
139 awp int(4) NOT NULL DEFAULT '0', \
140 awp_float decimal(3,2) NOT NULL DEFAULT '0.0', \
141 awp_trak int(1) NOT NULL DEFAULT '0', \
142 awp_trak_count int(10) NOT NULL DEFAULT '0', \
143 awp_tag varchar(256) NOT NULL DEFAULT '', \
144 ak47 int(4) NOT NULL DEFAULT '0', \
145 ak47_float decimal(3,2) NOT NULL DEFAULT '0.0', \
146 ak47_trak int(1) NOT NULL DEFAULT '0', \
147 ak47_trak_count int(10) NOT NULL DEFAULT '0', \
148 ak47_tag varchar(256) NOT NULL DEFAULT '', \
149 m4a1 int(4) NOT NULL DEFAULT '0', \
150 m4a1_float decimal(3,2) NOT NULL DEFAULT '0.0', \
151 m4a1_trak int(1) NOT NULL DEFAULT '0', \
152 m4a1_trak_count int(10) NOT NULL DEFAULT '0', \
153 m4a1_tag varchar(256) NOT NULL DEFAULT '', ", g_TablePrefix);
154 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
155 m4a1_silencer int(4) NOT NULL DEFAULT '0', \
156 m4a1_silencer_float decimal(3,2) NOT NULL DEFAULT '0.0', \
157 m4a1_silencer_trak int(1) NOT NULL DEFAULT '0', \
158 m4a1_silencer_trak_count int(10) NOT NULL DEFAULT '0', \
159 m4a1_silencer_tag varchar(256) NOT NULL DEFAULT '', \
160 deagle int(4) NOT NULL DEFAULT '0', \
161 deagle_float decimal(3,2) NOT NULL DEFAULT '0.0', \
162 deagle_trak int(1) NOT NULL DEFAULT '0', \
163 deagle_trak_count int(10) NOT NULL DEFAULT '0', \
164 deagle_tag varchar(256) NOT NULL DEFAULT '', \
165 usp_silencer int(4) NOT NULL DEFAULT '0', \
166 usp_silencer_float decimal(3,2) NOT NULL DEFAULT '0.0', \
167 usp_silencer_trak int(1) NOT NULL DEFAULT '0', \
168 usp_silencer_trak_count int(10) NOT NULL DEFAULT '0', \
169 usp_silencer_tag varchar(256) NOT NULL DEFAULT '', \
170 hkp2000 int(4) NOT NULL DEFAULT '0', \
171 hkp2000_float decimal(3,2) NOT NULL DEFAULT '0.0', \
172 hkp2000_trak int(1) NOT NULL DEFAULT '0', ");
173 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
174 hkp2000_trak_count int(10) NOT NULL DEFAULT '0', \
175 hkp2000_tag varchar(256) NOT NULL DEFAULT '', \
176 glock int(4) NOT NULL DEFAULT '0', \
177 glock_float decimal(3,2) NOT NULL DEFAULT '0.0', \
178 glock_trak int(1) NOT NULL DEFAULT '0', \
179 glock_trak_count int(10) NOT NULL DEFAULT '0', \
180 glock_tag varchar(256) NOT NULL DEFAULT '', \
181 elite int(4) NOT NULL DEFAULT '0', \
182 elite_float decimal(3,2) NOT NULL DEFAULT '0.0', \
183 elite_trak int(1) NOT NULL DEFAULT '0', \
184 elite_trak_count int(10) NOT NULL DEFAULT '0', \
185 elite_tag varchar(256) NOT NULL DEFAULT '', \
186 p250 int(4) NOT NULL DEFAULT '0', \
187 p250_float decimal(3,2) NOT NULL DEFAULT '0.0', \
188 p250_trak int(1) NOT NULL DEFAULT '0', \
189 p250_trak_count int(10) NOT NULL DEFAULT '0', \
190 p250_tag varchar(256) NOT NULL DEFAULT '', \
191 cz75a int(4) NOT NULL DEFAULT '0', ");
192 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
193 cz75a_float decimal(3,2) NOT NULL DEFAULT '0.0', \
194 cz75a_trak int(1) NOT NULL DEFAULT '0', \
195 cz75a_trak_count int(10) NOT NULL DEFAULT '0', \
196 cz75a_tag varchar(256) NOT NULL DEFAULT '', \
197 fiveseven int(4) NOT NULL DEFAULT '0', \
198 fiveseven_float decimal(3,2) NOT NULL DEFAULT '0.0', \
199 fiveseven_trak int(1) NOT NULL DEFAULT '0', \
200 fiveseven_trak_count int(10) NOT NULL DEFAULT '0', \
201 fiveseven_tag varchar(256) NOT NULL DEFAULT '', \
202 tec9 int(4) NOT NULL DEFAULT '0', \
203 tec9_float decimal(3,2) NOT NULL DEFAULT '0.0', \
204 tec9_trak int(1) NOT NULL DEFAULT '0', \
205 tec9_trak_count int(10) NOT NULL DEFAULT '0', \
206 tec9_tag varchar(256) NOT NULL DEFAULT '', \
207 revolver int(4) NOT NULL DEFAULT '0', \
208 revolver_float decimal(3,2) NOT NULL DEFAULT '0.0', \
209 revolver_trak int(1) NOT NULL DEFAULT '0', \
210 revolver_trak_count int(10) NOT NULL DEFAULT '0', ");
211 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
212 revolver_tag varchar(256) NOT NULL DEFAULT '', \
213 nova int(4) NOT NULL DEFAULT '0', \
214 nova_float decimal(3,2) NOT NULL DEFAULT '0.0', \
215 nova_trak int(1) NOT NULL DEFAULT '0', \
216 nova_trak_count int(10) NOT NULL DEFAULT '0', \
217 nova_tag varchar(256) NOT NULL DEFAULT '', \
218 xm1014 int(4) NOT NULL DEFAULT '0', \
219 xm1014_float decimal(3,2) NOT NULL DEFAULT '0.0', \
220 xm1014_trak int(1) NOT NULL DEFAULT '0', \
221 xm1014_trak_count int(10) NOT NULL DEFAULT '0', \
222 xm1014_tag varchar(256) NOT NULL DEFAULT '', \
223 mag7 int(4) NOT NULL DEFAULT '0', \
224 mag7_float decimal(3,2) NOT NULL DEFAULT '0.0', \
225 mag7_trak int(1) NOT NULL DEFAULT '0', \
226 mag7_trak_count int(10) NOT NULL DEFAULT '0', \
227 mag7_tag varchar(256) NOT NULL DEFAULT '', \
228 sawedoff int(4) NOT NULL DEFAULT '0', \
229 sawedoff_float decimal(3,2) NOT NULL DEFAULT '0.0', ");
230 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
231 sawedoff_trak int(1) NOT NULL DEFAULT '0', \
232 sawedoff_trak_count int(10) NOT NULL DEFAULT '0', \
233 sawedoff_tag varchar(256) NOT NULL DEFAULT '', \
234 m249 int(4) NOT NULL DEFAULT '0', \
235 m249_float decimal(3,2) NOT NULL DEFAULT '0.0', \
236 m249_trak int(1) NOT NULL DEFAULT '0', \
237 m249_trak_count int(10) NOT NULL DEFAULT '0', \
238 m249_tag varchar(256) NOT NULL DEFAULT '', \
239 negev int(4) NOT NULL DEFAULT '0', \
240 negev_float decimal(3,2) NOT NULL DEFAULT '0.0', \
241 negev_trak int(1) NOT NULL DEFAULT '0', \
242 negev_trak_count int(10) NOT NULL DEFAULT '0', \
243 negev_tag varchar(256) NOT NULL DEFAULT '', \
244 mp9 int(4) NOT NULL DEFAULT '0', \
245 mp9_float decimal(3,2) NOT NULL DEFAULT '0.0', \
246 mp9_trak int(1) NOT NULL DEFAULT '0', \
247 mp9_trak_count int(10) NOT NULL DEFAULT '0', \
248 mp9_tag varchar(256) NOT NULL DEFAULT '', ");
249 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
250 mac10 int(4) NOT NULL DEFAULT '0', \
251 mac10_float decimal(3,2) NOT NULL DEFAULT '0.0', \
252 mac10_trak int(1) NOT NULL DEFAULT '0', \
253 mac10_trak_count int(10) NOT NULL DEFAULT '0', \
254 mac10_tag varchar(256) NOT NULL DEFAULT '', \
255 mp7 int(4) NOT NULL DEFAULT '0', \
256 mp7_float decimal(3,2) NOT NULL DEFAULT '0.0', \
257 mp7_trak int(1) NOT NULL DEFAULT '0', \
258 mp7_trak_count int(10) NOT NULL DEFAULT '0', \
259 mp7_tag varchar(256) NOT NULL DEFAULT '', \
260 ump45 int(4) NOT NULL DEFAULT '0', \
261 ump45_float decimal(3,2) NOT NULL DEFAULT '0.0', \
262 ump45_trak int(1) NOT NULL DEFAULT '0', \
263 ump45_trak_count int(10) NOT NULL DEFAULT '0', \
264 ump45_tag varchar(256) NOT NULL DEFAULT '', \
265 p90 int(4) NOT NULL DEFAULT '0', \
266 p90_float decimal(3,2) NOT NULL DEFAULT '0.0', \
267 p90_trak int(1) NOT NULL DEFAULT '0', ");
268 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
269 p90_trak_count int(10) NOT NULL DEFAULT '0', \
270 p90_tag varchar(256) NOT NULL DEFAULT '', \
271 bizon int(4) NOT NULL DEFAULT '0', \
272 bizon_float decimal(3,2) NOT NULL DEFAULT '0.0', \
273 bizon_trak int(1) NOT NULL DEFAULT '0', \
274 bizon_trak_count int(10) NOT NULL DEFAULT '0', \
275 bizon_tag varchar(256) NOT NULL DEFAULT '', \
276 famas int(4) NOT NULL DEFAULT '0', \
277 famas_float decimal(3,2) NOT NULL DEFAULT '0.0', \
278 famas_trak int(1) NOT NULL DEFAULT '0', \
279 famas_trak_count int(10) NOT NULL DEFAULT '0', \
280 famas_tag varchar(256) NOT NULL DEFAULT '', \
281 galilar int(4) NOT NULL DEFAULT '0', \
282 galilar_float decimal(3,2) NOT NULL DEFAULT '0.0', \
283 galilar_trak int(1) NOT NULL DEFAULT '0', \
284 galilar_trak_count int(10) NOT NULL DEFAULT '0', \
285 galilar_tag varchar(256) NOT NULL DEFAULT '', \
286 ssg08 int(4) NOT NULL DEFAULT '0', ");
287 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
288 ssg08_float decimal(3,2) NOT NULL DEFAULT '0.0', \
289 ssg08_trak int(1) NOT NULL DEFAULT '0', \
290 ssg08_trak_count int(10) NOT NULL DEFAULT '0', \
291 ssg08_tag varchar(256) NOT NULL DEFAULT '', \
292 aug int(4) NOT NULL DEFAULT '0', \
293 aug_float decimal(3,2) NOT NULL DEFAULT '0.0', \
294 aug_trak int(1) NOT NULL DEFAULT '0', \
295 aug_trak_count int(10) NOT NULL DEFAULT '0', \
296 aug_tag varchar(256) NOT NULL DEFAULT '', \
297 sg556 int(4) NOT NULL DEFAULT '0', \
298 sg556_float decimal(3,2) NOT NULL DEFAULT '0.0', \
299 sg556_trak int(1) NOT NULL DEFAULT '0', \
300 sg556_trak_count int(10) NOT NULL DEFAULT '0', \
301 sg556_tag varchar(256) NOT NULL DEFAULT '', \
302 scar20 int(4) NOT NULL DEFAULT '0', \
303 scar20_float decimal(3,2) NOT NULL DEFAULT '0.0', \
304 scar20_trak int(1) NOT NULL DEFAULT '0', \
305 scar20_trak_count int(10) NOT NULL DEFAULT '0', ");
306 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
307 scar20_tag varchar(256) NOT NULL DEFAULT '', \
308 g3sg1 int(4) NOT NULL DEFAULT '0', \
309 g3sg1_float decimal(3,2) NOT NULL DEFAULT '0.0', \
310 g3sg1_trak int(1) NOT NULL DEFAULT '0', \
311 g3sg1_trak_count int(10) NOT NULL DEFAULT '0', \
312 g3sg1_tag varchar(256) NOT NULL DEFAULT '', \
313 knife_karambit int(4) NOT NULL DEFAULT '0', \
314 knife_karambit_float decimal(3,2) NOT NULL DEFAULT '0.0', \
315 knife_karambit_trak int(1) NOT NULL DEFAULT '0', \
316 knife_karambit_trak_count int(10) NOT NULL DEFAULT '0', \
317 knife_karambit_tag varchar(256) NOT NULL DEFAULT '', \
318 knife_m9_bayonet int(4) NOT NULL DEFAULT '0', \
319 knife_m9_bayonet_float decimal(3,2) NOT NULL DEFAULT '0.0', \
320 knife_m9_bayonet_trak int(1) NOT NULL DEFAULT '0', \
321 knife_m9_bayonet_trak_count int(10) NOT NULL DEFAULT '0', \
322 knife_m9_bayonet_tag varchar(256) NOT NULL DEFAULT '', \
323 bayonet int(4) NOT NULL DEFAULT '0', \
324 bayonet_float decimal(3,2) NOT NULL DEFAULT '0.0', ");
325 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
326 bayonet_trak int(1) NOT NULL DEFAULT '0', \
327 bayonet_trak_count int(10) NOT NULL DEFAULT '0', \
328 bayonet_tag varchar(256) NOT NULL DEFAULT '', \
329 knife_survival_bowie int(4) NOT NULL DEFAULT '0', \
330 knife_survival_bowie_float decimal(3,2) NOT NULL DEFAULT '0.0', \
331 knife_survival_bowie_trak int(1) NOT NULL DEFAULT '0', \
332 knife_survival_bowie_trak_count int(10) NOT NULL DEFAULT '0', \
333 knife_survival_bowie_tag varchar(256) NOT NULL DEFAULT '', \
334 knife_butterfly int(4) NOT NULL DEFAULT '0', \
335 knife_butterfly_float decimal(3,2) NOT NULL DEFAULT '0.0', \
336 knife_butterfly_trak int(1) NOT NULL DEFAULT '0', \
337 knife_butterfly_trak_count int(10) NOT NULL DEFAULT '0', \
338 knife_butterfly_tag varchar(256) NOT NULL DEFAULT '', \
339 knife_flip int(4) NOT NULL DEFAULT '0', \
340 knife_flip_float decimal(3,2) NOT NULL DEFAULT '0.0', \
341 knife_flip_trak int(1) NOT NULL DEFAULT '0', \
342 knife_flip_trak_count int(10) NOT NULL DEFAULT '0', \
343 knife_flip_tag varchar(256) NOT NULL DEFAULT '', ");
344 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
345 knife_push int(4) NOT NULL DEFAULT '0', \
346 knife_push_float decimal(3,2) NOT NULL DEFAULT '0.0', \
347 knife_push_trak int(1) NOT NULL DEFAULT '0', \
348 knife_push_trak_count int(10) NOT NULL DEFAULT '0', \
349 knife_push_tag varchar(256) NOT NULL DEFAULT '', \
350 knife_tactical int(4) NOT NULL DEFAULT '0', \
351 knife_tactical_float decimal(3,2) NOT NULL DEFAULT '0.0', \
352 knife_tactical_trak int(1) NOT NULL DEFAULT '0', \
353 knife_tactical_trak_count int(10) NOT NULL DEFAULT '0', \
354 knife_tactical_tag varchar(256) NOT NULL DEFAULT '', \
355 knife_falchion int(4) NOT NULL DEFAULT '0', \
356 knife_falchion_float decimal(3,2) NOT NULL DEFAULT '0.0', \
357 knife_falchion_trak int(1) NOT NULL DEFAULT '0', \
358 knife_falchion_trak_count int(10) NOT NULL DEFAULT '0', \
359 knife_falchion_tag varchar(256) NOT NULL DEFAULT '', \
360 knife_gut int(4) NOT NULL DEFAULT '0', \
361 knife_gut_float decimal(3,2) NOT NULL DEFAULT '0.0', \
362 knife_gut_trak int(1) NOT NULL DEFAULT '0', ");
363 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
364 knife_gut_trak_count int(10) NOT NULL DEFAULT '0', \
365 knife_gut_tag varchar(256) NOT NULL DEFAULT '', \
366 knife_ursus int(4) NOT NULL DEFAULT '0', \
367 knife_ursus_float decimal(3,2) NOT NULL DEFAULT '0.0', \
368 knife_ursus_trak int(1) NOT NULL DEFAULT '0', \
369 knife_ursus_trak_count int(10) NOT NULL DEFAULT '0', \
370 knife_ursus_tag varchar(256) NOT NULL DEFAULT '', \
371 knife_gypsy_jackknife int(4) NOT NULL DEFAULT '0', \
372 knife_gypsy_jackknife_float decimal(3,2) NOT NULL DEFAULT '0.0',\
373 knife_gypsy_jackknife_trak int(1) NOT NULL DEFAULT '0', \
374 knife_gypsy_jackknife_trak_count int(10) NOT NULL DEFAULT '0', \
375 knife_gypsy_jackknife_tag varchar(256) NOT NULL DEFAULT '', \
376 knife_stiletto int(4) NOT NULL DEFAULT '0', \
377 knife_stiletto_float decimal(3,2) NOT NULL DEFAULT '0.0', \
378 knife_stiletto_trak int(1) NOT NULL DEFAULT '0', \
379 knife_stiletto_trak_count int(10) NOT NULL DEFAULT '0', \
380 knife_stiletto_tag varchar(256) NOT NULL DEFAULT '', \
381 knife_widowmaker int(4) NOT NULL DEFAULT '0', ");
382 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " \
383 knife_widowmaker_float decimal(3,2) NOT NULL DEFAULT '0.0', \
384 knife_widowmaker_trak int(1) NOT NULL DEFAULT '0', \
385 knife_widowmaker_trak_count int(10) NOT NULL DEFAULT '0', \
386 knife_widowmaker_tag varchar(256) NOT NULL DEFAULT '')");
387
388 db.Driver.GetIdentifier(dbIdentifier, sizeof(dbIdentifier));
389 bool mysql = StrEqual(dbIdentifier, "mysql");
390 if (mysql)
391 {
392 index += FormatEx(createQuery[index], sizeof(createQuery) - index, " ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;");
393 }
394
395 db.Query(T_CreateMainTableCallback, createQuery, mysql, DBPrio_High);
396 }
397}
398
399public void T_CreateMainTableCallback(Database database, DBResultSet results, const char[] error, bool mysql)
400{
401 if (results == null)
402 {
403 LogError("%s Create main table failed! %s", (mysql ? "MySQL" : "SQLite"), error);
404 }
405 else
406 {
407 AddWeaponColumns("knife_ursus");
408 AddWeaponColumns("knife_gypsy_jackknife");
409 AddWeaponColumns("knife_stiletto");
410 AddWeaponColumns("knife_widowmaker");
411
412 char createQuery[512];
413 Format(createQuery, sizeof(createQuery), " \
414 CREATE TABLE %sweapons_timestamps ( \
415 steamid varchar(32) NOT NULL PRIMARY KEY, \
416 last_seen int(11) NOT NULL)", g_TablePrefix);
417
418 if (mysql)
419 {
420 Format(createQuery, sizeof(createQuery), "%s ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;", createQuery);
421 }
422
423 db.Query(T_CreateTimestampTableCallback, createQuery, mysql, DBPrio_High);
424 }
425}
426
427void AddWeaponColumns(const char[] weapon)
428{
429 char query[512];
430
431 SQL_LockDatabase(db);
432
433 Format(query, sizeof(query), "ALTER TABLE %sweapons ADD %s int(4) NOT NULL DEFAULT '0'", g_TablePrefix, weapon);
434 SQL_FastQuery(db, query);
435 Format(query, sizeof(query), "ALTER TABLE %sweapons ADD %s_float decimal(3,2) NOT NULL DEFAULT '0.0'", g_TablePrefix, weapon);
436 SQL_FastQuery(db, query);
437 Format(query, sizeof(query), "ALTER TABLE %sweapons ADD %s_trak int(1) NOT NULL DEFAULT '0'", g_TablePrefix, weapon);
438 SQL_FastQuery(db, query);
439 Format(query, sizeof(query), "ALTER TABLE %sweapons ADD %s_trak_count int(10) NOT NULL DEFAULT '0'", g_TablePrefix, weapon);
440 SQL_FastQuery(db, query);
441 Format(query, sizeof(query), "ALTER TABLE %sweapons ADD %s_tag varchar(256) NOT NULL DEFAULT ''", g_TablePrefix, weapon);
442 SQL_FastQuery(db, query);
443
444 SQL_UnlockDatabase(db);
445}
446
447public void T_CreateTimestampTableCallback(Database database, DBResultSet results, const char[] error, bool mysql)
448{
449 if (results == null)
450 {
451 LogMessage("%s DB connection successful", (mysql ? "MySQL" : "SQLite"));
452 for(int i = 1; i <= MaxClients; i++)
453 {
454 if(IsClientInGame(i))
455 {
456 OnClientPutInServer(i);
457 if(IsClientAuthorized(i))
458 {
459 OnClientPostAdminCheck(i);
460 }
461 }
462 }
463 DeleteInactivePlayerData();
464 }
465 else
466 {
467 char insertQuery[512];
468 Format(insertQuery, sizeof(insertQuery), " \
469 INSERT INTO %sweapons_timestamps \
470 SELECT steamid, %d FROM %sweapons", g_TablePrefix, GetTime(), g_TablePrefix);
471
472 db.Query(T_InsertTimestampsCallback, insertQuery, mysql, DBPrio_High);
473 }
474}
475
476public void T_InsertTimestampsCallback(Database database, DBResultSet results, const char[] error, bool mysql)
477{
478 if (results == null)
479 {
480 LogError("%s Insert timestamps failed! %s", (mysql ? "MySQL" : "SQLite"), error);
481 }
482 else
483 {
484 LogMessage("%s DB connection successful", (mysql ? "MySQL" : "SQLite"));
485 for(int i = 1; i <= MaxClients; i++)
486 {
487 if(IsClientInGame(i))
488 {
489 OnClientPutInServer(i);
490 if(IsClientAuthorized(i))
491 {
492 OnClientPostAdminCheck(i);
493 }
494 }
495 }
496 DeleteInactivePlayerData();
497 }
498}
499
500void DeleteInactivePlayerData()
501{
502 if(g_iGraceInactiveDays > 0)
503 {
504 char query[255];
505 int now = GetTime();
506 FormatEx(query, sizeof(query), "DELETE FROM %sweapons WHERE steamid in (SELECT steamid FROM %sweapons_timestamps WHERE last_seen < %d - (%d * 86400))", g_TablePrefix, g_TablePrefix, now, g_iGraceInactiveDays);
507 DataPack pack = new DataPack();
508 pack.WriteCell(now);
509 pack.WriteString(query);
510 db.Query(T_DeleteInactivePlayerDataCallback, query, pack);
511 }
512}
513
514public void T_DeleteInactivePlayerDataCallback(Database database, DBResultSet results, const char[] error, DataPack pack)
515{
516 pack.Reset();
517 int now = pack.ReadCell();
518 if (results == null)
519 {
520 char buffer[1024];
521 pack.ReadString(buffer, 1024);
522 LogError("Delete Inactive Player Data failed! query: \"%s\" error: \"%s\"", buffer, error);
523 }
524 else
525 {
526 if(now > 0)
527 {
528 char query[255];
529 FormatEx(query, sizeof(query), "DELETE FROM %sweapons_timestamps WHERE last_seen < %d - (%d * 86400)", g_TablePrefix, now, g_iGraceInactiveDays);
530 DataPack newPack = new DataPack();
531 newPack.WriteCell(0);
532 newPack.WriteString(query);
533 db.Query(T_DeleteInactivePlayerDataCallback, query, newPack);
534 }
535 else
536 {
537 LogMessage("Inactive players' data has been deleted");
538 }
539 }
540 CloseHandle(pack);
541}