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

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
78
Реакции
7
BalbuR, попробовал так:


Код:
    LateralBrassDrop = get_gametime() + 0.05(Это значение в ходе тестов я по-разному менял);
    ...
    if(get_entvar(pItem, var_impulse) != WeaponUnicalIndex || LateralBrassDrop == 0.0 || LateralBrassDrop > get_gametime())
    {
        return HAM_IGNORED;
    }
    else
    {
        static pPlayer; pPlayer = get_member(pItem, m_pPlayer);
        if(gl_bitUserLeftHanded)
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, -12.0, -10.0, 25.0, random_float(65.0, 70.0), random_float(85.0, 90.0));
        }
        else
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, 12.0, -10.0, 25.0, random_float(-65.0, -70.0), random_float(85.0, 90.0));
        }
        LateralBrassDrop = 0.0;
        return HAM_SUPERCEDE;
    }
Вне зависимости от изменения значения LateralBrassDrop, через postframe гильза вылетает только после истечения времени NextPrimaryAttack.

BalbuR, я глянул, постфрейм же вызывается каждый фрейм, когда оружие не перезаряжается, стреляет или не достается. Это действительно лучше одного set_task'а?
То есть он не срабатывает в течение всего времени проигрывания анимации стрельбы.
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, попробовал так:


Код:
    LateralBrassDrop = get_gametime() + 0.05(Это значение в ходе тестов я по-разному менял);
    ...
    if(get_entvar(pItem, var_impulse) != WeaponUnicalIndex || LateralBrassDrop == 0.0 || LateralBrassDrop > get_gametime())
    {
        return HAM_IGNORED;
    }
    else
    {
        static pPlayer; pPlayer = get_member(pItem, m_pPlayer);
        if(gl_bitUserLeftHanded)
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, -12.0, -10.0, 25.0, random_float(65.0, 70.0), random_float(85.0, 90.0));
        }
        else
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, 12.0, -10.0, 25.0, random_float(-65.0, -70.0), random_float(85.0, 90.0));
        }
        LateralBrassDrop = 0.0;
        return HAM_SUPERCEDE;
    }
Вне зависимости от изменения значения LateralBrassDrop, через postframe гильза вылетает только после истечения времени NextPrimaryAttack.


То есть он не срабатывает в течение всего времени проигрывания анимации стрельбы.
откуда вызываешь
19 Июл 2024
если постфрейм, то скорее всего m_flNextAttack блочит вызов постфрейма, к сведению
 
Сообщения
78
Реакции
7
BalbuR, да, из постфрейма, все верно, в pre primary attack прописывается set_member(pPlayer, m_flNextAttack, WeaponRate). Получается, нужно искать другой вариант?
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, да, из постфрейма, все верно, в pre primary attack прописывается set_member(pPlayer, m_flNextAttack, WeaponRate). Получается, нужно искать другой вариант?
можешь flNextAttack в хуке primaryattack закомментить, по идее не критично должно быть
 
Сообщения
78
Реакции
7
BalbuR, Спасибо, сработало, а в чем суть m_flNextAttack? Это общий оффсет для времени ожидания первичной и вторичной атаки или он блокирует анимацию выстрела для модельки игрока?
19 Июл 2024
Просто опасаюсь потенциальных проблем с этим
 
Последнее редактирование:
Сообщения
821
Реакции
510
Помог
12 раз(а)
задержку ставит на postframe
еще фонарик и еще что-то, не помню точно
 
Сообщения
78
Реакции
7
BalbuR, о, а вот эта задержка и выглядит как нормальный таймер. Решил оформить окно, чтобы не аукнулось, да и выглядит лучше чем вычисление get_gametime на каждый кадр. Это имеет смысл?


Код:
const Float: WeaponRate =  2.02;
const Float: LateralBrassDropTime = 1.05;
new LateralBrassDrop;
...

public Ham_CBasePlayerWeapon__Deploy_Post(const pItem)
{
    ...
    LateralBrassDrop = 0;
}
...

public Ham_CBasePlayerWeapon__Holster_Post(const pItem)
{
    ...
    LateralBrassDrop = 0;
}
...

