Raised This Month: $51 Target: $400
 12% 

Basic Points system


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Nutu_
AlliedModders Donor
Join Date: Mar 2016
Location: Germany
Old 09-22-2018 , 16:22   Basic Points system
Reply With Quote #1

Code:
#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < csx >
#include < hamsandwich >
#include < fvault >

#define PLUGIN		"Basic SkillPoints Special Edition (FVault)"
#define VERSION		"2.0.2"
#define AUTHOR		"guipatinador"

#define g_VaultSkillPoints	"skillpoints_v2"
#define g_VaultNames		"skillpoints_names"
#define PREFIX			"[OLD-ZONE]"

#define MAX_PLAYERS	32
#define ADMIN		ADMIN_RCON

#define EXPIREDAYS	30
#define MAX_CLASSES	10
#define MAX_LEVELS	10
#define MAX_PONTUATION	10000 // max skillpoints per player

#define IsPlayer(%1)		( 1 <= %1 <= g_iMaxPlayers )

new const CLASSES[ MAX_CLASSES ][ ] = {
	"PLAYING WITH BOTS",
	"FIRST TIME PLAYING",
	"NO SOUNDS",
	"NOTHING BUT DUST II",
	"AVARGE",
	"DONE WITH SILVERS",
	"ONLY RIFLERS USER",
	"4.300 HOURS ON CS",
	"ACTUALLY VERY SKILLED",
	"HACKER OR LEGEND"
}

new const LEVELS[ MAX_LEVELS ] = {
	10,
	50,
	100,
	250,
	350,
	500,
	600,
	750,
	900,
	1000 /* high value (not reachable) */
}

enum _:FvaultData {
	szSteamID[ 35 ],
	szSkillP_Data[ 128 ]
}

new g_iK
new const g_ChatAdvertise[ ][ ] = {
	"!g%s!n Write!t /points!n to see your points",
	"!g%s!n Write!t /myrank!n to see your rank",
	"!g%s!n Write!t /top!n to see the top"
}

new g_iMaxPlayers
new g_szAuthID[ MAX_PLAYERS + 1 ][ 35 ]
new g_szName[ MAX_PLAYERS + 1 ][ 32 ]
new g_iCurrentKills[ MAX_PLAYERS + 1 ]
new g_szMotd[ 1536 ]

new g_iPoints[ MAX_PLAYERS + 1 ]
new g_iLevels[ MAX_PLAYERS + 1 ]
new g_iClasses[ MAX_PLAYERS + 1 ]

new g_iKills[ MAX_PLAYERS + 1 ]
new g_iDeaths[ MAX_PLAYERS + 1 ]
new g_iHeadShots[ MAX_PLAYERS + 1 ]
new g_iKnifeKills[ MAX_PLAYERS + 1 ]
new g_iKnifeDeaths[ MAX_PLAYERS + 1 ]
new g_iGrenadeKills[ MAX_PLAYERS + 1 ]
new g_iGrenadeDeaths[ MAX_PLAYERS + 1 ]
new g_iBombExplosions[ MAX_PLAYERS + 1 ]
new g_iDefusedBombs[ MAX_PLAYERS + 1 ]
new g_iWonRounds[ MAX_PLAYERS + 1 ]

new g_TimeBetweenAds

new bool:g_bRoundEnded

new g_iAdsOnChat
new g_iEnableAnnounceOnChat
new g_iEnableShowSkillPointsOnNick
new g_iHideChangeNickNotification
new g_iEnableSkillPointsCmd
new g_iEnableSkillPointsRestart
new g_iEnableSkillPointsCmdRank
new g_iEnableSkillPointsTop15
new g_iHideCmds
new g_iEnableWonPointsHour
new g_iWonPointsHour
new g_iLostPointsTK
new g_iLostPointsSuicide
new g_iWonPointsKill
new g_iLostPointsDeath
new g_iWonPointsHeadshot
new g_iLostPointsHeadshot
new g_iWonPointsKnife
new g_iLostPointsKnife
new g_iWonPointsGrenade
new g_iLostPointsGrenade
new g_iWonPointsTerrorists
new g_iWonPointsCounterTerrorists
new g_iLostPointsTerrorists
new g_iLostPointsCounterTerrorists
new g_iWonPointsPlanter
new g_iWonPointsPlanterExplode
new g_iWonPointsDefuser
new g_iWonPoints4k
new g_iWonPoints5k
new g_iNegativePoints

public plugin_init( )
{
	register_plugin( PLUGIN, VERSION, AUTHOR )
	
	register_clcmd( "say", "ClCmd_Say" )
	register_clcmd( "say_team", "ClCmd_Say" )
	
	register_concmd("amx_give", "CmdGivePoints", ADMIN, "<target> <points to give>" )
	register_concmd("amx_take", "CmdTakePoints", ADMIN, "<target> <points to take>" )
	
	RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 )
	
	register_message( get_user_msgid( "SayText" ), "MessageSayText" )
	
	register_event( "SendAudio", "TerroristsWin", "a", "2&%!MRAD_terwin" )
	register_event( "SendAudio", "CounterTerroristsWin", "a", "2&%!MRAD_ctwin" )
	
	register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" )
	register_logevent( "RoundEnd", 2, "1=Round_End" )
	
	g_iMaxPlayers = get_maxplayers( )
	
	RegisterCvars( )
}

public plugin_natives( )
{
	register_library( "skillpoints" )
	
	register_native( "skillpoints", "_skillpoints" )
}

