Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос M_bInReload

  • Автор темы Автор темы notdaisy
  • Дата начала Дата начала
keep silence
Участник
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
548
Реакции
201
Вернёт ли m_bInReload значение true между выстрелами с авика/мухи? Т.е. не перезарядка а задержка до след. выстрела?
 
Вернёт ли m_bInReload значение true между выстрелами с авика/мухи? Т.е. не перезарядка а задержка до след. выстрела?
Есть же что-то другое, что рассчитывает между выстрелами вроде как
 
Есть же что-то другое, что рассчитывает между выстрелами вроде как
Код:
Expand Collapse Copy
if ( (pOwner->m_nButtons & IN_ATTACK) && (m_flNextPrimaryAttack <= gpGlobals->curtime) )
{
    PrimaryAttack();
}
вроде оно
 
Есть еще nextsecondattack вроде
secondattack это ж "пкм"
вот это мб m_flNextAttack
оно типа возвращает время до след. атаки? т.е. if ( flNextAttack <= 0.f ) *shot*(); ?
upd.:
C++:
Expand Collapse Copy
constexpr ::std::ptrdiff_t m_flNextAttack = 0x2D70;
constexpr ::std::ptrdiff_t m_flNextPrimaryAttack = 0x3238;
интересно тогда за что отвечает primary. что-то запутался =)
и заодно спрошу, корректна ли след. проверка на релод:
C++:
Expand Collapse Copy
DWORD get_weapon_handle()
{
    return memory.Read<DWORD>(address /* tipa player */ + m_hActiveWeapon);
}

int get_weapon_ent()
{
    return get_weapon_handle() & 0xFFF;
}

bool is_in_reload()
{
    return memory.Read<bool>(get_weapon_ent() + m_bInReload);
}
 
Последнее редактирование:
secondattack это ж "пкм"

оно типа возвращает время до след. атаки? т.е. if ( flNextAttack <= 0.f ) *shot*(); ?
upd.:
C++:
Expand Collapse Copy
constexpr ::std::ptrdiff_t m_flNextAttack = 0x2D70;
constexpr ::std::ptrdiff_t m_flNextPrimaryAttack = 0x3238;
интересно тогда за что отвечает primary. что-то запутался =)
и заодно спрошу, корректна ли след. проверка на релод:
C++:
Expand Collapse Copy
DWORD get_weapon_handle()
{
    return memory.Read<DWORD>(address /* tipa player */ + m_hActiveWeapon);
}

int get_weapon_ent()
{
    return get_weapon_handle() & 0xFFF;
}

bool is_in_reload()
{
    return memory.Read<bool>(get_weapon_ent() + m_bInReload);
}
primary за орудие первичное т.е автоматы и т.д,а second за пистолеты если не ошибаюсь
 
primary за орудие первичное т.е автоматы и т.д,а second за пистолеты если не ошибаюсь
Нет, secondary только у револьвера вроде как есть (пкм)
и заодно спрошу, корректна ли след. проверка на релод:
Нет, в get_weapon_ent ты не получаешь адрес ентити, ты получаешь его индекс
оно типа возвращает время до след. атаки? т.е. if ( flNextAttack <= 0.f ) *shot*(); ?
nextattack это у игроков, и сравнивать нужно с curtime, а не с нулём, оно нулем не будет
 
nextattack это у игроков, и сравнивать нужно с curtime, а не с нулём, оно нулем не будет
на юц видел, что nextattack сравнивали (<) с tickbase * interval_per_tick, оффсет тикбейз в хзд был, а вот интервайла нет. в какой таблице его искать? и ещё, m_nTickBase, что за "n" такое?)
 