public Ham_CBasePlayerWeapon__PrimaryAttack_Pre(const pItem)
{
    ...
    set_member(pPlayer, m_flNextAttack, LateralBrassDropTime);
    ...
}
...

public CBasePlayerWeapon__Fire(const pPlayer, const pItem, iClip, const Float: flNextAttack)
{
    ...
    LateralBrassDrop = 1;
    ...
}

public Ham_CBasePlayerWeapon__ItemPostFrame_Post(const pItem)
{
    if(LateralBrassDrop == 0 || get_entvar(pItem, var_impulse) != WeaponUnicalIndex)
    {
        return HAM_IGNORED;
    }
    else
    {
        static pPlayer; pPlayer = get_member(pItem, m_pPlayer);
        if(gl_bitUserLeftHanded)
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, -11.0, -10.0, 25.0, random_float(65.0, 70.0), random_float(85.0, 90.0));
        }
        else
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, 11.0, -10.0, 25.0, random_float(-65.0, -70.0), random_float(85.0, 90.0));
        }
        LateralBrassDrop = 0;
        set_member(pPlayer, m_flNextAttack, WeaponRate - LateralBrassDropTime);
        return HAM_SUPERCEDE;
    }
}
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, о, а вот эта задержка и выглядит как нормальный таймер. Решил оформить окно, чтобы не аукнулось, да и выглядит лучше чем вычисление get_gametime на каждый кадр. Это имеет смысл?


Код:
const Float: WeaponRate =  2.02;
const Float: LateralBrassDropTime = 1.05;
new LateralBrassDrop;
...

public Ham_CBasePlayerWeapon__Deploy_Post(const pItem)
{
    ...
    LateralBrassDrop = 0;
}
...

public Ham_CBasePlayerWeapon__Holster_Post(const pItem)
{
    ...
    LateralBrassDrop = 0;
}
...

public Ham_CBasePlayerWeapon__PrimaryAttack_Pre(const pItem)
{
    ...
    set_member(pPlayer, m_flNextAttack, LateralBrassDropTime);
    ...
}
...

public CBasePlayerWeapon__Fire(const pPlayer, const pItem, iClip, const Float: flNextAttack)
{
    ...
    LateralBrassDrop = 1;
    ...
}

public Ham_CBasePlayerWeapon__ItemPostFrame_Post(const pItem)
{
    if(LateralBrassDrop == 0 || get_entvar(pItem, var_impulse) != WeaponUnicalIndex)
    {
        return HAM_IGNORED;
    }
    else
    {
        static pPlayer; pPlayer = get_member(pItem, m_pPlayer);
        if(gl_bitUserLeftHanded)
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, -11.0, -10.0, 25.0, random_float(65.0, 70.0), random_float(85.0, 90.0));
        }
        else
        {
            UTIL_EjectBrass(pPlayer, WeaponModelShell, 1, 17.0, 11.0, -10.0, 25.0, random_float(-65.0, -70.0), random_float(85.0, 90.0));
        }
        LateralBrassDrop = 0;
        set_member(pPlayer, m_flNextAttack, WeaponRate - LateralBrassDropTime);
        return HAM_SUPERCEDE;
    }
}
атаку и все на свете заблочишь
к сведению, вся логика оружия (практически) строится на postframe, не советую баловаться flNextAttack'ой

да и в целом выглядит как "экономия на спичках"
скоро в золотой цитатник попадет
 
Сообщения
78
Реакции
7
BalbuR, ну я это уже опробовал, все работает
20 Июл 2024
Изначально было так:
Код:
public Ham_CBasePlayerWeapon__PrimaryAttack_Pre(const pItem)
{
    ...
    set_member(pPlayer, m_flNextAttack, WeaponRate);
    ...
}
20 Июл 2024
BalbuR, Так m_flNextAttack это " в хуке primaryattack закомментить, по идее не критично должно быть " или же это настолько "не критично", что можно всю логику оружия поломать?
20 Июл 2024
PS. Такими темпами мы с тобой оба залетим в золотой цитатник
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, ну я это уже опробовал, все работает
20 Июл 2024
Изначально было так:
Код:
public Ham_CBasePlayerWeapon__PrimaryAttack_Pre(const pItem)
{
    ...
    set_member(pPlayer, m_flNextAttack, WeaponRate);
    ...
}
20 Июл 2024
BalbuR, Так m_flNextAttack это " в хуке primaryattack закомментить, по идее не критично должно быть " или же это настолько "не критично", что можно всю логику оружия поломать?
20 Июл 2024
PS. Такими темпами мы с тобой оба залетим в золотой цитатник
критично, если ты flNextAttack заблочишь на длительное время
например, кнопку E (+use) ты не нажмешь, пока flNextAttack не вернется в ноль (на каком-нибудь зомби эскейпе это может быть критично)
20 Июл 2024
золотой цитатник
Алексеич ждем цитатник
 