public _skillpoints( plugin, params )
{
	if( params != 1 )
	{
		return 0
	}
	
	new id = get_param( 1 )
	if( !id )
	{
		return 0
	}
	
	return g_iPoints[ id ]
}

public RegisterCvars( )
{
	g_iAdsOnChat = register_cvar( "bps_ads", "1" )
	g_TimeBetweenAds = register_cvar( "bps_time_between_ads", "300.0" )
	g_iEnableAnnounceOnChat = register_cvar( "bps_announce_on_chat", "1" )
	g_iEnableShowSkillPointsOnNick = register_cvar( "bps_skillpoints_on_nick", "0" )
	g_iHideChangeNickNotification = register_cvar( "bps_hide_change_nick_notification", "1" )
	g_iEnableSkillPointsCmd = register_cvar( "bps_skillpoints_cmd", "1" )
	g_iEnableSkillPointsRestart = register_cvar( "bps_skillpoints_cmd_restart", "1" )
	g_iEnableSkillPointsCmdRank = register_cvar( "bps_skillpoints_cmd_rank", "1" )
	g_iEnableSkillPointsTop15 = register_cvar( "bps_skillpoints_cmd_top15", "1" )
	g_iHideCmds = register_cvar( "bps_hide_cmd", "0" )
	g_iEnableWonPointsHour = register_cvar( "bps_enable_win_per_hour", "1" )
	g_iWonPointsHour = register_cvar( "bps_won_points_hour", "1" )
	g_iLostPointsTK = register_cvar( "bps_lost_points_tk", "1" )
	g_iLostPointsSuicide = register_cvar( "bps_lost_points_suicide", "1" )
	g_iWonPointsKill = register_cvar( "bps_won_points_kill", "1" )
	g_iLostPointsDeath = register_cvar( "bps_lost_points_kill", "1" )
	g_iWonPointsHeadshot = register_cvar( "bps_won_points_headshot", "1" )
	g_iLostPointsHeadshot = register_cvar( "bps_lost_points_headshot", "1" )
	g_iWonPointsKnife = register_cvar( "bps_won_points_knife", "1" )
	g_iLostPointsKnife = register_cvar( "bps_lost_points_knife", "1" )
	g_iWonPointsGrenade = register_cvar( "bps_won_points_grenade", "1" )
	g_iLostPointsGrenade = register_cvar( "bps_lost_points_grenade", "1" )
	g_iWonPointsTerrorists = register_cvar( "bps_won_points_ts", "0" )
	g_iWonPointsCounterTerrorists = register_cvar( "bps_won_points_cts", "0" )
	g_iLostPointsTerrorists = register_cvar( "bps_lost_points_ts", "0" )
	g_iLostPointsCounterTerrorists = register_cvar( "bps_lost_points_cts", "0" )
	g_iWonPointsPlanter = register_cvar( "bps_won_points_planter", "1" )
	g_iWonPointsPlanterExplode = register_cvar( "bps_won_points_planter_explode", "1" ) 
	g_iWonPointsDefuser = register_cvar( "bps_won_points_defuser", "1" )
	g_iWonPoints4k = register_cvar( "bps_won_points_4k", "1" )
	g_iWonPoints5k = register_cvar( "bps_won_points_5k", "1" )
	g_iNegativePoints = register_cvar( "bps_negative_points", "0" )
	
	if( get_pcvar_num( g_iAdsOnChat ) )
	{
		set_task( get_pcvar_float( g_TimeBetweenAds ), "ChatAdvertisements", _, _, _, "b" )
	}
	
	fvault_prune( g_VaultSkillPoints, _, get_systime( ) - ( 86400 * EXPIREDAYS ) )
	
	MakeTop15( )
}

public client_authorized( id )
{
	get_user_authid( id , g_szAuthID[ id ], charsmax( g_szAuthID[ ] ) )
	get_user_info( id, "name", g_szName[ id ], charsmax( g_szName[ ] ) )
	
	fvault_set_data( g_VaultNames, g_szAuthID[ id ], g_szName[ id ] )
	
	g_iPoints[ id ] = 0
	g_iLevels[ id ] = 0
	g_iClasses[ id ] = 0
	
	g_iKills[ id ] = 0
	g_iDeaths[ id ] = 0
	g_iHeadShots[ id ] = 0
	g_iKnifeKills[ id ] = 0
	g_iKnifeDeaths[ id ] = 0
	g_iGrenadeKills[ id ] = 0
	g_iGrenadeDeaths[ id ] = 0
	g_iBombExplosions[ id ] = 0
	g_iDefusedBombs[ id ] = 0
	g_iWonRounds[ id ] = 0
	
	g_iCurrentKills[ id ] = 0
	
	LoadPoints( id )
	
	if( get_pcvar_num( g_iEnableWonPointsHour ) && get_pcvar_num( g_iWonPointsHour ) )
	{
		set_task( 3600.0, "More points for playing much time.", id, _, _, "b" )
	}
}

public client_infochanged( id )
{
	if( is_user_connected( id ) )
	{
		new szNewName[ 32 ]
		get_user_info( id, "name", szNewName, charsmax( szNewName ) ) 
		
		new iLen = strlen( szNewName )
		
		new iPos = iLen - 1
		
		if( szNewName[ iPos ] == '>' )
		{    
			new i
			for( i = 1; i < 7; i++ )
			{    
				if( szNewName[ iPos - i ] == '<' )
				{    
					iLen = iPos - i
					szNewName[ iLen ] = EOS
					break
				}
			}
		}
		
		trim( szNewName )
		
		if( !equal( g_szName[ id ], szNewName ) )   
		{     
			copy( g_szName[ id ], charsmax( g_szName[ ] ), szNewName )
			
			fvault_set_data( g_VaultNames, g_szAuthID[ id ], g_szName[ id ] )
		}	
	}
}