Нет, в get_weapon_ent ты не получаешь адрес ентити, ты получаешь его индекс
C++:
Expand Collapse Copy
    DWORD get_weapon_handle()
    {
        return memory.Read<DWORD>(address + m_hActiveWeapon);
    }

    int get_weapon_ent()
    {
        return get_weapon_handle() & 0xFFF;
    }

    DWORD get_current_weapon()
    {
        return memory.Read<DWORD>(client_dll + dwEntityList + (get_weapon_ent() - 1) * entLoopDist);
    }

    bool is_in_reload()
    {
        return memory.Read<bool>(get_current_weapon() + m_bInReload);
    }
вродь оно
 
Вернёт ли m_bInReload значение true между выстрелами с авика/мухи? Т.е. не перезарядка а задержка до след. выстрела?
C++:
Expand Collapse Copy
bool CBaseEntity::CanShoot(CWeaponCSBase* pBaseWeapon)
{
    const float flServerTime = TICKS_TO_TIME(this->GetTickBase());

    // check is have ammo
    if (pBaseWeapon->GetAmmo() <= 0)
        return false;

// вот
    // is player ready to shoot
    if (this->GetNextAttack() > flServerTime)
        return false;

    const short nDefinitionIndex = pBaseWeapon->GetItemDefinitionIndex();

    // check is weapon with burst mode
    if ((nDefinitionIndex == WEAPON_FAMAS || nDefinitionIndex == WEAPON_GLOCK) &&
        // check is burst mode
        pBaseWeapon->IsBurstMode() && pBaseWeapon->GetBurstShotsRemaining() > 0)
        return true;

// или вот
    if (pBaseWeapon->GetNextPrimaryAttack() > flServerTime)
        return false;

    // check for revolver cocking ready
    if (nDefinitionIndex == WEAPON_REVOLVER && pBaseWeapon->GetFireReadyTime() > flServerTime)
        return false;

    return true;
}
 
C++:
Expand Collapse Copy
bool CBaseEntity::CanShoot(CWeaponCSBase* pBaseWeapon)
{
    const float flServerTime = TICKS_TO_TIME(this->GetTickBase());

    // check is have ammo
    if (pBaseWeapon->GetAmmo() <= 0)
        return false;

// вот
    // is player ready to shoot
    if (this->GetNextAttack() > flServerTime)
        return false;

    const short nDefinitionIndex = pBaseWeapon->GetItemDefinitionIndex();

    // check is weapon with burst mode
    if ((nDefinitionIndex == WEAPON_FAMAS || nDefinitionIndex == WEAPON_GLOCK) &&
        // check is burst mode
        pBaseWeapon->IsBurstMode() && pBaseWeapon->GetBurstShotsRemaining() > 0)
        return true;

// или вот
    if (pBaseWeapon->GetNextPrimaryAttack() > flServerTime)
        return false;

    // check for revolver cocking ready
    if (nDefinitionIndex == WEAPON_REVOLVER && pBaseWeapon->GetFireReadyTime() > flServerTime)
        return false;

    return true;
}
То есть, NextAttack для энтити, а NextPrimaryAttack для оружия? И можешь, пожалуйста, скинуть функу TIME_TO_TICKS? c:
 
на юц видел, что nextattack сравнивали (<) с tickbase * interval_per_tick, оффсет тикбейз в хзд был, а вот интервайла нет. в какой таблице его искать? и ещё, m_nTickBase, что за "n" такое?)
interval_per_tick - 0.015625f (CGlobalVarsBase)
"n" - int
То есть, NextAttack для энтити, а NextPrimaryAttack для оружия?
Да
 
interval_per_tick - 0.015625f (CGlobalVarsBase)
"n" - int