Сообщения
78
Реакции
7
критично, если ты flNextAttack заблочишь на длительное время
например, кнопку E (+use) ты не нажмешь, пока flNextAttack не вернется в ноль (на каком-нибудь зомби эскейпе это может быть критично)
20 Июл 2024

Алексеич ждем цитатник
BalbuR, не, так рукожопить я не стал, фактически я прописал для nextattack время задержки выброса гильзы, параллельно поставив метку на вылет гильзы, при первых же кадрах начавшейся работы постфрейма условие с меткой срабатывает, гильза вылетает, и выставляется время nextattack равное разнице оригинального (это WeaponRate примерно 2 секунды) и задержки вылета гильзы. Никакого блока nextattack на длительное время точно нет, может лишь на несколько кадров.
20 Июл 2024
Не понимаю чем это может быть хуже игнорирования nextattack и вычисления времени каждого кадра в postframe.
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, не, так рукожопить я не стал, фактически я прописал для nextattack время задержки выброса гильзы, параллельно поставив метку на вылет гильзы, при первых же кадрах начавшейся работы постфрейма условие с меткой срабатывает, гильза вылетает, и выстаdляется время nextattack равное разнице оригинального (это WeaponRate примерно 2 секунды) и задержки вылета гильзы. Никакого блока nextattack на длительное время точно нет, может лишь на несколько кадров.
20 Июл 2024
Не понимаю чем это может быть хуже игнорирования nextattack и вычисления времени каждого кадра в postframe.
а теперь советую потестить в два клиента и пострелять
 
Сообщения
78
Реакции
7
BalbuR, с ботами не подойдет?
20 Июл 2024
Поиграл с ботами, вроде ничего такого не заметил
 
Сообщения
78
Реакции
7
BalbuR, прикол в том что гильзы перестают лететь если ты не единственный владелец винтовки на сервере? Однако, это возможно из-за того, что я использовал древний плагин potti, с ботом копирующим мои дижения и точку выстрела. Иных проблем я не обнаружил. Что должно было пойти не так?
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, прикол в том что гильзы перестают лететь если ты не единственный владелец винтовки на сервере? Однако, это возможно из-за того, что я использовал древний плагин potti, с ботом копирующим мои дижения и точку выстрела. Иных проблем я не обнаружил. Что должно было пойти не так?
потому что все в одну переменную для всех пишешь
 
Сообщения
78
Реакции
7
BalbuR, я оформил метку как массив с номерами айди игроков в качестве индексов и добавил к проверке в постфрейм это:
Код:
LateralBrassDrop[get_member(pItem, m_pPlayer) - 1] == 0
, теперь когда я и бот одновременно стреляем из этого оружия, мои гильзы не пропадают, но их нет у бота, я что-то не так сделал или это уже проблема ботов?
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
BalbuR, я оформил метку как массив с номерами айди игроков в качестве индексов и добавил к проверке в постфрейм это:
Код:
LateralBrassDrop[get_member(pItem, m_pPlayer) - 1] == 0
, теперь когда я и бот одновременно стреляем из этого оружия, мои гильзы не пропадают, но их нет у бота, я что-то не так сделал или это уже проблема ботов?
если это zbot'ы, то да
 
Сообщения
78
Реакции
7
BalbuR, это бот из того же древнего плагина potti, у него не срабатывают эти гильзы, но дефолтные гильзы от дефолтного оружия есть. Мой обсер с одной переменной и был причиной порекомендовать мне тест с другими игроками или есть что-то еще?
 
Сообщения
821
Реакции
510
Помог
12 раз(а)
Статус
В этой теме нельзя размещать новые ответы.

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

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