· 8 years ago · May 04, 2018, 05:24 PM
1#include < amxmodx >
2#include < amxmisc >
3#include < cstrike >
4#include < csx >
5#include < hamsandwich >
6#include < sqlx >
7
8#define PLUGIN "Basic SkillPoints Special Edition (SQL)"
9#define VERSION "2.0.2"
10#define AUTHOR "guipatinador"
11
12#define SQL_TABLE "skillpoints_v2"
13#define PREFIX "[SkillPoints]"
14
15#define MAX_PLAYERS 32
16#define ADMIN ADMIN_RCON
17#define CONNECT_TASK 1024
18
19#define MAX_CLASSES 5
20#define MAX_LEVELS 5
21#define MAX_PONTUATION 10000 // max skillpoints per player
22
23#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
24
25new const CLASSES[ MAX_CLASSES ][ ] = {
26 "BOT",
27 "NOOB",
28 "GAMER",
29 "LEET",
30 "TOP"
31}
32
33new const LEVELS[ MAX_LEVELS ] = {
34 500,
35 1200,
36 1800,
37 2500,
38 100000 /* high value (not reachable) */
39}
40
41new g_iK
42new const g_ChatAdvertise[ ][ ] = {
43 "!g%s!n Write!t /myskill!n to see your SkillPoints",
44 "!g%s!n Write!t /restartskill!n to restart your SkillPoints and level",
45 "!g%s!n Write!t /rankskill!n to see your rank",
46 "!g%s!n Write!t /topskill!n to see the top SkillPointers"
47}
48
49new g_iMaxPlayers
50new g_szAuthID[ MAX_PLAYERS + 1 ][ 35 ]
51new g_szName[ MAX_PLAYERS + 1 ][ 32 ]
52
53new Handle:g_SqlTuple
54new g_iCount
55new g_iRank[ MAX_PLAYERS + 1 ]
56new g_iCurrentKills[ MAX_PLAYERS + 1 ]
57new g_szMotd[ 1536 ]
58
59new g_pcvarHost
60new g_pcvaruUser
61new g_pcvarPass
62new g_pcvarDB
63
64new g_iPoints[ MAX_PLAYERS + 1 ]
65new g_iLevels[ MAX_PLAYERS + 1 ]
66new g_iClasses[ MAX_PLAYERS + 1 ]
67
68new g_iKills[ MAX_PLAYERS + 1 ]
69new g_iDeaths[ MAX_PLAYERS + 1 ]
70new g_iHeadShots[ MAX_PLAYERS + 1 ]
71new g_iKnifeKills[ MAX_PLAYERS + 1 ]
72new g_iKnifeDeaths[ MAX_PLAYERS + 1 ]
73new g_iGrenadeKills[ MAX_PLAYERS + 1 ]
74new g_iGrenadeDeaths[ MAX_PLAYERS + 1 ]
75new g_iBombExplosions[ MAX_PLAYERS + 1 ]
76new g_iDefusedBombs[ MAX_PLAYERS + 1 ]
77new g_iWonRounds[ MAX_PLAYERS + 1 ]
78
79new g_TimeBetweenAds
80
81new bool:g_bRoundEnded
82
83new g_iAdsOnChat
84new g_iEnableAnnounceOnChat
85new g_iEnableShowSkillPointsOnNick
86new g_iHideChangeNickNotification
87new g_iEnableSkillPointsCmd
88new g_iEnableSkillPointsRestart
89new g_iEnableSkillPointsCmdRank
90new g_iEnableSkillPointsTop15
91new g_iHideCmds
92new g_iEnableWonPointsHour
93new g_iWonPointsHour
94new g_iLostPointsTK
95new g_iLostPointsSuicide
96new g_iWonPointsKill
97new g_iLostPointsDeath
98new g_iWonPointsHeadshot
99new g_iLostPointsHeadshot
100new g_iWonPointsKnife
101new g_iLostPointsKnife
102new g_iWonPointsGrenade
103new g_iLostPointsGrenade
104new g_iWonPointsTerrorists
105new g_iWonPointsCounterTerrorists
106new g_iLostPointsTerrorists
107new g_iLostPointsCounterTerrorists
108new g_iWonPointsPlanter
109new g_iWonPointsPlanterExplode
110new g_iWonPointsDefuser
111new g_iWonPoints4k
112new g_iWonPoints5k
113new g_iNegativePoints
114
115public plugin_init( )
116{
117 register_plugin( PLUGIN, VERSION, AUTHOR )
118
119 register_clcmd( "say", "ClCmd_Say" )
120 register_clcmd( "say_team", "ClCmd_Say" )
121
122 register_concmd( "bps_give", "CmdGivePoints", ADMIN, "<target> <skillpoints to give>" )
123 register_concmd( "bps_take", "CmdTakePoints", ADMIN, "<target> <skillpoints to take>" )
124
125 RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 )
126
127 register_message( get_user_msgid( "SayText" ), "MessageSayText" )
128
129 register_event( "SendAudio", "TerroristsWin", "a", "2&%!MRAD_terwin" )
130 register_event( "SendAudio", "CounterTerroristsWin", "a", "2&%!MRAD_ctwin" )
131
132 register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" )
133 register_logevent( "EventRoundEnd", 2, "1=Round_End" )
134
135 g_iMaxPlayers = get_maxplayers( )
136
137 RegisterCvars( )
138 SqlInit( )
139}
140
141public plugin_natives( )
142{
143 register_library( "skillpoints" )
144
145 register_native( "skillpoints", "_skillpoints" )
146}
147
148
149public _skillpoints( plugin, params )
150{
151 if( params != 1 )
152 {
153 return 0
154 }
155
156 new id = get_param( 1 )
157 if( !id )
158 {
159 return 0
160 }
161
162 return g_iPoints[ id ]
163}
164
165public RegisterCvars( )
166{
167 g_iAdsOnChat = register_cvar( "bps_ads", "1" )
168 g_TimeBetweenAds = register_cvar( "bps_time_between_ads", "300.0" )
169 g_iEnableAnnounceOnChat = register_cvar( "bps_announce_on_chat", "1" )
170 g_iEnableShowSkillPointsOnNick = register_cvar( "bps_skillpoints_on_nick", "1" )
171 g_iHideChangeNickNotification = register_cvar( "bps_hide_change_nick_notification", "1" )
172 g_iEnableSkillPointsCmd = register_cvar( "bps_skillpoints_cmd", "1" )
173 g_iEnableSkillPointsRestart = register_cvar( "bps_skillpoints_cmd_restart", "1" )
174 g_iEnableSkillPointsCmdRank = register_cvar( "bps_skillpoints_cmd_rank", "1" )
175 g_iEnableSkillPointsTop15 = register_cvar( "bps_skillpoints_cmd_top15", "1" )
176 g_iHideCmds = register_cvar( "bps_hide_cmd", "0" )
177 g_iEnableWonPointsHour = register_cvar( "bps_enable_win_per_hour", "1" )
178 g_iWonPointsHour = register_cvar( "bps_won_points_hour", "5" )
179 g_iLostPointsTK = register_cvar( "bps_lost_points_tk", "5" )
180 g_iLostPointsSuicide = register_cvar( "bps_lost_points_suicide", "1" )
181 g_iWonPointsKill = register_cvar( "bps_won_points_kill", "1" )
182 g_iLostPointsDeath = register_cvar( "bps_lost_points_kill", "1" )
183 g_iWonPointsHeadshot = register_cvar( "bps_won_points_headshot", "2" )
184 g_iLostPointsHeadshot = register_cvar( "bps_lost_points_headshot", "2" )
185 g_iWonPointsKnife = register_cvar( "bps_won_points_knife", "3" )
186 g_iLostPointsKnife = register_cvar( "bps_lost_points_knife", "3" )
187 g_iWonPointsGrenade = register_cvar( "bps_won_points_grenade", "3" )
188 g_iLostPointsGrenade = register_cvar( "bps_lost_points_grenade", "3" )
189 g_iWonPointsTerrorists = register_cvar( "bps_won_points_ts", "1" )
190 g_iWonPointsCounterTerrorists = register_cvar( "bps_won_points_cts", "1" )
191 g_iLostPointsTerrorists = register_cvar( "bps_lost_points_ts", "1" )
192 g_iLostPointsCounterTerrorists = register_cvar( "bps_lost_points_cts", "1" )
193 g_iWonPointsPlanter = register_cvar( "bps_won_points_planter", "1" )
194 g_iWonPointsPlanterExplode = register_cvar( "bps_won_points_planter_explode", "2" )
195 g_iWonPointsDefuser = register_cvar( "bps_won_points_defuser", "3" )
196 g_iWonPoints4k = register_cvar( "bps_won_points_4k", "4" )
197 g_iWonPoints5k = register_cvar( "bps_won_points_5k", "5" )
198 g_iNegativePoints = register_cvar( "bps_negative_points", "0" )
199
200 g_pcvarHost = register_cvar( "bps_sql_host", "", FCVAR_PROTECTED )
201 g_pcvaruUser = register_cvar( "bps_sql_user", "", FCVAR_PROTECTED )
202 g_pcvarPass = register_cvar( "bps_sql_pass", "", FCVAR_PROTECTED )
203 g_pcvarDB = register_cvar( "bps_sql_db", "", FCVAR_PROTECTED )
204
205 if( get_pcvar_num( g_iAdsOnChat ) )
206 {
207 set_task( get_pcvar_float( g_TimeBetweenAds ), "ChatAdvertisements", _, _, _, "b" )
208 }
209}
210
211public SqlInit( )
212{
213 new szHost[ 32 ]
214 new szUser[ 32 ]
215 new szPass[ 32 ]
216 new szDB[ 32 ]
217
218 get_pcvar_string( g_pcvarHost, szHost, charsmax( szHost ) )
219 get_pcvar_string( g_pcvaruUser, szUser, charsmax( szUser ) )
220 get_pcvar_string( g_pcvarPass, szPass, charsmax( szPass ) )
221 get_pcvar_string( g_pcvarDB, szDB, charsmax( szDB ) )
222
223 g_SqlTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB )
224
225 new g_Error[ 512 ]
226 new ErrorCode
227 new Handle:SqlConnection = SQL_Connect( g_SqlTuple, ErrorCode, g_Error, charsmax( g_Error ) )
228
229 if( SqlConnection == Empty_Handle )
230 {
231 set_fail_state( g_Error )
232 }
233
234 new Handle:Queries
235 Queries = SQL_PrepareQuery( SqlConnection,
236 "CREATE TABLE IF NOT EXISTS %s \
237 ( authid VARCHAR( 35 ) PRIMARY KEY,\
238 nick VARCHAR( 32 ),\
239 skillpoints INT( 7 ),\
240 level INT( 2 ),\
241 kills INT( 7 ),\
242 deaths INT( 7 ),\
243 headshots INT( 7 ),\
244 knife_kills INT( 7 ),\
245 knife_deaths INT( 7 ),\
246 grenade_kills INT( 7 ),\
247 grenade_deaths INT( 7 ),\
248 bomb_explosions INT( 7 ),\
249 defused_bombs INT( 7 ),\
250 own_rounds INT( 7 ) )",
251 SQL_TABLE )
252
253 if( !SQL_Execute( Queries ) )
254 {
255 SQL_QueryError( Queries, g_Error, charsmax( g_Error ) )
256 set_fail_state( g_Error )
257 }
258
259 SQL_FreeHandle( Queries )
260 SQL_FreeHandle( SqlConnection )
261
262 MakeTop15( )
263}
264
265public plugin_end( )
266{
267 SQL_FreeHandle( g_SqlTuple )
268}
269
270public client_authorized( id )
271{
272 set_task( 4.0, "Delayed_client_authorized", id + CONNECT_TASK )
273}
274
275public Delayed_client_authorized( id )
276{
277 id -= CONNECT_TASK
278
279 get_user_authid( id , g_szAuthID[ id ], charsmax( g_szAuthID[ ] ) )
280 get_user_info( id, "name", g_szName[ id ], charsmax( g_szName[ ] ) )
281
282 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "'", "*" )
283 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "^"", "*" )
284 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "`", "*" )
285 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "´", "*" )
286
287 g_iPoints[ id ] = 0
288 g_iLevels[ id ] = 0
289 g_iClasses[ id ] = 0
290 g_iCurrentKills[ id ] = 0
291
292 g_iKills[ id ] = 0
293 g_iDeaths[ id ] = 0
294 g_iHeadShots[ id ] = 0
295 g_iKnifeKills[ id ] = 0
296 g_iKnifeDeaths[ id ] = 0
297 g_iGrenadeKills[ id ] = 0
298 g_iGrenadeDeaths[ id ] = 0
299 g_iBombExplosions[ id ] = 0
300 g_iDefusedBombs[ id ] = 0
301 g_iWonRounds[ id ] = 0
302
303 LoadPoints( id )
304
305 if( get_pcvar_num( g_iEnableWonPointsHour ) && get_pcvar_num( g_iWonPointsHour ) )
306 {
307 set_task( 3600.0, "GiveSkillPointsHour", id, _, _, "b" )
308 }
309}
310
311public client_infochanged( id )
312{
313 if( is_user_connected( id ) && !task_exists( id + CONNECT_TASK ) )
314 {
315 new szNewName[ 32 ]
316 get_user_info( id, "name", szNewName, charsmax( szNewName ) )
317
318 new iLen = strlen( szNewName )
319
320 new iPos = iLen - 1
321
322 if( szNewName[ iPos ] == '>' )
323 {
324 new i
325 for( i = 1; i < 7; i++ )
326 {
327 if( szNewName[ iPos - i ] == '<' )
328 {
329 iLen = iPos - i
330 szNewName[ iLen ] = EOS
331 break
332 }
333 }
334 }
335
336 trim( szNewName )
337
338 if( !equal( g_szName[ id ], szNewName ) )
339 {
340 copy( g_szName[ id ], charsmax( g_szName[ ] ), szNewName )
341
342 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "'", "*" )
343 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "^"", "*" )
344 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "`", "*" )
345 replace_all( g_szName[ id ], charsmax( g_szName[ ] ), "´", "*" )
346 }
347 }
348}
349
350public client_disconnect( id )
351{
352 if( task_exists( id ) )
353 {
354 remove_task( id )
355 }
356
357 if( task_exists( id + CONNECT_TASK ) )
358 {
359 remove_task( id + CONNECT_TASK )
360 }
361
362 CheckLevelAndSave( id )
363}
364
365public ClCmd_Say( id )
366{
367 new szCmd[ 12 ]
368 read_argv( 1, szCmd, charsmax( szCmd ) )
369
370 if( equali( szCmd[ 1 ], "myskill" ) )
371 {
372 GetSkillPoints( id )
373 }
374
375 else if( equali( szCmd[ 1 ], "restartskill" ) )
376 {
377 RestartSkillPoints( id )
378 }
379
380 else if( equali( szCmd[ 1 ], "rankskill" ) )
381 {
382 SkillRank( id )
383 }
384
385 else if( equali( szCmd[ 1 ], "topskill" ) )
386 {
387 TopSkill( id )
388 }
389}
390
391public GiveSkillPointsHour( id )
392{
393 g_iPoints[ id ] += get_pcvar_num( g_iWonPointsHour )
394
395 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
396 {
397 ClientPrintColor( id, "!g%s!n You earned!t %i!n point%s for playing more one hour", PREFIX, get_pcvar_num( g_iWonPointsHour ), get_pcvar_num( g_iWonPointsHour ) > 1 ? "s" : "" )
398 }
399}
400
401public client_death( iKiller, iVictim, iWpnIndex, iHitPlace, iTK )
402{
403 if( !IsPlayer( iKiller ) || !IsPlayer( iVictim ) )
404 {
405 return PLUGIN_CONTINUE
406 }
407
408 if( iTK )
409 {
410 g_iPoints[ iKiller ] -= get_pcvar_num( g_iLostPointsTK )
411
412 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsTK ) )
413 {
414 ClientPrintColor( iKiller, "!g%s!n You have lost!t %i!n point%s by killing a teammate", PREFIX, get_pcvar_num( g_iLostPointsTK ), get_pcvar_num( g_iLostPointsTK ) > 1 ? "s" : "" )
415 }
416
417 return PLUGIN_CONTINUE
418 }
419
420 if( iKiller == iVictim )
421 {
422 g_iPoints[ iKiller ] -= get_pcvar_num( g_iLostPointsSuicide )
423
424 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsSuicide ) )
425 {
426 ClientPrintColor( iKiller, "!g%s!n You have lost!t %i!n point%s for committing suicide", PREFIX, get_pcvar_num( g_iLostPointsSuicide ), get_pcvar_num( g_iLostPointsSuicide ) > 1 ? "s" : "" )
427 }
428
429 g_iDeaths[ iKiller ]++
430
431 return PLUGIN_CONTINUE
432 }
433
434 g_iCurrentKills[ iKiller ]++
435 g_iKills[ iKiller ]++
436
437 g_iDeaths[ iVictim ]++
438
439 if( iWpnIndex == CSW_HEGRENADE )
440 {
441 g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsGrenade )
442 g_iGrenadeKills[ iKiller]++
443
444 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsGrenade ) )
445 {
446 ClientPrintColor( iKiller, "!g%s!n You earned!t %i!n point%s by killing %s with a grenade", PREFIX, get_pcvar_num( g_iWonPointsGrenade ), get_pcvar_num( g_iWonPointsGrenade ) > 1 ? "s" : "" ,g_szName[ iVictim ] )
447 }
448
449 g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsGrenade )
450 g_iGrenadeDeaths[ iVictim ]++
451
452 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsGrenade ) )
453 {
454 ClientPrintColor( iVictim, "!g%s!n You have lost!t %i!n point%s for dying with a grenade", PREFIX, get_pcvar_num( g_iLostPointsGrenade ), get_pcvar_num( g_iLostPointsGrenade ) > 1 ? "s" : "" )
455 }
456
457 return PLUGIN_CONTINUE
458 }
459
460 if( iWpnIndex == CSW_KNIFE )
461 {
462 g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsKnife )
463 g_iKnifeKills[ iKiller ]++
464
465 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsKnife ) )
466 {
467 ClientPrintColor( iKiller, "!g%s!n You earned!t %i!n point%s by killing %s with knife", PREFIX, get_pcvar_num( g_iWonPointsKnife ), get_pcvar_num( g_iWonPointsKnife ) > 1 ? "s" : "" ,g_szName[ iVictim ] )
468 }
469
470 g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsKnife )
471 g_iKnifeDeaths[ iVictim ]++
472
473 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsKnife ) )
474 {
475 ClientPrintColor( iVictim, "!g%s!n You have lost!t %i!n point%s for dying with knife", PREFIX, get_pcvar_num( g_iLostPointsKnife ), get_pcvar_num( g_iLostPointsKnife ) > 1 ? "s" : "" )
476 }
477
478 return PLUGIN_CONTINUE
479 }
480
481 if( iHitPlace == HIT_HEAD )
482 {
483 g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsHeadshot )
484 g_iHeadShots[ iKiller ]++
485
486 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsHeadshot ) )
487 {
488 ClientPrintColor( iKiller, "!g%s!n You earned!t %i!n point%s by killing %s with a headshot", PREFIX, get_pcvar_num( g_iWonPointsHeadshot ), get_pcvar_num( g_iWonPointsHeadshot ) > 1 ? "s" : "" ,g_szName[ iVictim ] )
489 }
490
491 g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsHeadshot )
492
493 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsHeadshot ) )
494 {
495 ClientPrintColor( iVictim, "!g%s!n You have lost!t %i!n point%s for dying with a headshot", PREFIX, get_pcvar_num( g_iLostPointsHeadshot ), get_pcvar_num( g_iLostPointsHeadshot ) > 1 ? "s" : "" )
496 }
497
498 return PLUGIN_CONTINUE
499 }
500
501 g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsKill )
502
503 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsKill ) )
504 {
505 ClientPrintColor( iKiller, "!g%s!n You earned!t %i!n point%s by killing %s", PREFIX, get_pcvar_num( g_iWonPointsKill ), get_pcvar_num( g_iWonPointsKill ) > 1 ? "s" : "", g_szName[ iVictim ] )
506 }
507
508 g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsDeath )
509
510 if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsDeath ) )
511 {
512 ClientPrintColor( iVictim, "!g%s!n You have lost!t %i!n point%s for dying", PREFIX, get_pcvar_num( g_iLostPointsDeath ), get_pcvar_num( g_iLostPointsDeath ) > 1 ? "s" : "" )
513 }
514
515 return PLUGIN_CONTINUE
516}
517
518public TerroristsWin( )
519{
520 if( g_bRoundEnded )
521 {
522 return PLUGIN_CONTINUE
523 }
524
525 new Players[ MAX_PLAYERS ]
526 new iNum
527 new i
528
529 get_players( Players, iNum, "ch" )
530
531 for( --iNum; iNum >= 0; iNum-- )
532 {
533 i = Players[ iNum ]
534
535 switch( cs_get_user_team( i ) )
536 {
537 case( CS_TEAM_T ):
538 {
539 if( get_pcvar_num( g_iWonPointsTerrorists ) )
540 {
541 g_iPoints[ i ] += get_pcvar_num( g_iWonPointsTerrorists )
542 g_iWonRounds[ i ]++
543
544 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
545 {
546 ClientPrintColor( i, "!g%s!n Your team!t (T)!n have won!t %i!n point%s for winning the round", PREFIX, get_pcvar_num( g_iWonPointsTerrorists ), get_pcvar_num( g_iWonPointsTerrorists ) > 1 ? "s" : "" )
547 }
548 }
549 }
550
551 case( CS_TEAM_CT ):
552 {
553 if( get_pcvar_num( g_iLostPointsCounterTerrorists ) )
554 {
555 g_iPoints[ i ] -= get_pcvar_num( g_iLostPointsCounterTerrorists )
556
557 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
558 {
559 ClientPrintColor( i, "!g%s!n Your team!t (CT)!n have lost!t %i!n point%s for losing the round", PREFIX, get_pcvar_num( g_iLostPointsCounterTerrorists ), get_pcvar_num( g_iLostPointsCounterTerrorists ) > 1 ? "s" : "" )
560 }
561 }
562 }
563 }
564 }
565
566 g_bRoundEnded = true
567
568 return PLUGIN_CONTINUE
569}
570
571public CounterTerroristsWin( )
572{
573 if( g_bRoundEnded )
574 {
575 return PLUGIN_CONTINUE
576 }
577
578 new Players[ MAX_PLAYERS ]
579 new iNum
580 new i
581
582 get_players( Players, iNum, "ch" )
583
584 for( --iNum; iNum >= 0; iNum-- )
585 {
586 i = Players[ iNum ]
587
588 switch( cs_get_user_team( i ) )
589 {
590 case( CS_TEAM_T ):
591 {
592 if( get_pcvar_num( g_iLostPointsTerrorists ) )
593 {
594 g_iPoints[ i ] -= get_pcvar_num( g_iLostPointsTerrorists )
595
596 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
597 {
598 ClientPrintColor( i, "!g%s!n Your team!t (T)!n have lost!t %i!n point%s for losing the round", PREFIX, get_pcvar_num( g_iLostPointsTerrorists ), get_pcvar_num( g_iLostPointsTerrorists ) > 1 ? "s" : "" )
599 }
600 }
601 }
602
603 case( CS_TEAM_CT ):
604 {
605 if( get_pcvar_num( g_iWonPointsCounterTerrorists ) )
606 {
607 g_iPoints[ i ] += get_pcvar_num( g_iWonPointsCounterTerrorists )
608 g_iWonRounds[ i ]++
609
610 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
611 {
612 ClientPrintColor( i, "!g%s!n Your team!t (CT)!n have won!t %i!n point%s for winning the round", PREFIX, get_pcvar_num( g_iWonPointsCounterTerrorists ), get_pcvar_num( g_iWonPointsCounterTerrorists ) > 1 ? "s" : "" )
613 }
614 }
615 }
616 }
617 }
618
619 g_bRoundEnded = true
620
621 return PLUGIN_CONTINUE
622}
623
624public bomb_planted( planter )
625{
626 if( get_pcvar_num( g_iWonPointsPlanter ) )
627 {
628 g_iPoints[ planter ] += get_pcvar_num( g_iWonPointsPlanter )
629
630 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
631 {
632 ClientPrintColor( planter, "!g%s!n You earned!t %i!n point%s for planting the bomb", PREFIX, get_pcvar_num( g_iWonPointsPlanter ), get_pcvar_num( g_iWonPointsPlanter ) > 1 ? "s" : "" )
633 }
634 }
635}
636
637public bomb_explode( planter, defuser )
638{
639 if( get_pcvar_num( g_iWonPointsPlanterExplode ) )
640 {
641 g_iPoints[ planter ] += get_pcvar_num( g_iWonPointsPlanterExplode )
642 g_iBombExplosions[ planter ]++
643
644 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
645 {
646 ClientPrintColor( planter, "!g%s!n You earned!t %i!n point%s with the bomb explosion", PREFIX, get_pcvar_num( g_iWonPointsPlanterExplode ), get_pcvar_num( g_iWonPointsPlanterExplode ) > 1 ? "s" : "" )
647 }
648 }
649}
650
651public bomb_defused( defuser )
652{
653 if( get_pcvar_num( g_iWonPointsDefuser ) )
654 {
655 g_iPoints[ defuser ] += get_pcvar_num( g_iWonPointsDefuser )
656 g_iDefusedBombs[ defuser ]++
657
658 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
659 {
660 ClientPrintColor( defuser, "!g%s!n You earned!t %i!n point%s for disarming the bomb", PREFIX, get_pcvar_num( g_iWonPointsDefuser ), get_pcvar_num( g_iWonPointsDefuser ) > 1 ? "s" : "" )
661 }
662 }
663}
664
665public EventNewRound( )
666{
667 g_bRoundEnded = false
668
669 MakeTop15( )
670}
671
672public EventRoundEnd( )
673{
674 set_task( 0.5, "SavePointsAtRoundEnd" )
675}
676
677public SavePointsAtRoundEnd( )
678{
679 new Players[ MAX_PLAYERS ]
680 new iNum
681 new i
682
683 get_players( Players, iNum, "ch" )
684
685 for( --iNum; iNum >= 0; iNum-- )
686 {
687 i = Players[ iNum ]
688
689 if( g_iCurrentKills[ i ] == 4 && get_pcvar_num( g_iWonPoints4k ) )
690 {
691 g_iPoints[ i ] += get_pcvar_num( g_iWonPoints4k )
692
693 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
694 {
695 ClientPrintColor( i, "!g%s!n You earned!t %i!n point%s for killing 4 in a round", PREFIX, get_pcvar_num( g_iWonPoints4k ), get_pcvar_num( g_iWonPoints4k ) > 1 ? "s" : "" )
696 }
697 }
698
699 if( g_iCurrentKills[ i ] >= 5 && get_pcvar_num( g_iWonPoints5k ) )
700 {
701 g_iPoints[ i ] += get_pcvar_num( g_iWonPoints5k )
702
703 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
704 {
705 ClientPrintColor( i, "!g%s!n You earned!t %i!n point%s for killing 5 in a round", PREFIX, get_pcvar_num( g_iWonPoints5k ), get_pcvar_num( g_iWonPoints5k ) > 1 ? "s" : "" )
706 }
707 }
708
709 CheckLevelAndSave( i )
710 }
711}
712
713public CheckLevelAndSave( id )
714{
715 if( !get_pcvar_num( g_iNegativePoints) )
716 {
717 if( g_iPoints[ id ] < 0 )
718 {
719 g_iPoints[ id ] = 0
720 }
721
722 if( g_iLevels[ id ] < 0 )
723 {
724 g_iLevels[ id ] = 0
725 }
726 }
727
728 while( g_iPoints[ id ] >= LEVELS[ g_iLevels[ id ] ] )
729 {
730 g_iLevels[ id ] += 1
731 g_iClasses[ id ] += 1
732
733 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
734 {
735 ClientPrintColor( 0, "!g%s!n %s increased one level! Level:!t %s!n Total points:!t %d", PREFIX, g_szName[ id ], CLASSES[ g_iLevels[ id ] ], g_iPoints[ id ] )
736 }
737 }
738
739 new szTemp[ 512 ]
740 formatex( szTemp, charsmax( szTemp ),
741 "UPDATE %s SET nick = '%s', skillpoints = '%i', level = '%i',\
742 kills = '%i', deaths = '%i', headshots = '%i', knife_kills = '%i', knife_deaths = '%i', grenade_kills = '%i', grenade_deaths = '%i', bomb_explosions = '%i', defused_bombs = '%i', own_rounds = '%i'\
743 WHERE authid = '%s'",
744 SQL_TABLE, g_szName[ id ], g_iPoints[ id ], g_iLevels[ id ],
745 g_iKills[ id ], g_iDeaths[ id ], g_iHeadShots[ id ], g_iKnifeKills[ id ], g_iKnifeDeaths[ id ], g_iGrenadeKills[ id ], g_iGrenadeDeaths[ id ], g_iBombExplosions[ id ], g_iDefusedBombs[ id ], g_iWonRounds[ id ],
746 g_szAuthID[ id ] )
747
748 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
749
750 if( g_iPoints[ id ] >= MAX_PONTUATION )
751 {
752 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
753 {
754 ClientPrintColor( id, "!g%s!n You have reached the maximum SkillPoints! Your SkillPoints and level will start again", PREFIX )
755 }
756
757 g_iPoints[ id ] = 0
758 g_iLevels[ id ] = 0
759 g_iClasses[ id ] = 0
760
761 g_iKills[ id ] = 0
762 g_iDeaths[ id ] = 0
763 g_iHeadShots[ id ] = 0
764 g_iKnifeKills[ id ] = 0
765 g_iKnifeDeaths[ id ] = 0
766 g_iGrenadeKills[ id ] = 0
767 g_iGrenadeDeaths[ id ] = 0
768 g_iBombExplosions[ id ] = 0
769 g_iDefusedBombs[ id ] = 0
770 g_iWonRounds[ id ] = 0
771
772 CheckLevelAndSave( id )
773 }
774}
775
776public LoadPoints( id )
777{
778 new Data[ 1 ]
779 Data[ 0 ] = id
780
781 new szTemp[ 512 ]
782 format( szTemp, charsmax( szTemp ),
783 "SELECT skillpoints, level , kills, deaths, headshots, knife_kills, knife_deaths, grenade_kills, grenade_deaths, bomb_explosions, defused_bombs, own_rounds FROM %s WHERE authid = '%s'",
784 SQL_TABLE, g_szAuthID[ id ] )
785
786 SQL_ThreadQuery( g_SqlTuple, "LoadPoints_QueryHandler", szTemp, Data, 1 )
787}
788
789public LoadPoints_QueryHandler( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
790{
791 new id
792 id = Data[ 0 ]
793
794 if( !SQL_IsFail( FailState, Errcode, Error ) )
795 {
796 if( SQL_NumResults( Query ) < 1 )
797 {
798 new szTemp[ 512 ]
799 format( szTemp, charsmax( szTemp ),
800 "INSERT INTO %s\
801 ( authid, nick, skillpoints, level, kills, deaths, headshots, knife_kills, knife_deaths, grenade_kills, grenade_deaths, bomb_explosions, defused_bombs, own_rounds )\
802 VALUES( '%s', '%s', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i', '%i' )",
803 SQL_TABLE,
804 g_szAuthID[ id ],
805 g_szName[ id ],
806 g_iPoints[ id ],
807 g_iLevels[ id ],
808
809 g_iKills[ id ],
810 g_iDeaths[ id ],
811 g_iHeadShots[ id ],
812 g_iKnifeKills[ id ],
813 g_iKnifeDeaths[ id ],
814 g_iGrenadeKills[ id ],
815 g_iGrenadeDeaths[ id ],
816 g_iBombExplosions[ id ],
817 g_iDefusedBombs[ id ],
818 g_iWonRounds[ id ] )
819
820 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp )
821 }
822
823 else
824 {
825 g_iPoints[ id ] = SQL_ReadResult( Query, 0 )
826 g_iLevels[ id ] = SQL_ReadResult( Query, 1 )
827
828 g_iKills[ id ] = SQL_ReadResult( Query, 2 )
829 g_iDeaths[ id ] = SQL_ReadResult( Query, 3 )
830 g_iHeadShots[ id ] = SQL_ReadResult( Query, 4 )
831 g_iKnifeKills[ id ] = SQL_ReadResult( Query, 5 )
832 g_iKnifeDeaths[ id ] = SQL_ReadResult( Query, 6 )
833 g_iGrenadeKills[ id ] = SQL_ReadResult( Query, 7 )
834 g_iGrenadeDeaths[ id ] = SQL_ReadResult( Query, 8 )
835 g_iBombExplosions[ id ] = SQL_ReadResult( Query, 9 )
836 g_iDefusedBombs[ id ] = SQL_ReadResult( Query, 10 )
837 g_iWonRounds[ id ] = SQL_ReadResult( Query, 11 )
838 }
839 }
840}
841
842public IgnoreHandle( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
843{
844 SQL_FreeHandle( Query )
845}
846
847public SkillRank( id )
848{
849 if( !get_pcvar_num( g_iEnableSkillPointsCmdRank ) )
850 {
851 ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
852 }
853
854 else
855 {
856 new Data[ 1 ]
857 Data[ 0 ] = id
858
859 new szTemp[ 512 ]
860 format( szTemp, charsmax( szTemp ), "SELECT COUNT(*) FROM %s WHERE skillpoints >= %i", SQL_TABLE, g_iPoints[ id ] )
861
862 SQL_ThreadQuery( g_SqlTuple, "SkillRank_QueryHandler", szTemp, Data, 1 )
863 }
864
865 return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
866}
867
868public SkillRank_QueryHandler( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
869{
870 if( !SQL_IsFail( FailState, Errcode, Error ) )
871 {
872 new id
873 id = Data[ 0 ]
874
875 g_iRank[ id ] = SQL_ReadResult( Query, 0 )
876
877 if( g_iRank[ id ] == 0 )
878 {
879 g_iRank[ id ] = 1
880 }
881
882 TotalRows( id )
883 }
884}
885
886public TotalRows( id )
887{
888 new Data[ 1 ]
889 Data[ 0 ] = id
890
891 new szTemp[ 128 ]
892 format( szTemp, charsmax( szTemp ), "SELECT COUNT(*) FROM %s", SQL_TABLE )
893
894 SQL_ThreadQuery( g_SqlTuple, "TotalRows_QueryHandler", szTemp, Data, 1 )
895}
896
897public TotalRows_QueryHandler( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
898{
899 if( !SQL_IsFail( FailState, Errcode, Error ) )
900 {
901 new id
902 id = Data[ 0 ]
903
904 g_iCount = SQL_ReadResult( Query, 0 )
905
906 ClientPrintColor( id, "!g%s!n Your rank is!t %i!n of!t %i!n players with!t %i!n points ", PREFIX, g_iRank[ id ], g_iCount, g_iPoints[ id ] )
907 }
908}
909
910public TopSkill( id )
911{
912 if( !get_pcvar_num( g_iEnableSkillPointsTop15 ) )
913 {
914 ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
915 }
916
917 else
918 {
919 show_motd( id, g_szMotd, "Top SkillPointers" )
920 }
921
922 return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
923}
924
925public MakeTop15( )
926{
927 new szQuery[ 512 ]
928 formatex( szQuery, charsmax( szQuery ),
929 "SELECT nick, skillpoints, kills, deaths, headshots, knife_kills, grenade_kills, bomb_explosions, defused_bombs FROM %s ORDER BY skillpoints DESC LIMIT 10",
930 SQL_TABLE )
931
932 SQL_ThreadQuery( g_SqlTuple, "MakeTop15_QueryHandler", szQuery )
933}
934
935public MakeTop15_QueryHandler( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
936{
937 if( !SQL_IsFail( FailState, Errcode, Error ) )
938 {
939 new szName[ 22 ]
940
941 new iPoints
942 new iKills
943 new iDeaths
944 new iHS
945 new iKnifeKills
946 new iGrenadeKills
947 new iBombExplosions
948 new iDefusedBombs
949
950 new iLen
951 iLen = formatex( g_szMotd, charsmax( g_szMotd ),
952 "<body bgcolor=#A4BED6>\
953 <table width=100%% cellpadding=2 cellspacing=0 border=0>\
954 <tr align=center bgcolor=#52697B>\
955 <th width=4%%>#\
956 <th width=30%% align=left>Player\
957 <th width=8%%>Kills\
958 <th width=8%%>Deaths\
959 <th width=8%%>HS\
960 <th width=8%%>Knife\
961 <th width=8%%>Grenade\
962 <th width=8%%>Bombs\
963 <th width=8%%>Defuses\
964 <th width=10%>SkillPoints" )
965
966 new i = 1
967 while( SQL_MoreResults( Query ) )
968 {
969 SQL_ReadResult( Query, 0, szName, charsmax( szName ) )
970
971 iPoints = SQL_ReadResult( Query, 1 )
972 iKills = SQL_ReadResult( Query, 2 )
973 iDeaths = SQL_ReadResult( Query, 3 )
974 iHS = SQL_ReadResult( Query, 4 )
975 iKnifeKills = SQL_ReadResult( Query, 5 )
976 iGrenadeKills = SQL_ReadResult( Query, 6 )
977 iBombExplosions = SQL_ReadResult( Query, 7 )
978 iDefusedBombs = SQL_ReadResult( Query, 8 )
979
980 replace_all( szName, charsmax( szName ), "<", "[" )
981 replace_all( szName, charsmax( szName ), ">", "]" )
982
983 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<tr align=center>" )
984 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", i )
985 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td align=left>%s", szName )
986 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iKills )
987 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iDeaths )
988 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iHS )
989 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iKnifeKills )
990 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iGrenadeKills )
991 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iBombExplosions )
992 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iDefusedBombs )
993 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", iPoints )
994
995 i++
996
997 SQL_NextRow( Query )
998 }
999
1000 iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "</table></body>" )
1001 }
1002}
1003
1004SQL_IsFail( FailState, Errcode, Error[ ] )
1005{
1006 if( FailState == TQUERY_CONNECT_FAILED )
1007 {
1008 log_amx( "[Error] Could not connect to SQL database: %s", Error )
1009 return true
1010 }
1011
1012 if( FailState == TQUERY_QUERY_FAILED )
1013 {
1014 log_amx( "[Error] Query failed: %s", Error )
1015 return true
1016 }
1017
1018 if( Errcode )
1019 {
1020 log_amx( "[Error] Error on query: %s", Error )
1021 return true
1022 }
1023
1024 return false
1025}
1026
1027public GetSkillPoints( id )
1028{
1029 if( !get_pcvar_num( g_iEnableSkillPointsCmd ) )
1030 {
1031 ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
1032 }
1033
1034 else
1035 {
1036 if( g_iLevels[ id ] < ( MAX_LEVELS - 1 ) )
1037 {
1038 ClientPrintColor( id, "!g%s!n Total points:!t %d!n Level:!t %s!n Points to the next level:!t %d", PREFIX, g_iPoints[ id ], CLASSES[ g_iLevels[ id ] ], ( LEVELS[ g_iLevels[ id ] ] - g_iPoints[ id ] ) )
1039 }
1040
1041 else
1042 {
1043 ClientPrintColor( id, "!g%s!n Total points:!t %d!n Level:!t %s!n (last level)", PREFIX, g_iPoints[ id ], CLASSES[ g_iLevels[ id ] ] )
1044 }
1045 }
1046
1047 return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
1048}
1049
1050public ChatAdvertisements( )
1051{
1052 new Players[ MAX_PLAYERS ]
1053 new iNum
1054 new i
1055
1056 get_players( Players, iNum, "ch" )
1057
1058 for( --iNum; iNum >= 0; iNum-- )
1059 {
1060 i = Players[ iNum ]
1061
1062 ClientPrintColor( i, g_ChatAdvertise[ g_iK ], PREFIX )
1063 }
1064
1065 g_iK++
1066
1067 if( g_iK >= sizeof g_ChatAdvertise )
1068 {
1069 g_iK = 0
1070 }
1071}
1072
1073public CmdGivePoints( id, level, cid )
1074{
1075 if ( !cmd_access( id, level, cid, 3 ) )
1076 {
1077 return PLUGIN_HANDLED
1078 }
1079
1080 new Arg1[ 32 ]
1081 new Arg2[ 6 ]
1082
1083 read_argv( 1, Arg1, charsmax( Arg1 ) )
1084 read_argv( 2, Arg2, charsmax( Arg2 ) )
1085
1086 new iPlayer = cmd_target( id, Arg1, 1 )
1087 new iPoints = str_to_num( Arg2 )
1088
1089 if ( !iPlayer )
1090 {
1091 console_print( id, "Sorry, player %s could not be found or targetted!", Arg1 )
1092 return PLUGIN_HANDLED
1093 }
1094
1095 if( iPoints > 0 )
1096 {
1097 g_iPoints[ iPlayer ] += iPoints
1098 CheckLevelAndSave( iPlayer )
1099
1100 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
1101 {
1102 ClientPrintColor( 0, "!g%s!n %s gave!t %i!n SkillPoint%s to %s", PREFIX, g_szName[ id ], iPoints, iPoints > 1 ? "s" : "", g_szName[ iPlayer ] )
1103 }
1104 }
1105
1106 return PLUGIN_HANDLED
1107}
1108
1109public CmdTakePoints( id, level, cid )
1110{
1111 if ( !cmd_access( id, level, cid, 3 ) )
1112 {
1113 return PLUGIN_HANDLED
1114 }
1115
1116 new Arg1[ 32 ]
1117 new Arg2[ 6 ]
1118
1119 read_argv( 1, Arg1, charsmax( Arg1 ) )
1120 read_argv( 2, Arg2, charsmax( Arg2 ) )
1121
1122 new iPlayer = cmd_target( id, Arg1, 1 )
1123 new iPoints = str_to_num( Arg2 )
1124
1125 if ( !iPlayer )
1126 {
1127 console_print( id, "Sorry, player %s could not be found or targetted!", Arg1 )
1128 return PLUGIN_HANDLED
1129 }
1130
1131 if( iPoints > 0 )
1132 {
1133 g_iPoints[ iPlayer ] -= iPoints
1134 CheckLevelAndSave( iPlayer )
1135
1136 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
1137 {
1138 ClientPrintColor( 0, "!g%s!n %s take!t %i!n SkillPoint%s from %s", PREFIX, g_szName[ id ], iPoints, iPoints > 1 ? "s" : "", g_szName[ iPlayer ] )
1139 }
1140 }
1141
1142 return PLUGIN_HANDLED
1143}
1144
1145public RestartSkillPoints( id )
1146{
1147 if( !get_pcvar_num( g_iEnableSkillPointsRestart ) )
1148 {
1149 ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
1150 }
1151
1152 else
1153 {
1154 g_iPoints[ id ] = 0
1155 g_iLevels[ id ] = 0
1156 g_iClasses[ id ] = 0
1157
1158 g_iKills[ id ] = 0
1159 g_iDeaths[ id ] = 0
1160 g_iHeadShots[ id ] = 0
1161 g_iKnifeKills[ id ] = 0
1162 g_iKnifeDeaths[ id ] = 0
1163 g_iGrenadeKills[ id ] = 0
1164 g_iGrenadeDeaths[ id ] = 0
1165 g_iBombExplosions[ id ] = 0
1166 g_iDefusedBombs[ id ] = 0
1167 g_iWonRounds[ id ] = 0
1168
1169 CheckLevelAndSave( id )
1170
1171 if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
1172 {
1173 ClientPrintColor( id, "!g%s!n Your SkillPoints and level will start again", PREFIX )
1174 }
1175 }
1176
1177 return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
1178}
1179
1180public FwdPlayerSpawnPost( id )
1181{
1182 if( is_user_alive( id ) )
1183 {
1184 g_iCurrentKills[ id ] = 0
1185
1186 if( get_pcvar_num( g_iEnableShowSkillPointsOnNick ) )
1187 {
1188 new szName[ 32 ]
1189 get_user_info( id, "name", szName, charsmax( szName ) )
1190
1191 new iLen = strlen( szName )
1192
1193 new iPos = iLen - 1
1194
1195 if( szName[ iPos ] == '>' )
1196 {
1197 new i
1198 for( i = 1; i < 7; i++ )
1199 {
1200 if( szName[ iPos - i ] == '<' )
1201 {
1202 iLen = iPos - i
1203 szName[ iLen ] = EOS
1204 break
1205 }
1206 }
1207 }
1208
1209 format( szName[ iLen ], charsmax( szName ) - iLen, szName[ iLen-1 ] == ' ' ? "<%d>" : " <%d>", g_iPoints[ id ] )
1210 set_user_info( id, "name", szName )
1211 }
1212 }
1213}
1214
1215public MessageSayText( iMsgID, iDest, iReceiver )
1216{
1217 if( get_pcvar_num( g_iHideChangeNickNotification ) )
1218 {
1219 new const Cstrike_Name_Change[ ] = "#Cstrike_Name_Change"
1220
1221 new szMessage[ sizeof( Cstrike_Name_Change ) + 1 ]
1222 get_msg_arg_string( 2, szMessage, charsmax( szMessage ) )
1223
1224 if( equal( szMessage, Cstrike_Name_Change ) )
1225 {
1226 return PLUGIN_HANDLED
1227 }
1228 }
1229
1230 return PLUGIN_CONTINUE
1231}
1232
1233ClientPrintColor( id, String[ ], any:... )
1234{
1235 new szMsg[ 190 ]
1236 vformat( szMsg, charsmax( szMsg ), String, 3 )
1237
1238 replace_all( szMsg, charsmax( szMsg ), "!n", "^1" )
1239 replace_all( szMsg, charsmax( szMsg ), "!t", "^3" )
1240 replace_all( szMsg, charsmax( szMsg ), "!g", "^4" )
1241
1242 static msgSayText = 0
1243 static fake_user
1244
1245 if( !msgSayText )
1246 {
1247 msgSayText = get_user_msgid( "SayText" )
1248 fake_user = get_maxplayers( ) + 1
1249 }
1250
1251 message_begin( id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgSayText, _, id )
1252 write_byte( id ? id : fake_user )
1253 write_string( szMsg )
1254 message_end( )
1255}