Код
#include <amxmodx>
#include <amxmisc>
#include <engine>
#define CHAN_DISPLAY 5
new usehud = 0;
new blood[33];
new olddeadflag[33];
// Plugin initation
public plugin_init() {
register_plugin("VampireMode","1.5","Sutar");
register_concmd("amx_vampmode_enable","cmd_vampmode",ADMIN_BAN,"<0|1>");
register_event("Damage","event_damage","b","2>0");
if(get_user_msgid("ResetHUD")) {
usehud = 1;
register_event("ResetHUD","event_resethud","b");
register_clcmd("fullupdate","stop");
}
register_cvar("vampmode_enable","0"); // включить / выключить режим вампира.
register_cvar("vampmode_bloodthirst","0.8"); // скорость распада крови.
register_cvar("vampmode_maxblood","121"); // максимальное кол-во hp (крови).
register_cvar("vampmode_spawnblood","101"); // кол-во hp (крови) в начале раунда.
register_cvar("vampmode_killreward","30"); // сколько крови вы получаете за убийство (x1.5 в голову)
register_cvar("vampmode_damage","5.0"); // повреждение игрока каждую секунду от потери крови.
register_cvar("vampmode_msgcolor","255 255 255"); // цвет чата
register_cvar("vampmode_msgx","0.915"); // x coord for messages
register_cvar("vampmode_msgy","1.0"); // y coord for messages
}
// prethink
public client_PreThink(id) {
new deadflag = entity_get_int(id,EV_INT_deadflag);
if(olddeadflag[id] && !deadflag && usehud == 0) {
client_spawn(id);
}
olddeadflag[id] = deadflag;
}
// resethud
public event_resethud(id) {
set_task(0.1,"client_spawn",id);
}
// user spawns
public client_spawn(id) {
if(task_exists(id)) {
remove_task(id);
}
blood[id] = get_cvar_num("vampmode_spawnblood");
if(get_cvar_num("vampmode_enable")) {
set_task(get_cvar_float("vampmode_bloodthirst"),"bleed",id);
}
}
// player takes damage
public event_damage(id) {
new weapon, hitplace, attacker = get_user_attacker(id,weapon,hitplace);
//client_print(id,print_chat,"* You got hit by %i with %i in %i",attacker,weapon,hitplace);
// make sure victim is dead
if(get_user_health(id) > 0) {
return PLUGIN_CONTINUE;
}
// if attacker is still alive
if(is_user_alive(attacker)) {
new amt = get_cvar_num("vampmode_killreward");
// extra blood for headshots
if(hitplace == HIT_HEAD) { amt = floatround(1.5 * float(amt)); }
// if team kill, take blood away
if(get_user_team(id) == get_user_team(attacker)) {
blood[attacker] -= amt;
if(blood[attacker] < 0) { blood[attacker] = 0; }
display_blood(id);
}
else {
blood[attacker] += amt;
if(blood[attacker] > get_cvar_num("vampmode_maxblood")) { blood[attacker] = get_cvar_num("vampmode_maxblood"); }
display_blood(id);
}
}
return PLUGIN_CONTINUE;
}
// I'm BAHLEEDING!
public bleed(id) {
if(!get_cvar_num("vampmode_enable") || !is_user_alive(id)) {
return;
}
blood[id] -= 1;
if(blood[id] < 0) {
blood[id] = 0;
fakedamage(id,"bloodthirst",get_cvar_float("vampmode_damage"),0);
}
display_blood(id);
set_task(get_cvar_float("vampmode_bloodthirst"),"bleed",id);
return;
}
// display blood
public display_blood(id) {
new color[24], r[8], g[8], b[8];
get_cvar_string("vampmode_msgcolor",color,23);
parse(color,r,7,g,7,b,7);
set_hudmessage(str_to_num(r),str_to_num(g),str_to_num(b),get_cvar_float("vampmode_msgx"),get_cvar_float("vampmode_msgy"),0,6.0,get_cvar_float("vampmode_bloodthirst")+1.0,0.1,0.1,CHAN_DISPLAY);
show_hudmessage(id,"Blood: %d",blood[id]);
}
// Stop a command
public stop() {
return PLUGIN_HANDLED;
}
// Turn VampireMode on or off
public cmd_vampmode(id,level,cid) {
if(!cmd_access(id,level,cid,2)) {
return PLUGIN_HANDLED;
}
new data[10];
read_args(data,9);
set_cvar_num("vampmode_enable",(str_to_num(data) >= 1) ? 1 : 0);
console_print(id,"VampireMode is now %s",(str_to_num(data) >= 1) ? "ON" : "OFF");
new players[32], num, i;
get_players(players,num);
for(i=0;i<num;i++) {
if(!task_exists(players[i])) {
set_task(get_cvar_float("vampmode_bloodthirst"),"bleed",players[i]);
}
}
return PLUGIN_HANDLED;
}