public client_disconnect( id )
{
	if( task_exists( id ) )
	{
		remove_task( id )
	}
	
	CheckLevelAndSave( id )
}

public ClCmd_Say( id )
{	
	new szCmd[ 12 ]
	read_argv( 1, szCmd, charsmax( szCmd ) )
	
	if( equali( szCmd[ 1 ], "points" ) )
	{
		GetSkillPoints( id )
	}
	
	else if( equali( szCmd[ 1 ], "resetall" ) )
	{
		RestartSkillPoints( id )
	}
	
	else if( equali( szCmd[ 1 ], "myrank" ) )
	{
		SkillRank( id )
	}
	
	else if( equali( szCmd[ 1 ], "top" ) )
	{
		TopSkill( id )
	}
}

public GiveSkillPointsHour( id )
{
	g_iPoints[ id ] += get_pcvar_num( g_iWonPointsHour )
	
	if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
	{
		ClientPrintColor( id, "!g%s!n You earned!g %i!n point%s for playing more one hour", PREFIX, get_pcvar_num( g_iWonPointsHour ), get_pcvar_num( g_iWonPointsHour ) > 1 ? "s" : "" )
	}
}

public client_death( iKiller, iVictim, iWpnIndex, iHitPlace, iTK )
{	
	if( !IsPlayer( iKiller ) || !IsPlayer( iVictim ) )
	{
		return PLUGIN_CONTINUE
	}
	
	if( iTK )
	{
		g_iPoints[ iKiller ] -= get_pcvar_num( g_iLostPointsTK )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsTK ) )
		{
			ClientPrintColor( iKiller, "!g%s!n You have lost!g %i!n point%s by killing a teammate", PREFIX, get_pcvar_num( g_iLostPointsTK ), get_pcvar_num( g_iLostPointsTK ) > 1 ? "s" : ""  )
		}
		
		return PLUGIN_CONTINUE
	}
	
	if( iKiller == iVictim )
	{
		g_iPoints[ iKiller ] -= get_pcvar_num( g_iLostPointsSuicide )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsSuicide ) )
		{
			ClientPrintColor( iKiller, "!g%s!n You have lost!g %i!n point%s for committing suicide", PREFIX, get_pcvar_num( g_iLostPointsSuicide ), get_pcvar_num( g_iLostPointsSuicide ) > 1 ? "s" : ""  )
		}
		
		g_iDeaths[ iKiller ]++
		
		return PLUGIN_CONTINUE
	}
	
	g_iCurrentKills[ iKiller ]++
	g_iKills[ iKiller ]++
	
	g_iDeaths[ iVictim ]++
	
	if( iWpnIndex == CSW_HEGRENADE )
	{
		g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsGrenade )
		g_iGrenadeKills[ iKiller]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsGrenade ) )
		{
			ClientPrintColor( iKiller, "!g%s!n You earned!g %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 ] )
		}
		
		g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsGrenade )
		g_iGrenadeDeaths[ iVictim ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsGrenade ) )
		{
			ClientPrintColor( iVictim, "!g%s!n You have lost!g %i!n point%s for dying with a grenade", PREFIX, get_pcvar_num( g_iLostPointsGrenade ), get_pcvar_num( g_iLostPointsGrenade ) > 1 ? "s" : "" )
		}
		
		return PLUGIN_CONTINUE
	}
	
	if( iWpnIndex == CSW_KNIFE )
	{
		g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsKnife )
		g_iKnifeKills[ iKiller ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsKnife ) )
		{
			ClientPrintColor( iKiller, "!g%s!n You earned!g %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 ] )
		}
		
		g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsKnife )
		g_iKnifeDeaths[ iVictim ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsKnife ) )
		{
			ClientPrintColor( iVictim, "!g%s!n You have lost!g %i!n point%s for dying with knife", PREFIX, get_pcvar_num( g_iLostPointsKnife ), get_pcvar_num( g_iLostPointsKnife ) > 1 ? "s" : "" )
		}
		
		return PLUGIN_CONTINUE
	}
	
	if( iHitPlace == HIT_HEAD )
	{
		g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsHeadshot )
		g_iHeadShots[ iKiller ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsHeadshot ) )
		{
			ClientPrintColor( iKiller, "!g%s!n You earned!g %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 ] )
		}
		
		g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsHeadshot )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsHeadshot ) )
		{
			ClientPrintColor( iVictim, "!g%s!n You have lost!g %i!n point%s for dying with a headshot", PREFIX, get_pcvar_num( g_iLostPointsHeadshot ), get_pcvar_num( g_iLostPointsHeadshot ) > 1 ? "s" : "" )
		}
		
		return PLUGIN_CONTINUE
	}
	
	g_iPoints[ iKiller ] += get_pcvar_num( g_iWonPointsKill )
	
	if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iWonPointsKill ) )
	{
		ClientPrintColor( iKiller, "!g%s!n You earned!g %i!n point%s by killing %s", PREFIX, get_pcvar_num( g_iWonPointsKill ), get_pcvar_num( g_iWonPointsKill ) > 1 ? "s" : "", g_szName[ iVictim ] )
	}
	
	g_iPoints[ iVictim ] -= get_pcvar_num( g_iLostPointsDeath )
	
	if( get_pcvar_num( g_iEnableAnnounceOnChat ) && get_pcvar_num( g_iLostPointsDeath ) )
	{
		ClientPrintColor( iVictim, "!g%s!n You have lost!g %i!n point%s for dying", PREFIX, get_pcvar_num( g_iLostPointsDeath ), get_pcvar_num( g_iLostPointsDeath ) > 1 ? "s" : "" )
	}
	
	return PLUGIN_CONTINUE	
}

