Участник
Пользователь
- Сообщения
- 25
- Реакции
- 10
Всем привет, с уроном работал мало, поэтому не имею большого представления как все же он меняется. Мне необходимо менять урон в соответствии от того, куда именно игрок ударил (голова, руки и тд). Отловить это нормально у меня получилось, а вот чтобы уже изменять урон на конкретный - нет.
Пробовал как-то подобрать урон умножениями/делениями всякими, но не сошлось, по факту, мне надо такой сет, но это все может редактироваться в режиме реального времени. Урон только от ножа, от остального как по обычному:
Код:
public refwd_PlayerTraceAttack_Pre(iVictim, iAttacker, float:flDamage, Float:vecDir[3], iTraceHandle, bitsDamageType)
{
//В зависимости от того куда попали меняем урон
switch(get_tr2(iTraceHandle, TR_iHitgroup))
{
case HIT_HEAD: g_iBodyPart[iAttacker] = DAMAGE_HEAD;
case HIT_CHEST: g_iBodyPart[iAttacker] = DAMAGE_CHEST;
case HIT_STOMACH: g_iBodyPart[iAttacker] = DAMAGE_STOMACH;
case HIT_LEFTARM: g_iBodyPart[iAttacker] = DAMAGE_LEFTARM;
case HIT_RIGHTARM: g_iBodyPart[iAttacker] = DAMAGE_RIGHTARM;
case HIT_LEFTLEG: g_iBodyPart[iAttacker] = DAMAGE_LEFTLEG;
case HIT_RIGHTLEG: g_iBodyPart[iAttacker] = DAMAGE_RIGHTLEG;
}
}
public refwd_PlayerTakeDamage_Pre(iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamageType)
{
if(!is_user_valid(iAttacker))
return HC_CONTINUE
new iWeapon = get_user_weapon(iAttacker);
if(g_iCvarBoxEnabled && get_member(iVictim, m_iTeam) == TEAM_TERRORIST && get_member(iAttacker, m_iTeam) == TEAM_TERRORIST)
{
if(iWeapon == CSW_KNIFE)
{
switch(g_iBodyPart[iAttacker])
{
case DAMAGE_HEAD:
{
if(get_entvar(iAttacker, var_button) & IN_ATTACK2)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 260.0 * float(g_iDamage[g_iBodyPart[iAttacker]]))
else if(get_entvar(iAttacker, var_button) & IN_ATTACK)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 60.0 * float(g_iDamage[g_iBodyPart[iAttacker]]) / 3.5)
}
case DAMAGE_CHEST, DAMAGE_STOMACH:
{
if(get_entvar(iAttacker, var_button) & IN_ATTACK2)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 195.0 * float(g_iDamage[g_iBodyPart[iAttacker]]))
else if(get_entvar(iAttacker, var_button) & IN_ATTACK)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 18.75 * float(g_iDamage[g_iBodyPart[iAttacker]]) / 3.5)
}
case DAMAGE_LEFTARM, DAMAGE_RIGHTARM:
{
if(get_entvar(iAttacker, var_button) & IN_ATTACK2)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 65.0 * float(g_iDamage[g_iBodyPart[iAttacker]]))
else if(get_entvar(iAttacker, var_button) & IN_ATTACK)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 15.0 * float(g_iDamage[g_iBodyPart[iAttacker]]) / 3.5)
}
case DAMAGE_LEFTLEG, DAMAGE_RIGHTLEG:
{
if(get_entvar(iAttacker, var_button) & IN_ATTACK2)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 48.75 * float(g_iDamage[g_iBodyPart[iAttacker]]))
else if(get_entvar(iAttacker, var_button) & IN_ATTACK)
SetHookChainArg(4, ATYPE_FLOAT, flDamage / 11.25 * float(g_iDamage[g_iBodyPart[iAttacker]]) / 3.5)
}
}
}
else
SetHookChainArg(4, ATYPE_FLOAT, flDamage/* * 0.35*/)
return HC_SUPERCEDE
}
return HC_CONTINUE
}