//============================
#define HITGROUP_GENERIC 0 //Общей урон
#define HITGROUP_HEAD 1 //Голова
#define HITGROUP_CHEST 2 //Грудь
#define HITGROUP_STOMACH 3 //Живот
#define HITGROUP_LEFTARM 4 //Рука левая
#define HITGROUP_RIGHTARM 5 //Рука правая
#define HITGROUP_LEFTLEG 6 //Нога левая
#define HITGROUP_RIGHTLEG 7 //Нога правая
#define HITGROUP_GEAR 10 // alerts NPC, but doesn't do damage or bleed (1/100th damage)
/*
char g_iHitgroup[][] = {
"Общей урон",
"Голова",
"Грудь",
"Живот",
"Рука левая",
"Рука правая",
"Нога левая",
"Нога правая"
};
*/
Action Hook_TraceAttack(int iVictim, int& iAttacker, int& inflictor, float& fDamage, int& damagetype, int& ammotype, int hitbox, int iHitgroup)
{
if(iVictim != iAttacker)
{
switch(iHitgroup)
{
case HITGROUP_GENERIC:
{
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_HEAD:
{
fDamage = fDamage * 2.0;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_CHEST:
{
fDamage = fDamage * 1.5;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_STOMACH:
{
fDamage = fDamage * 1.2;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_LEFTARM:
{
fDamage = fDamage * 1.0;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_RIGHTARM:
{
fDamage = fDamage * 1.0;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_LEFTLEG:
{
fDamage = fDamage * 1.0;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
case HITGROUP_RIGHTLEG:
{
fDamage = fDamage * 1.0;
ShowDamage(iVictim, iAttacker, fDamage, iHitgroup);
}
}
return Plugin_Changed;
}
return Plugin_Continue;
}
void ShowDamage(int iVictim, int iAttacker, float fDamage, int iHitgroup)
{
int iHealth = GetEntProp(iVictim, Prop_Data, "m_iHealth");
float fHealth = iHealth - fDamage;
if(fHealth > 0.0) {
GFwd_OSGFNpcEventDamage(iAttacker, iVictim, fDamage, fHealth, iHitgroup, false);
}
else {
for(int i = 0; i < g_hNpcList.Length; ++i) {
g_hNpcList.GetArray(i, g_esNpcSetting, sizeof(g_esNpcSetting));
if(iVictim == g_esNpcSetting.iIndex) {
g_hNpcList.Erase(i);
}
}
GFwd_OSGFNpcEventDamage(iAttacker, iVictim, fDamage, fHealth, iHitgroup, true);
}
}