public TerroristsWin( )
{
	if( g_bRoundEnded )
	{
		return PLUGIN_CONTINUE
	}
	
	new Players[ MAX_PLAYERS ]
	new iNum
	new i
	
	get_players( Players, iNum, "ch" )
	
	for( --iNum; iNum >= 0; iNum-- )
	{
		i = Players[ iNum ]
		
		switch( cs_get_user_team( i ) )
		{
			case( CS_TEAM_T ):
			{
				if( get_pcvar_num( g_iWonPointsTerrorists ) )
				{
					g_iPoints[ i ] += get_pcvar_num( g_iWonPointsTerrorists )
					g_iWonRounds[ i ]++
					
					if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
					{
						ClientPrintColor( i, "!g%s!n Your team have won!g %i!n point%s for winning the round", PREFIX, get_pcvar_num( g_iWonPointsTerrorists ), get_pcvar_num( g_iWonPointsTerrorists ) > 1 ? "s" : "" )
					}
				}
			}
			
			case( CS_TEAM_CT ):
			{
				if( get_pcvar_num( g_iLostPointsCounterTerrorists ) )
				{
					g_iPoints[ i ] -= get_pcvar_num( g_iLostPointsCounterTerrorists )
					
					if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
					{
						ClientPrintColor( i, "!g%s!n Your team!n have lost!g %i!n point%s for losing the round", PREFIX, get_pcvar_num( g_iLostPointsCounterTerrorists ), get_pcvar_num( g_iLostPointsCounterTerrorists ) > 1 ? "s" : "" )
					}
				}
			}
		}
	}
	
	g_bRoundEnded = true
	
	return PLUGIN_CONTINUE
}

public CounterTerroristsWin( )
{
	if( g_bRoundEnded )
	{
		return PLUGIN_CONTINUE
	}
	
	new Players[ MAX_PLAYERS ]
	new iNum
	new i
	
	get_players( Players, iNum, "ch" )
	
	for( --iNum; iNum >= 0; iNum-- )
	{
		i = Players[ iNum ]
		
		switch( cs_get_user_team( i ) )
		{
			case( CS_TEAM_T ):
			{
				if( get_pcvar_num( g_iLostPointsTerrorists ) )
				{
					g_iPoints[ i ] -= get_pcvar_num( g_iLostPointsTerrorists )
					
					if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
					{
						ClientPrintColor( i, "!g%s!n Your team!n have lost!g %i!n point%s for losing the round", PREFIX, get_pcvar_num( g_iLostPointsTerrorists ), get_pcvar_num( g_iLostPointsTerrorists ) > 1 ? "s" : "" )
					}
				}
			}
			
			case( CS_TEAM_CT ):
			{
				if( get_pcvar_num( g_iWonPointsCounterTerrorists ) )
				{
					g_iPoints[ i ] += get_pcvar_num( g_iWonPointsCounterTerrorists )
					g_iWonRounds[ i ]++
					
					if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
					{
						ClientPrintColor( i, "!g%s!n Your team!n have won!g %i!n point%s for winning the round", PREFIX, get_pcvar_num( g_iWonPointsCounterTerrorists ), get_pcvar_num( g_iWonPointsCounterTerrorists ) > 1 ? "s" : "" )
					}
				}
			}
		}
	}
	
	g_bRoundEnded = true
	
	return PLUGIN_CONTINUE
}

public bomb_planted( planter )
{
	if( get_pcvar_num( g_iWonPointsPlanter ) )
	{
		g_iPoints[ planter ] += get_pcvar_num( g_iWonPointsPlanter )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( planter, "!g%s!n You earned!g %i!n point%s for planting the bomb", PREFIX, get_pcvar_num( g_iWonPointsPlanter ), get_pcvar_num( g_iWonPointsPlanter ) > 1 ? "s" : "" )
		}
	}
}

public bomb_explode( planter, defuser )
{
	if( get_pcvar_num( g_iWonPointsPlanterExplode ) )
	{
		g_iPoints[ planter ] += get_pcvar_num( g_iWonPointsPlanterExplode )
		g_iBombExplosions[ planter ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( planter, "!g%s!n You earned!g %i!n point%s with the bomb explosion", PREFIX, get_pcvar_num( g_iWonPointsPlanterExplode ), get_pcvar_num( g_iWonPointsPlanterExplode ) > 1 ? "s" : "" )
		}
	}
}

public bomb_defused( defuser )
{
	if( get_pcvar_num( g_iWonPointsDefuser ) )
	{
		g_iPoints[ defuser ] += get_pcvar_num( g_iWonPointsDefuser )
		g_iDefusedBombs[ defuser ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( defuser, "!g%s!n You earned!g %i!n point%s for disarming the bomb", PREFIX, get_pcvar_num( g_iWonPointsDefuser ), get_pcvar_num( g_iWonPointsDefuser ) > 1 ? "s" : "" )
		}
	}
}

public EventNewRound( )
{
	g_bRoundEnded = false
	
	MakeTop15( )
}


