Advertisement
Guest User

Untitled

a guest
May 4th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 34.08 KB | None | 0 0
  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.  
  25. new const CLASSES[ MAX_CLASSES ][ ] = {
  26.     "BOT",
  27.     "NOOB",
  28.     "GAMER",
  29.     "LEET",
  30.     "TOP"
  31. }
  32.  
  33. new const LEVELS[ MAX_LEVELS ] = {
  34.     500,
  35.     1200,
  36.     1800,
  37.     2500,
  38.     100000 /* high value (not reachable) */
  39. }
  40.  
  41. new g_iK
  42. new 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.  
  49. new g_iMaxPlayers
  50. new g_szAuthID[ MAX_PLAYERS + 1 ][ 35 ]
  51. new g_szName[ MAX_PLAYERS + 1 ][ 32 ]
  52.  
  53. new Handle:g_SqlTuple
  54. new g_iCount
  55. new g_iRank[ MAX_PLAYERS + 1 ]
  56. new g_iCurrentKills[ MAX_PLAYERS + 1 ]
  57. new g_szMotd[ 1536 ]
  58.  
  59. new g_pcvarHost
  60. new g_pcvaruUser
  61. new g_pcvarPass
  62. new g_pcvarDB
  63.  
  64. new g_iPoints[ MAX_PLAYERS + 1 ]
  65. new g_iLevels[ MAX_PLAYERS + 1 ]
  66. new g_iClasses[ MAX_PLAYERS + 1 ]
  67.  
  68. new g_iKills[ MAX_PLAYERS + 1 ]
  69. new g_iDeaths[ MAX_PLAYERS + 1 ]
  70. new g_iHeadShots[ MAX_PLAYERS + 1 ]
  71. new g_iKnifeKills[ MAX_PLAYERS + 1 ]
  72. new g_iKnifeDeaths[ MAX_PLAYERS + 1 ]
  73. new g_iGrenadeKills[ MAX_PLAYERS + 1 ]
  74. new g_iGrenadeDeaths[ MAX_PLAYERS + 1 ]
  75. new g_iBombExplosions[ MAX_PLAYERS + 1 ]
  76. new g_iDefusedBombs[ MAX_PLAYERS + 1 ]
  77. new g_iWonRounds[ MAX_PLAYERS + 1 ]
  78.  
  79. new g_TimeBetweenAds
  80.  
  81. new bool:g_bRoundEnded
  82.  
  83. new g_iAdsOnChat
  84. new g_iEnableAnnounceOnChat
  85. new g_iEnableShowSkillPointsOnNick
  86. new g_iHideChangeNickNotification
  87. new g_iEnableSkillPointsCmd
  88. new g_iEnableSkillPointsRestart
  89. new g_iEnableSkillPointsCmdRank
  90. new g_iEnableSkillPointsTop15
  91. new g_iHideCmds
  92. new g_iEnableWonPointsHour
  93. new g_iWonPointsHour
  94. new g_iLostPointsTK
  95. new g_iLostPointsSuicide
  96. new g_iWonPointsKill
  97. new g_iLostPointsDeath
  98. new g_iWonPointsHeadshot
  99. new g_iLostPointsHeadshot
  100. new g_iWonPointsKnife
  101. new g_iLostPointsKnife
  102. new g_iWonPointsGrenade
  103. new g_iLostPointsGrenade
  104. new g_iWonPointsTerrorists
  105. new g_iWonPointsCounterTerrorists
  106. new g_iLostPointsTerrorists
  107. new g_iLostPointsCounterTerrorists
  108. new g_iWonPointsPlanter
  109. new g_iWonPointsPlanterExplode
  110. new g_iWonPointsDefuser
  111. new g_iWonPoints4k
  112. new g_iWonPoints5k
  113. new g_iNegativePoints
  114.  
  115. public 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.  
  141. public plugin_natives( )
  142. {
  143.     register_library( "skillpoints" )
  144.    
  145.     register_native( "skillpoints", "_skillpoints" )
  146. }
  147.  
  148.  
  149. public _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.  
  165. public 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.  
  211. public 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.  
  265. public plugin_end( )
  266. {
  267.     SQL_FreeHandle( g_SqlTuple )
  268. }
  269.  
  270. public client_authorized( id )
  271. {
  272.     set_task( 4.0, "Delayed_client_authorized", id + CONNECT_TASK )
  273. }
  274.  
  275. public 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.  
  311. public 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.  
  350. public 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.  
  365. public 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.  
  391. public 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.  
  401. public 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.  
  518. public 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.  
  571. public 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.  
  624. public 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.  
  637. public 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.  
  651. public 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.  
  665. public EventNewRound( )
  666. {
  667.     g_bRoundEnded = false
  668.    
  669.     MakeTop15( )
  670. }
  671.  
  672. public EventRoundEnd( )
  673. {
  674.     set_task( 0.5, "SavePointsAtRoundEnd" )
  675. }
  676.  
  677. public 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.  
  713. public 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.  
  776. public 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.  
  789. public 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.  
  842. public IgnoreHandle( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize )
  843. {
  844.     SQL_FreeHandle( Query )
  845. }
  846.  
  847. public 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.  
  868. public 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.  
  886. public 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.  
  897. public 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.  
  910. public 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.  
  925. public 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.  
  935. public 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.  
  1004. SQL_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.  
  1027. public 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.  
  1050. public 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.  
  1073. public 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.  
  1109. public 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.  
  1145. public 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.  
  1180. public 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.  
  1215. public 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.  
  1233. ClientPrintColor( 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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement