Убийство с гранаты

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
702
Реакции
54
Можно ли сделать отлов убийства с гранаты без исп. "fakemeta"?

Код:
RegisterHookChain(RG_CBasePlayer_Killed, "@CBasePlayer__Killed_Post", true);

@CBasePlayer__Killed_Post(iVictim, iAttacker, iGib)
{
    if (iVictim == iAttacker)
        return;
    
    #if defined SOUNDS
        new iBitsDamageType = get_pdata_int(iVictim, m_bitsDamageType);
    
        if (IsCorrectWeapon(iAttacker, WEAPON_KNIFE))
            rg_send_audio(0, SOUND_KNIFE);
    
        if (iBitsDamageType & DMG_GRENADE)
            rg_send_audio(0, SOUND_HE);
    #endif
}
С ножом так-то полегче будет, чем с гранатой, ибо на корректное оружие не проверишь, потому что банально свапнется на нож и сработает звук для ножа))
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
Используй RG_CSGameRules_PlayerKilled и третий параметр inflictor, у которого можно попытаться проверить класснейм:
FClassnameIs(inflictor, "grenade" );
Самому проверять лень, мб инфликтор не подойдет.
 
Сообщения
702
Реакции
54
d3m37r4, так?

Код:
@CSGameRules_PlayerKilledPost(iVictim, iAttacker, inflictor)
{
#if defined SOUNDS
    if (FClassnameIs(inflictor, "grenade"))
        rg_send_audio(0, SOUND_HE);
#endif
}
 
Сообщения
702
Реакции
54
d3m37r4, как раз иду проверять, просто убедиться, что хоть правильно сделал :D
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
ThePhoenix, ну тип, если неправильно сделал, то оно и работать не будет?:D (кэп)
 
Сообщения
702
Реакции
54
d3m37r4, судя по всему оно и так не работает. Кинул грену, убил, после выброса грены оружие свапнулось на нож и воспроизвёлся звук для ножа в итоге :D
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
ThePhoenix, у меня чет работает
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    RegisterHookChain(RG_CSGameRules_PlayerKilled, "CSGameRules_PlayerKilled_Post", true);
}

public CSGameRules_PlayerKilled_Post(const victim, const killer, const inflictor) {
    new classname[32];
    get_entvar(inflictor, var_classname, classname, charsmax(classname));

    FClassnameIs(inflictor, "grenade") && log_amx("inflictor = %d | classname = %s | classname = grenade is true", inflictor, classname);
}
 
Сообщения
702
Реакции
54
d3m37r4, может потому что у меня стоит проверка на корректное оружие в виде ножа и когда граната летит то переключается на нож? (хотя звучит, как бред :D) Я скинул же, как я сделал проверку и у меня воспроизводится звук убийства с ножа.
 
Сообщения
702
Реакции
54
d3m37r4,
Код:
#if defined SOUNDS
new const SOUND_HE[] = "BattleMod/gren.wav";
new const SOUND_KNIFE[] = "BattleMod/svinorez.wav";
#endif
Если бы. Воспроизводится как раз таки не то.
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
Скинь весь код своей попытки, ибо так можно гадать до второго пришествия.
 
Сообщения
702
Реакции
54
d3m37r4,
Код:
@CSGameRules_PlayerKilledPost(iVictim, iAttacker, inflictor)
{
#if defined SOUNDS
    if (FClassnameIs(inflictor, "grenade"))
        rg_send_audio(0, SOUND_HE);
#endif
}

@CBasePlayer__Killed_Post(iVictim, iAttacker, iGib)
{
    if (iVictim == iAttacker)
        return;
    
    #if defined SOUNDS
        //new iBitsDamageType = get_pdata_int(iVictim, m_bitsDamageType);
        
        if (IsCorrectWeapon(iAttacker, WEAPON_KNIFE))
            rg_send_audio(0, SOUND_KNIFE);
    
        //if (iBitsDamageType & DMG_GRENADE)
            //rg_send_audio(0, SOUND_HE);
    #endif
}
Если у меня будет в руках нож, то воспроизведётся звук убийства с ножа, если нет, то звук убийства с гранаты!
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
ThePhoenix, эм, а в одном хукчейне нельзя всё сделать?
 
