Вопрос по анимации + атаке.

Сообщения
862
Реакции
144
Помог
25 раз(а)
Здравставуйте.
Задался таким вопросом, а именно, как можно до выстрела отослать анимацию один раз, а затем устанавливать уже другую анимацию?
Мне нужно до выстрела оружия установить анимацию, а потом уже устанавливать другую анимацию.

У меня был сперва вариант хукать ПраймериАттак в пре, выставлять там первую анимацию, а затем ловить пост, и выставлять уже другую, но потом я вспомнил, что пре и пост хукаются в момент каждого выстрела.

Пока набросал такой вот мини код:
C++:
#include <AmxModX>
#include <HamSandWich>
#include <ReApi>

new const WeaponReference[] = "weapon_m4a1";

public plugin_init() {
    RegisterHam(Ham_Weapon_PrimaryAttack, WeaponReference, "Ham_CBasePlayerWeapon__PrimaryAttack_Post", true);
}

public Ham_CBasePlayerWeapon__PrimaryAttack_Post(ItemId) {
    static UserId; UserId = get_member(ItemId, m_pPlayer);

    client_print_color(UserId, print_team_default, "^4%s ^1Attack: ^4Post^1!", WeaponReference);

    // Тут выдача первой анимации
    UTIL_SendWeaponAnim(MSG_ONE, UserId, ItemId, 2);
}

stock UTIL_SendWeaponAnim(const iDest, const pReceiver, const pItem, const iAnim)
{
    static iBody; iBody = get_entvar(pItem, var_body);
    set_entvar(pReceiver, var_weaponanim, iAnim);
    message_begin(iDest, SVC_WEAPONANIM, .player = pReceiver);
    write_byte(iAnim);
    write_byte(iBody);
    message_end();
    if(get_entvar(pReceiver, var_iuser1))
        return;
    static i, iCount, pSpectator, aSpectators[MAX_PLAYERS];
    get_players(aSpectators, iCount, "bch");
    for (i = 0; i < iCount; i++)
    {
        pSpectator = aSpectators[i];
        if(get_entvar(pSpectator, var_iuser1) != OBS_IN_EYE)
            continue;
        if(get_entvar(pSpectator, var_iuser2) != pReceiver)
            continue;
        set_entvar(pSpectator, var_weaponanim, iAnim);
        message_begin(iDest, SVC_WEAPONANIM, .player = pSpectator);
        write_byte(iAnim);
        write_byte(iBody);
        message_end();
    }
}
Будет ли в таком случае нормальным решением хукать Ham_Item_PostFrame, получать IN_ATTACK, задавать первую анимацию, и затем, через время, уже остылать аттаку?
 
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
Можешь посмотреть как в гранатах сделан бросок (PrimaryAttack + WeaponIdle)

Ещё можно посмотреть как сделан берст в глоке и фамасе.

Либо через Item_PostFrame. Если логика выходит за пределы пушки, то можно и player think.
 
Сообщения
526
Реакции
461
Предупреждения
16
Помог
9 раз(а)
Почему бы не объединить эти анимации на самой модельке? (раз это не граната а мка)
 

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

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