[Pawn] Вопросы от Javekson

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
287
Реакции
223
Помог
6 раз(а)
Javekson, заблокировать ее покупку :dntknw:. Или если речь о запрете броска при определенных обстоятельствах, то можно через m_bCanShoot попробовать
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
В каком месте? Если в RG_ThrowHeGrenade то у меня оно там не срабатывает, суперсидить тоже не получается
16 Авг 2021
hajimura, задача вообще в том, что бы сделать лимит по времени между бросками гранаты, ибо у игрока их допустим 3, между бросками надо сделать 10сек. к примеру
 
Сообщения
3,367
Реакции
1,476
Помог
124 раз(а)
d3m37r4, я ему это советовал уже, говорит, не работает.
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
d3m37r4, конкретно его в инклудах не нашел, увидел m_flNextAttack только
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
Примерно так получилось, но анимация соответственно дергается в момент попытки бросить гранату
C++:
#include < amxmodx >
#include < hamsandwich >
#include < reapi >

#pragma semicolon 1

new Float: g_fNextThrowGrenade[ MAX_PLAYERS + 1 ];

public plugin_init( )
{
    RegisterHookChain( RG_ThrowHeGrenade, "hook_ThrowHeGrenade_Pre", .post = false );
    
    RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_hegrenade", "hook_PrimaryAttack_Pre", .Post = false );
}

public hook_ThrowHeGrenade_Pre( const id )
{
    g_fNextThrowGrenade[ id ] = get_gametime( ) + 10.0;
}

public hook_PrimaryAttack_Pre( const iEnt )
{
    new id = get_member( iEnt, m_pPlayer );
    
    if( func_IsThrowGrenadeDelay( id ) )
    {
        set_member( id, m_bCanShoot, false );
        
        set_member( id, m_flNextAttack, g_fNextThrowGrenade[ id ] - get_gametime( ) );
        
        return HAM_SUPERCEDE;
    }
    
    return HAM_IGNORED;
}

stock func_IsThrowGrenadeDelay( const id )
{
    new Float: fUserTime = get_gametime( );
    
    if( g_fNextThrowGrenade[ id ] > fUserTime )
    {
        client_print_color( id, print_team_default, "^4* ^1[^4GMF^1] ^4Повторный бросок будет доступен через %0.f сек.", g_fNextThrowGrenade[ id ] - fUserTime );
        
        rg_send_audio( id, "events/friend_died.wav" );
        
        return true;
    }
    
    return false;
}
17 Авг 2021
BlackSignature предложил один из вариантов юзать пост фрейм для гранат, что бы убарть анимацию, как минимум, попробуем потом
 
Сообщения
704
Реакции
475
Помог
10 раз(а)
А что если в деплое выставлять m_flNextAttack, если недавно уже бросали гранату и редеплоить актив итем после броска
Конечно надо убрать мерзко противный звук, дабы после броска не было крови из ушей
Не помню чтобы кто-то мог поменять m_flNextAttack для игрока просто так, плюс он заблочит постфрейм пушки. Так что проблем быть не должно
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
BalbuR, в деплое не сетается m_flNextAttack, либо где то оно сбрасываться успевает, сурсы не умею курить
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)

d3m37r4

111111
Сообщения
1,428
Реакции
1,169
Помог
10 раз(а)
Javekson, сетается все в itempostframe, weaponidle и т.д. смотри в регейме их.
 
Сообщения
704
Реакции
475
Помог
10 раз(а)
Javekson, ну так понятно что в деплое сетается, просто перезапиши
Плюс не перепутай, это оффсет для игрока, а не для пушки
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
BalbuR, сетал в пре хуке деплоя, не работало, засетал в пост хуке, заработало :D

Код:
#include < amxmodx >
#include < hamsandwich >
#include < reapi >

#pragma semicolon 1

new Float: g_fNextThrowGrenade[ MAX_PLAYERS + 1 ];

public plugin_init( )
{
    RegisterHookChain( RG_ThrowHeGrenade, "hook_ThrowHeGrenade_Post", .post = true );
    
    RegisterHam( Ham_Item_Deploy, "weapon_hegrenade", "hook_ItemDeploy_Post", .Post = true );
}

public hook_ThrowHeGrenade_Post( const id )
{
    g_fNextThrowGrenade[ id ] = get_gametime( ) + 10.0;
}

public hook_ItemDeploy_Post( const iEnt )
{
    new id = get_member( iEnt, m_pPlayer );
    
    if( func_IsThrowGrenadeDelay( id ) )
    {
        set_member( id, m_flNextAttack, g_fNextThrowGrenade[ id ] - get_gametime( ) );
    }
}

stock func_IsThrowGrenadeDelay( const id )
{
    new Float: fUserTime = get_gametime( );
    
    if( g_fNextThrowGrenade[ id ] > fUserTime )
    {
        client_print_color( id, print_team_default, "^4* ^1[^4GMF^1] ^4Повторный бросок будет доступен через %0.f сек.", g_fNextThrowGrenade[ id ] - fUserTime );
        
        rg_send_audio( id, "events/friend_died.wav" );
        
        return true;
    }
    
    return false;
}
Итого, атака не происходит, анимация не дергается, все так, как надо.
18 Авг 2021
BalbuR, можно еще m_Weapon_flNextPrimaryAttack засетать, но особой разницы не вижу, работает одинаково с m_flNextAttack в моем случае. Если я конечно только что нибудь не поломал случайно, но вроде работает
18 Авг 2021
Javekson, сетается все в itempostframe, weaponidle и т.д. смотри в регейме их.
ты имеешь ввиду глянуть в сурсах где сетается m_flNextAttack ?
 
Сообщения
704
Реакции
475
Помог
10 раз(а)
он имеет ввиду что m_flNextAttack блочит вызов постфрейма
постфрейм вызывает primary | secondary| idle
блочим постфрейм - блочим всю логику
 
Сообщения
1,016
Реакции
818
Помог
10 раз(а)
BalbuR, понял, ну код выше в целом работает как нужно, спасибо
 
Сообщения
2,288
Реакции
1,737
Помог
31 раз(а)
создавайте 1 тема 1 вопрос. Люди по сто раз одно и тоже спрашивают из-за таких тем в которых ничего не найдешь.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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