Code: Select all
#include <amxmodx>#include <cstrike>#include <nvault> new const Version[] = "0.2"; enum KillLevels{ Newbie, SemiPro, Pro, Veteran} new KillLevelRange[ KillLevels ][ 2 ] = { { 0 , 499 }, { 500 , 749 }, { 750 , 999 }, { 1000 , 999999 }}; new KillLevelName[ KillLevels ][] = { "!", "*", "**", "***"}; enum DeathMsg_Arg{ KillerID, VictimID, IsHeadshot, WeaponName} enum PlayerInfo{ Name[ 32 ], AuthID[ 34 ], NumKills, KillLevels:CurrentLevel} new g_PlayerData[ 33 ][ PlayerInfo ];new g_iVault;new g_MsgSayText; public plugin_init() { register_plugin( "Kill Levels" , Version , "bugsy" ); register_event( "DeathMsg" , "fw_EvDeathMsg" , "a" , "1>0" ); register_clcmd( "say" , "fw_CmdSay" ); register_clcmd( "say_team" , "fw_CmdSayTeam" ); g_MsgSayText = get_user_msgid( "SayText" ); if ( ( ( g_iVault = nvault_open( "klevels" ) ) == INVALID_HANDLE ) ) set_fail_state( "Error opening vault" );} public plugin_end(){ nvault_close( g_iVault );} public client_putinserver( id ){ get_user_name( id , g_PlayerData[ id ][ Name ] , charsmax( g_PlayerData[][ Name ] ) ); get_user_authid( id , g_PlayerData[ id ][ AuthID ] , charsmax( g_PlayerData[][ AuthID ] ) ); if ( ( g_PlayerData[ id ][ NumKills ] = nvault_get( g_iVault , g_PlayerData[ id ][ AuthID ] ) ) ) { SetPlayerLevel( id ); set_task( 7.0 , "AnnounceJoin" , id ); }} public client_disconnect( id ){ new szKills[ 6 ]; num_to_str( g_PlayerData[ id ][ NumKills ] , szKills , charsmax( szKills ) ); nvault_set( g_iVault , g_PlayerData[ id ][ AuthID ] , szKills ); g_PlayerData[ id ][ Name ][ 0 ] = EOS; g_PlayerData[ id ][ AuthID ][ 0 ] = EOS; g_PlayerData[ id ][ NumKills ] = 0; g_PlayerData[ id ][ CurrentLevel ] = _:Newbie;} public fw_EvDeathMsg(){ new id = read_data( _:KillerID ); g_PlayerData[ id ][ NumKills ]++; SetPlayerLevel( id );} public fw_CmdSay(id){ static szMessage[ 192 ] , iPlayers[ 32 ]; new bool:bIsAlive , iPos , iNum , iPlayer; bIsAlive = bool:is_user_alive( id ); iPos = formatex( szMessage , charsmax( szMessage ) , "%s[%s] ^x03%s ^x01: ", bIsAlive ? "^x04 " : "^x01*DEAD*^x04 " , KillLevelName[ g_PlayerData[ id ][ CurrentLevel ] ] , g_PlayerData[ id ][ Name ] , szMessage ); read_args( szMessage[ iPos ] , charsmax( szMessage ) - iPos ); remove_quotes( szMessage[ iPos ] ); get_players( iPlayers , iNum ); for ( new i = 0 ; i < iNum ; i++ ) { iPlayer = iPlayers[ i ]; if( ( bIsAlive && is_user_alive( iPlayer ) ) || ( !bIsAlive && !is_user_alive( iPlayer ) ) ) { message_begin( MSG_ONE_UNRELIABLE , g_MsgSayText , {0, 0, 0} , iPlayer ); write_byte( id ); write_string( szMessage ); message_end(); } } return PLUGIN_HANDLED;} public fw_CmdSayTeam( id ){ static szMessage[ 192 ] , iPlayers[ 32 ]; new bool:bIsAlive , iPos , iNum , iPlayer , CsTeams:iTeam; new const szTeams[ CsTeams ][] = { "", "Terrorist", "Counter-Terrorist", "Spectator" }; bIsAlive = bool:is_user_alive( id ); iTeam = cs_get_user_team( id ); iPos = formatex( szMessage , charsmax( szMessage ) , "^x01%s^x01(%s) ^x04[%s] ^x03%s ^x01: " , bIsAlive ? "" : "*DEAD*" , szTeams[ iTeam ] , KillLevelName[ g_PlayerData[ id ][ CurrentLevel ] ] , g_PlayerData[ id ][ Name ] , szMessage ); read_args( szMessage[ iPos ] , charsmax( szMessage ) - iPos ); remove_quotes( szMessage[ iPos ] ); get_players( iPlayers , iNum ); for ( new i = 0 ; i < iNum ; i++ ) { iPlayer = iPlayers[ i ]; if ( ( iTeam == cs_get_user_team( iPlayer ) ) && ( ( bIsAlive && is_user_alive( iPlayer ) ) || ( !bIsAlive && !is_user_alive( iPlayer ) ) ) ) { message_begin( MSG_ONE_UNRELIABLE , g_MsgSayText , {0, 0, 0} , iPlayer ); write_byte( id ); write_string( szMessage ); message_end(); } } return PLUGIN_HANDLED;} SetPlayerLevel( id ){ for ( new KillLevels:iLevel = Newbie ; iLevel < KillLevels ; iLevel++ ) { if ( KillLevelRange[ iLevel ][ 0 ] <= g_PlayerData[ id ][ NumKills ] <= KillLevelRange[ iLevel ][ 1 ] ) { g_PlayerData[ id ][ CurrentLevel ] = _:iLevel; break; } }} public AnnounceJoin( id ){ client_print( 0 , print_chat , "* %s is a %s in this server!" , g_PlayerData[ id ][ Name ] , KillLevelName[ g_PlayerData[ id ][ CurrentLevel ] ] );}