Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
91 lines (82 sloc) 3.33 KB
#pragma once
// Store the original proxy functions.
RecvVarProxyFn fnSequenceProxyFn = NULL;
// Function to fix sequences for certain models.
void SetViewModelSequence(const CRecvProxyData *pDataConst, void *pStruct, void *pOut) {
// Make the incoming data editable.
CRecvProxyData* pData = const_cast<CRecvProxyData*>(pDataConst);
// Confirm that we are replacing our view model and not someone elses.
CBaseViewModel* pViewModel = (CBaseViewModel*)pStruct;
if (pViewModel) {
IClientEntity* pOwner = g_EntityList->GetClientEntityFromHandle(pViewModel->GetOwner());
// Compare the owner entity of this view model to the local player entity.
if (pOwner && pOwner->GetIndex() == g_EngineClient->GetLocalPlayer()) {
// Get the filename of the current view model.
void* pModel = g_ModelInfo->GetModel(pViewModel->GetModelIndex());
const char* szModel = g_ModelInfo->GetModelName(pModel);
// Store the current sequence.
int m_nSequence = pData->m_Value.m_Int;
if (!strcmp(szModel, "models/weapons/v_knife_butterfly.mdl")) {
// Fix animations for the Butterfly Knife.
switch (m_nSequence) {
case SEQUENCE_DEFAULT_DRAW:
m_nSequence = RandomInt(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2); break;
case SEQUENCE_DEFAULT_LOOKAT01:
m_nSequence = RandomInt(SEQUENCE_BUTTERFLY_LOOKAT01, SEQUENCE_BUTTERFLY_LOOKAT03); break;
default:
m_nSequence++;
}
} else if (!strcmp(szModel, "models/weapons/v_knife_falchion_advanced.mdl")) {
// Fix animations for the Falchion Knife.
switch (m_nSequence) {
case SEQUENCE_DEFAULT_IDLE2:
m_nSequence = SEQUENCE_FALCHION_IDLE1; break;
case SEQUENCE_DEFAULT_HEAVY_MISS1:
m_nSequence = RandomInt(SEQUENCE_FALCHION_HEAVY_MISS1, SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP); break;
case SEQUENCE_DEFAULT_LOOKAT01:
m_nSequence = RandomInt(SEQUENCE_FALCHION_LOOKAT01, SEQUENCE_FALCHION_LOOKAT02); break;
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
break;
default:
m_nSequence--;
}
} else if (!strcmp(szModel, "models/weapons/v_knife_push.mdl")) {
// Fix animations for the Shadow Daggers.
switch (m_nSequence) {
case SEQUENCE_DEFAULT_IDLE2:
m_nSequence = SEQUENCE_DAGGERS_IDLE1; break;
case SEQUENCE_DEFAULT_LIGHT_MISS1:
case SEQUENCE_DEFAULT_LIGHT_MISS2:
m_nSequence = RandomInt(SEQUENCE_DAGGERS_LIGHT_MISS1, SEQUENCE_DAGGERS_LIGHT_MISS5); break;
case SEQUENCE_DEFAULT_HEAVY_MISS1:
m_nSequence = RandomInt(SEQUENCE_DAGGERS_HEAVY_MISS2, SEQUENCE_DAGGERS_HEAVY_MISS1); break;
case SEQUENCE_DEFAULT_HEAVY_HIT1:
case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
case SEQUENCE_DEFAULT_LOOKAT01:
m_nSequence += 3; break;
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
break;
default:
m_nSequence += 2;
}
} else if (!strcmp(szModel, "models/weapons/v_knife_survival_bowie.mdl")) {
// Fix animations for the Bowie Knife.
switch (m_nSequence) {
case SEQUENCE_DEFAULT_DRAW:
case SEQUENCE_DEFAULT_IDLE1:
break;
case SEQUENCE_DEFAULT_IDLE2:
m_nSequence = SEQUENCE_BOWIE_IDLE1; break;
default:
m_nSequence--;
}
}
// Set the fixed sequence.
pData->m_Value.m_Int = m_nSequence;
}
}
// Call original function with the modified data.
fnSequenceProxyFn(pData, pStruct, pOut);
}