public RoundEnd( )
{
	set_task( 0.5, "SavePointsAtRoundEnd" )
}

public SavePointsAtRoundEnd( )
{
	new Players[ MAX_PLAYERS ]
	new iNum
	new i
	
	get_players( Players, iNum, "ch" )
	
	for( --iNum; iNum >= 0; iNum-- )
	{
		i = Players[ iNum ]
		
		if( g_iCurrentKills[ i ] == 4 && get_pcvar_num( g_iWonPoints4k ) )
		{
			g_iPoints[ i ] += get_pcvar_num( g_iWonPoints4k )
			
			if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
			{
				ClientPrintColor( i, "!g%s!n You earned!g %i!n point%s for doing a !gSEMI-ACE.", PREFIX, get_pcvar_num( g_iWonPoints4k ), get_pcvar_num( g_iWonPoints4k ) > 1 ? "s" : "" )
			}
		}
		
		if( g_iCurrentKills[ i ] >= 5 && get_pcvar_num( g_iWonPoints5k ) )
		{
			g_iPoints[ i ] += get_pcvar_num( g_iWonPoints5k )
			
			if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
			{
				ClientPrintColor( i, "!g%s!n You earned!g %i!n point%s for doing a !gACE.", PREFIX, get_pcvar_num( g_iWonPoints5k ), get_pcvar_num( g_iWonPoints5k ) > 1 ? "s" : "" )
			}
		}
		
		CheckLevelAndSave( i )
	}
}

public CheckLevelAndSave( id )
{
	if( !get_pcvar_num( g_iNegativePoints) )
	{
		if( g_iPoints[ id ] < 0 )
		{
			g_iPoints[ id ] = 0
		}
		
		if( g_iLevels[ id ] < 0 )
		{
			g_iLevels[ id ] = 0
		}
	}
	
	while( g_iPoints[ id ] >= LEVELS[ g_iLevels[ id ] ] )
	{
		g_iLevels[ id ]++
		g_iClasses[ id ]++
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{			
			ClientPrintColor( 0, "!g%s!n %s increased to level!g %s!n with a total of!g %d !npoints.", PREFIX, g_szName[ id ], CLASSES[ g_iLevels[ id ] ], g_iPoints[ id ] )
		}
	}
	
	new szFormattedData[ 128 ]
	formatex( szFormattedData, charsmax( szFormattedData ),
	"%i %i %i %i %i %i %i %i %i %i %i %i",
	
	g_iPoints[ id ],
	g_iLevels[ id ],
	
	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 ] )
	
	fvault_set_data( g_VaultSkillPoints, g_szAuthID[ id ], szFormattedData )
	
	if( g_iPoints[ id ] >= MAX_PONTUATION )
	{		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( id, "!g%s!n You have reached the maximum level! Your points and level will start again", PREFIX )
		}
		
		g_iPoints[ id ] = 0
		g_iLevels[ id ] = 0
		g_iClasses[ id ] = 0
		
		g_iKills[ id ] = 0
		g_iDeaths[ id ] = 0
		g_iHeadShots[ id ] = 0
		g_iKnifeKills[ id ] = 0
		g_iKnifeDeaths[ id ] = 0
		g_iGrenadeKills[ id ] = 0
		g_iGrenadeDeaths[ id ] = 0
		g_iBombExplosions[ id ] = 0
		g_iDefusedBombs[ id ] = 0
		g_iWonRounds[ id ] = 0
		
		CheckLevelAndSave( id )
	}
}

public LoadPoints( id )
{
	new szFormattedData[ 128 ]
	if( fvault_get_data( g_VaultSkillPoints, g_szAuthID[ id ], szFormattedData, charsmax( szFormattedData ) ) )
	{
		new szPlayerPoints[ 7 ]
		new szPlayerLevel[ 7 ]
		
		new szPlayerKills[ 7 ]
		new szPlayerDeahts[ 7 ]
		new szPlayerHeadShots[ 7 ]
		new szPlayerKnifeKills[ 7 ]
		new szPlayerKnifeDeaths[ 7 ]
		new szPlayerGrenadeKills[ 7 ]
		new szPlayerGrenadeDeaths[ 7 ]
		new szPlayerBombExplosions[ 7 ]
		new szPlayerDefusedBombs[ 7 ]
		new szPlayerWonRounds[ 7 ]
		
		parse( szFormattedData,
		szPlayerPoints, charsmax( szPlayerPoints ),
		szPlayerLevel, charsmax( szPlayerLevel ),
		
		szPlayerKills, charsmax( szPlayerKills ),
		szPlayerDeahts, charsmax( szPlayerDeahts ),
		szPlayerHeadShots, charsmax( szPlayerHeadShots ),
		szPlayerKnifeKills, charsmax( szPlayerKnifeKills ),
		szPlayerKnifeDeaths, charsmax( szPlayerKnifeDeaths ),
		szPlayerGrenadeKills, charsmax( szPlayerGrenadeKills ),
		szPlayerGrenadeDeaths, charsmax( szPlayerGrenadeDeaths ),
		szPlayerBombExplosions, charsmax( szPlayerBombExplosions ),
		szPlayerDefusedBombs, charsmax( szPlayerDefusedBombs ),
		szPlayerWonRounds, charsmax( szPlayerWonRounds ) )
		
		g_iPoints[ id ] = str_to_num( szPlayerPoints )
		g_iLevels[ id ] = str_to_num( szPlayerLevel )
		
		g_iKills[ id ] = str_to_num( szPlayerKills )
		g_iDeaths[ id ] = str_to_num( szPlayerDeahts )
		g_iHeadShots[ id ] = str_to_num( szPlayerHeadShots )
		g_iKnifeKills[ id ] = str_to_num( szPlayerKnifeKills )
		g_iKnifeDeaths[ id ] = str_to_num( szPlayerKnifeDeaths )
		g_iGrenadeKills[ id ] = str_to_num( szPlayerGrenadeKills )
		g_iGrenadeDeaths[ id ] = str_to_num( szPlayerGrenadeDeaths )
		g_iBombExplosions[ id ] = str_to_num( szPlayerBombExplosions )
		g_iDefusedBombs[ id ] = str_to_num( szPlayerDefusedBombs )
		g_iWonRounds[ id ] = str_to_num( szPlayerWonRounds )
		
	}
}

