какое оружие болит TakeDamage

Сообщения
10
Реакции
0
Я использую этот метод для получения урона и ударов, а также для идентификатора оружия, который наносит урон, а затем использую его и получаю имя, он работает нормально, но когда граната повреждает, это приводит к сбою сервера, это помогает

PHP:
public CBasePlayer_TakeDamage(const victim, pevInflictor, attacker, Float:flDamage, bitsDamageType)
{
    if (victim == attacker || get_member(victim,m_iTeam) == get_member(attacker,m_iTeam)) return HC_CONTINUE;
    
    new ActiveItem = get_member(pevInflictor, m_pActiveItem);
    new wID = get_member(ActiveItem, m_iId);
    
    g_iDmg[attacker][victim] += floatround(flDamage);
    g_iHits[attacker][victim]++;
    g_iWeaponNameDmg[attacker][victim] = wID;
    
    return HC_CONTINUE;
}
 
Сообщения
10
Реакции
0
Я думаю, что это будет правильным решением, если я не ошибаюсь

PHP:
public CBasePlayer_TakeDamage(const victim, pevInflictor, attacker, Float:flDamage, bitsDamageType)
{
    if (victim == attacker || get_member(victim,m_iTeam) == get_member(attacker,m_iTeam)) return HC_CONTINUE;
    
    new HE = get_member(victim, m_bKilledByGrenade);
    new ActiveItem = get_member(attacker, m_pActiveItem);
    new wID;
    
    if(ActiveItem != -1)
    {
        wID = get_member(ActiveItem, m_iId);
    }
    
    if(HE)
    {
        g_iWeaponNameDmg[attacker][victim] = 4;
    }
    else
    {
        g_iWeaponNameDmg[attacker][victim] = wID;
    }
    
    g_iDmg[attacker][victim] += floatround(flDamage);
    g_iHits[attacker][victim]++;
    
    return HC_CONTINUE;
}
 
Сообщения
169
Реакции
462
Помог
2 раз(а)
Please don't use translators. Write in english if you can.

C++:
public CBasePlayer_TakeDamage(const victim, pevInflictor, attacker, Float:flDamage)
{
    if (victim == attacker || !rg_is_player_can_takedamage(victim, attacker))
        return HC_CONTINUE;

    new wID;

    if (0 < pevInflictor <= MaxClients) // pevInflictor is a player
    {
        new ActiveItem = get_member(attacker, m_pActiveItem);
        wID = get_member(ActiveItem, m_iId);
    }
    else // otherwise pevInflictor it's weapon entity index (usually grenade)! Not an attacker index.
    {
        if (is_nullent(pevInflictor))
            return HC_CONTINUE;

        wID = get_member(pevInflictor, m_iId);
    }

    g_iDmg[attacker][victim] += floatround(flDamage);
    g_iHits[attacker][victim]++;
    g_iWeaponNameDmg[attacker][victim] = wID;

    return HC_CONTINUE;
}
 
Сообщения
10
Реакции
0
ok, when I try to get the name of the weapon I get this error if it's a hegrenade
(error: rg_get_weapon_info: invalid weapon id 0)

PHP:
new Players[MAX_PLAYERS],Num,Player;
    get_players(Players,Num,"h");
            
    new wID,wName[20];
            
    for(new i;i < Num;i++)
    {
        Player = Players[i];
        wID = g_iWeaponNameDmg[id][Player];
            
       rg_get_weapon_info(wID, WI_NAME, wName, charsmax(wName));
       replace(wName, charsmax(wName), "weapon_", "");
       strtoupper(wName);
       client_print(id,print_console,"weapon %s",wName);
}
 
Сообщения
169
Реакции
462
Помог
2 раз(а)
JuL666
C++:
public CBasePlayer_TakeDamage(const victim, pevInflictor, attacker, Float:flDamage)
{
    if (victim == attacker || !rg_is_player_can_takedamage(victim, attacker))
        return HC_CONTINUE;

    new wID;

    if (0 < pevInflictor <= MaxClients) // pevInflictor is a player
    {
        new ActiveItem = get_member(attacker, m_pActiveItem);
        wID = get_member(ActiveItem, m_iId);
    }
    else // otherwise pevInflictor it's weapon entity index (usually grenade)! Not an attacker index.
    {
        if (is_nullent(pevInflictor))
            return HC_CONTINUE;

        if ((wID = get_member(pevInflictor, m_iId)) == 0)
        {
            new szClassName[MAX_NAME_LENGTH];
            get_entvar(pevInflictor, var_classname, szClassName, charsmax(szClassName));

            if (equal(szClassName, "grenade"))
                wID = CSW_HEGRENADE;
        }
    }

    if (wID > 0)
    {
        g_iDmg[attacker][victim] += floatround(flDamage);
        g_iHits[attacker][victim]++;
        g_iWeaponNameDmg[attacker][victim] = wID;
    }

    return HC_CONTINUE;
}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу