Параметры оружия

NeLifeASkazka

Участник
Сообщения
128
Реакции
70
Есть ли где-то функция, которая рассчитывает урон оружия ?
Или где можно посмотреть какое оружие, в какую часть тела, на каком расстоянии, сколько урона наносит ?
Игра css
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Есть ли где-то функция, которая рассчитывает урон оружия ?
Или где можно посмотреть какое оружие, в какую часть тела, на каком расстоянии, сколько урона наносит ?
Игра css
Как пример более подробного более не видел, но что я сделал в плагине [OS] NPC

C-подобный:
//============================

#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);
    }
}
 

NeLifeASkazka

Участник
Сообщения
128
Реакции
70
Как пример более подробного более не видел, но что я сделал в плагине [OS] NPC

C-подобный:
//============================

#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);
    }
}
Не совсем то
Буду пробовать как-то выводить формулу, сравнивая нанесенный урон с разными условиями (расстояние, броня), мб что-то получится 🤷‍♂️
 
Сверху Снизу