· 6 years ago · Aug 16, 2019, 04:38 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <sqlx>
4#include <colorchat>
5#include <cstrike>
6#include <fakemeta>
7
8#define PLUGIN "Zombie Baze MYSQL"
9#define VERSION "1.0"
10#define AUTHOR "JocA"
11
12#define TASK_LOAD 412
13#define TASK_MINUTES 777
14#define TASK_REG 99
15
16new Handle: g_SqlTuple
17new g_Error[ 512 ]
18new Handle: SqlConnection
19
20new bool: g_bLoaded[ 33 ]
21
22new g_iPlayerID[ 33 ]
23new g_iPlayerLevels[ 33 ]
24new g_iPlayerXp[ 33 ]
25new g_iPlayerTime[ 33 ]
26
27new g_iRank[ 33 ]
28new g_iCount
29new bool: g_bRankSaw[ 33 ]
30
31new g_iAbadonID[ 33 ]
32new g_iAbadons[ 33 ]
33new bool: g_bAbadons[ 33 ]
34
35new bool: g_changing_map
36
37native zp_double_xp()
38native zp_pusten_zombie()
39
40native zv_get_user_flags()
41
42native zp_get_Playing_count()
43
44public plugin_init()
45{
46 register_plugin( PLUGIN, VERSION, AUTHOR )
47
48 register_clcmd( "say /top15", "show_top15" )
49 register_clcmd( "say /stats", "show_stats" )
50 register_clcmd( "say /rank", "show_stats" )
51
52
53 set_task( 0.1, "mysql_load" )
54
55 register_event( "HLTV", "event_round_start", "a", "1=0", "2=0" )
56
57 register_event( "30", "changeMap", "a" )
58
59 register_clcmd( "amx_map", "show_map" )
60
61 set_task( 5.0, "delete_month" )
62
63 register_forward( FM_ClientUserInfoChanged, "ClientUserInfoChanged" )
64}
65public ClientUserInfoChanged( id )
66{
67 static const name[] = "name"
68 static szOldName[32], szNewName[32]
69 pev(id, pev_netname, szOldName, charsmax(szOldName))
70 if( szOldName[0] )
71 {
72 get_user_info(id, name, szNewName, charsmax(szNewName))
73 if( !equal(szOldName, szNewName) )
74 {
75 // set_user_info(id, name, szOldName)
76 // return FMRES_HANDLED
77 set_task( 0.4, "Load_MySql", id + TASK_LOAD )
78 //client_print( id, print_chat, "PROMENIO NIK u %s", szNewName )
79 }
80 }
81 return FMRES_IGNORED
82}
83public delete_month()
84{
85 new szTemp[ 512 ]
86 formatex( szTemp, charsmax( szTemp ), "INSERT INTO zombie_deleted ( SELECT * FROM zombie_players WHERE last_join < DATE_SUB( NOW(), INTERVAL 30 DAY ) )" )
87 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
88
89 set_task( 2.0, "fix_month" )
90}
91public fix_month()
92{
93 new szTemp[ 512 ]
94 formatex( szTemp, charsmax( szTemp ), "DELETE FROM zombie_players WHERE last_join < DATE_SUB( NOW(), INTERVAL 30 DAY );" )
95 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
96}
97public show_map()
98{
99 g_changing_map = true
100 return PLUGIN_CONTINUE
101}
102public changeMap()
103{
104 g_changing_map = true
105 //client_print( 0, print_chat, "POZVANA PROMENA mape" )
106}
107public event_round_start()
108{
109 remove_task( 888 )
110 remove_task( 567 )
111 set_task( 25.0, "show_time", 888 )
112
113 for( new i; i <= get_maxplayers(); i++ )
114 {
115 if( !is_user_connected( i ) )
116 continue
117
118 g_bRankSaw[ i ] = false
119 }
120
121 set_task( 80.0, "show_random_player", 567 )
122}
123public show_random_player()
124{
125 new players[ 32 ], num
126 get_players( players, num, "chi" )
127
128 if( num < 2 )
129 return
130
131 new random_player = players[ random( num ) ]
132
133 if( random_num( 0, 5 ) == 5 )
134 {
135 new name[ 32 ]
136 get_user_name( random_player, name, charsmax( name ) )
137
138 new hours = g_iPlayerTime[ random_player ] / 60
139 new mins = g_iPlayerTime[ random_player ] % 60
140 new showtime[ 15 ]
141 formatex( showtime, charsmax( showtime ), "%s%dh %dmin", hours > 9 ? "":"0", hours, mins )
142
143 ColorChat( 0, BLUE, "^3[Random Info]^3 %s^1 Level:^3 %d^1 Escapes:^3 %d^1 Abadons:^3 %d^1 VIP:^3 %s^1 Time:^3 %s",
144 name, g_iPlayerLevels[ random_player ], g_iPlayerXp[ random_player ], g_iAbadons[ random_player ], zv_get_user_flags() > 0 ? "Yes":"No", showtime )
145 }
146}
147
148public plugin_end()
149{
150 g_changing_map = true
151 SQL_FreeHandle( g_SqlTuple )
152}
153public show_time()
154{
155 for( new i; i <= get_maxplayers(); i++ )
156 {
157 if( !is_user_connected( i ) || !( cs_get_user_team( i ) == CS_TEAM_CT || cs_get_user_team( i ) == CS_TEAM_T ) )
158 continue
159
160 if( g_iPlayerTime[ i ] == 3000 )
161 {
162 new steam[ 35 ], name[ 32 ], ip[ 15 ]
163 get_user_authid( i, steam, charsmax( steam ) )
164 get_user_name( i, name, charsmax( name ) )
165 get_user_ip( i, ip, charsmax( ip ), 1 )
166
167 ColorChat( 0, RED, "^4[FREE VIP]^3 %s^1 got *FREE VIP* for^4 50h playing!^1 Be like^3 %s^1 !", name, name )
168 ColorChat( i, BLUE, "^4[FREE VIP]^1 Congratulations, you won^3 FREE VIP!^4 Contact head admin for password." )
169 log_to_file( "free_vip_times.log", "%s %s %s", steam, name, ip )
170 }
171 else if( g_iPlayerTime[ i ] > 3000 )
172 {
173 continue
174 }
175 else
176 {
177 new hours = g_iPlayerTime[ i ] / 60
178 new mins = g_iPlayerTime[ i ] % 60
179 new showtime[ 15 ], name[ 32 ]
180 formatex( showtime, charsmax( showtime ), "%dh %dmin", hours, mins )
181 get_user_name( i, name, charsmax( name ) )
182 client_cmd(i, "spk zombie_escape/selected/select.wav");
183 ColorChat( i, BLUE, "^4[FREE VIP]^3 %s^1, your time for free vip access is^4 %s^1 /^4 50h", name, showtime )
184 }
185 }
186}
187public plugin_natives()
188{
189 register_native( "sql_get_user_level", "native_get_user_level", 1 )
190 register_native( "sql_get_user_xp", "native_get_user_xp", 1 )
191 register_native( "sql_get_user_time", "native_get_user_time", 1 )
192
193 register_native( "sql_set_user_level", "native_set_user_level", 1 )
194 register_native( "sql_set_user_xp", "native_set_user_xp", 1 )
195
196 register_native( "sql_set_user_abadons", "native_set_user_abadons", 1 )
197 register_native( "sql_get_user_abadons", "native_get_user_abadons", 1 )
198 register_native( "sql_is_user_abadon", "native_is_user_abadon", 1 )
199}
200public native_set_user_abadons( id, amount )
201{
202 new steamid[ 35 ]
203 get_user_authid( id, steamid, charsmax( steamid ) )
204
205 new szTemp[ 512 ]
206
207 g_iAbadons[ id ] -= amount
208
209 format( szTemp, charsmax( szTemp ), "UPDATE zombie_abadons SET abadons = abadons - %d WHERE steamid='%s'", amount, steamid )
210 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp )
211}
212public show_top15( id )
213{
214 new motd[ 100 ], name[ 32 ];
215 get_user_name( id, name, charsmax( name ) )
216 formatex( motd, charsmax( motd ), "http://cs-plugins.000webhostapp.com/zombienikola/zombie_top15.php" )
217
218 show_motd( id, motd )
219 ColorChat( 0, RED, "^4[Zombie Escape]^3 %s^1 is checking^3 /top15^1...", name )
220 return PLUGIN_HANDLED
221}
222public show_stats( id )
223{
224 if( g_bRankSaw[ id ] )
225 {
226 ColorChat( id, RED, "^4[Zombie Escape]^1 You can only 1 time see your rank per round." )
227 return PLUGIN_HANDLED
228 }
229 new Data[ 1 ]
230 Data[ 0 ] = id
231
232 new szTemp[ 512 ]
233 format( szTemp, charsmax( szTemp ), "SELECT COUNT(*) FROM zombie_players WHERE escapes >= %i", g_iPlayerXp[ id ] )
234
235 SQL_ThreadQuery( g_SqlTuple, "SkillRank_QueryHandler", szTemp, Data, 1 )
236
237 g_bRankSaw[ id ] = true
238
239 return PLUGIN_HANDLED
240}
241
242public SkillRank_QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
243{
244 if(FailState == TQUERY_CONNECT_FAILED)
245 {
246 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
247 }
248 else if(FailState == TQUERY_QUERY_FAILED)
249 {
250 log_amx("Load Query failed. [%d] %s", Errcode, Error)
251 }
252
253 new id
254 id = Data[ 0 ]
255
256 g_iRank[ id ] = SQL_ReadResult( Query, 0 )
257
258 if( g_iRank[ id ] == 0 )
259 {
260 g_iRank[ id ] = 1
261 }
262
263 TotalRows( id )
264
265}
266public TotalRows( id )
267{
268 new Data[ 1 ]
269 Data[ 0 ] = id
270
271 new szTemp[ 128 ]
272 format( szTemp, charsmax( szTemp ), "SELECT COUNT(*) FROM zombie_players" )
273
274 SQL_ThreadQuery( g_SqlTuple, "TotalRows_QueryHandler", szTemp, Data, 1 )
275}
276
277public TotalRows_QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
278{
279 if(FailState == TQUERY_CONNECT_FAILED)
280 {
281 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
282 }
283 else if(FailState == TQUERY_QUERY_FAILED)
284 {
285 log_amx("Load Query failed. [%d] %s", Errcode, Error)
286 }
287 new id
288 id = Data[ 0 ]
289
290 g_iCount = SQL_ReadResult( Query, 0 )
291
292
293 new showtime[ 20 ]
294 new hours = g_iPlayerTime[ id ] / 60
295 new mins = g_iPlayerTime[ id ] % 60
296 formatex( showtime, charsmax( showtime ), "%s%dh %dmin", hours > 9 ? "":"0", hours, mins )
297
298 ColorChat( id, TEAM_COLOR, "^4[Zombie Escape]^1 Your rank is^4 %d^1 of^4 %d^1 with^4 %d Escapes^1 - Time Played:^4 %s",
299 g_iRank[ id ], g_iCount, g_iPlayerXp[ id ], showtime )
300}
301public mysql_load()
302{
303 //g_SqlTuple = SQL_MakeDbTuple("remotemysql.com", "P6nBMetUan", "nVmS4Ks5Wp", "P6nBMetUan" )
304 g_SqlTuple = SQL_MakeDbTuple( "46.101.113.243", "joca", "horse-pickle-radish-1337", "jocadb" )
305
306 new ErrorCode
307 //SQL_SetCharset( g_SqlTuple, "utf8" )
308
309 SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error))
310 if(SqlConnection == Empty_Handle)
311 set_fail_state(g_Error)
312
313
314 new Handle:query;
315 query = SQL_PrepareQuery(SqlConnection,
316 "CREATE TABLE IF NOT EXISTS `zombie_players`( \
317 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, \
318 steamid TEXT NOT NULL, \
319 nickname TEXT NOT NULL, \
320 ip TEXT NOT NULL, \
321 level INT NULL, \
322 escapes INT NULL, \
323 time_played INT NULL, \
324 last_join TEXT NULL \
325 )");
326 if(!SQL_Execute(query) )
327 {
328 SQL_QueryError(query,g_Error,charsmax(g_Error))
329 set_fail_state(g_Error)
330
331 }
332 SQL_FreeHandle(query)
333
334 SQL_FreeHandle(SqlConnection)
335}
336
337public client_putinserver( id )
338{
339 g_iPlayerXp[ id ] = 0
340 g_iPlayerLevels[ id ] = 0
341 g_iPlayerTime[ id ] = 0
342 g_iRank[ id ] = 0
343
344 g_iAbadonID[ id ] = 0
345 g_iAbadons[ id ] = 0
346 g_bAbadons[ id ] = false
347
348 set_task( 0.4, "Load_MySql", id + TASK_LOAD )
349}
350/*public client_disconnect( id )
351{
352 remove_task( id + TASK_LOAD )
353 remove_task( id + TASK_MINUTES )
354 remove_task( id + TASK_REG )
355
356 if( ( cs_get_user_team( id ) == CS_TEAM_T || cs_get_user_team( id ) == CS_TEAM_CT ) && !g_changing_map && !zp_pusten_zombie() && zp_get_Playing_count() > 1 )
357 {
358 sql_set_user_abadon( id )
359 }
360}
361*/
362public Load_MySql( task )
363{
364 new id = task - TASK_LOAD
365
366 if( !is_user_connected( id ) )
367 return PLUGIN_HANDLED
368
369 new szSteamId[35], szTemp[512], name[ 32 ]
370 get_user_authid(id, szSteamId, charsmax(szSteamId))
371 get_user_name( id, name, charsmax( name ) )
372
373 new Data[1]
374 Data[0] = id
375 formatex( szTemp,charsmax(szTemp),"SELECT * FROM zombie_players WHERE steamid = '%s' AND nickname = '%s'", szSteamId, name )
376
377 set_task( 0.3, "check_abadon", id )
378
379 SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
380
381 return PLUGIN_CONTINUE
382}
383public check_abadon( id )
384{
385 if( !is_user_connected( id ) )
386 return PLUGIN_HANDLED
387
388 new szSteamId[ 35 ], szTemp[ 512 ]
389 get_user_authid(id, szSteamId, charsmax(szSteamId))
390
391 new Data[1]
392 Data[0] = id
393 formatex( szTemp,charsmax(szTemp),"SELECT * FROM zombie_abadons WHERE steamid = '%s'", szSteamId )
394 SQL_ThreadQuery( g_SqlTuple,"sql_abadon",szTemp,Data,1)
395
396
397 return PLUGIN_CONTINUE
398}
399public sql_abadon(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
400{
401 if(FailState == TQUERY_CONNECT_FAILED)
402 {
403 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
404 }
405 else if(FailState == TQUERY_QUERY_FAILED)
406 {
407 log_amx("Load Query failed. [%d] %s", Errcode, Error)
408 }
409
410 new id
411 id = Data[ 0 ]
412
413 if( SQL_NumResults(Query) > 0 )
414 {
415 g_iAbadons[ id ] = SQL_ReadResult( Query, 3 )
416 g_bAbadons[ id ] = true
417 g_iAbadonID[ id ] = SQL_ReadResult( Query, 0 )
418 }
419}
420public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
421{
422 if(FailState == TQUERY_CONNECT_FAILED)
423 {
424 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
425 }
426 else if(FailState == TQUERY_QUERY_FAILED)
427 {
428 log_amx("Load Query failed. [%d] %s", Errcode, Error)
429 }
430
431 new id
432 id = Data[0]
433
434
435 new szSteamId[35]
436 get_user_authid(id, szSteamId, charsmax(szSteamId))
437
438 if(SQL_NumResults(Query) < 1)
439 {
440 if ( containi(szSteamId,"PENDING" ) != -1 || containi(szSteamId,"BOT" ) != -1 || containi(szSteamId,"LAN" ) != -1
441 || szSteamId[ 0 ] == EOS )
442 {
443 //server_cmd( "kick #%d ^"Your SteamID was not valid, please retry or contact administrator^"", get_user_userid( id ) )
444
445 return PLUGIN_HANDLED
446 }
447 new g_ip[ 15 ]
448 new name[ 32 ], escName[ 64 ]
449
450 new szTemp[512]
451
452 get_user_name( id, name, charsmax( name ) )
453
454
455
456 //if( strlen( name ) < 3 )
457 //{
458 //server_print( "ne moze to be" )
459 // server_cmd( "kick #%d ^"Your nick is too short. Min. 3 characters", get_user_userid( id ) )
460 // return PLUGIN_HANDLED
461 //}
462
463 SQL_PrepareString( name, name, 63 )
464
465 SQL_QuoteString(Empty_Handle, escName, charsmax(escName), name)
466
467 get_user_ip( id, g_ip, charsmax( g_ip ), 1 )
468
469 static cTime[ 32 ];
470 get_time( "%d-%m-%Y", cTime, charsmax( cTime ) )
471
472 format(szTemp,charsmax(szTemp),"INSERT INTO zombie_players VALUES ( '0','%s', '%s', '%s', '0', '0', '0', NOW() );",szSteamId, escName, g_ip )
473
474 set_task( 7.0, "show_msg_reg", id + TASK_REG )
475
476 SQL_ThreadQuery(g_SqlTuple, "Query_InsertRunnerHandle", szTemp, Data, DataSize);
477
478 g_iPlayerXp[ id ] = 0
479 g_iPlayerLevels[ id ] = 0
480 g_iPlayerTime[ id ] = 0
481 g_iRank[ id ] = 0
482 }
483 else
484 {
485 g_iPlayerID[ id ] = SQL_ReadResult( Query, 0 )
486 g_iPlayerLevels[ id ] = SQL_ReadResult( Query, 4 )
487 g_iPlayerXp[ id ] = SQL_ReadResult( Query, 5 )
488 g_iPlayerTime[ id ] = SQL_ReadResult( Query, 6 )
489
490 new szTemp[ 512 ]
491 format( szTemp, charsmax( szTemp ), "UPDATE zombie_players SET last_join = NOW() WHERE id=%d", g_iPlayerID[ id ] )
492 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp )
493
494 set_task( 7.0, "show_msg_exists", id + TASK_REG )
495 }
496 set_task( 60.0, "add_min", id + TASK_MINUTES, .flags="b" )
497 g_bLoaded[ id ] = true
498
499 return PLUGIN_HANDLED
500}
501public show_msg_reg( task )
502{
503 new id = task - TASK_REG
504 new steamid[ 35 ], name[ 32 ]
505 get_user_authid( id, steamid, charsmax( steamid ) )
506 get_user_name( id, name, charsmax( name ) )
507
508 ColorChat( id, BLUE, "^4[DATABASE]^1 Account^4 %s %s^1 is created.", steamid, name )
509}
510public show_msg_exists( task )
511{
512 new id = task - TASK_REG
513 new steamid[ 35 ], name[ 32 ]
514 get_user_authid( id, steamid, charsmax( steamid ) )
515 get_user_name( id, name, charsmax( name ) )
516
517 if( g_iAbadons[ id ] > 0 )
518 {
519 ColorChat( id, BLUE, "^4[DATABASE]^1 Looks like you have^4 %d abandon^1 behind you > clear them with escapes to continue leveling.", g_iAbadons[ id ] )
520 return PLUGIN_HANDLED
521 }
522 new hours = g_iPlayerTime[ id ] / 60
523 new mins = g_iPlayerTime[ id ] % 60
524 new showtime[ 15 ]
525 formatex( showtime, charsmax( showtime ), "%s%dh %dmin", hours > 9 ? "":"0", hours, mins )
526
527 ColorChat( id, BLUE, "^4[DATABASE]^1 Account^4 %s %s^1 loaded! Time played:^4 %s^1 Players:", steamid, name, showtime )
528 return PLUGIN_CONTINUE
529}
530public add_min( task )
531{
532 new id = task - TASK_MINUTES
533
534 if( !( cs_get_user_team( id ) == CS_TEAM_CT || cs_get_user_team( id ) == CS_TEAM_T ) )
535 return
536
537 new szTemp[ 512 ]
538
539 g_iPlayerTime[ id ]++
540 format( szTemp, charsmax( szTemp ), "UPDATE zombie_players SET time_played = time_played + 1 WHERE id=%d", g_iPlayerID[ id ] )
541 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp )
542}
543sql_set_user_abadon( id )
544{
545 new szTemp[ 512 ]
546 new name[ 64 ], steamid[ 35 ]
547 get_user_authid( id, steamid, charsmax( steamid ) )
548 get_user_name( id, name, charsmax( name ) )
549
550 new Data[ 1 ]
551 Data[ 0 ] = id
552
553 SQL_PrepareString( name, name, 63 )
554
555 if( g_iAbadonID[ id ] == 0 )
556 {
557 format(szTemp,charsmax(szTemp),"INSERT INTO zombie_abadons VALUES ( '0','%s', '%s', '1' );", name, steamid )
558 SQL_ThreadQuery(g_SqlTuple, "Query_InsertAbadonHandle", szTemp, Data, 1);
559 }
560 else
561 {
562 format( szTemp, charsmax( szTemp ), "UPDATE zombie_abadons SET abadons=abadons+1 WHERE steamid='%s'", steamid )
563 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp )
564 }
565 ColorChat( 0, RED, "^4[Abadons]^1 Disconnecting game as first zombie is forbidden ^4%s ^1- total abadons: ^4%d", name, sql_set_user_abadon( id ) )
566}
567public Query_InsertAbadonHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
568{
569 if(FailState == TQUERY_CONNECT_FAILED)
570 {
571 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
572 }
573 else if(FailState == TQUERY_QUERY_FAILED)
574 {
575 log_amx("Load Query failed. [%d] %s", Errcode, Error)
576 }
577
578 new id = Data[0];
579 if(!is_user_connected(id)) return;
580
581 g_iAbadonID[ id ] = SQL_GetInsertId( Query )
582 g_bAbadons[ id ] = true
583 g_iAbadons[ id ] = 1
584}
585
586public Query_InsertRunnerHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
587{
588 if(FailState == TQUERY_CONNECT_FAILED)
589 {
590 log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
591 }
592 else if(FailState == TQUERY_QUERY_FAILED)
593 {
594 log_amx("Load Query failed. [%d] %s", Errcode, Error)
595 }
596
597 new id = Data[0];
598 if(!is_user_connected(id)) return;
599
600 g_iPlayerID[ id ] = SQL_GetInsertId( Query )
601}
602stock SQL_PrepareString(const source[], dest[], len)
603{
604 copy(dest, len, source);
605 replace_all(dest,len,"\\","\\\\");
606 replace_all(dest,len,"\0","\\0");
607 replace_all(dest,len,"\n","\\n");
608 replace_all(dest,len,"\r","\\r");
609 replace_all(dest,len,"\x1a","\Z");
610 replace_all(dest,len,"'","\'");
611 replace_all(dest,len,"^"","\^"");
612}
613public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
614{
615 SQL_FreeHandle(Query)
616
617 return PLUGIN_HANDLED
618}
619public native_get_user_level( id )
620{
621 return g_iPlayerLevels[ id ]
622}
623public native_get_user_xp( id )
624{
625 return g_iPlayerXp[ id ]
626}
627public native_get_user_time( id )
628{
629 return g_iPlayerTime[ id ]
630}
631public native_set_user_level( id )
632{
633 new szTemp[ 512 ]
634
635 g_iPlayerLevels[ id ]++
636 format( szTemp, charsmax( szTemp ), "UPDATE zombie_players SET level = level + 1 WHERE id=%d", g_iPlayerID[ id ] )
637 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp )
638}
639public native_set_user_xp( id )
640{
641 new szTemp[ 512 ]
642
643 if( zp_double_xp() )
644 {
645 g_iPlayerXp[ id ] += 2
646 format( szTemp, charsmax( szTemp ), "UPDATE zombie_players SET escapes=escapes + 2 WHERE id=%d", g_iPlayerID[ id ] )
647 }
648 else
649 {
650 g_iPlayerXp[ id ]++
651 format( szTemp, charsmax( szTemp ), "UPDATE zombie_players SET escapes=escapes + 1 WHERE id=%d", g_iPlayerID[ id ] )
652 }
653 SQL_ThreadQuery( g_SqlTuple,"IgnoreHandle",szTemp )
654}
655public native_get_user_abadons( id )
656{
657 if( g_iAbadons[ id ] > 0 )
658 return g_iAbadons[ id ]
659
660 return 0
661}
662public native_is_user_abadon( id )
663{
664 return g_bAbadons[ id ]
665}