PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <nvault>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
#define TASK_EXPERIENCE 3333
#define TASK_USERINFO 4444
#define EXP_TASK2 75646478
#define Attack_PerLevel 1
#define Killed_Exp 1
#define Health_PerLevel 2
new PlayerLevel[33]
new PlayerXp[33]
new g_kill[33]
new g_damage[33]
new g_msgSync
new g_maxplayers
new g_msgSayText
new vault
new bool:g_bConnected[33];
#define Max_Level 40
new LEVELS[Max_Level+1] =
{
10, //1
20, //2
30, //3
40, //4
50, //5
60, //6
70, //7
80, //8
90, //9
100, //10
110, //11
120, //12
130, //13
140, //14
150, //15
160, //16
170, //17
180, //18
190, //19
200, //20
400, //21
600, //22
800, //23
900, //24
1000, //25
1100, //26
1200, //27
1300, //28
1400, //29
1500, //30
2000, //31
2200, //32
2300, //33
2400, //34
2500, //35
2600, //36
2700, //37
2800, //38
2900, //39
3000, //40
}
public plugin_init()
{
register_plugin("??????", "1.1", "Fung")
register_clcmd("zp_addxp", "Cmd_AddXP", ADMIN_RCON, "<@all/t/ct>/<name><xp> - give users xp")
register_clcmd("zp_setlevel", "Cmd_SetLevel", ADMIN_RCON, "<name><level> - give users level")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
register_event("ResetHUD", "Event_ResetHUD", "be")
vault = nvault_open("LevelSystem")
g_msgSync = CreateHudSyncObj()
g_maxplayers = get_maxplayers()
g_msgSayText = get_user_msgid("SayText")
}
public plugin_natives()
{
register_native("get_user_level", "native_get_user_level", 1)
register_native("set_user_level", "native_set_user_level", 1)
register_native("get_user_xp", "native_get_user_xp", 1)
register_native("get_user_levels", "native_get_user_levels", 1)
}
public native_get_user_level(id)
{
return PlayerLevel[id]
}
public native_set_user_level(id, amount)
{
PlayerLevel[id] = amount
}
public native_get_user_xp(id)
{
return PlayerXp[id]
}
public native_get_user_levels(id)
{
return LEVELS[id]
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
if (!is_user_connected(victim))
return HAM_IGNORED
if ((attacker == victim) || !is_user_connected(attacker))
return HAM_IGNORED
new get_exp
new bool:already_set = false
new name[18]
g_kill[attacker] += 1
get_user_name(attacker, name, 17)
if (!already_set)
{
if (is_user_alive(attacker))
{
if (!is_user_alive(victim))
{
get_exp = (Killed_Exp * PlayerLevel[victim])
already_set = true
}
}
}
if (!already_set)
return HAM_IGNORED
add_experience(attacker, get_exp)
client_print(attacker, print_center, "+ %d EXP", get_exp)
client_print(attacker, print_console, "+ %d EXP", get_exp)
if(cs_get_user_team(attacker) == CS_TEAM_CT)
{
if (g_kill[attacker] == 2)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 2)
PlayerXp[attacker] += 1
colored_print(0, "^x03[Combo] %s Have been killed 2 Mourning dead vessels!!!! Win2Survival point and1EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 2 PEOPLE!!!!")
}
else if (g_kill[attacker] == 4)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 3)
PlayerXp[attacker] += 2
colored_print(0, "^x03[Combo] %s Have been killed 4 Mourning dead vessels!!!! Win3Survival point2EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 4 PEOPLE!!!!")
}
else if (g_kill[attacker] == 6)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 4)
PlayerXp[attacker] += 3
colored_print(0, "^x03[Combo] %s Have been killed 6 Mourning dead vessels!!!! Win4Survival point3EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 6 PEOPLE!!!!")
}
else if (g_kill[attacker] == 8)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 5)
PlayerXp[attacker] += 4
colored_print(0, "^x03[Combo] %s Have been killed 8 Mourning dead vessels!!!! Win5Survival point4EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 8 PEOPLE!!!!")
}
else if (g_kill[attacker] == 10)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 6)
PlayerXp[attacker] += 5
colored_print(0, "^x03[Combo] %s Have been killed 10 Mourning dead vessels!!!! Win6Survival point5EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 10 PEOPLE!!!!")
}
else if (g_kill[attacker] == 12)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 7)
PlayerXp[attacker] += 6
colored_print(0, "^x03[Combo] %s Have been killed 12 Mourning dead vessels!!!! Win7Survival point6EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 12 PEOPLE!!!!")
}
else if (g_kill[attacker] == 14)
{
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 8)
PlayerXp[attacker] += 7
colored_print(0, "^x03[Combo] %s Have been killed 14 Mourning dead vessels!!!! Win8Survival point7EXPReward", name)
set_hudmessage(255,0,0,-1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(attacker,"YOU COMBO KILLED 14 PEOPLE!!!!")
}
}
return PLUGIN_HANDLED;
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (!(1 <= attacker <= g_maxplayers) || victim == attacker || !is_user_connected(attacker))
return HAM_IGNORED;
if (!(damage_type & DMG_BULLET))
return HAM_IGNORED;
if (PlayerLevel[attacker] > 0)
{
static Float:damage_multi
if (cs_get_user_team(attacker) == CS_TEAM_CT)
damage_multi = 1.0 + float(PlayerLevel[attacker] * Attack_PerLevel / 100)
damage *= damage_multi
SetHamParamFloat(4, damage)
}
if (!attacker || attacker==victim || get_user_team(attacker)==get_user_team(victim) )
{
return PLUGIN_CONTINUE
}
g_damage[attacker] += 50
if (g_damage[attacker] >= 1500)
{
g_damage[attacker] -= 1500
PlayerXp[attacker] += 1
client_print(attacker, print_center, "+1EXP")
}
return HAM_IGNORED;
}
public Cmd_AddXP(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
{
return PLUGIN_HANDLED;
}
new Arg1[64], Target
read_argv(1, Arg1, 63)
new iAddExp[32], Value
read_argv(2, iAddExp, 31)
if (iAddExp[0] == '-')
{
console_print(id, "You cant have a - in the value")
return PLUGIN_HANDLED;
}
Value = str_to_num(iAddExp)
new AdminName[32]
get_user_name(id, AdminName, 31)
new TargetTeam
new Players[32], iNum
if (Arg1[0] == '@')
{
if (equali(Arg1[1], "all"))
{
TargetTeam = 0
get_players(Players, iNum)
}
else if (equali(Arg1[1], "t"))
{
TargetTeam = 1
get_players(Players, iNum, "e" , "terrorist")
}
else if (equali(Arg1[1], "ct"))
{
TargetTeam = 2
get_players(Players, iNum, "e" , "ct")
}
for (new i = 0; i < iNum; ++i)
{
Target = Players[i]
add_experience(Target, Value)
}
switch (TargetTeam)
{
case 0:
{
console_print(id, "You have given %d xp to all", Value)
colored_print(0, "^x04[Rating system]^x03 Administrator: %s Has been given to %d Experience in the whole", AdminName, Value)
}
case 1:
{
console_print(id, "You have given %d xp to the T team", Value)
colored_print(0, "^x04[Rating system]^x03 Administrator: %s Has been given to %d Experience in TS Ranks", AdminName, Value)
}
case 2:
{
console_print(id, "You have given %d xp to the CT team", Value)
colored_print(0, "^x04[Level System]^x03 Administrator: %s Has given %d Experience in CT Ranks", AdminName, Value)
}
}
}
else
{
Target = cmd_target(id, Arg1, 0)
if (!is_user_connected(Target))
return PLUGIN_HANDLED;
new TargetName[32]
get_user_name(Target, TargetName, 31)
add_experience(Target, Value)
console_print(id, "You have given %d xp to %s", Value, TargetName)
colored_print(Target, "^x04[Rating system]^x03 Administrator: %s Has given you %d Experience", AdminName, Value)
}
return PLUGIN_HANDLED;
}
public Cmd_SetLevel(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED;
new Arg1[64], Target
read_argv(1, Arg1, 63)
Target = cmd_target(id, Arg1, 0)
new iLevel[32], Value
read_argv(2, iLevel, 31)
Value = str_to_num(iLevel)
if (!is_user_connected(Target))
return PLUGIN_HANDLED;
if (Value > Max_Level)
{
console_print(id, "You cant have a more than %d", Max_Level)
return PLUGIN_HANDLED;
}
new AdminName[32]
get_user_name(id, AdminName, 31)
new TargetName[32]
get_user_name(Target, TargetName, 31)
PlayerLevel[Target] = Value
PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
console_print(id, "You have set %s level to %d", TargetName, Value)
colored_print(Target, "^x04[Rating system]^x03 Administrator: %s Has set up your grade is %d", AdminName, Value)
return PLUGIN_HANDLED;
}
public add_experience(id, value)
{
PlayerXp[id] += value
}
public show_user_info(taskid)
{
new id = taskid-TASK_USERINFO
if (is_user_alive(id))
{
new InfoMsg[128]
format(InfoMsg, charsmax(InfoMsg), "Level: %d-Xp: %d/%d|ATK bonus: +%d | COMBO: %d^n", PlayerLevel[id], PlayerXp[id], LEVELS[min(PlayerLevel[id]+1, Max_Level)],PlayerLevel[id]*Attack_PerLevel, g_kill[id])
set_hudmessage(0, 255, 0, 0.73, 0.81, 0, 6.0, 0.6, 0.0, 0.0, -1)
ShowSyncHudMsg(id, g_msgSync, InfoMsg)
}
else
{
// Get spectating target
new target = pev(id, pev_iuser2)
// If target is alive show infomation
if (is_user_alive(target))
{
new sName[32], szMenuBody[128]
get_user_name(target, sName, 31)
format(szMenuBody, charsmax(szMenuBody), "Level: %d^nXp: %d/%d", PlayerLevel[target], PlayerXp[target], LEVELS[min(PlayerLevel[target]+1, Max_Level)])
set_hudmessage(0, 255, 0, 0.01, 0.85, 0, 6.0, 0.6, 0.0, 0.0, -1)
ShowSyncHudMsg(id, g_msgSync, szMenuBody)
}
}
}
public process_experience(taskid)
{
new id = taskid-TASK_EXPERIENCE
new name[32]
get_user_name(id,name,31)
if (PlayerXp[id] >= LEVELS[Max_Level] || PlayerLevel[id] >= (Max_Level))
{
PlayerLevel[id] = Max_Level
PlayerXp[id] = min(PlayerXp[id], LEVELS[Max_Level])
return;
}
if (PlayerLevel[id] <= 0 && PlayerXp[id] >= LEVELS[PlayerLevel[id]+1])
{
PlayerLevel[id] += 1
set_hudmessage(200, 0, 0, -1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(id,"Level up!!!!^nYou have reached the %d Level" , PlayerLevel[id])
PlayerXp[id] = 0
}
else if (PlayerXp[id] >= LEVELS[PlayerLevel[id]+1])
{
PlayerLevel[id] += 1
set_hudmessage(200, 0, 0, -1.0, 0.17, 1, 3.0, 3.0, 1.0, 0.20, 3)
show_hudmessage(id,"Level up!!!!^nYou have reached the %d Level" , PlayerLevel[id])
colored_print(0, "^x04[Lvl] %s We arrive at ^x03%d ^x04Level!!!!", name, PlayerLevel[id])
PlayerXp[id] = 0
}
}
public client_putinserver(id)
{
PlayerXp[id] = 0
PlayerLevel[id] = 0
set_task(0.1, "process_experience", id+TASK_EXPERIENCE, _, _, "b")
set_task(0.5, "show_user_info", id+TASK_USERINFO, _, _, "b")
LoadData(id)
}
public client_disconnect(id)
{
remove_task(id+TASK_EXPERIENCE)
remove_task(id+TASK_USERINFO)
g_bConnected[id] = false;
SaveData(id)
}
public SaveData(id)
{
new name[35], vaultkey[64], vaultdata[256]
get_user_name(id, name, 34)
format(vaultkey, 63, "%s-LevelInfo", name)
format(vaultdata, 255, "%i#%i#%i#", PlayerLevel[id], PlayerXp[id])
nvault_set(vault, vaultkey, vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new name[35], vaultkey[64], vaultdata[256]
get_user_name(id,name,34)
format(vaultkey, 63, "%s-LevelInfo", name)
format(vaultdata, 255, "%i#%i#%i#", PlayerLevel[id], PlayerXp[id])
nvault_get(vault, vaultkey, vaultdata, 255)
replace_all(vaultdata, 255, "#", " ")
new playerlevel[32], playerxp[32]
parse(vaultdata, playerlevel, 31, playerxp, 31)
PlayerLevel[id] = str_to_num(playerlevel)
PlayerXp[id] = str_to_num(playerxp)
return PLUGIN_CONTINUE
}
public colored_print(target, const message[], any:...)
{
static buffer[512]
if (!target)
{
static player, g_maxplayers
g_maxplayers = get_maxplayers()
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
return PLUGIN_CONTINUE;
vformat(buffer, sizeof buffer - 1, message, 3)
// Send it
message_begin(MSG_ONE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
}
}
else
{
vformat(buffer, sizeof buffer - 1, message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
return PLUGIN_HANDLED;
}
public Event_ResetHUD(id)
{
if (!is_user_alive(id))
return PLUGIN_CONTINUE;
set_task(0.5, "set_health", id)
SaveData(id)
return PLUGIN_CONTINUE;
}
public set_health(id)
{
if (is_user_alive(id) && PlayerLevel[id] > 0)
{
new health
health = get_user_health(id)
health = get_user_health(id) + (PlayerLevel[id] * Health_PerLevel)
fm_set_user_health(id, health)
}
}
public fw_PlayerSpawn_Post(id)
{
g_kill[id] -= g_kill[id]
}
stock get_in_game_players()
{
new g_maxplayers = get_g_maxplayers()
new players = 0
new team
for (new i = 1; i <= g_maxplayers; i++)
{
if (!is_user_connected(i))
continue;
team = get_user_team(i)
if (team == 1 || team == 2)
players++
}
return players;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/