Начинающий
- Статус
- Оффлайн
- Регистрация
- 17 Ноя 2023
- Сообщения
- 73
- Реакции
- 10
C++:
class c_in_button_state
{
public:
void* __vfptr; //0x0000
uint64_t button_state; //0x0008
uint64_t button_state2; //0x0010
uint64_t button_state3; //0x0018
enum e_button_state_t : int8_t
{
in_button_up = 0,
in_button_down = 1,
in_button_down_up = 2,
in_button_up_down = 3,
in_button_up_down_up = 4,
in_button_down_up_down = 5,
in_button_down_up_down_up = 6,
in_button_up_down_up_down = 7
};
void set_button_state(const uint64_t& u_value, int e_button_state)
{
switch (e_button_state)
{
case in_button_up:
{
button_state &= ~u_value;
button_state2 &= ~u_value;
button_state3 &= ~u_value;
break;
}
case in_button_down:
{
button_state |= u_value;
button_state2 &= ~u_value;
button_state3 &= ~u_value;
break;
}
case in_button_down_up:
{
button_state &= ~u_value;
button_state2 |= u_value;
button_state3 &= ~u_value;
break;
}
case in_button_up_down:
{
button_state |= u_value;
button_state2 |= u_value;
button_state3 &= ~u_value;
break;
}
case in_button_up_down_up:
{
button_state &= ~u_value;
button_state2 &= ~u_value;
button_state3 |= u_value;
break;
}
case in_button_down_up_down:
{
button_state |= u_value;
button_state2 &= ~u_value;
button_state3 |= u_value;
break;
}
case in_button_down_up_down_up:
{
button_state &= ~u_value;
button_state2 |= u_value;
button_state3 |= u_value;
break;
}
case in_button_up_down_up_down:
{
button_state |= u_value;
button_state2 |= u_value;
button_state3 |= u_value;
break;
}
}
}
};
static_assert(sizeof(c_in_button_state) == 0x20);
void c_movement::fix_cmd_buttons()
{
if (ctx.base_cmd->forwardmove() > 0.f)
ctx.user_cmd->buttons.set_button_state(IN_FORWARD, c_in_button_state::e_button_state_t::in_button_down);
else if (ctx.base_cmd->forwardmove() < 0.f)
ctx.user_cmd->buttons.set_button_state(IN_BACK, c_in_button_state::e_button_state_t::in_button_down);
if (ctx.base_cmd->leftmove() > 0.f)
ctx.user_cmd->buttons.set_button_state(IN_MOVELEFT, c_in_button_state::e_button_state_t::in_button_down);
else if (ctx.base_cmd->leftmove() < 0.f)
ctx.user_cmd->buttons.set_button_state(IN_MOVERIGHT, c_in_button_state::e_button_state_t::in_button_down);
}
call fix_cmd_buttons in the CreateMove hook AFTER ALL calls
credits: @King Gizzard
Последнее редактирование: