Plugin :
Код за потвърждение: Избери целия код
/*
Автор плагина: Анатолий (AcE) Бойко.
Моя страничка: https://vk.com/e1337ace
Профиль Steam: http://steamcommunity.com/profiles/76561198038775603/
*/
#define AUTHOR "AcE"
#define VERSION "1.5.1 HLDS"
#define PLUGIN "LS RANK"
#define LASTUPDATE "07, January (01), 2018"
#define HUD_SKILL // Skill - The ELO Method.
#define STATUS_VALUE // Информация о игроке возле прицела.
#define HUD_POSITION // Позиция игрока (На худе) в статистике.
#include <amxmodx>
#include <fakemeta>
#include <nvault>
#if defined HUD_POSITION
#include <csx>
#endif
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define argbreak strbreak
#define client_disconnected client_disconnect
#endif
#if defined STATUS_VALUE
enum _:MAX_TYPES {TYPE_NONE, TYPE_RELATION, TYPE_PLAYER}
enum {LOOK_FRIEND = 1, LOOK_ENEMY, LOOK_HOSTAGE}
enum _:MAX_REPLACES {RE_HP, RE_RANK, RE_NAME}
new const Replaces[MAX_REPLACES][] = {"%hp%", "%rank%", "%name%"}
new status_value[MAX_TYPES], gStatusText
#endif
enum _:udata
{
level, exp, informer, kills, Float:Skill
}
new UserData[33][udata]
new Float:HudUpdateInterval
new g_Cvar[14], LEVELS[22], g_Connected
new s_Get_Buffer[40], s_Level[64], s_Exp[64], s_Skill[64]
new g_Steam[33][35], nvault_name[128], g_Vault
#define IsUserValid(%1) (1 <= %1 <= 32)
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
new const g_arrItemSkills[] =
{
0, 60, 75, 85, 100, 115, 130, 140, 150, 165, 180, 195, 210
}
new const g_arrViewSkills[][] =
{
"Dobet-", "Dobet", "Dobet+",
"Mesatar-", "Mesatar", "Mesatar+",
"Fort-", "Fort", "Fort+",
"Pro-", "Pro", "Pro+", "Godlike"
}
new const CLASSES[][] =
{
"", "NOOB", "EKSPERT", "POLIC",
"OFFICIER", "LEJTNANT", "KADET",
"USHTAR", "NENTETAR", "TETAR",
"RRESHTER", "KAPTER", "KRYEKAPTER",
"NENTOGER", "TOGER", "KAPITEN",
"MAJOR", "NENKOLONEL", "KOLONEL",
"GJENERAL BRIGADE", "GJENERAL MAJOR", "ADMIRAL"
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("lrs_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED)
#if defined STATUS_VALUE
gStatusText = get_user_msgid("StatusText")
register_event("StatusValue", "StatusValueShow", "be")
#endif
register_event("DeathMsg", "EventDeath", "a", "1>0")
register_forward(FM_Sys_Error, "server_down")
register_forward(FM_GameShutdown, "server_down")
register_forward(FM_ServerDeactivate, "server_down")
register_forward(FM_ChangeLevel, "server_down")
register_logevent("lrs_save_base", 2, "1=Round_End")
register_cvar("lrs_vault_name", "lr_system")
register_clcmd("say /lrshud", "informer_switch", 0, "switch experience informer on/off")
g_Cvar[1] = register_cvar("lrs_add_exp", "2")
g_Cvar[2] = register_cvar("lrs_add_exp_hs", "3")
g_Cvar[3] = register_cvar("lrs_levels", "0 40 70 100 200 350 450 550 650 800 1200 1900 3000 4500 6000 7500 9000 10000 12000 15000 22000")
g_Cvar[4] = register_cvar("lrs_hud_exp_type", "1")
g_Cvar[5] = register_cvar("lrs_hud_xypos", "0.01 0.22")
g_Cvar[6] = register_cvar("lrs_hud_color", "150 150 150")
g_Cvar[7] = register_cvar("lrs_hud_random_color", "0")
g_Cvar[8] = register_cvar("lrs_hud_update", "1.5")
g_Cvar[9] = register_cvar("lrs_start_skill", "100")
g_Cvar[10] = register_cvar("lrs_remove_exp_on", "0")
g_Cvar[11] = register_cvar("lrs_remove_exp_days", "0")
g_Cvar[12] = register_cvar("lrs_auto_clear_stats_days", "0")
g_Cvar[13] = register_cvar("lrs_min_exp_add_players_stats", "15")
HudUpdateInterval = get_pcvar_float(g_Cvar[8])
set_task(HudUpdateInterval, "lrs_informer", _, _, _, "b")
server_print(""); server_print(" %s Copyright (c) 2017 %s", PLUGIN, AUTHOR)
server_print(" Version %s build on %s", VERSION, LASTUPDATE); server_print("")
}
public plugin_cfg()
{
new LVL[22][16], cvLevels[256]
get_pcvar_string(g_Cvar[3], cvLevels, 255); trim(cvLevels)
parse(cvLevels, LVL[0], 15, LVL[1], 15, LVL[2], 15, LVL[3], 15, LVL[4], 15, LVL[5], 15, LVL[6], 15, LVL[7], 15, LVL[8], 15, LVL[9], 15, LVL[10], 15, LVL[11], 15, LVL[12], 15, LVL[13], 15, LVL[14], 15, LVL[15], 15, LVL[16], 15, LVL[17], 15, LVL[18], 15, LVL[19], 15, LVL[20], 15, LVL[21], 15)
for (new i = 0; i < 21; i ++)
LEVELS[i +1] = str_to_num(LVL[i])
get_cvar_string("lrs_vault_name", nvault_name, 63)
g_Vault = nvault_open(nvault_name)
if (g_Vault == INVALID_HANDLE)
set_fail_state("Gabim ne hapjen nVault!")
if (get_pcvar_num(g_Cvar[10]) == 1)
nvault_prune(g_Vault, 0, get_systime() - (86400 * get_pcvar_num(g_Cvar[11])))
new date[255]; get_time("%d", date, 254)
if (equal(date, "get_pcvar_num(g_Cvar[12])"))
{
nvault_prune(g_Vault, 0, get_systime())
new map[33]; get_mapname(map, charsmax(map))
set_task(1.0, "changelevel", _, map, sizeof(map), "a", 1)
log_to_file("lrs_main.txt", "Statistikat u fshin me sukses!")
}
}
public plugin_end() return nvault_close(g_Vault)
public client_authorized(id) return get_user_authid(id, g_Steam[id], charsmax(g_Steam[]))
public changelevel(map[]) return server_cmd("changelevel %s", map)
public client_putinserver(id)
{
set_bit(g_Connected, id)
arrayset(UserData[id], 0, udata)
lrs_check_base(id)
}
public server_down()
{
new players[32], pnum
get_players(players, pnum)
for (new i; i < pnum; i ++)
{
lrs_save_base(players[i])
}
}
public client_disconnected(id)
{
reset_bit(g_Connected, id)
lrs_save_base(id)
}
public lrs_check_base(id)
{
if (is_user_hltv(id)) return
if (!get_bit(g_Connected, id)) return
UserData[id][exp] = 0
UserData[id][level] = 1
UserData[id][Skill] = 0.0
formatex(s_Get_Buffer, charsmax(s_Get_Buffer), "%sEXP", g_Steam[id])
new s_Exp = nvault_get(g_Vault, s_Get_Buffer)
formatex(s_Get_Buffer, charsmax(s_Get_Buffer), "%sLEVEL", g_Steam[id])
new s_Level = nvault_get(g_Vault, s_Get_Buffer)
formatex(s_Get_Buffer, charsmax(s_Get_Buffer), "%sSKILL", g_Steam[id])
new s_Skill = nvault_get(g_Vault, s_Get_Buffer)
if (s_Skill)
{
UserData[id][exp] = s_Exp
UserData[id][level] = s_Level
UserData[id][Skill] = Float:s_Skill
}
else
{
UserData[id][Skill] = float(get_pcvar_num(g_Cvar[9]))
lrs_save_base(id)
}
}
public lrs_save_base(id)
{
if (is_user_hltv(id)) return
if (UserData[id][exp] < get_pcvar_num(g_Cvar[13])) return
format(s_Get_Buffer, charsmax(s_Get_Buffer) , "%sEXP", g_Steam[id])
format(s_Exp, charsmax(s_Exp), "%d", UserData[id][exp])
nvault_set(g_Vault, s_Get_Buffer, s_Exp)
format(s_Get_Buffer, charsmax(s_Get_Buffer) , "%sLEVEL", g_Steam[id])
format(s_Level, charsmax(s_Level), "%d", UserData[id][level])
nvault_set(g_Vault, s_Get_Buffer, s_Level)
format(s_Get_Buffer, charsmax(s_Get_Buffer), "%sSKILL", g_Steam[id])
format(s_Skill, charsmax(s_Skill), "%d", UserData[id][Skill])
nvault_set(g_Vault, s_Get_Buffer, s_Skill)
}
public EventDeath()
{
static killer, victim
killer = read_data(1)
victim = read_data(2)
if (!get_bit(g_Connected, killer)) return
if (!IsUserValid(killer) || !IsUserValid(victim) || killer == victim) return
if (UserData[killer][level] < 21)
{
static TempEXP
TempEXP = (read_data(3) == 1) ? get_pcvar_num(g_Cvar[2]) : get_pcvar_num(g_Cvar[1])
UserData[killer][exp] += TempEXP; lrs_check_level(killer)
}
new Float:delta = 1.0 / (1.0 + floatpower(10.0, (UserData[killer][Skill] - UserData[victim][Skill]) / 100.0))
UserData[killer][Skill] += (UserData[killer][kills] < 100) ? (delta * 2.0) : (delta * 1.5)
UserData[victim][Skill] -= (UserData[victim][kills] < 100) ? (delta * 2.0) : (delta * 1.5)
if (UserData[victim][Skill] < 0.0)
UserData[victim][Skill] = 0.0
if (UserData[killer][Skill] > 220.0)
UserData[killer][Skill] = 220.0
}
public lrs_check_level(id)
{
if (!get_bit(g_Connected, id)) return
if (UserData[id][level] < 1)
UserData[id][level] = 1
if (UserData[id][exp] < 0)
UserData[id][exp] = 0
static szName[32]
get_user_name(id, szName, 31)
if (UserData[id][exp] >= LEVELS[UserData[id][level] +1])
{
UserData[id][level] ++
client_cmd(0, "spk events/task_complete")
client_print_color(0, print_team_default, "^1[^4LS^1] Lojtari ^3%s ^1mori nje titull te ri - ^4%s^1. Urime !", szName, CLASSES[UserData[id][level]])
}
}
stock get_skill_id(Float:skill)
{
for (new i, sk = floatround(skill, floatround_tozero); i < sizeof g_arrViewSkills; i ++)
{
if (i && g_arrItemSkills[i] > sk)
return i -1
else if ((!i && g_arrItemSkills[i] > sk) || i == charsmax(g_arrViewSkills))
return i
}
return 0
}
public lrs_informer()
{
static live, id, target
static buffer[192], len, SyncHudMsg
if (!SyncHudMsg) SyncHudMsg = CreateHudSyncObj()
for (id = 1; id <= 32; id ++)
{
live = is_user_alive(id)
if (!get_bit(g_Connected, id) && is_user_ignore(id)) continue
if (UserData[id][informer]) continue
target = pev(id, pev_iuser2)
#if defined HUD_POSITION
static st[8], bh[8], g_rank[33]
g_rank[id] = get_user_stats(id, st, bh)
g_rank[target] = get_user_stats(target, st, bh)
#endif
if (live)
{
len = format(buffer, charsmax(buffer), "Titulli: %s", CLASSES[UserData[id][level]])
if (UserData[id][level] < 21)
{
if (get_pcvar_num(g_Cvar[4]) == 0)
len += format(buffer[len], charsmax(buffer) - len, "^nPervoja: [%d/%d]", UserData[id][exp], LEVELS[UserData[id][level] +1])
else len += format(buffer[len], charsmax(buffer) - len, "^nPervoja: [%d/%d][+%d]", UserData[id][exp], LEVELS[UserData[id][level] +1], (LEVELS[UserData[id][level] +1] - UserData[id][exp]))
}
else len += format(buffer[len], charsmax(buffer) - len, "^nPervoja: Maksimum")
#if defined HUD_POSITION
len += format(buffer[len], charsmax(buffer) - len, "^nPozita: [%d prej %d]", g_rank[id], get_statsnum())
#endif
#if defined HUD_SKILL
new Float:szSkill = UserData[id][Skill]
len += format(buffer[len], charsmax(buffer) - len, "^nAftesia: [%s|%.2f]", g_arrViewSkills[get_skill_id(szSkill)], szSkill)
#endif
}
else
{
if (target > 0 && !live)
{
static szName[32]; get_user_name(target, szName, 31)
len = format(buffer, charsmax(buffer), "Emri: %s", szName)
len += format(buffer[len], charsmax(buffer) - len, "^nTitulli: %s", CLASSES[UserData[target][level]])
if (UserData[target][level] < 21)
{
if (get_pcvar_num(g_Cvar[4]) == 0)
len += format(buffer[len], charsmax(buffer) - len, "^nPervoja: [%d/%d]", UserData[target][exp], LEVELS[UserData[target][level] +1])
else len += format(buffer[len], charsmax(buffer) - len, "^nPervoja: [%d/%d][+%d]", UserData[target][exp], LEVELS[UserData[target][level] +1], (LEVELS[UserData[target][level] +1] - UserData[target][exp]))
}
else len += format(buffer[len], charsmax(buffer) - len, "^nPervoja: Maksimum")
#if defined HUD_POSITION
len += format(buffer[len], charsmax(buffer) - len, "^nPozita: [%d prej %d]", g_rank[target], get_statsnum())
#endif
#if defined HUD_SKILL
new Float:szSkill = UserData[target][Skill]
len += format(buffer[len], charsmax(buffer) - len, "^nAftesia: [%s|%.2f]", g_arrViewSkills[get_skill_id(szSkill)], szSkill)
#endif
}
}
static r, g, b, Float:x, Float:y
HudMsgPos(x, y); HudMsgColor(g_Cvar[6], r, g, b)
if (get_pcvar_num(g_Cvar[7]) == 0)
set_hudmessage(r, g, b, x, y, 0, 0.0, HudUpdateInterval, _, _, -1)
else set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), x, y, 0, 0.0, HudUpdateInterval, _, _, -1)
ShowSyncHudMsg(id, SyncHudMsg, "%s", buffer)
}
}
public informer_switch(id)
{
if (!get_bit(g_Connected, id) && is_user_ignore(id)) return
if (UserData[id][informer])
{
UserData[id][informer] = 0
client_cmd(id, "spk fvox/activated")
client_print_color(id, print_team_default, "^1[^4LS^1] ^3Informatat jane ^1<^4Aktive^1>")
}
else
{
UserData[id][informer] = 1
client_cmd(id, "spk fvox/deactivated")
client_print_color(id, print_team_default, "^1[^4LS^1] ^3Informatat jane te ^1<^4Ndaluara^1>")
}
}
#if defined STATUS_VALUE
public StatusValueShow(id)
{
new num = read_data(1)
if (num <= 0 || num >= MAX_TYPES) return
new update = status_value[num] = read_data(2)
switch(num)
{
case TYPE_RELATION:
{
if (!update && is_user_alive(id))
{
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0); write_string(""); message_end()
}
}
case TYPE_PLAYER:
{
if (is_user_alive(id))
{
new message[192]
switch(status_value[TYPE_RELATION])
{
case LOOK_FRIEND:
{
copy(message, charsmax(message), "Shoku: %name%|HP: %hp%|Titulli: %rank%")
}
case LOOK_ENEMY:
{
copy(message, charsmax(message), "Armiku: %name%|Titulli: %rank%")
}
case LOOK_HOSTAGE:
{
return
}
}
EditMessage(message, update, true, get_user_health(update))
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0); write_string(message); message_end()
}
}
}
}
EditMessage(message[192], player, bool:status_text, hp)
{
new temp[64]
if (is_user_alive(player))
{
for (new i; i < MAX_REPLACES; i ++)
{
switch(i)
{
case RE_HP:
{
num_to_str(hp, temp, charsmax(temp))
}
case RE_RANK:
{
format(temp, charsmax(temp), "%s", CLASSES[UserData[player][level]])
}
case RE_NAME:
{
if (status_text)
copy(temp, charsmax(temp), "%p2")
else
get_user_name(player, temp, charsmax(temp))
}
default:
{
copy(temp, charsmax(temp), "")
}
}
replace(message, charsmax(message), Replaces[i], temp)
}
}
trim(message)
}
#endif
public plugin_natives()
register_native("lrs_get_level_name", "_lrs_get_level_name")
public _lrs_get_level_name(plugin, params)
{
new buffer[192]
new id = get_param(1)
new len = get_param(3)
format(buffer, len, "%s", CLASSES[UserData[id][level]])
set_string(2, buffer, len)
}
stock HudMsgPos(&Float:x, &Float:y)
{
static coords[16], piece[10]
get_pcvar_string(g_Cvar[5], coords, 15)
argbreak(coords, piece, 9, coords, 15)
x = str_to_float(piece)
y = str_to_float(coords)
}
stock HudMsgColor(cvar, &r, &g, &b)
{
static color[16], piece[5]
get_pcvar_string(cvar, color, 15)
argbreak(color, piece, 4, color, 15)
r = str_to_num(piece)
argbreak(color, piece, 4, color, 15)
g = str_to_num(piece)
b = str_to_num(color)
}
is_user_ignore(id)
return is_user_bot(id) || is_user_hltv(id)