Начинающий
- Статус
- Оффлайн
- Регистрация
- 28 Дек 2024
- Сообщения
- 25
- Реакции
- 0
До включения чамсов у меня 60-100 фпс, после проседает до 30 и ужастным фреймрейтом.
Вот чамсики
Вот хук DrawObject'а
Вот чамсики
C++:
struct CustomMaterial_t
{
CStrongHandle<CMaterial2> pMaterial;
CStrongHandle<CMaterial2> pMaterialInvisible;
};
static CustomMaterial_t arrMaterials[VISUAL_MATERIAL_MAX];
bool FEATURES::CHAMS::Initialize() {
if (bInitialized)
return bInitialized;
arrMaterials[0] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatFlatVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatFlatInvisible)
};
arrMaterials[1] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatIlluminateVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatIlluminateInvisible)
};
arrMaterials[2] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatLatexVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatLatexInvisible)
};
arrMaterials[3] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatGlowVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatGlowInvisible)
};
arrMaterials[4] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatGostVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatGostInvisible)
};
arrMaterials[5] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatMetallicVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatMetallicInvisible)
};
arrMaterials[6] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatGlassVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatGlassInvisible)
};
arrMaterials[7] = CustomMaterial_t{
.pMaterial = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatNeonVisible),
.pMaterialInvisible = CreateMaterial(_("materials/dev/primary_white.vmat"), szVMatNeonInvisible)
};
bInitialized = true;
for (auto& [pMaterial, pMaterialInvisible] : arrMaterials) {
if (pMaterial == nullptr || pMaterialInvisible == nullptr)
bInitialized = false;
}
return bInitialized;
}
void FEATURES::CHAMS::Destroy() {
for (auto& [pVisible, pInvisible] : arrMaterials) {
if (pVisible)
Interfaces::pResourceHandleUtils->DeleteResource(pVisible.pBinding);
if (pInvisible)
Interfaces::pResourceHandleUtils->DeleteResource(pInvisible.pBinding);
}
}
CStrongHandle<CMaterial2> FEATURES::CHAMS::CreateMaterial(const char* szMaterialName, const char szVmatBuffer[]) {
CKeyValues3* pKeyValues3 = CKeyValues3::CreateMaterialResource();
pKeyValues3->LoadFromBuffer(szVmatBuffer);
CStrongHandle<CMaterial2> pCustomMaterial = {};
PatternManager.fnCreateMaterial(nullptr, &pCustomMaterial, szMaterialName, pKeyValues3, 0U, 1U);
return pCustomMaterial;
}
void FEATURES::CHAMS::RenderChams(void* pAnimatableSceneObjectDesc, void* pDx11, CMeshData* arrMeshDraw, int nDataCount, void* pSceneView, void* pSceneLayer, void* pUnk, void* pUnk2) {
const auto pOriginal = HookManager.hRenderObject.GetOriginal();
if ((!CFG::bChams && !CFG::bArmsChams && !CFG::bWeaponChams) || !bInitialized || arrMeshDraw == nullptr || arrMeshDraw->pSceneAnimatableObject == nullptr)
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
CBaseHandle hOwner = arrMeshDraw->pSceneAnimatableObject->hOwner;
if (!hOwner.IsValid())
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
C_BaseEntity* pEntity = Interfaces::pGameResourceService->pGameEntitySystem->GetEntityByIndex(hOwner.GetEntryIndex()).as<C_BaseEntity*>();
if (pEntity == nullptr)
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
SchemaClassInfoData_t* pEntityInfo = pEntity->GetSchemaClassInfo();
if (pEntityInfo == nullptr)
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
if (STR::Compare(pEntityInfo->szName, "C_ViewmodelAttachmentModel")) {
if (!CFG::bArmsChams) return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
const CustomMaterial_t customMaterial = arrMaterials[CFG::nArmsChamsMat];
arrMeshDraw->pMaterial = customMaterial.pMaterial;
arrMeshDraw->colValue = Color_t(CFG::colArmsChamsColor.x, CFG::colArmsChamsColor.y, CFG::colArmsChamsColor.z, CFG::colArmsChamsColor.w);
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
}
if (STR::Compare(pEntityInfo->szName, "C_CSGOViewModel")) {
if (!CFG::bWeaponChams) return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
const CustomMaterial_t customMaterial = arrMaterials[CFG::nWeaponChamsMat];
arrMeshDraw->pMaterial = customMaterial.pMaterial;
arrMeshDraw->colValue = Color_t(CFG::colWeaponChamsColor.x, CFG::colWeaponChamsColor.y, CFG::colWeaponChamsColor.z, CFG::colWeaponChamsColor.w);
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
}
if (!STR::Compare(pEntityInfo->szName, "C_CSPlayerPawn") || !CFG::bChams)
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
C_CSPlayerPawn* pPlayerPawn = reinterpret_cast<C_CSPlayerPawn*>(pEntity);
if (pPlayerPawn == nullptr || (CFG::bChamsTeamCheck && HQVARS::pLocalPlayerPawn->GetTeam() == pPlayerPawn->GetTeam()) || pPlayerPawn->GetHealth() <= 0)
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
const CustomMaterial_t customMaterial = arrMaterials[CFG::nChamsMaterial];
// Invisible
arrMeshDraw->pMaterial = customMaterial.pMaterialInvisible;
arrMeshDraw->colValue = Color_t(CFG::colChamsInvisible.x, CFG::colChamsInvisible.y, CFG::colChamsInvisible.z, CFG::colChamsInvisible.w);
pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
// Visible
arrMeshDraw->pMaterial = customMaterial.pMaterial;
arrMeshDraw->colValue = Color_t(CFG::colChamsVisible.x, CFG::colChamsVisible.y, CFG::colChamsVisible.z, CFG::colChamsVisible.w);
pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
return;
}
C++:
void HQ_FASTCALL CHookManager::RenderObject(void* pAnimatableSceneObjectDesc, void* pDx11, CMeshData* arrMeshDraw, int nDataCount, void* pSceneView, void* pSceneLayer, void* pUnk, void* pUnk2) {
const auto pOriginal = HookManager.hRenderObject.GetOriginal();
if (!pEngineClient->IsConnected() || !pEngineClient->IsInGame())
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
if (HQVARS::pLocalPlayerController == nullptr || HQVARS::pLocalPlayerPawn == nullptr)
return pOriginal(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
FEATURES::CHAMS::RenderChams(pAnimatableSceneObjectDesc, pDx11, arrMeshDraw, nDataCount, pSceneView, pSceneLayer, pUnk, pUnk2);
}