| Going Dutch |
01-11-2014 20:13 |
XP Required %i, Help!
Hello,
I am trying to add so you can see on what amount of XP you level up.
Example: 25/300, you level up when you gained 100xp.
The problem i am having now is that the /300 isn't changing it keeps on 300 and when you reach over it it also wont change to the next amount needed for that level. so you will have 310/300.
PHP Code:
#include <amxmodx> #include <amxmisc> #include <nvault> #include <colorchat> #include <cstrike> #include <fun> #include <hamsandwich> #include <fakemeta>
new Level[33], eXP[33] new KillXp, HsXp, HeXp/*, KnifeXp*/ new gVault
new const szPrefix[] = "[^4GDG^3] -"
#define MaxLevels 102 #define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers ) #define TASK_SHOW_HUD 10113
new g_msgHudSync new bool:is_user_ignored[ 33 ]
new const Levels[MaxLevels] = { 150, // 1 300, 450, 600, 750, 900, 1050, 1200, 1350, 1500, 1650, 1800, 1950, 2100, 2250, //15 2400, 2550, 2700, 2850, 3000, //20 3150, 3300, 3450, 3600, 3750, 3900, 4050, 4200, 4350, 4500, //30 4650, 4800, 4950, 5100, 5250, 5400, 5550, 5700, 5850, 6000, //40 6150, 6300, 6450, 6600, 6750, 6900, 7050, 7200, 7350, 7500,//50 7650, 7800, 7950, 8100, 8250, 8400, 8550, 8700, 8850, 9000,//60 9150, 9300, 9450, 9600, 9750, 9900, 10050, 10200, 10350, 10500,//70 10650, 10800, 10950, 11100, 11250, 11400, 11550, 11700, 11850, 12000,//80 12150, 12300, 12450, 12600, 12750, 12900, 13050, 13200, 13350, 13500,//90 13650, 13800, 13950, 14100, 14250, 14400, 14550, 14700, 14850, 15000 //100 } new const Prefix[MaxLevels +1][] = { "Lvl 0", // 0 "Lvl 1", // 1 "Lvl 2", // 2 "Lvl 3", // 3 "Lvl 4", // 4 "Lvl 5", // 5 "Lvl 6", // 6 "Lvl 7", // 7 "Lvl 8", // 8 "Lvl 9", // 9 "Lvl 10", // 10 "Lvl 11", // 11 "Lvl 12", // 12 "Lvl 13", // 0 "Lvl 14", // 1 "Lvl 14", // 2 "Lvl 15", // 3 "Lvl 16", // 4 "Lvl 17", // 5 "Lvl 18", // 6 "Lvl 19", // 7 "Lvl 20", // 8 "Lvl 21", // 9 "Lvl 22", // 10 "Lvl 23", // 11 "Lvl 24", // 12 "Lvl 25", // 1 "Lvl 26", // 2 "Lvl 27", // 3 "Lvl 28", // 4 "Lvl 29", // 5 "Lvl 30", // 6 "Lvl 31", // 7 "Lvl 32", // 8 "Lvl 33", // 9 "Lvl 34", // 10 "Lvl 35", // 11 "Lvl 36", // 12 "Lvl 37", // 0 "Lvl 38", // 1 "Lvl 39", // 2 "Lvl 40", // 3 "Lvl 41", // 4 "Lvl 42", // 5 "Lvl 43", // 6 "Lvl 44", // 7 "Lvl 45", // 8 "Lvl 46", // 9 "Lvl 47", // 10 "Lvl 48", // 11 "Lvl 49", // 12 "Lvl 50", //50 "Lvl 51", // 1 "Lvl 52", // 2 "Lvl 53", // 3 "Lvl 54", // 4 "Lvl 55", // 5 "Lvl 56", // 6 "Lvl 57", // 7 "Lvl 58", // 8 "Lvl 59", // 9 "Lvl 60", // 10 "Lvl 61", // 11 "Lvl 62", // 12 "Lvl 63", // 0 "Lvl 64", // 1 "Lvl 65", // 3 "Lvl 66", // 4 "Lvl 67", // 5 "Lvl 68", // 6 "Lvl 69", // 7 "Lvl 70", // 8 "Lvl 71", // 9 "Lvl 72", // 10 "Lvl 73", // 11 "Lvl 74", // 12 "Lvl 75", // 1 "Lvl 76", // 2 "Lvl 77", // 3 "Lvl 78", // 4 "Lvl 79", // 5 "Lvl 80", // 6 "Lvl 81", // 7 "Lvl 82", // 8 "Lvl 83", // 9 "Lvl 84", // 10 "Lvl 85", // 11 "Lvl 86", // 12 "Lvl 87", // 0 "Lvl 88", // 1 "Lvl 89", // 2 "Lvl 90", // 3 "Lvl 91", // 4 "Lvl 92", // 5 "Lvl 93", // 6 "Lvl 94", // 7 "Lvl 95", // 8 "Lvl 96", // 9 "Lvl 97", // 10 "Lvl 98", // 11 "Lvl 99", // 12 "Lvl 100", //50 "MAX" }
// Bonus Stuff new healthperlevel, armorperlevel, speedperlevel, damageperlevel, gravityperlvl new g_iMaxPlayers
// ADMIN CHAT COLORS by ConnorMcLeod enum _:ADMIN_DATAS { m_szName[32], m_iFlag }
new const AdminsDatas[][ADMIN_DATAS] = { {"Owner", ADMIN_IMMUNITY}, {"Admin", ADMIN_KICK}, // {"SuperAdmin", ADMIN_CFG}, {"VIP", ADMIN_RESERVATION}, {"GDG", ADMIN_LEVEL_G} };
public plugin_init() { register_plugin("Leveltag", "1.0.0", "Jeroen") register_message(get_user_msgid("SayText"),"Message_SayText"); // CREDITS TO ConnorMcLeod RegisterHam ( Ham_Spawn, "player", "Ham_CheckOthers_Bonus", 1); RegisterHam ( Ham_TakeDamage, "player", "Ham_CheckDamage_Bonus", .Post = false ); RegisterHam ( Ham_Item_PreFrame, "player", "Ham_CheckSpeed_Bonus", 1); g_iMaxPlayers = get_maxplayers( ); register_cvar( "AdminChatColors_On", "1" ); // Admin Tag - Example: [Admin] Freestyle register_cvar( "XP_Reward_MSG", "1" ); // Message of the XP Gain // CHAT COMMANDS // register_clcmd ( "say /xp", "ShowPlayerXP") register_clcmd ( "say_team /xp", "ShowPlayerXP") register_clcmd ( "say /level", "ShowPlayerLevel") register_clcmd ( "say_team /level", "ShowPlayerLevel") // XP SYSTEM // KillXp = register_cvar("drxp_per_kill", "10") HsXp = register_cvar("drxp_per_hs", "15") HeXp = register_cvar("drxp_per_nade_kill", "10") //KnifeXp = register_cvar("drxp_per_knife_kill", "10") // Give & Remove XP // register_concmd ( "give_xp", "CmdAddXP", ADMIN_RCON, "<nick, #userid, authid | @all> <xp>" ) register_concmd ( "remove_xp", "CmdRemoveXP", ADMIN_RCON, "<nick, #userid, authid | @all> <xp>" ) /* Bonus Stuff */ // Health Per Level // healthperlevel = register_cvar("health_per_lvl", "0") // Armor Per Level // armorperlevel = register_cvar("armor_per_lvl", "0") // Speed Per Level // speedperlevel = register_cvar("speed_per_lvl", "0") // Gravity Per Level // gravityperlvl = register_cvar("gravity_per_lvl", "0") // NERVER MORE THAN 66 PER LVL // Damage Per Level // damageperlevel = register_cvar("damage_per_lvl", "0") g_msgHudSync = CreateHudSyncObj() }
public plugin_cfg( ) { gVault = nvault_open( "TAG_LVLS" ) if ( gVault == INVALID_HANDLE ) set_fail_state( "Error opening nVault" ); }
/* INFO ABOUT PERSONAL XP/LEVEL */ public ShowPlayerXP(id) { ColorChat(id, GREY, "%s You have ^4%i^3 XP and your Level are ^4%s^3!", szPrefix, eXP[id], Prefix[Level[id]]) }
public ShowPlayerLevel(id) { new name[32] get_user_name(id, name, sizeof(name) -1) ColorChat(id, GREY, "%s You are Level ^4%s^3 with ^4%i^3 XP!", szPrefix, Prefix[Level[id]], eXP[id]) }
public Ham_CheckDamage_Bonus( pevVictim, pevInflictor, pevAttacker, Float:flDamage, iDmgBits ) { if( !( 1 <= pevAttacker <= g_iMaxPlayers) ) { return HAM_HANDLED; } if( !is_user_alive( pevAttacker ) ) { return HAM_HANDLED; }
SetHamParamFloat( 4 , flDamage + ( get_pcvar_num( damageperlevel ) * Level[ pevAttacker ] ) )
return HAM_IGNORED; }
/* Speed Check */ public Ham_CheckSpeed_Bonus( id ) { if( !is_user_alive( id ) || cs_get_user_team( id ) != CS_TEAM_T ) { return HAM_IGNORED; } set_user_maxspeed( id, 250.0 + ( get_pcvar_num(speedperlevel) * Level[ id ] ) ); 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 ); // Gravity new GRAVITYCheck = 800 - ( get_pcvar_num( gravityperlvl ) * Level[ id ] ); if(get_pcvar_num(gravityperlvl) > 66) { set_user_gravity( id, float( 8 ) / 800.0 ); } else { set_user_gravity( id, float( GRAVITYCheck ) / 800.0 ); } 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 ^4Respected Player : ^1%s^4 has joined with ^1%i^4 XP!", szPrefix, name, eXP[id]) }
public LvL_12_PlayerRemove(id) { new name[32] get_user_name(id, name, sizeof(name) -1) ColorChat(0, GREY, "%s ^4Respected Player : %s has left with %i XP!", szPrefix, name, eXP[id]) } public plugin_end( ) nvault_close( gVault ) 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 <= g_iMaxPlayers ) && ( 1 <= iVictim <= g_iMaxPlayers ) && !( hitplace == HIT_HEAD ) && !( wpnindex == CSW_HEGRENADE ) ) { eXP[iKiller] += get_pcvar_num(KillXp) if( get_cvar_num("XP_Reward_MSG") == 1 ) { ColorChat ( iKiller, GREY, "%s You got^4 %i^3 XP for killing^4 %s^3", szPrefix, get_pcvar_num(KillXp), vname ) } } if( hitplace == HIT_HEAD ) { eXP[iKiller] += get_pcvar_num(HsXp) if( get_cvar_num("XP_Reward_MSG") == 1 ) { ColorChat ( iKiller, GREY, "%s You got ^4%i^3 XP for killing ^4%s^3 with a ^4HeadShot", szPrefix, get_pcvar_num (HsXp), vname ) } } if( wpnindex == CSW_HEGRENADE && iKiller != iVictim ) { eXP[iKiller] += get_pcvar_num(HeXp) if( get_cvar_num("XP_Reward_MSG") == 1 ) { ColorChat( iKiller, GREEN, "%s^1 You got^4 %i^3 XP for killing^4 %s^3 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(eXP[id] >= Levels[Level[id]]) { Level[id] += 1 ColorChat(id, GREY, "%s Congratulations, you've leveled up! You are now level : ^4%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, g_msgHudSync,"[You Are %s]^n[XP : %i / %i ]", Prefix[Level[id]], eXP[id], Levels[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#",eXP[id],Level[id]) nvault_set(gVault,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#",eXP[id],Level[id]) nvault_get(gVault,vaultkey,vaultdata,255) replace_all(vaultdata, 255, "#", " ") new playerxp[32], playerlevel[32] parse(vaultdata, playerxp, 31, playerlevel, 31) eXP[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 ] eXP[ 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 ] eXP[ 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 ] eXP[ 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 ) { eXP[ 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 ] eXP[ All ] -= XPtoRemove } CheckLevel( All ) ColorChat ( 0, GREY, "%s ^1%s^3 toke^1 %i^3 XP of all ^1 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 ] eXP[ T ] -= XPtoRemove } } CheckLevel( T ) ColorChat ( 0, GREY, "%s ^1%s^3 toke^1 %i^3 XP of all ^1 Terrorists^3!", 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 ] eXP[ CT ] -= XPtoRemove } } CheckLevel( CT ) ColorChat ( 0, GREY, "%s ^1%s^3 toke^1 %i^3 XP of all ^1 Counter-Terrorists^3!", szPrefix, AdminName, XPtoRemove ) } } else { new iTarget = cmd_target( iPlayer, arg, 3 ) get_user_name ( iTarget, TargetName, charsmax ( TargetName ) ) if( !iTarget ) return PLUGIN_HANDLED eXP[ iTarget ] -= XPtoRemove CheckLevel( iTarget ) ColorChat ( 0, GREY, "%s ^1%s^3 give^1 %i^3 XP to^1 %s^3", szPrefix, AdminName, XPtoRemove, TargetName ) } return PLUGIN_HANDLED } /* Level Behind Nick & AdminChatColors CREDITS TO ConnorMcLeod */ public Message_SayText(msgId,msgDest,msgEnt) { new id = get_msg_arg_int(1); if( is_user_connected(id) ) { if( get_cvar_num("AdminChatColors_On") == 1 ) { new flags = get_user_flags(id) for(new i; i<sizeof(AdminsDatas); i++) { if( flags & AdminsDatas[i][m_iFlag] ) { new szChannel[64] get_msg_arg_string(2, szChannel, charsmax(szChannel)) if( equal(szChannel, "#Cstrike_Chat_All") ) { formatex(szChannel, charsmax(szChannel), "^4[%s - %s] ^3%%s1 ^1: %%s2", Prefix[Level[id]], AdminsDatas[i][m_szName]) set_msg_arg_string(2, szChannel) } else if( !equal(szChannel, "#Cstrike_Name_Change") ) { format(szChannel, charsmax(szChannel), "^4[%s - %s] %s", Prefix[Level[id]], AdminsDatas[i][m_szName], szChannel) set_msg_arg_string(2, szChannel) } return } else { new szChannel[64] get_msg_arg_string(2, szChannel, charsmax(szChannel)) if( equal(szChannel, "#Cstrike_Chat_All") ) { formatex(szChannel, charsmax(szChannel), "^4[%s] ^3%%s1 ^1: %%s2", Prefix[Level[id]]) set_msg_arg_string(2, szChannel) } else if( !equal(szChannel, "#Cstrike_Name_Change") ) { format(szChannel, charsmax(szChannel), "^4[%s] %s", Prefix[Level[id]], szChannel) set_msg_arg_string(2, szChannel) } return } } } else { new szChannel[64] get_msg_arg_string(2, szChannel, charsmax(szChannel)); if( equal(szChannel, "#Cstrike_Chat_All") ) { formatex(szChannel, charsmax(szChannel), "^4[%s] ^3%%s1 ^1: %%s2", Prefix[Level[id]]) set_msg_arg_string(2, szChannel) } else if( !equal(szChannel, "#Cstrike_Name_Change") ) { format(szChannel, charsmax(szChannel), "^4[%s] %s", Prefix[Level[id]], szChannel) set_msg_arg_string(2, szChannel) } return } } }
|