#include "hooks.hpp"
#include "..//helpers/items.hpp"
/*static auto random_sequence(const int low, const int high) -> int {
return rand() % (high - low + 1) + low;
}
static auto fix_animation(const char* model, const int sequence) -> int {
enum ESequence
{
SEQUENCE_DEFAULT_DRAW = 0,
SEQUENCE_DEFAULT_IDLE1 = 1,
SEQUENCE_DEFAULT_IDLE2 = 2,
SEQUENCE_DEFAULT_LIGHT_MISS1 = 3,
SEQUENCE_DEFAULT_LIGHT_MISS2 = 4,
SEQUENCE_DEFAULT_HEAVY_MISS1 = 9,
SEQUENCE_DEFAULT_HEAVY_HIT1 = 10,
SEQUENCE_DEFAULT_HEAVY_BACKSTAB = 11,
SEQUENCE_DEFAULT_LOOKAT01 = 12,
SEQUENCE_BUTTERFLY_DRAW = 0,
SEQUENCE_BUTTERFLY_DRAW2 = 1,
SEQUENCE_BUTTERFLY_LOOKAT01 = 13,
SEQUENCE_BUTTERFLY_LOOKAT03 = 15,
SEQUENCE_FALCHION_IDLE1 = 1,
SEQUENCE_FALCHION_HEAVY_MISS1 = 8,
SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP = 9,
SEQUENCE_FALCHION_LOOKAT01 = 12,
SEQUENCE_FALCHION_LOOKAT02 = 13,
SEQUENCE_DAGGERS_IDLE1 = 1,
SEQUENCE_DAGGERS_LIGHT_MISS1 = 2,
SEQUENCE_DAGGERS_LIGHT_MISS5 = 6,
SEQUENCE_DAGGERS_HEAVY_MISS2 = 11,
SEQUENCE_DAGGERS_HEAVY_MISS1 = 12,
SEQUENCE_BOWIE_IDLE1 = 1,
};
if (strstr(model, "models/weapons/v_knife_butterfly.mdl")) {
switch (sequence) {
case SEQUENCE_DEFAULT_DRAW:
return random_sequence(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_BUTTERFLY_LOOKAT01, SEQUENCE_BUTTERFLY_LOOKAT03);
default:
return sequence + 1;
}
}
else if (strstr(model, "models/weapons/v_knife_falchion_advanced.mdl")) {
switch (sequence) {
case SEQUENCE_DEFAULT_IDLE2:
return SEQUENCE_FALCHION_IDLE1;
case SEQUENCE_DEFAULT_HEAVY_MISS1:
return random_sequence(SEQUENCE_FALCHION_HEAVY_MISS1, SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_FALCHION_LOOKAT01, SEQUENCE_FALCHION_LOOKAT02);
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
return sequence;
default:
return sequence - 1;
}
}
else if (strstr(model, "models/weapons/v_knife_push.mdl")) {
switch (sequence) {
case SEQUENCE_DEFAULT_IDLE2:
return SEQUENCE_DAGGERS_IDLE1;
case SEQUENCE_DEFAULT_LIGHT_MISS1:
case SEQUENCE_DEFAULT_LIGHT_MISS2:
return random_sequence(SEQUENCE_DAGGERS_LIGHT_MISS1, SEQUENCE_DAGGERS_LIGHT_MISS5);
case SEQUENCE_DEFAULT_HEAVY_MISS1:
return random_sequence(SEQUENCE_DAGGERS_HEAVY_MISS2, SEQUENCE_DAGGERS_HEAVY_MISS1);
case SEQUENCE_DEFAULT_HEAVY_HIT1:
case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
case SEQUENCE_DEFAULT_LOOKAT01:
return sequence + 3;
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
return sequence;
default:
return sequence + 2;
}
}
else if (strstr(model, "models/weapons/v_knife_survival_bowie.mdl")) {
switch (sequence) {
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
return sequence;
case SEQUENCE_DEFAULT_IDLE2:
return SEQUENCE_BOWIE_IDLE1;
default:
return sequence - 1;
}
}
else if (strstr(model, "models/weapons/v_knife_ursus.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random_sequence(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if (strstr(model, "models/weapons/v_knife_skeleton.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random_sequence(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if (strstr(model, "models/weapons/v_knife_outdoor.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random_sequence(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if (strstr(model, "models/weapons/v_knife_canis.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random_sequence(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if (strstr(model, "models/weapons/v_knife_cord.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random_sequence(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if (strstr(model, "models/weapons/v_knife_stiletto.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(12, 13);
}
}
else if (strstr(model, "models/weapons/v_knife_widowmaker.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_LOOKAT01:
return random_sequence(14, 15);
case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
return sequence - 1;
}
}
else {
return sequence;
}
}
namespace hooks
{
void Hooks::RecvProxy(const CRecvProxyData* pData, void* entity, void* output)
//void Hooks::RecvProxy(const CRecvProxyData* pData, void* entity, void* output)
//void Recv_Proxy::hook(const c_recv_proxy_data* pData, void* entity, void* output)
{
static auto ofunc = sequence_vhook->get_original_function();
// static auto original_fn = sequence_hook->get_original_function();
const auto local = static_cast<C_BasePlayer*>(g_EntityList->GetClientEntity((g_EngineClient->g_LocalPlayer)));
if (local && local->IsAlive())
{
const auto proxy_data = const_cast<CRecvProxyData*>(pData);
const auto view_model = static_cast<C_BaseViewModel*>(entity);
if (view_model && view_model->m_hOwner() && view_model->m_hOwner().IsValid()) {
const auto owner = static_cast<C_BasePlayer*>(g_EntityList->GetClientEntityFromHandle(view_model->m_hOwner()));
if (owner == g_EntityList->GetClientEntity(g_EntityList->g_LocalPlayer())) {
const auto view_model_weapon_handle = view_model->m_hWeapon();
if (view_model_weapon_handle.IsValid()) {
const auto view_model_weapon = static_cast<C_BaseAttributableItem*>(g_EntityList->GetClientEntityFromHandle(view_model_weapon_handle));
if (view_model_weapon)
{
if (k_weapon_info.count(view_model_weapon->m_Item().m_iItemDefinitionIndex()))
{
auto original_sequence = proxy_data->m_Value.m_Int;
const auto override_model = k_weapon_info.at(view_model_weapon->m_Item().m_iItemDefinitionIndex()).model;
proxy_data->m_Value.m_Int = fix_animation(override_model, proxy_data->m_Value.m_Int);
}
}
}
}
}
}
ofunc(pData, entity, output);
// originalfn(pData, entity, output);
}
}
void Remapping(CRecvProxyData* data, C_BaseViewModel* entity)
{
if (!g_LocalPlayer || !g_LocalPlayer->IsAlive())
return;
const auto owner = g_EntityList->GetClientEntityFromHandle(entity->m_hOwner());
if (owner != g_LocalPlayer)
return;
const auto view_model_weapon = static_cast<C_BaseAttributableItem*>(g_EntityList->GetClientEntityFromHandle(entity->m_hWeapon()));
if (!view_model_weapon)
return;
const auto entry = k_weapon_info.find(view_model_weapon->m_Item().m_iItemDefinitionIndex());
if (entry == k_weapon_info.end())
return;
if (&entry->second == nullptr)
return;
const auto weaponInfo = &entry->second;
auto& sequence = data->m_Value.m_Int;
sequence = GetNewAnimation(weaponInfo->model, sequence);
}
void Hooks::RecvProxy(const CRecvProxyData* pData, void* entity, void* output)
{
static auto ofunc = sequence_hook->get_original_function();
const auto proxy_data = const_cast<CRecvProxyData*>(pData);
const auto view_model = static_cast<C_BaseViewModel*>(entity);
Remapping(proxy_data, view_model);
ofunc(pData, entity, output);*/
enum ESequence
{
SEQUENCE_DEFAULT_DRAW = 0,
SEQUENCE_DEFAULT_IDLE1 = 1,
SEQUENCE_DEFAULT_IDLE2 = 2,
SEQUENCE_DEFAULT_LIGHT_MISS1 = 3,
SEQUENCE_DEFAULT_LIGHT_MISS2 = 4,
SEQUENCE_DEFAULT_HEAVY_MISS1 = 9,
SEQUENCE_DEFAULT_HEAVY_HIT1 = 10,
SEQUENCE_DEFAULT_HEAVY_BACKSTAB = 11,
SEQUENCE_DEFAULT_LOOKAT01 = 12,
SEQUENCE_BUTTERFLY_DRAW = 0,
SEQUENCE_BUTTERFLY_DRAW2 = 1,
SEQUENCE_BUTTERFLY_LOOKAT01 = 13,
SEQUENCE_BUTTERFLY_LOOKAT03 = 15,
SEQUENCE_FALCHION_IDLE1 = 1,
SEQUENCE_FALCHION_HEAVY_MISS1 = 8,
SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP = 9,
SEQUENCE_FALCHION_LOOKAT01 = 12,
SEQUENCE_FALCHION_LOOKAT02 = 13,
SEQUENCE_DAGGERS_IDLE1 = 1,
SEQUENCE_DAGGERS_LIGHT_MISS1 = 2,
SEQUENCE_DAGGERS_LIGHT_MISS5 = 6,
SEQUENCE_DAGGERS_HEAVY_MISS2 = 11,
SEQUENCE_DAGGERS_HEAVY_MISS1 = 12,
SEQUENCE_BOWIE_IDLE1 = 1,
/* SEQUENCE_DEFAULT_DRAW = 0,
SEQUENCE_DEFAULT_IDLE1 = 1,
SEQUENCE_DEFAULT_IDLE2 = 2,
SEQUENCE_DEFAULT_LIGHT_MISS1 = 3,
SEQUENCE_DEFAULT_LIGHT_MISS2 = 4,
SEQUENCE_DEFAULT_HEAVY_MISS1 = 9,
SEQUENCE_DEFAULT_HEAVY_HIT1 = 10,
SEQUENCE_DEFAULT_HEAVY_BACKSTAB = 11,
SEQUENCE_DEFAULT_LOOKAT01 = 12,
SEQUENCE_BUTTERFLY_DRAW = 0,
SEQUENCE_BUTTERFLY_DRAW2 = 1,
SEQUENCE_BUTTERFLY_LOOKAT01 = 13,
SEQUENCE_BUTTERFLY_LOOKAT02 = 14,
SEQUENCE_BUTTERFLY_LOOKAT03 = 15,
SEQUENCE_FALCHION_IDLE1 = 1,
SEQUENCE_FALCHION_HEAVY_MISS1 = 8,
SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP = 9,
SEQUENCE_FALCHION_LOOKAT01 = 12,
SEQUENCE_FALCHION_LOOKAT02 = 13,
SEQUENCE_DAGGERS_IDLE1 = 1,
SEQUENCE_DAGGERS_LIGHT_MISS1 = 2,
SEQUENCE_DAGGERS_LIGHT_MISS5 = 6,
SEQUENCE_DAGGERS_HEAVY_MISS2 = 11,
SEQUENCE_DAGGERS_HEAVY_MISS1 = 12,
SEQUENCE_BOWIE_IDLE1 = 1,*/
};
int random(const int& min, const int& max)
{
return rand() % (max - min + 1) + min;
}
int GetNewAnimation(std::string model, const int sequence)
{
if ((model, "models/weapons/v_knife_butterfly.mdl")) {
switch (sequence) {
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, SEQUENCE_BUTTERFLY_LOOKAT03);
default:
return sequence + 1;
}
}
else if ((model, "models/weapons/v_knife_outdoor.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if ((model, "models/weapons/v_knife_canis.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
else if ((model, "models/weapons/v_knife_cord.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
/* if (model == "models/weapons/v_knife_cord.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
if (model == "models/weapons/v_knife_canis.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
if (model == "models/weapons/v_knife_outdoor.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}*/
else if ((model, "models/weapons/v_knife_skeleton.mdl"))
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
/*if (model == "models/weapons/v_knife_skeleton.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}*/
if (model == "models/weapons/v_knife_falchion_advanced.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_IDLE2:
return SEQUENCE_FALCHION_IDLE1;
case SEQUENCE_DEFAULT_HEAVY_MISS1:
return random(SEQUENCE_FALCHION_HEAVY_MISS1, SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_FALCHION_LOOKAT01, SEQUENCE_FALCHION_LOOKAT02);
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
return sequence;
default:
return sequence - 1;
}
}
if (model == "models/weapons/v_knife_push.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_IDLE2:
return SEQUENCE_DAGGERS_IDLE1;
case SEQUENCE_DEFAULT_LIGHT_MISS1:
case SEQUENCE_DEFAULT_LIGHT_MISS2:
return random(SEQUENCE_DAGGERS_LIGHT_MISS1, SEQUENCE_DAGGERS_LIGHT_MISS5);
case SEQUENCE_DEFAULT_HEAVY_MISS1:
return random(SEQUENCE_DAGGERS_HEAVY_MISS2, SEQUENCE_DAGGERS_HEAVY_MISS1);
case SEQUENCE_DEFAULT_HEAVY_HIT1:
case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
case SEQUENCE_DEFAULT_LOOKAT01:
return sequence + 3;
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
return sequence;
default:
return sequence + 2;
}
}
if (model == "models/weapons/v_knife_survival_bowie.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
return sequence;
case SEQUENCE_DEFAULT_IDLE2:
return SEQUENCE_BOWIE_IDLE1;
default:
return sequence - 1;
}
}
if (model == "models/weapons/v_knife_ursus.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_DRAW:
return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
case SEQUENCE_DEFAULT_LOOKAT01:
return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
default:
return sequence + 1;
}
}
if (model == "models/weapons/v_knife_stiletto.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_LOOKAT01:
return random(12, 13);
}
}
if (model == "models/weapons/v_knife_widowmaker.mdl")
{
switch (sequence)
{
case SEQUENCE_DEFAULT_LOOKAT01:
return random(14, 15);
case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
return sequence - 1;
}
}
return sequence;
}
void Remapping(CRecvProxyData* data, C_BaseViewModel* entity)
{
if (!g_LocalPlayer || !g_LocalPlayer->IsAlive())
return;
const auto owner = g_EntityList->GetClientEntityFromHandle(entity->m_hOwner());
if (owner != g_LocalPlayer)
return;
const auto view_model_weapon = static_cast<C_BaseAttributableItem*>(g_EntityList->GetClientEntityFromHandle(entity->m_hWeapon()));
if (!view_model_weapon)
return;
const auto entry = k_weapon_info.find(view_model_weapon->m_Item().m_iItemDefinitionIndex());
if (entry == k_weapon_info.end())
return;
if (&entry->second == nullptr)
return;
const auto weaponInfo = &entry->second;
auto& sequence = data->m_Value.m_Int;
sequence = GetNewAnimation(weaponInfo->model, sequence);
}
void Hooks::RecvProxy(const CRecvProxyData* pData, void* entity, void* output)
{
static auto ofunc = sequence_hook->get_original_function();
const auto proxy_data = const_cast<CRecvProxyData*>(pData);
const auto view_model = static_cast<C_BaseViewModel*>(entity);
Remapping(proxy_data, view_model);
ofunc(pData, entity, output);
}