Пользователь
- Статус
- Оффлайн
- Регистрация
- 28 Апр 2018
- Сообщения
- 624
- Реакции
- 133
Вроде как спастил, всё правильно прописал
И всё равно не работает, вот код и паттерны:
И всё равно не работает, вот код и паттерны:
C++:
void CSkins::RecvProxy_Viewmodel(CRecvProxyData *pData, void *pStruct, void *pOut)
{
if (CGlobal::IsGameReady)
{
// Get the knife view model id's
int default_t = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_default_t.mdl");
int default_ct = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_default_ct.mdl");
int iBayonet = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_bayonet.mdl");
int iCSS = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_css.mdl");
int iButterfly = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_butterfly.mdl");
int iFlip = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_flip.mdl");
int iGut = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_gut.mdl");
int iKarambit = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_karam.mdl");
int iM9Bayonet = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_m9_bay.mdl");
int iHuntsman = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_tactical.mdl");
int iFalchion = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_falchion_advanced.mdl");
int iDagger = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_push.mdl");
int iCord = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_cord.mdl");
int iCanis = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_canis.mdl");
int iUrsus = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_ursus.mdl");
int iBowie = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_survival_bowie.mdl");
int iGunGame = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_gg.mdl");
int iNavaja = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_gypsy_jackknife.mdl");
int iOutdoor = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_outdoor.mdl");
int iStiletto = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_stiletto.mdl");
int iTalon = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_widowmaker.mdl");
int iSkeleton = I::ModelInfo()->GetModelIndex("models/weapons/v_knife_skeleton.mdl");
CBaseEntity* pLocal = (CBaseEntity*)I::EntityList()->GetClientEntity(I::Engine()->GetLocalPlayer());
if (pLocal)
{
bool IsTT = pLocal->GetTeam() == 2;
int sel_mod = IsTT ? SelectedKnifeModelTT : SelectedKnifeModelCT;
if (!pLocal->IsDead() && sel_mod && (
pData->m_Value.m_Int == default_t ||
pData->m_Value.m_Int == default_ct ||
pData->m_Value.m_Int == iBayonet ||
pData->m_Value.m_Int == iCSS ||
pData->m_Value.m_Int == iFlip ||
pData->m_Value.m_Int == iGunGame ||
pData->m_Value.m_Int == iGut ||
pData->m_Value.m_Int == iKarambit ||
pData->m_Value.m_Int == iM9Bayonet ||
pData->m_Value.m_Int == iHuntsman ||
pData->m_Value.m_Int == iBowie ||
pData->m_Value.m_Int == iButterfly ||
pData->m_Value.m_Int == iFalchion ||
pData->m_Value.m_Int == iDagger ||
pData->m_Value.m_Int == iCord ||
pData->m_Value.m_Int == iCanis ||
pData->m_Value.m_Int == iUrsus ||
pData->m_Value.m_Int == iNavaja ||
pData->m_Value.m_Int == iOutdoor ||
pData->m_Value.m_Int == iStiletto ||
pData->m_Value.m_Int == iTalon ||
pData->m_Value.m_Int == iSkeleton))
{
int sel_mod = IsTT ? SelectedKnifeModelTT : SelectedKnifeModelCT;
int mdl_idx = GetKnifeModelIdx(sel_mod, IsTT);
pData->m_Value.m_Int = mdl_idx;
}
}
}
}
void remapping(CRecvProxyData* data, CBaseViewModel* entity)
{
const auto pLocal = (CBaseEntity*)I::EntityList()->GetClientEntity(I::Engine()->GetLocalPlayer());
if (!pLocal || pLocal->IsDead())
return;
const auto pOwner = I::EntityList()->GetClientEntityFromHandle((PVOID)entity->GetOwner());
if (!pOwner)
return;
const auto pViewModel = I::EntityList()->GetClientEntityFromHandle((PVOID)entity->GetWeapon());
if (!pViewModel)
return;
auto& sequence = data->m_Value.m_Int;
int original_activity = entity->GetSequenceActivity(sequence);
int new_activity = 1;
int num = 0;
for (size_t i = 0; i < 20; i++)
{
int temp_actitivity = entity->GetSequenceActivity(i);
if (original_activity != -1 && original_activity == temp_actitivity || original_activity == -1 && temp_actitivity == 213)
{
new_activity = i;
for (size_t t = 0; t < 4; t++)
if (entity->GetSequenceActivity(i + t) == temp_actitivity)
num++;
break;
}
}
if (original_activity == -1 && new_activity == 1)
new_activity = sequence;
if (!num)
sequence = new_activity;
else
sequence = random_sequence(new_activity, new_activity + num - 1);
entity->SendViewModelMatchingSequence(sequence);
}
void Hook_SetViewModelSequence(const CRecvProxyData* const_data, void* structure, void* out)
{
const auto data = const_cast<CRecvProxyData*>(const_data);
const auto view_model = static_cast<CBaseViewModel*>(structure);
remapping(data, view_model);
fnSequenceProxyFn->GetTrampoline()(data, structure, out);
}
for (ClientClass* pClass = I::Client()->GetAllClasses(); pClass; pClass = pClass->m_pNext)
{
if (!strcmp(pClass->m_pNetworkName, XorStr("CBaseViewModel")))
{
// Search for the 'm_nModelIndex' property.
RecvTable* pClassTable = pClass->m_pRecvTable;
for (int nIndex = 0; nIndex < pClassTable->m_nProps; nIndex++) {
RecvProp* pProp = &pClassTable->m_pProps[nIndex];
if (!pProp || strcmp(pProp->m_pVarName, XorStr("m_nSequence")))
continue;
auto& pContext = cContext::GetInstance();
pContext.ApplyDetour<RecvVarProxyFn>((RecvVarProxyFn)pProp->m_ProxyFn,
reinterpret_cast<RecvVarProxyFn>(
Hook_SetViewModelSequence),
&fnSequenceProxyFn);
break;
}
break;
}
}
C++:
int IClientEntity::GetSequenceActivity(int sequence)
{
studiohdr_t* hdr = I::ModelInfo()->GetStudioModel(this->GetModel());
if (!hdr)
return -1;
static auto GetSequenceActivity = reinterpret_cast<int(__fastcall*)(void*, studiohdr_t*, int)>(
CSX::Memory::FindPatternV2(XorStr("client_panorama.dll"), XorStr("55 8B EC 53 8B 5D 08 56 8B F1 83")));
return GetSequenceActivity(this, hdr, sequence);
}
C++:
void CBaseViewModel::SendViewModelMatchingSequence(int Sequence)
{
VirtualFn(void)(PVOID, int);
GetMethod<OriginalFn>(this, 246)(this, Sequence);
}