Raised This Month: $32 Target: $400
 8% 

Help / Support Don`t working function Ham_TakeDamage (ZP)


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
snebars
Junior Member
Join Date: Mar 2021
Old 04-03-2021 , 10:05   Don`t working function Ham_TakeDamage (ZP)
Reply With Quote #1

Hello guys. Need your help. Not working Ham_TakeDamage. When human for the medic/technik (CASE_MEDIC, CASE_TECHNIC) class strikes another human, then the hp or armor doesn`t restored.
Thank you in advance.
Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <zombie_plague_advance>
#include <cromchat>

// Количество ваших классов
#define CLASS_COUNT 9

#define MEDIC_SOUND "items/tr_kevlar.wav"
#define TECHNIC_SOUND "items/tr_kevlar.wav"

#define DMG_KNIFE ( DMG_NEVERGIB | DMG_BULLET )

native zp_level(id)

native give_weapon_akdragon(id)
native give_weapon_p90lapin(id)
native give_weapon_m4a1dragon(id)

new g_class[33]
new g_class_temp[33]
new g_class_level[CLASS_COUNT] = {0, 2, 3, 5, 7, 10, 15, 18, 25}
new g_class_names[CLASS_COUNT][128]

// CVARS
new Float:g_max_health
new Float:g_max_armor

new Float:g_count_armor_class
new g_count_ammo_class_from, g_count_ammo_class_to
new Float:g_percent_damager_class
new Float:g_percent_regen_class
new Float:g_count_armor_prof_class
new Float:g_medic_regen
new Float:g_technic_regen

new g_bankir_ammo[33]

enum
{
	CASE_STANDART = 0,
	CASE_ARMOR,
	CASE_BANKIR,
	CASE_MEDIC,
	CASE_TECHNIC,
	CASE_SNIPER,
	CASE_DAMAGER,
	CASE_VAMPIRISM,
	CASE_PROFI
}

public plugin_init()
{
	register_plugin("[ZP] Human Classes", "1.0", "Robert7791")
	
	register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
	
	RegisterHam(Ham_Spawn, "player", "fwd_HamSpawn_Post", true);
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	
	register_clcmd("human_classes", "show_menu_classes")
	
	register_dictionary("zp_hclasses.txt")

	register_cvar("zp_hclass_max_health", "500.0")
	register_cvar("zp_hclass_max_armor", "300.0")
	
	
	register_cvar("zp_hclass_armor", "50.0")
	register_cvar("zp_hclass_ammo_from", "5")
	register_cvar("zp_hclass_ammo_to", "15")
	register_cvar("zp_hclass_percent_damage", "1.15")
	register_cvar("zp_hclass_percent_regen", "0.15")
	register_cvar("zp_hclass_percent_engineer", "30")
	register_cvar("zp_hclass_armor_prof", "100.0")
	register_cvar("zp_hclass_medic_regen", "100.0")
	register_cvar("zp_hclass_technic_regen", "100.0")
}

public plugin_cfg()
{
	new szConfigsDir[64];
	get_configsdir(szConfigsDir, charsmax(szConfigsDir));
	server_cmd("exec %s/human_classes.cfg", szConfigsDir);
	set_task(0.1, "CvarsLoad", 12433);
}

public CvarsLoad()
{
	g_max_health = get_cvar_float("zp_hclass_max_health")
	g_max_armor = get_cvar_float("zp_hclass_max_armor")
	
	g_count_armor_class = get_cvar_float("zp_hclass_armor")
	g_count_ammo_class_from = get_cvar_num("zp_hclass_ammo_from")
	g_count_ammo_class_to = get_cvar_num("zp_hclass_ammo_to")
	g_percent_damager_class = get_cvar_float("zp_hclass_percent_damage")
	g_percent_regen_class = get_cvar_float("zp_hclass_percent_regen")
	g_count_armor_prof_class = get_cvar_float("zp_hclass_armor_prof")
	g_medic_regen = get_cvar_float("zp_hclass_medic_regen")
	g_technic_regen = get_cvar_float("zp_hclass_technic_regen")
	
	formatex(g_class_names[0], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_0", LANG_PLAYER, "HCLASS_ABILITY_0")
	formatex(g_class_names[1], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_1", LANG_PLAYER, "HCLASS_ABILITY_1")
	formatex(g_class_names[2], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_2", LANG_PLAYER, "HCLASS_ABILITY_2")
	formatex(g_class_names[3], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_3", LANG_PLAYER, "HCLASS_ABILITY_3")
	formatex(g_class_names[4], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_4", LANG_PLAYER, "HCLASS_ABILITY_4")
	formatex(g_class_names[5], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_5", LANG_PLAYER, "HCLASS_ABILITY_5")
	formatex(g_class_names[6], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_6", LANG_PLAYER, "HCLASS_ABILITY_6")
	formatex(g_class_names[7], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_7", LANG_PLAYER, "HCLASS_ABILITY_7")
	formatex(g_class_names[8], charsmax(g_class_names[]), "%L %L", LANG_PLAYER, "HCLASS_NAME_8", LANG_PLAYER, "HCLASS_ABILITY_8")
}

public event_round_start()
{
	for (new id=1; id<=32; id++)
		g_bankir_ammo[id] = 0
}

public plugin_natives()
{
	register_native("get_user_hclass", "native_get_user_hclass", 1)
}

public native_get_user_hclass(id)
{
	return g_class[id]
}

public client_putinserver(id)
{
	g_class[id] = 0
	g_class_temp[id] = 0
	g_bankir_ammo[id] = 0
}

public client_disconnect(id)
{
	g_class[id] = 0
	g_class_temp[id] = 0
	g_bankir_ammo[id] = 0
}

public plugin_precache()
{
	precache_sound(MEDIC_SOUND)
	precache_sound(TECHNIC_SOUND)
}

public show_menu_classes(id)
{
	new i_Menu = menu_create("\r[ZP] \wКлассы людей:", "menu_classes")

	for (new i=0; i < sizeof(g_class_level); i++)
	{		
		new SzTitleClass[64], SzBtn[10]
		if (i == g_class_temp[id])
			formatex(SzTitleClass, charsmax(SzTitleClass), "\y%s \r[%dLVL]", g_class_names[i], g_class_level[i])
		else if (zp_level(id) >= g_class_level[i])
			formatex(SzTitleClass, charsmax(SzTitleClass), "\w%s \r[%dLVL]", g_class_names[i], g_class_level[i])
		else
			formatex(SzTitleClass, charsmax(SzTitleClass), "\d%s \r[%dLVL]", g_class_names[i], g_class_level[i])
		
		num_to_str(i+1, SzBtn, charsmax(SzBtn))
		menu_additem(i_Menu, SzTitleClass, SzBtn)
		log_amx("%s", SzTitleClass)
		log_amx("%d", SzBtn)
	}

	menu_setprop(i_Menu, MPROP_BACKNAME, "Назад")
	menu_setprop(i_Menu, MPROP_NEXTNAME, "Далее")
	menu_setprop(i_Menu, MPROP_EXITNAME, "Выход")

	menu_display(id, i_Menu, 0)
}

public menu_classes(id, menu, item)
{
	if (item == MENU_EXIT)
	{
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}

	new s_Data[6], s_Name[64], i_Access, i_Callback
	menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
	new class_num = str_to_num(s_Data)-1
	
	if (class_num < 0 || class_num > CLASS_COUNT-1)
		return PLUGIN_HANDLED
	
	if (!is_user_connected(id))
		return PLUGIN_HANDLED
	
	if (zp_level(id) < g_class_level[class_num])
	{
		CC_SendMessage(id,  "^4[ZP] ^1Недостаточный уровень, нужен ^3%d^1!", g_class_level[class_num])
		return PLUGIN_HANDLED
	}
	
	g_class_temp[id] = class_num
	
	// Для красивого вывода в чат :)
	new classname[128]
	formatex(classname, charsmax(classname), g_class_names[class_num])
	replace_all(classname, charsmax(classname), "\r", "")
	replace_all(classname, charsmax(classname), "\y", "")
	replace_all(classname, charsmax(classname), "\w", "")
	
	CC_SendMessage(id,  "^4[ZP] ^1Вы установили класс: %s", classname)
	CC_SendMessage(id,  "^4[ZP] ^1Ваш класс изменится в следующем раунде!")

	menu_destroy(menu)
	return PLUGIN_HANDLED
}

// Forwards

public fwd_HamSpawn_Post(id)
{
	if(!is_user_alive(id))
		return PLUGIN_HANDLED;
	
	if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
		return PLUGIN_HANDLED;
	
	g_class[id] = g_class_temp[id]

	switch (g_class[id])
	{
		case CASE_ARMOR:
		{
			new Float:armor = g_count_armor_class
			if (pev(id, pev_armorvalue) < armor)
				set_pev(id, pev_armorvalue, armor)
		}
		case CASE_BANKIR:
		{
			// Если в этом раунде уже получали аамо
			if(g_bankir_ammo[id])
				return PLUGIN_HANDLED
			
			new ammo_from = g_count_ammo_class_from
			new ammo_to = g_count_ammo_class_to
			new ammo = random_num(ammo_from, ammo_to)
			zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + ammo)
			g_bankir_ammo[id] = 1
			CC_SendMessage(id,  "^4[Класс:Банкир] ^1Вы получили ^3%d ^1аммо!", ammo)
		}
		case CASE_PROFI:
		{
			new Float:armor = g_count_armor_prof_class
			if (pev(id, pev_armorvalue) < armor)
				set_pev(id, pev_armorvalue, armor)
			
			new random = random_num(1,3)
			switch(random)
			{
				case 1: give_weapon_m4a1dragon(id)
				case 2: give_weapon_p90lapin(id)
				case 3: give_weapon_akdragon(id)
			}
		}
	}
	
	return PLUGIN_HANDLED
}

public fw_TakeDamage(victim, weapon, attacker, Float: damage, damagebits) 
{
	if(victim != attacker && is_user_connected(attacker) && !(zp_get_user_zombie(attacker))) 
	{
		if(g_class[attacker] == CASE_DAMAGER)
			SetHamParamFloat(4, damage * g_percent_damager_class)
		else if (g_class[attacker] == CASE_MEDIC)
		{
			if (!(damagebits & DMG_KNIFE))
				return HAM_IGNORED
			
			if (!(get_user_weapon(attacker) == CSW_KNIFE))
				return HAM_IGNORED
			
			if (zp_get_user_zombie(victim))
				return HAM_IGNORED

			new Float:health_player
			pev(victim, pev_health, health_player)
			
			new Float:NewHealth = health_player + g_medic_regen;
			if (NewHealth <= g_max_health)
			{
				set_pev(victim, pev_health, NewHealth)
			}
		}
		else if (g_class[attacker] == CASE_TECHNIC)
		{
			if (!(damagebits & DMG_KNIFE))
				return HAM_IGNORED
			
			if (!(get_user_weapon(attacker) == CSW_KNIFE))
				return HAM_IGNORED
		
			if (zp_get_user_zombie(victim))
				return HAM_IGNORED

			new Float:armor_player
			pev(victim, pev_armorvalue, armor_player)
			
			new Float:NewArmor = armor_player + g_technic_regen;
			
			if (NewArmor <= g_max_armor)
			{
				set_pev(victim, pev_armorvalue, NewArmor)
				client_cmd(attacker, "spk ^"%s^"", TECHNIC_SOUND)
			}
		}
		else if(g_class[attacker] == CASE_VAMPIRISM)
		{
			if (damagebits!=4098)
				return HAM_IGNORED
			
			if (!zp_get_user_zombie(victim))
				return HAM_IGNORED
			
			new Float:health_player
			pev(attacker, pev_health, health_player)
			
			new Float:NewHealth = health_player + (damage * g_percent_regen_class)
			if (NewHealth <= g_max_health)
				set_pev(attacker, pev_health, NewHealth)
		}
	}
	return HAM_IGNORED
}

Last edited by snebars; 04-03-2021 at 11:04.
snebars is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 10:44.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode