Замена звука выстрела

Статус
В этой теме нельзя размещать новые ответы.

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
И снооова здравствуйте.
Как можно ловить момент выстрела?
Пытался через Ham_Weapon_PrimaryAttack, но оно срабатывает кучу раз пока зажата ЛКМ...
Если это имеет значение. то нужно для изменения звука этого выстрела...
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
voed, Я правильно понял, что тот код заменяет звуки для всех и на всю карту?
 
Сообщения
212
Реакции
335
Помог
3 раз(а)
ArKaNeMaN, ничего он не заменяет. Он не работает.
 
Сообщения
198
Реакции
273
Помог
5 раз(а)
ArKaNeMaN,

Код:
#define pDataKey_flNextPrimaryAttack 46
#define pData_Item 4

public plugin_init()
{
    // Последний аргумент отвечает за хук pre/post. (true обозначает, что событие уже свершилось, т.е. хукаем Post)
    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m3", "hook__onPrimaryPost", true);
}

public hook__onPrimaryPost(ent)
{
    // Возможно ты пытался захукать 'Pre', так что попробуй с условием и без
    // Это условие проверяет наличие задержки перед следующим выстрелом
    if(get_pdata_float(ent,pDataKey_flNextPrimaryAttack,pData_Item) > get_gametime()) {
        return HAM_IGNORED;
    }

    // Далее твой код

}
 
Последнее редактирование:

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
BoecSpecOPs, изначально я хукал пост... Потом пре попробовал... За код спасибо.. Сейчас попробую

P.S. Попробовал.. ВСё ровно так же как и без этой проверки
 
Последнее редактирование:
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Последнее редактирование:

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
Я тут совсем запутался... Один пишет что-то... Второй пишет что то что скинул первый не работает
24 Июл 2018
И так уже 2 раза
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
И снооова здравствуйте.
Как можно ловить момент выстрела?
Пытался через Ham_Weapon_PrimaryAttack, но оно срабатывает кучу раз пока зажата ЛКМ...
Код?
Если это имеет значение. то нужно для изменения звука этого выстрела...
Для блока стандартного звука нужно обманывать клиент в UpdateClientData.
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
Для блока стандартного звука нужно обманывать клиент в UpdateClientData.
Выше BalbuR кидал ссылку на сообщение с исходником..
И там есть вот это...
Код:
public plugin_init( ){
    register_forward( FM_UpdateClientData, "FM_Hook_UpdateClientData_Post", ._post = 1 );
}

public FM_Hook_UpdateClientData_Post( iPlayer, SendWeapons, CD_Handle ){
    enum{
        SPEC_MODE,
        SPEC_TARGET,
        SPEC_END
    };
    static aSpecInfo[ 33 ][ SPEC_END ];

    static Float: flGameTime;
    static Float: flLastEventCheck;

    static iTarget;
    static iSpecMode;
    static iActiveItem;
    static iId;

    iTarget = (iSpecMode = get_entvar(iPlayer, var_iuser1)) ? get_entvar(iPlayer, var_iuser2) : iPlayer;

    iActiveItem = get_member(iTarget, m_pActiveItem);

    if(iActiveItem == NULLENT) return FMRES_IGNORED;

    iId = get_member(iActiveItem, m_iId);

    flGameTime = get_gametime();
    flLastEventCheck = get_member(iActiveItem, m_flLastEventCheck);

    if( iId == CSW_AK47 ){
        if( iSpecMode ){
            if( aSpecInfo[ iPlayer ][ SPEC_MODE ] != iSpecMode ){
                aSpecInfo[ iPlayer ][ SPEC_MODE ] = iSpecMode;
                aSpecInfo[ iPlayer ][ SPEC_TARGET ] = 0;
            }

            if( iSpecMode == OBS_IN_EYE && aSpecInfo[ iPlayer ][ SPEC_TARGET ] != iTarget ){
                aSpecInfo[ iPlayer ][ SPEC_TARGET ] = iTarget;

                SendWeaponAnim( iPlayer, AK47_DUMMY, g_iCurBody[ iTarget ] );
            }
        }

        if( !flLastEventCheck ){
            set_cd( CD_Handle, CD_flNextAttack, flGameTime + 0.001 );
            set_cd( CD_Handle, CD_WeaponAnim, AK47_DUMMY );

            return FMRES_HANDLED;
        }

        if( flLastEventCheck <= flGameTime ){
            SendWeaponAnim( iTarget, AK47_DRAW, g_iCurBody[ iTarget ] );

            set_member( iActiveItem, m_flLastEventCheck, 0.0 );
        }
    }

    return FMRES_IGNORED;
}
И как я понял... Емит соунд должен быть внутри if( !flLastEventCheck ){}... Так?
24 Июл 2018
Ага... Ясно... Я ошибся... XD
 
Последнее редактирование:
Сообщения
845
Реакции
521
Помог
13 раз(а)
/del

загляни в исходник Kord'а
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
Всё... Проблема вроде как решена... Спасибо BalbuR за то что показал где искать решение...

Решение:
C++:
new pLastClip[33];

public plugin_init(){
    // Тут вместо дигла можно вписать другое оружие... Но проверял я ток с диглом
    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "wPrimaryAttack", true); 
}

#define extra_offset_weapon 4
#define m_iClip 51
#define m_pPlayer 41
#define IsValidPev(%0) (pev_valid(%0) == 2)

public wPrimaryAttack(ent){
    if(!IsValidPev(ent)) return HAM_IGNORED;
    static id; id = get_pdata_cbase(ent, m_pPlayer, extra_offset_weapon);
    if(!IsValidPev(id) || !is_user_connected(id)) return HAM_IGNORED;
    static iClip; iClip = get_pdata_int(ent, m_iClip, extra_offset_weapon);
    if(iClip < 0 || pev(id, pev_waterlevel) == 3 || pLastClip[id] == iClip) return HAM_IGNORED;
    pLastClip[id] = iClip;
    
    // Тут какой-нибудь код
    
    return HAM_IGNORED;
}
Разве что рассчитано это всё ток для одного оружия... Не больше...
 
Сообщения
845
Реакции
521
Помог
13 раз(а)
ArKaNeMaN, для этого используют pev_impulse для хранения индекса уникального оружия
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
BalbuR, Можно по подробней? И для чего именно?
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
ArKaNeMaN, чтобы не плодить callback функции от каждой регистрации хама
делаешь массивчик с нужной инфой
в pev_impulse пихаешь ID айтема в массиве для определенного оружия
в callback "достаешь" значение pev_impulse и потом просто из массива тянешь инфу по нему
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
ArKaNeMaN, чтобы не плодить callback функции от каждой регистрации хама
делаешь массивчик с нужной инфой
в pev_impulse пихаешь ID айтема в массиве для определенного оружия
в callback "достаешь" значение pev_impulse и потом просто из массива тянешь инфу по нему
Ну... Я вроде как понял о чём вы... Но мне то оно зачем?
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
ArKaNeMaN, например, если решите хукать на дигле, на авп и еще где нибудь
чтобы не было "копирки" кода)
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
ArKaNeMaN, например, если решите хукать на дигле, на авп и еще где нибудь
чтобы не было "копирки" кода)
Я где-то циклом регал хамы деплоя... И в callback'е проверял оружие по CSW_... Но там оружие не уникальное было...
Но за способ спасибо... Вдруг я б не догадался если бы делал что-то подобное...
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
ArKaNeMaN, все правильно, циклом.
но не надо получать m_iId, это лишнее)

new item = pev(wp_entity, pev_impulse)
g_arrweapons[item][chto_to]
 
Статус
В этой теме нельзя размещать новые ответы.

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

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