public GetSkillPoints( id )
{
	if( !get_pcvar_num( g_iEnableSkillPointsCmd ) )
	{
		ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
	}
	
	else
	{		
		if( g_iLevels[ id ] < ( MAX_LEVELS - 1 ) )
		{
			ClientPrintColor( id, "!g%s!n You have!g %d !npoints and level!g %s!n, points to next level!g %d", PREFIX, g_iPoints[ id ], CLASSES[ g_iLevels[ id ] ], ( LEVELS[ g_iLevels[ id ] ] - g_iPoints[ id ] ) )
		}
		
		else
		{
			ClientPrintColor( id, "!g%s!n You have!g %d !npoints and level!g %s!n (last level)", PREFIX, g_iPoints[ id ], CLASSES[ g_iLevels[ id ] ] )
		}
	}
	
	return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
}

public ChatAdvertisements( )
{
	new Players[ MAX_PLAYERS ]
	new iNum
	new i
	
	get_players( Players, iNum, "ch" )
	
	for( --iNum; iNum >= 0; iNum-- )
	{
		i = Players[ iNum ]
		
		ClientPrintColor( i, g_ChatAdvertise[ g_iK ], PREFIX )
	}
	
	g_iK++
	
	if( g_iK >= sizeof g_ChatAdvertise )
	{
		g_iK = 0
	}
}

public CmdGivePoints( id, level, cid )
{
	if ( !cmd_access( id, level, cid, 3 ) )
	{
		return PLUGIN_HANDLED
	}
	
	new Arg1[ 32 ]
	new Arg2[ 6 ]
	
	read_argv( 1, Arg1, charsmax( Arg1 ) )
	read_argv( 2, Arg2, charsmax( Arg2 ) )
	
	new iPlayer = cmd_target( id, Arg1, 1 )
	new iPoints = str_to_num( Arg2 )
	
	if ( !iPlayer )
	{
		console_print( id, "Sorry, player %s could not be found or targetted!", Arg1 )
		return PLUGIN_HANDLED
	}
	
	if( iPoints > 0 )
	{
		g_iPoints[ iPlayer ] += iPoints
		CheckLevelAndSave( iPlayer )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( 0, "!g%s!n %s gave!g %i!n points%s to %s", PREFIX, g_szName[ id ], iPoints, iPoints > 1 ? "s" : "", g_szName[ iPlayer ] )
		}
	}
	
	return PLUGIN_HANDLED
}

public CmdTakePoints( id, level, cid )
{
	if ( !cmd_access( id, level, cid, 3 ) )
	{
		return PLUGIN_HANDLED
	}
	
	new Arg1[ 32 ]
	new Arg2[ 6 ]
	
	read_argv( 1, Arg1, charsmax( Arg1 ) )
	read_argv( 2, Arg2, charsmax( Arg2 ) )
	
	new iPlayer = cmd_target( id, Arg1, 1 )
	new iPoints = str_to_num( Arg2 )
	
	if ( !iPlayer )
	{
		console_print( id, "Sorry, player %s could not be found or targetted!", Arg1 )
		return PLUGIN_HANDLED
	}
	
	if( iPoints > 0 )
	{
		g_iPoints[ iPlayer ] -= iPoints
		CheckLevelAndSave( iPlayer )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( 0, "!g%s!n %s take!g %i!n points%s from %s", PREFIX, g_szName[ id ], iPoints, iPoints > 1 ? "s" : "", g_szName[ iPlayer ] )
		}
	}
	
	return PLUGIN_HANDLED
}

public RestartSkillPoints( id )
{
	if( !get_pcvar_num( g_iEnableSkillPointsRestart ) )
	{
		ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
	}
	
	else
	{
		g_iPoints[ id ] = 0
		g_iLevels[ id ] = 0
		g_iClasses[ id ] = 0
		
		g_iKills[ id ] = 0
		g_iDeaths[ id ] = 0
		g_iHeadShots[ id ] = 0
		g_iKnifeKills[ id ] = 0
		g_iKnifeDeaths[ id ] = 0
		g_iGrenadeKills[ id ] = 0
		g_iGrenadeDeaths[ id ] = 0
		g_iBombExplosions[ id ] = 0
		g_iDefusedBombs[ id ] = 0
		g_iWonRounds[ id ] = 0
		
		CheckLevelAndSave( id )
		
		if( get_pcvar_num( g_iEnableAnnounceOnChat ) )
		{
			ClientPrintColor( id, "!g%s!n Your points and level will start again", PREFIX )
		}
	}
	
	return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
}