Да
C++:
Expand Collapse Copy
    DWORD get_weapon_handle()
    {
        return memory.Read<DWORD>(address + m_hActiveWeapon);
    }

    int get_weapon_ent()
    {
        return get_weapon_handle() & 0xFFF;
    }

    DWORD get_current_weapon()
    {
        return memory.Read<DWORD>(client_dll + dwEntityList + (get_weapon_ent() - 1) * entLoopDist);
    }

    bool can_shoot()
    {
        float server_time = memory.Read<int>(address + m_nTickBase) * 0.015625f;
        cout << "server time: " << server_time << endl;
        float next_attack = memory.Read<float>(address + m_flNextAttack);
        cout << "next attack: " << next_attack << endl;

        if (next_attack > server_time)
        {
            return false;
        }

        float next_primary_attack = memory.Read<float>(get_current_weapon() + m_flNextAttack);
        cout << "next primary attack: " << next_primary_attack << endl;

        if (next_primary_attack > server_time)
        {
            return false;
        }

        return true;
    }
Код:
Expand Collapse Copy
server time: 361.828
next attack: 360.969
next primary attack: 2.57978e-18
server time: 361.828
next attack: 360.969
next primary attack: 2.57978e-18
server time: 364.734
next attack: 364.672
next primary attack: 2.57978e-18
server time: 364.75
next attack: 364.672
next primary attack: 2.57978e-18
server time: 364.781
next attack: 364.672
next primary attack: 2.57978e-18
С авика стрелял. Значения тупо всегда меньше сервер тайма, next primary attack вообще хрень какую-то выдаёт
UPD.: да, я мудак, в примари аттак запихнул m_flNextAttack. Всем спасибо, проблема решена)
 
C++:
Expand Collapse Copy
    DWORD get_weapon_handle()
    {
        return memory.Read<DWORD>(address + m_hActiveWeapon);
    }

    int get_weapon_ent()
    {
        return get_weapon_handle() & 0xFFF;
    }

    DWORD get_current_weapon()
    {
        return memory.Read<DWORD>(client_dll + dwEntityList + (get_weapon_ent() - 1) * entLoopDist);
    }

    bool can_shoot()
    {
        float server_time = memory.Read<int>(address + m_nTickBase) * 0.015625f;
        cout << "server time: " << server_time << endl;
        float next_attack = memory.Read<float>(address + m_flNextAttack);
        cout << "next attack: " << next_attack << endl;

        if (next_attack > server_time)
        {
            return false;
        }

        float next_primary_attack = memory.Read<float>(get_current_weapon() + m_flNextAttack);
        cout << "next primary attack: " << next_primary_attack << endl;

        if (next_primary_attack > server_time)
        {
            return false;
        }

        return true;
    }
Код:
Expand Collapse Copy
server time: 361.828
next attack: 360.969
next primary attack: 2.57978e-18
server time: 361.828
next attack: 360.969
next primary attack: 2.57978e-18
server time: 364.734
next attack: 364.672
next primary attack: 2.57978e-18
server time: 364.75
next attack: 364.672
next primary attack: 2.57978e-18
server time: 364.781
next attack: 364.672
next primary attack: 2.57978e-18
С авика стрелял. Значения тупо всегда меньше сервер тайма, next primary attack вообще хрень какую-то выдаёт
UPD.: да, я мудак, в примари аттак запихнул m_flNextAttack. Всем спасибо, проблема решена)
вот я сижу и не могу понять код.

#define TICK_INTERVAL ( I::Globals->flIntervalPerTick )
#define TIME_TO_TICKS( t ) ( static_cast<int>( 0.5f + static_cast<float>( t ) / TICK_INTERVAL ) )
#define TICKS_TO_TIME( t ) ( TICK_INTERVAL * static_cast<float>( t ) )
у меня вообще вот так.
 
вот я сижу и не могу понять код.

#define TICK_INTERVAL ( I::Globals->flIntervalPerTick )
#define TIME_TO_TICKS( t ) ( static_cast<int>( 0.5f + static_cast<float>( t ) / TICK_INTERVAL ) )
#define TICKS_TO_TIME( t ) ( TICK_INTERVAL * static_cast<float>( t ) )
у меня вообще вот так.
Та уже всё работает, я оффсет перепутал хахах
 
Назад
Сверху Снизу