#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <colorchat>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
new Level[33], XP[33]
new KillXp, HSXp, HEXp
new Vault
new const szPrefix[] = "^4[XP / Level]"
#define MaxLevels 12
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
#define TASK_SHOW_HUD 10113
new msgHudSync
new bool:is_user_ignored[ 33 ]
new const Levels[MaxLevels] = {
100, // Újonc #1
150, // Legénység #2
200, // Közkatona #3
250, // Őrvezető #4
300, // Tizedes #5
350, // Szakaszvezető #6
400, // Altiszt #7
450, // Tiszthelyettes #8
550, // Őrmester #9
600, // Törzsőrmester #10
650, // Főtörzsőrmester #11
700, // Zászlós #12
750, // Törzszászlós #13
800, // Főtörzszászlós #14
850, // Tiszt #15
900, // Hadnagy #16
950, // Főhadnagy #17
1100, // Százados #18
1250, // Főtiszt #19
1350, // Őrnagy #20
1500, // Alezredes #21
1750, // Ezredes #22
2000, // Tábornok #23
2250, // Dandártábornok #24
2500, // Vezérőrnagy #25
2750, // Altábornagy #26
3000, // Vezérezredes #27
3500, // Hadseregtábornok #28
4000 // Marsall #29
}
new const Prefix[MaxLevels +1][] ={
"Újonc", // 1
"Legénység", // 2
"Közkatona", // 3
"Őrvezető", // 4
"Tizedes", // 5
"Szakaszvezető", // 6
"Altiszt", // 7
"Tiszthelyettes", // 8
"Őrmester", // 9
"Törzsőrmester", // 10
"Főtörzsőrmester", // 11
"Zászlós", // 12
"Törzszászlós" // 13
"Főtörzszászlós" // 14
"Tiszt" // 15
"Hadnagy" // 16
"Főhadnagy" // 17
"Százados" // 18
"Főtiszt" // 19
"Őrnagy" // 20
"Alezredes" // 21
"Ezredes" // 22
"Tábornok" // 23
"Dandártábornok" // 24
"Vezérőrnagy" // 25
"Altábornagy" // 26
"Vezérezredes" // 27
"Hadseregtábornok" // 28
"Marsall" // 29
}
// Bonus Stuff
new healthperlevel,armorperlevel,damageperlevel,maxplayers
public plugin_init()
{
register_plugin("sDeathrun XP & Level Mod", "1.0.2", "Freestyle")
RegisterHam ( Ham_Spawn, "player", "Ham_CheckOthers_Bonus", 1);
RegisterHam ( Ham_TakeDamage, "player", "Ham_CheckDamage_Bonus", .Post = false );
maxplayers = get_maxplayers( );
register_cvar( "dr_staff_tags", "1" ); // default 1 (enable)
register_cvar( "dr_reward_msgs", "1" ); // default 1 (enable)
register_clcmd("say","handlesay")
register_clcmd("say_team","handlesay")
register_clcmd ( "say /xp", "ShowPlayerXP")
register_clcmd ( "say_team /xp", "ShowPlayerXP")
register_clcmd ( "say /level", "ShowPlayerLevel")
register_clcmd ( "say_team /level", "ShowPlayerLevel")
KillXp = register_cvar("dr_exp_kill", "5") // Experience for killing a player
HSXp = register_cvar("dr_exp_hs", "10") // Experience for killing a player with HeadShot
HEXp = register_cvar("dr_exp_nade_kill", "10") // Experience for killing a player with a HE Grenade
register_concmd ( "dr_exp_give", "CmdAddXP", ADMIN_RCON, "<nick, #userid, authid | @all> <xp>" )
register_concmd ( "dr_exp_remove", "CmdRemoveXP", ADMIN_RCON, "<nick, #userid, authid | @all> <xp>" )
healthperlevel = register_cvar("dr_health_per_lvl", "10")
armorperlevel = register_cvar("dr_armor_per_lvl", "10")
damageperlevel = register_cvar("damage_per_lvl", "10")
msgHudSync = CreateHudSyncObj()
}
public plugin_cfg( )
{
Vault = nvault_open( "DEATHRUN_XP" )
if ( Vault == INVALID_HANDLE )
set_fail_state( "Error opening nVault" );
}
/* INFO ABOUT PERSONAL XP/LEVEL */
public ShowPlayerXP(id)
{
ColorChat(id, GREY, "%s^1 You have ^3%i^1 of Experience and your Level are ^3%s^1!", szPrefix, XP[id], Prefix[Level[id]])
}
public ShowPlayerLevel(id)
{
new name[32]
get_user_name(id, name, sizeof(name) -1)
ColorChat(id, GREY, "%s^1 You are Level ^3%s^1 with ^3%i^1 of Experience!", szPrefix, Prefix[Level[id]], XP[id])
}
public Ham_CheckDamage_Bonus( pevVictim, pevInflictor, pevAttacker, Float:flDamage, iDmgBits )
{
if( !( 1 <= pevAttacker <= maxplayers) )
{
return HAM_HANDLED;
}
if( !is_user_alive( pevAttacker ) )
{
return HAM_HANDLED;
}
SetHamParamFloat( 4 , flDamage + ( get_pcvar_num( damageperlevel ) * Level[ pevAttacker ] ) )
return HAM_IGNORED;
}
/* HP & AP & Gravity Check */
public Ham_CheckOthers_Bonus(id)
{
if( !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T )
return HAM_IGNORED;
// HP Check
new HPCheck = ( get_user_health(id) + get_pcvar_num(healthperlevel) * Level[ id ] );
set_user_health( id, HPCheck );
// AP Check
new APCheck = ( get_user_armor(id) + get_pcvar_num(armorperlevel) * Level[ id ] );
set_user_armor( id, APCheck );
remove_task( TASK_SHOW_HUD + id );
set_task(0.1, "ShowHud", TASK_SHOW_HUD + id)
return HAM_IGNORED;
}
/* Respected Player Join / Leave Stuff */
public LvL_12_PlayerJoin(id)
{
new name[32]
get_user_name(id, name, sizeof(name) -1)
ColorChat(0, GREY, "%s ^3Respected Player : ^4%s^1 has joined with ^3%i^1 of Experience!", szPrefix, name, XP[id])
}
public LvL_12_PlayerRemove(id)
{
new name[32]
get_user_name(id, name, sizeof(name) -1)
ColorChat(0, GREY, "%s ^3Respected Player : ^4%s^1 has left with ^3%i^1 of Experience!", szPrefix, name, XP[id])
}
public plugin_end( )
nvault_close( Vault )
public client_putinserver(id)
{
LoadData(id)
set_task( 3.0, "ShowHud", id, .flags = "b" );
if(Level[id] == 12)
{
set_task(5.0, "LvL_12_PlayerJoin", id)
}
}
public client_disconnect(id)
{
SaveData(id)
if(Level[id] == 12)
{
set_task(1.0, "LvL_12_PlayerRemove", id)
}
}
/* XP REWARDS */
public client_death( iKiller, iVictim, wpnindex, hitplace )
{
new vname[32]
new kname[32]
get_user_name( iKiller, kname, charsmax( kname ) )
get_user_name( iVictim, vname, charsmax( vname ) )
if( is_user_ignored[ iKiller ] )
return PLUGIN_HANDLED_MAIN
get_user_name( iKiller, kname, charsmax( kname ) )
get_user_name( iVictim, vname, charsmax( vname ) )
if( iKiller != iVictim && ( 1 <= iKiller <= maxplayers ) && ( 1 <= iVictim <= maxplayers ) && !( hitplace == HIT_HEAD ) && !( wpnindex == CSW_HEGRENADE ) )
{
XP[iKiller] += get_pcvar_num(KillXp)
if( get_cvar_num("XP_Reward_MSG") == 1 )
{
ColorChat ( iKiller, GREY, "%s^1 You got^3 %i^1 of Experience for killing^3 %s^1", szPrefix, get_pcvar_num(KillXp), vname )
}
}
if( hitplace == HIT_HEAD )
{
XP[iKiller] += get_pcvar_num(HSXp)
if( get_cvar_num("XP_Reward_MSG") == 1 )
{
ColorChat ( iKiller, GREY, "%s^1 You got ^3%i^1 of Experience for killing ^3%s^1 with a ^4HeadShot", szPrefix, get_pcvar_num (HSXp), vname )
}
}
if( wpnindex == CSW_HEGRENADE && iKiller != iVictim )
{
XP[iKiller] += get_pcvar_num(HEXp)
if( get_cvar_num("XP_Reward_MSG") == 1 )
{
ColorChat( iKiller, GREEN, "%s^1 You got^3 %i^1 of Experience for killing^3 %s^1 with a ^4Grenade", szPrefix, get_pcvar_num (HEXp), vname )
}
}
CheckLevel(iKiller)
SaveData(iKiller)
return PLUGIN_CONTINUE
}
public CheckLevel(id)
{
if(Level[id] < MaxLevels-1)
{
while(XP[id] >= Levels[Level[id]])
{
Level[id] += 1
ColorChat(id, GREY, "%s^1 Congratulations, you've leveled up! You are now level : ^3%i^3", szPrefix, Level[id])
}
}
}
/* HUD PERMANENT INFO */
public ShowHud(task)
{
new id = task - TASK_SHOW_HUD
if(!is_user_alive(id))
return;
set_hudmessage(0, 255, 0, 0.02, 0.33, 0, 0.0, 0.3, 0.0, 0.0)
ShowSyncHudMsg(id, msgHudSync,"[Status : %s]^n[XP : %i]", Prefix[Level[id]], XP[id])
set_task(0.1, "ShowHud", TASK_SHOW_HUD + id)
}
/* nVault Stuff */
public SaveData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",XP[id],Level[id])
nvault_set(Vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",XP[id],Level[id])
nvault_get(Vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
XP[id] = str_to_num(playerxp)
Level[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}
/* Remove And Add XP */
public CmdAddXP ( iPlayer, level, cid )
{
if( !cmd_access( iPlayer, level, cid, 3 ) ) return PLUGIN_HANDLED;
new arg [ 32 ]
read_argv ( 1, arg, 31 )
new AddXP [ 32 ]
read_argv ( 2, AddXP, charsmax ( AddXP ) )
new XPtoGive = str_to_num ( AddXP )
new AdminName [ 32 ]
new TargetName [ 32 ]
get_user_name ( iPlayer, AdminName, charsmax ( AdminName ) )
if( arg[0]=='@' )
{
if( equali(arg[1],"All") || equali(arg[1],"ALL") )
{
new players[32], totalplayers, All
get_players( players, totalplayers )
for ( new i = 0; i < totalplayers; i++ )
{
All = players[ i ]
XP[ All ] += XPtoGive
}
CheckLevel( All )
ColorChat ( 0, GREY, "%s ^1%s^3 give^1 %i^3 XP to all ^1 players^3!", szPrefix, AdminName, XPtoGive )
}
else if( equali(arg[1],"T") || equali(arg[1],"t") )
{
new players[32], totalplayers, T
get_players( players, totalplayers )
for ( new i = 0; i < totalplayers; i++ )
{
if ( get_user_team(players[ i ]) == 1 )
{
T = players[ i ]
XP[ T ] += XPtoGive
}
}
CheckLevel( T )
ColorChat ( 0, GREY, "%s ^1%s^3 give^1 %i^3 XP to all ^1 Terrorists^3!", szPrefix, AdminName, XPtoGive )
}
else if( equali(arg[1],"CT") || equali(arg[1],"ct") )
{
new players[32], totalplayers, CT
get_players( players, totalplayers )
for( new i = 0; i < totalplayers; i++ )
{
if( get_user_team(players[ i ] ) == 2 )
{
CT = players[ i ]
XP[ CT ] += XPtoGive
}
}
CheckLevel( CT )
ColorChat ( 0, GREY, "%s ^1%s^3 give^1 %i^3 XP to all ^1 Counter-Terrorists^3!", szPrefix, AdminName, XPtoGive )
}
}
else
{
new iTarget = cmd_target( iPlayer, arg, 3 )
get_user_name ( iTarget, TargetName, charsmax ( TargetName ) )
if( iTarget )
{
XP[ iTarget ] += XPtoGive
CheckLevel( iTarget )
ColorChat ( 0, GREY, "%s ^1%s^3 give^1 %i^3 XP to^1 %s^3", szPrefix, AdminName, XPtoGive, TargetName )
}
}
return PLUGIN_HANDLED
}
public CmdRemoveXP ( iPlayer, level, cid )
{
if( !cmd_access(iPlayer, level, cid, 3) ) return PLUGIN_HANDLED;
new arg [ 32 ]
read_argv ( 1, arg, 31 )
new RemoveXP [ 32 ]
read_argv ( 2, RemoveXP, charsmax ( RemoveXP ) )
new XPtoRemove = str_to_num ( RemoveXP )
new AdminName [ 32 ]
new TargetName [ 32 ]
get_user_name ( iPlayer, AdminName, charsmax ( AdminName ) )
if( arg[0]=='@' )
{
if( equali(arg[1],"All") || equali(arg[1],"ALL") )
{
new players[32], totalplayers, All
get_players( players, totalplayers )
for ( new i = 0; i < totalplayers; i++ )
{
All = players[ i ]
XP[ All ] -= XPtoRemove
}
CheckLevel( All )
ColorChat ( 0, GREY, "%s ^3%s^1 toke^3 %i^1 of Experience of all ^3 players^3!", szPrefix, AdminName, XPtoRemove )
}
else if( equali(arg[1],"T") || equali(arg[1],"t") )
{
new players[32], totalplayers, T
get_players( players, totalplayers )
for ( new i = 0; i < totalplayers; i++ )
{
if ( get_user_team(players[ i ]) == 1 )
{
T = players[ i ]
XP[ T ] -= XPtoRemove
}
}
CheckLevel( T )
ColorChat ( 0, GREY, "%s ^3%s^1 toke^3 %i^1 of Experience of all ^3 Terrorists^1!", szPrefix, AdminName, XPtoRemove )
}
else if( equali(arg[1],"CT") || equali(arg[1],"ct") )
{
new players[32], totalplayers, CT
get_players( players, totalplayers )
for( new i = 0; i < totalplayers; i++ )
{
if( get_user_team(players[ i ] ) == 2 )
{
CT = players[ i ]
XP[ CT ] -= XPtoRemove
}
}
CheckLevel( CT )
ColorChat ( 0, GREY, "%s ^3%s^1 toke^3 %i^1 of Experience of all ^3 Counter-Terrorists^1!", szPrefix, AdminName, XPtoRemove )
}
}
else
{
new iTarget = cmd_target( iPlayer, arg, 3 )
get_user_name ( iTarget, TargetName, charsmax ( TargetName ) )
if( !iTarget )
return PLUGIN_HANDLED
XP[ iTarget ] -= XPtoRemove
CheckLevel( iTarget )
ColorChat ( 0, GREY, "%s ^3%s^1 give^3 %i^1 of Experience to^3 %s^1", szPrefix, AdminName, XPtoRemove, TargetName )
}
return PLUGIN_HANDLED
}
public handlesay(id)
{
new message[192]
new strName[191], strText[191];
read_args (message, 191)
remove_quotes (message)
new name[32];
get_user_name (id, name, 31);
if( is_user_connected(id))
{
if( is_user_alive(id))
{
format (strName, 191, "^x04[%s]^x03 %s", Prefix[Level[id]],name)
format (strText, 191, "^x01%s", message)
}
}
format (message, 191, "%s: %s", strName, strText)
new players[32], pnum, is;
get_players(players, pnum);
for(new i; i<pnum; i++)
{
is = players[i];
if(cs_get_user_team(id) == CS_TEAM_CT)
ColorChat(is, BLUE, message)
else if(cs_get_user_team(id) == CS_TEAM_T)
ColorChat(is, RED, message)
else
ColorChat(is, GREY, message)
}
return PLUGIN_HANDLED;
}