public SkillRank( id )
{
	if( !get_pcvar_num( g_iEnableSkillPointsCmdRank ) )
	{
		ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
	}
	
	else
	{
		new Array:aKey = ArrayCreate( 35 )
		new Array:aData = ArrayCreate( 128 )
		new Array:aAll = ArrayCreate( FvaultData )
		
		fvault_load( g_VaultSkillPoints, aKey, aData )
		
		new iArraySize = ArraySize( aKey )
		
		new Data[ FvaultData ]
		
		new i
		for( i = 0; i < iArraySize; i++ )
		{
			ArrayGetString( aKey, i, Data[ szSteamID ], sizeof Data[ szSteamID ] - 1 )
			ArrayGetString( aData, i, Data[ szSkillP_Data ], sizeof Data[ szSkillP_Data ] - 1 )
			
			ArrayPushArray( aAll, Data )
		}
		
		ArraySort( aAll, "SortData" )
		
		new szAuthIdFromArray[ 35 ]
		
		new j
		for( j = 0; j < iArraySize; j++ )
		{
			ArrayGetString( aAll, j, szAuthIdFromArray, charsmax( szAuthIdFromArray ) )
			
			if( equal( szAuthIdFromArray, g_szAuthID[ id ] ) )
			{
				break
			}	
		}
		
		ArrayDestroy( aKey )
		ArrayDestroy( aData )
		ArrayDestroy( aAll )
		
		ClientPrintColor( id, "!g%s!n Your rank is!g %i!n of!g %i!n players with!g %i!n points ", PREFIX, j + 1, iArraySize, g_iPoints[ id ] )
	}
	
	return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
}

public TopSkill( id )
{
	if( !get_pcvar_num( g_iEnableSkillPointsTop15 ) )
	{
		ClientPrintColor( id, "!g%s!n Command disabled", PREFIX )
	}
	
	else
	{
		show_motd( id, g_szMotd, "Top SkillPointers" )
	}
	
	return ( get_pcvar_num( g_iHideCmds ) == 0 ) ? PLUGIN_CONTINUE : PLUGIN_HANDLED_MAIN
}

public MakeTop15( )
{
	new iLen
	iLen = formatex( g_szMotd, charsmax( g_szMotd ),
	"<body bgcolor=#A4BED6>\
	<table width=100%% cellpadding=2 cellspacing=0 border=0>\
	<tr align=center bgcolor=#52697B>\
	<th width=4%%>#\
	<th width=30%% align=left>Player\
	<th width=8%%>Kills\
	<th width=8%%>Deaths\
	<th width=8%%>HS\
	<th width=8%%>Knife\
	<th width=8%%>Grenade\
	<th width=8%%>Bombs\
	<th width=8%%>Defuses\
	<th width=10%>Points" )
	
	new Array:aKey = ArrayCreate( 35 )
	new Array:aData = ArrayCreate( 128 )
	new Array:aAll = ArrayCreate( FvaultData )
	
	fvault_load( g_VaultSkillPoints, aKey, aData )
	
	new iArraySize = ArraySize( aKey )
	
	new Data[ FvaultData ]
	
	new i
	for( i = 0; i < iArraySize; i++ )
	{
		ArrayGetString( aKey, i, Data[ szSteamID ], sizeof Data[ szSteamID ] - 1 )
		ArrayGetString( aData, i, Data[ szSkillP_Data ], sizeof Data[ szSkillP_Data ] - 1 )
		
		ArrayPushArray( aAll, Data )
	}
	
	ArraySort( aAll, "SortData" )
	
	new szPlayerPoints[ 7 ]
	new szPlayerLevel[ 7 ]
	
	new szPlayerKills[ 7 ]
	new szPlayerDeahts[ 7 ]
	new szPlayerHeadShots[ 7 ]
	new szPlayerKnifeKills[ 7 ]
	new szPlayerKnifeDeaths[ 7 ]
	new szPlayerGrenadeKills[ 7 ]
	new szPlayerGrenadeDeaths[ 7 ]
	new szPlayerBombExplosions[ 7 ]
	new szPlayerDefusedBombs[ 7 ]
	new szPlayerWonRounds[ 7 ]
	
	new szName[ 22 ]
	new iSize = clamp( iArraySize, 0, 10 )
	
	new j
	for( j = 0; j < iSize; j++ )
	{
		ArrayGetArray( aAll, j, Data )
		
		fvault_get_data( g_VaultNames, Data[ szSteamID ], szName, charsmax( szName ) )
		
		replace_all( szName, charsmax( szName ), "<", "[" )
		replace_all( szName, charsmax( szName ), ">", "]" )
		
		parse( Data[ szSkillP_Data ],
		szPlayerPoints, charsmax( szPlayerPoints ),
		szPlayerLevel, charsmax( szPlayerLevel ),
		
		szPlayerKills, charsmax( szPlayerKills ),
		szPlayerDeahts, charsmax( szPlayerDeahts ),
		szPlayerHeadShots, charsmax( szPlayerHeadShots ),
		szPlayerKnifeKills, charsmax( szPlayerKnifeKills ),
		szPlayerKnifeDeaths, charsmax( szPlayerKnifeDeaths ),
		szPlayerGrenadeKills, charsmax( szPlayerGrenadeKills ),
		szPlayerGrenadeDeaths, charsmax( szPlayerGrenadeDeaths ),
		szPlayerBombExplosions, charsmax( szPlayerBombExplosions ),
		szPlayerDefusedBombs, charsmax( szPlayerDefusedBombs ),
		szPlayerWonRounds, charsmax( szPlayerWonRounds ) )
		
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<tr align=center>" )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%i", j + 1 )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td align=left>%s", szName )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerKills )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerDeahts )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerHeadShots )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerKnifeKills )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerGrenadeKills )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerBombExplosions )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerDefusedBombs )
		iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "<td>%s", szPlayerPoints )
	}
	
	iLen += formatex( g_szMotd[ iLen ], charsmax( g_szMotd ) - iLen, "</table></body>" )
	
	ArrayDestroy( aKey )
	ArrayDestroy( aData )
	ArrayDestroy( aAll )
}

