Русское сообщество по скриптингу

Блокировать прострел объекта  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Блокировать прострел объекта

Сообщение hren_morjovui » 26 авг 2019, 20:40

Подскажите почему при таком вот расскладе пуля один фиг летит дальше и наносит урон? -_-

Код: Выделить всё

RegisterHam
(Ham_TraceAttackcreate_entity_classname"Ham_TraceAttack_Player"false);

public 
Ham_TraceAttack_Player(entity_idattacker_idFloat:damageFloat:direction[3], tr_iddamagebits)
{
    if(
pev(entity_idIS_BLOCK_ENTITY))
    {
        
set_tr(TR_vecEndPosFloat:{4096.0,4096.0,4096.0});
        
set_tr(TR_AllSolid1);
        
set_tr(TR_pHit0);
        
set_tr(TR_iHitgroup0);
        
set_tr(TR_flFraction1.0);

        return 
HAM_SUPERCEDE;
    }
    
    return 
HAM_IGNORED;
}
 
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery

Re: Блокировать прострел объекта

Сообщение nato » 27 авг 2019, 11:02

Причин может быть много. Может быть не выполняется условие:
Код: Выделить всё
if(pev(entity_id, IS_BLOCK_ENTITY))


Вот тут непонятно на какой classname зарегистрирован хам
create_entity_classname

Если это какой ваш classname, а не стандартный, то насколько я помню ham не регистрируется на нестандартные класнеймы.
Аватара пользователя
nato
 
Сообщения: 346
Зарегистрирован: 06 июл 2011, 17:45
Благодарил (а): 30 раз.
Поблагодарили: 91 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Блокировать прострел объекта  [Решено]

Сообщение hren_morjovui » 27 авг 2019, 11:34

nato писал(а):Причин может быть много. Может быть не выполняется условие:
Код: Выделить всё
if(pev(entity_id, IS_BLOCK_ENTITY)) 


Вот тут непонятно на какой classname зарегистрирован хам
create_entity_classname

Если это какой ваш classname, а не стандартный, то насколько я помню ham не регистрируется на нестандартные класнеймы.


"func_brekable" и условия проверял, всё выполняется :dntknw:

Добавлено спустя 16 минут 41 секунду:
В общем решил костылями, блокирует прострел через объект но самому объекту урон наносит.

Код: Выделить всё
#define IS_NEED_ENTITY pev_iuser1 //сюда записываю ID владельца
#define entity_classname "myentity" //класснейм после создания
#define create_entity_classname "func_breakable" //класснейм основы

public plugin_init()
{
    register_plugin("BLA", "1.0", "BLABLA");
    
    RegisterHam
(Ham_TraceAttack, create_entity_classname, "ham_trace_attack", false);
    
RegisterHam(Ham_TraceAttack"player""ham_trace_attack"false);
}

//При успешной проверке возвращает ID владельца
is_my_entity(const entity_id)
{
    static
        owner_id
,
        classname[34];

    if(pev_valid(entity_id) == 2)
    {
        owner_id = pev(entity_id, IS_NEED_ENTITY);
        if(get_player_status(owner_id))
        {
            pev(entity_id, pev_classname, classname, 32);
            if(equal(shield_classname,classname))
                return owner_id;
        }
    }
    return 0;
}

public ham_trace_attack(entity_id, attacker_id, Float:damage, Float:direction[3], tr_id, damagebits)
{
    static 
        owner_id
,
        old_owner_id;
    
    owner_id 
= is_my_entity(entity_id);

    if(old_owner_id && !owner_id)
    {
        old_owner_id = owner_id;

        return HAM_SUPERCEDE;
    }
    else
        old_owner_id 
= owner_id;

    return HAM_IGNORED;
}
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16