Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "EXP/Level System"
#define VERSION "1.0"
#define AUTHOR "ChileScripting"
/* PLUGIN CUSTOMIZATION */
#define ConnectedValid(%1) (1 <= %1 <= get_maxplayers() && is_user_connected(%1))
#define TAG "^x04[ZP]^x01 "
#define MAX_LEVEL 100
#define Operation(%1) floatround(((%1 + 1) * float(%1 / 2)) * 6)
enum _:CVARS
{
EXP_KILL_ZOMBIE,
EXP_KILL_NEMESIS,
EXP_KILL_HUMAN,
EXP_KILL_SURVIVOR
}
enum _:DATA
{
NAMEVAR[40],
RESULT[6]
}
new const PLUGINVARS[CVARS][DATA] =
{
{
"zp_exp_kill_zombie",
"2"
},
{
"zp_exp_kill_nemesis",
"4"
},
{
"zp_exp_kill_human",
"2"
},
{
"zp_exp_kill_survivor",
"4"
}
}
enum VARIABLES
{
LEVEL = 0,
FRAGS_H
}
new g_Variable[33][VARIABLES]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
RegisterHam(Ham_Killed, "player", "HamKilled", 1)
for(new i = 0; i < sizeof PLUGINVARS; i++)
PLUGINVARS[i][RESULT] = register_cvar(PLUGINVARS[i][NAMEVAR], PLUGINVARS[i][RESULT])
}
public plugin_natives()
{
register_native("zp_get_user_level", "native_get_user_level", 1)
register_native("zp_get_user_fragsh", "native_get_user_fragsh", 1)
register_native("zp_set_user_level", "native_set_user_level", 1)
register_native("zp_set_user_fragsh", "native_set_user_fragsh", 1)
}
public client_putinserver(id)
{
g_Variable[id][LEVEL] = 1
g_Variable[id][FRAGS_H] = 0
}
public HamKilled(victim, attacker, shouldgib)
{
static selfkill
selfkill = (victim == attacker || !ConnectedValid(attacker)) ? true : false
if (selfkill) return
static EXP, szPrint[30]
if(zp_get_user_zombie(victim))
{
if(zp_get_user_nemesis(victim))
{
EXP = get_pcvar_num(PLUGINVARS[EXP_KILL_NEMESIS][RESULT])
szPrint = "Matar a un Nemesis"
}
else
{
EXP = get_pcvar_num(PLUGINVARS[EXP_KILL_ZOMBIE][RESULT])
szPrint = "Matar a un Zombie"
}
}
else
{
if(zp_get_user_survivor(victim))
{
EXP = get_pcvar_num(PLUGINVARS[EXP_KILL_SURVIVOR][RESULT])
szPrint = "Matar a un Survivor"
}
else
{
EXP = get_pcvar_num(PLUGINVARS[EXP_KILL_HUMAN][RESULT])
szPrint = "Matar a un Humano"
}
}
EXPCheck(attacker, EXP, szPrint)
}
public EXPCheck(id, EXP, const Print[])
{
if(!EXP) return 0;
if((g_Variable[id][FRAGS_H] + EXP) >= Operation(MAX_LEVEL))
{
g_Variable[id][FRAGS_H] = Operation(MAX_LEVEL)
say(id, "%sNo ganas EXP^x01, haz llegado al^x03 maximo nivel^x01 (^x03%d^x01)^x01.", TAG, MAX_LEVEL)
return 0;
}
g_Variable[id][FRAGS_H] += EXP
say(id, "%s Ganaste ^x04%d^x01 de^x03 EXP^x01 Por:^x04 %s^x01.", TAG, EXP, Print)
while(g_Variable[id][FRAGS_H] >= Operation(g_Variable[id][LEVEL]))
{
g_Variable[id][LEVEL]++
say(id, "%sHaz subido al^x04 nivel^x01:^x03 ^"^x04%d^x03^"^x01.", TAG, g_Variable[id][LEVEL])
}
return 1;
}
public native_get_user_level(id)
{
return g_Variable[id][LEVEL]
}
public native_get_user_fragsh(id)
{
return g_Variable[id][FRAGS_H]
}
public native_set_user_level(id, iCantidad)
{
g_Variable[id][LEVEL] = iCantidad
}
public native_set_user_fragsh(id, iCantidad)
{
g_Variable[id][FRAGS_H] = iCantidad
}
public say(id, const msg[], any:...) {
static buffer[512], msg_SayText = 0
if(!msg_SayText) msg_SayText = get_user_msgid("SayText")
vformat(buffer, charsmax(buffer), msg, 3)
message_begin(MSG_ONE_UNRELIABLE, msg_SayText, _, id)
write_byte(id)
write_string(buffer)
message_end()
}