public SortData( Array:aArray, iItem1, iItem2, iData[ ], iDataSize )
{
	new Data1[ FvaultData ]
	new Data2[ FvaultData ]
	
	ArrayGetArray( aArray, iItem1, Data1 )
	ArrayGetArray( aArray, iItem2, Data2 )
	
	new szPoints_1[ 7 ]
	parse( Data1[ szSkillP_Data ], szPoints_1, charsmax( szPoints_1 ) )
	
	new szPoints_2[ 7 ]
	parse( Data2[ szSkillP_Data ], szPoints_2, charsmax( szPoints_2 ) )
	
	new iCount1 = str_to_num( szPoints_1 )
	new iCount2 = str_to_num( szPoints_2 )
	
	return ( iCount1 > iCount2 ) ? -1 : ( ( iCount1 < iCount2 ) ? 1 : 0 )
}

public FwdPlayerSpawnPost( id )
{	
	if( is_user_alive( id ) )
	{
		g_iCurrentKills[ id ] = 0
		
		if( get_pcvar_num( g_iEnableShowSkillPointsOnNick ) )
		{
			new szName[ 32 ]
			get_user_info( id, "name", szName, charsmax( szName ) )
			
			new iLen = strlen( szName )
			
			new iPos = iLen - 1
			
			if( szName[ iPos ] == '>' )
			{    
				new i
				for( i = 1; i < 7; i++ )
				{    
					if( szName[ iPos - i ] == '<' )
					{    
						iLen = iPos - i
						szName[ iLen ] = '^0'
						break
					}
				}
			}
			
			format( szName[ iLen ], charsmax( szName ) - iLen, szName[ iLen-1 ] == ' ' ? "<%d>" : " <%d>", g_iPoints[ id ] )    
			set_user_info( id, "name", szName )
		}	
	}
}

public MessageSayText( iMsgID, iDest, iReceiver )
{
	if( get_pcvar_num( g_iHideChangeNickNotification ) )
	{	
		new const Cstrike_Name_Change[ ] = "#Cstrike_Name_Change"
		
		new szMessage[ sizeof( Cstrike_Name_Change ) + 1 ]
		get_msg_arg_string( 2, szMessage, charsmax( szMessage ) )
		
		if( equal( szMessage, Cstrike_Name_Change ) )
		{
			return PLUGIN_HANDLED
		}
	}
	
	return PLUGIN_CONTINUE
}

ClientPrintColor( id, String[ ], any:... )
{
	new szMsg[ 190 ]
	vformat( szMsg, charsmax( szMsg ), String, 3 )
	
	replace_all( szMsg, charsmax( szMsg ), "!n", "^1" )
	replace_all( szMsg, charsmax( szMsg ), "!t", "^3" )
	replace_all( szMsg, charsmax( szMsg ), "!g", "^4" )
	
	static msgSayText = 0
	static fake_user
	
	if( !msgSayText )
	{
		msgSayText = get_user_msgid( "SayText" )
		fake_user = get_maxplayers( ) + 1
	}
	
	message_begin( id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgSayText, _, id )
	write_byte( id ? id : fake_user )
	write_string( szMsg )
	message_end( )
}
everything works fine, but when you finished with your levels,after increased 1000 points, if you write /points it doesnt display anything, can you edit this as in case you finished levels, and if you say /points to show your actual points, cuz points are still increasing after you're done with levels

cvarlist
Code:
bps_ads "1"
bps_time_between_ads "300.0"
bps_announce_on_chat "1"
bps_skillpoints_on_nick "0"
bps_hide_change_nick_notification "0"
bps_skillpoints_cmd "1"
bps_skillpoints_cmd_restart "0"
bps_skillpoints_cmd_rank "0"
bps_skillpoints_cmd_top15 "0"
bps_hide_cmd "0"
bps_enable_win_per_hour "1"
bps_won_points_hour "1"
bps_lost_points_tk "1"
bps_lost_points_suicide "1"
bps_won_points_kill "1"
bps_lost_points_kill "1"
bps_won_points_headshot "1"
bps_lost_points_headshot "1"
bps_won_points_knife "1"
bps_lost_points_knife "1"
bps_won_points_grenade "1"
bps_lost_points_grenade "1"
bps_won_points_ts "0"
bps_won_points_cts "0"
bps_lost_points_ts "0"
bps_lost_points_cts "0"
bps_won_points_planter "0"
bps_won_points_planter_explode "0"
bps_won_points_defuser "0"
bps_won_points_4k "1"
bps_won_points_5k "1"
__________________
a simple act of caring creates an endless ripple.

Last edited by Nutu_; 09-22-2018 at 16:44. Reason: added cvar list
Nutu_ is offline
polimpo4
Member
Join Date: Jan 2017
Old 09-25-2018 , 02:30   Re: Basic Points system
Reply With Quote #2

Check that part
public CheckLevelAndSave( id )

You May Set It To Not Save After Reach Max Level... Fix It
polimpo4 is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 15:53.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode