#define SEQUENCE_DEFAULT_DRAW 0
#define SEQUENCE_DEFAULT_IDLE1 1
#define SEQUENCE_DEFAULT_IDLE2 2
#define SEQUENCE_DEFAULT_LIGHT_MISS1 3
#define SEQUENCE_DEFAULT_LIGHT_MISS2 4
#define SEQUENCE_DEFAULT_HEAVY_MISS1 9
#define SEQUENCE_DEFAULT_HEAVY_HIT1 10
#define SEQUENCE_DEFAULT_HEAVY_BACKSTAB 11
#define SEQUENCE_DEFAULT_LOOKAT01 12
#define SEQUENCE_BUTTERFLY_DRAW 0
#define SEQUENCE_BUTTERFLY_DRAW2 1
#define SEQUENCE_BUTTERFLY_LOOKAT01 13
#define SEQUENCE_BUTTERFLY_LOOKAT03 15
#define SEQUENCE_FALCHION_IDLE1 1
#define SEQUENCE_FALCHION_HEAVY_MISS1 8
#define SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP 9
#define SEQUENCE_FALCHION_LOOKAT01 12
#define SEQUENCE_FALCHION_LOOKAT02 13
#define SEQUENCE_DAGGERS_IDLE1 1
#define SEQUENCE_DAGGERS_LIGHT_MISS1 2
#define SEQUENCE_DAGGERS_LIGHT_MISS5 6
#define SEQUENCE_DAGGERS_HEAVY_MISS2 11
#define SEQUENCE_DAGGERS_HEAVY_MISS1 12
#define SEQUENCE_BOWIE_IDLE1 1
#define LIFE_ALIVE 0
#include <memory>
class RecvPropHook
{
private:
RecvProp* target_property;
RecvVarProxyFn original_proxy_fn;
public:
RecvPropHook(RecvProp* target_property)
{
this->target_property = target_property;
this->original_proxy_fn = (RecvVarProxyFn)target_property->m_ProxyFn;
}
~RecvPropHook()
{
target_property->m_ProxyFn = this->original_proxy_fn;
}
RecvVarProxyFn GetOriginalFunction()
{
return this->original_proxy_fn;
}
void SetProxyFunction(RecvVarProxyFn user_proxy_fn)
{
target_property->m_ProxyFn = user_proxy_fn;
}
};
std::unique_ptr<RecvPropHook> sequenceHook;
RecvVarProxyFn oRecvProxySequence;
void RecvProxy_Sequence(CRecvProxyData* pDataConst, void* pStruct, void* pOut)
{
static int lastSentSeq;
CRecvProxyData* pData = const_cast<CRecvProxyData*>(pDataConst);
int iSequence = pData->m_Value.m_Int;
CBaseCombatWeapon* Weapon = static_cast<CBaseCombatWeapon*>(pStruct);
CBaseEntity* pLocal = Interfaces.pEntList->GetClientEntity(Interfaces.pEngine->GetLocalPlayer());
if (Weapon && Weapon->GetModelIndex() && pLocal)
{
std::string rWeapon = Interfaces.g_pModelInfo->GetModelName(Weapon->GetModel());
if (rWeapon.find(("v_knife_push.mdl")) != std::string::npos)
{
switch (iSequence) {
case SEQUENCE_DEFAULT_IDLE2:
iSequence = SEQUENCE_DAGGERS_IDLE1; break;
case SEQUENCE_DEFAULT_LIGHT_MISS1:
case SEQUENCE_DEFAULT_LIGHT_MISS2:
iSequence = RandomIntZ(SEQUENCE_DAGGERS_LIGHT_MISS1, SEQUENCE_DAGGERS_LIGHT_MISS5); break;
case SEQUENCE_DEFAULT_HEAVY_MISS1:
iSequence = RandomIntZ(SEQUENCE_DAGGERS_HEAVY_MISS2, SEQUENCE_DAGGERS_HEAVY_MISS1); break;
case SEQUENCE_DEFAULT_HEAVY_HIT1:
case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
case SEQUENCE_DEFAULT_LOOKAT01:
iSequence += 3; break;
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
break;
default:
iSequence += 2;
}
}
else if (rWeapon.find(("v_knife_falchion_advanced.mdl")) != std::string::npos)
{
switch (iSequence) {
case SEQUENCE_DEFAULT_IDLE2:
iSequence = SEQUENCE_FALCHION_IDLE1; break;
case SEQUENCE_DEFAULT_HEAVY_MISS1:
iSequence = RandomIntZ(SEQUENCE_FALCHION_HEAVY_MISS1, SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP); break;
case SEQUENCE_DEFAULT_LOOKAT01:
iSequence = RandomIntZ(SEQUENCE_FALCHION_LOOKAT01, SEQUENCE_FALCHION_LOOKAT02); break;
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
break;
default:
iSequence--;
}
}
else if (rWeapon.find(("v_knife_butterfly.mdl")) != std::string::npos)
{
switch (iSequence) {
case SEQUENCE_DEFAULT_DRAW:
iSequence = RandomIntZ(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2); break;
case SEQUENCE_DEFAULT_LOOKAT01:
iSequence = RandomIntZ(SEQUENCE_BUTTERFLY_LOOKAT01, SEQUENCE_BUTTERFLY_LOOKAT03); break;
default:
iSequence++;
}
}
else if (rWeapon.find(("v_knife_survival_bowie.mdl")) != std::string::npos)
{
switch (iSequence) {
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
break;
case SEQUENCE_DEFAULT_IDLE2:
iSequence = SEQUENCE_BOWIE_IDLE1; break;
default:
iSequence--;
}
}
pData->m_Value.m_Int = iSequence;
}
if (!oRecvProxySequence)
oRecvProxySequence = sequenceHook->GetOriginalFunction();
oRecvProxySequence(pData, pStruct, pOut);
}