Сообщения
702
Реакции
54
d3m37r4, это критично?)) У меня просто ещё куча кода других функций, которые не относятся к данной теме в
Код:
@CBasePlayer__Killed_Post(iVictim, iAttacker, iGib)
По этому я сделал отдельным.
Сделал в одном:
Код:
@CSGameRules_PlayerKilledPost(iVictim, iAttacker, inflictor)
{
    if (iVictim == iAttacker)
        return;
   
    #if defined SOUNDS
        if (IsCorrectWeapon(iAttacker, WEAPON_KNIFE))
            rg_send_audio(0, SOUND_KNIFE);
   
        if (FClassnameIs(inflictor, "grenade"))
            rg_send_audio(0, SOUND_HE);
    #endif
}
UP: походу критично, извиняюсь, в одной хукчэйне работает нормально :)
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    RegisterHookChain(RG_CSGameRules_PlayerKilled, "CSGameRules_PlayerKilled_Post", true);
}

public CSGameRules_PlayerKilled_Post(const victim, const killer, const inflictor) {
    if(get_member(victim, m_bKilledByGrenade)) {
        rg_send_audio(0, SOUND_HE);
    } else {
        new activeItem = get_member(inflictor, m_pActiveItem);
        if(WeaponIdType:rg_get_iteminfo(activeItem, ItemInfo_iId) == WEAPON_KNIFE) {
            rg_send_audio(0, SOUND_KNIFE);
        }
    }
}
 
Последнее редактирование:
Сообщения
702
Реакции
54
d3m37r4,
Код:
L 04/21/2020 - 19:28:49: [ReAPI] rg_get_iteminfo: invalid entity index -1 [arg_index]
L 04/21/2020 - 19:28:49: [AMXX] Run time error 10: native error (native "rg_get_iteminfo")
L 04/21/2020 - 19:28:49: [AMXX]    [0] bm_skills.sma::@CSGameRules_PlayerKilledPost (line 541)
как-то так
С бомбой вроде проблем не было, а вот с кодом, есть
Код:
@CSGameRules_PlayerKilledPost(iVictim, iAttacker, inflictor)
{
    if (iVictim == iAttacker)
        return;
    
    #if defined SOUNDS
        if(get_member(iVictim, m_bKilledByGrenade))
            rg_send_audio(0, SOUND_HE);
        else {
            new activeItem = get_member(inflictor, m_pActiveItem);
            
            if(WeaponIdType:rg_get_iteminfo(activeItem, ItemInfo_iId) == WEAPON_KNIFE)
                rg_send_audio(0, SOUND_KNIFE);
        }
    
        //if (IsCorrectWeapon(iAttacker, WEAPON_KNIFE))
            //rg_send_audio(0, SOUND_KNIFE);
    
        //if (FClassnameIs(inflictor, "grenade"))
            //rg_send_audio(0, SOUND_HE);
    #endif
}
 

d3m37r4

111111
Сообщения
1,451
Реакции
1,177
Помог
10 раз(а)
ThePhoenix, activeItem не должен быть равен NULLENT. Добавь проверку.
 
Сообщения
219
Реакции
184
Помог
3 раз(а)
ThePhoenix, зачем мудрить я в ReGG давно показал способ.

PHP:
enum 
{
    WORLD = 0,
    BULLET,
    KNIFE,
    GRENADE
}

stock get_death_reason(const id, const pevAttacker, &iType)
{
    new iInflictor = get_entvar(id, var_dmg_inflictor);
    
    if( iInflictor == pevAttacker && is_entity(pevAttacker))
    {
        if(get_member(get_member(pevAttacker, m_pActiveItem), m_iId) == CSW_KNIFE) iType = KNIFE;
        else iType = BULLET;
    }
    else
    {
        if(get_member(id, m_bKilledByGrenade)) iType = GRENADE;
        else  iType = WORLD;
    }
}
 
  • Нравится
Реакции: Ayk
Статус
В этой теме нельзя размещать новые ответы.

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

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