Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IMaterial* create_material(bool shade, bool wireframe, bool ignorez, int rimlight_boost = 0) {
- static const std::string material_name = "game_material.vmt";
- const std::string material_type = shade ? "VertexLitGeneric" : "UnlitGeneric";
- std::string material_data;
- material_data += "\"" + material_type + "\"\n{\n";
- material_data += "\t\"$basetexture\" \"vgui/white_additive\"\n";
- material_data += "\t\"$envmap\" \"\"\n";
- material_data += "\t\"$model\" \"1\"\n";
- material_data += "\t\"$flat\" \"1\"\n";
- material_data += "\t\"$nocull\" \"0\"\n";
- material_data += "\t\"$selfillum\" \"1\"\n";
- material_data += "\t\"$halflambert\" \"1\"\n";
- material_data += "\t\"$znearer\" \"0\"\n";
- material_data += "\t\"$rimlightboost\" \"" + std::to_string(rimlight_boost) + "\"\n";
- material_data += "\t\"$rimlightexponent\" \"" + std::to_string(4) + "\"\n";
- material_data += "\t\"$ambientreflectionboost\" \"0.2\"\n";
- material_data += "\t\"$envmaplightscale\" \"" + std::to_string(0.1) + "\"\n";
- material_data += "\t\"$wireframe\" \"" + std::to_string(wireframe) + "\"\n";
- material_data += "\t\"$ignorez\" \"" + std::to_string(ignorez) + "\"\n";
- material_data += "}\n";
- auto init_key_values = [](KeyValuesv2* keyvalues, const char* key_name) -> void {
- using InitKeyValues_t = void(__thiscall*)(void*, const char*);
- static InitKeyValues_t InitKeyValuesEx = nullptr;
- static auto pThis = *reinterpret_cast<DWORD * *>(Utils::FindSignature("client_panorama.dll", "B9 ? ? ? ? E8 ? ? ? ? 8B 5D 08") + 1);
- if (!InitKeyValuesEx)
- InitKeyValuesEx = *reinterpret_cast<InitKeyValues_t>(Utils::FindSignature("client_panorama.dll", "55 8B EC 51 33 C0 C7 45"));
- InitKeyValuesEx(keyvalues, key_name);
- };
- auto load_from_buffer = [](KeyValuesv2* key_values, const char* resource_name, const char* buf, void* file_sys = nullptr, const char* path_id = nullptr, void* eval_sym_proc = nullptr, void* unk = nullptr) -> void {
- using LoadFromBuffer_t = void(__thiscall*)(void*, const char*, const char*, void*, const char*, void*, void*);
- static LoadFromBuffer_t LoadFromBufferEx = nullptr;
- if (!LoadFromBufferEx)
- LoadFromBufferEx = *reinterpret_cast<LoadFromBuffer_t>(Utils::FindSignature("client_panorama.dll", "55 8B EC 83 E4 F8 83 EC 34 53 8B 5D 0C 89"));
- LoadFromBufferEx(key_values, resource_name, buf, file_sys, path_id, eval_sym_proc, unk);
- };
- auto* key_values = new KeyValuesv2();
- init_key_values(key_values, material_type.c_str());
- load_from_buffer(key_values, material_name.c_str(), material_data.c_str());
- return g_pMaterialSys->CreateMaterial1(material_name.c_str(), key_values);
- }
- void NewVis::start_chams()
- {
- if (!g_pEngine->IsInGame() || !g_pEngine->IsConnected())
- return;
- for (int i = 1; i < g_pEngine->GetMaxClients(); ++i)
- {
- C_BaseEntity* pPlayerEntity = g_pEntityList->GetClientEntity(i);
- if (!pPlayerEntity
- || !pPlayerEntity->IsAlive()
- || pPlayerEntity->IsDormant()
- || !g::pLocalEntity)
- continue;
- bool IsTeammate = pPlayerEntity->GetTeam() == g::pLocalEntity->GetTeam();
- bool IsEnemy = pPlayerEntity->GetTeam() != g::pLocalEntity->GetTeam();
- bool IsLocal = pPlayerEntity == g::pLocalEntity;
- static std::vector< IMaterial* > materials;
- static bool once{ false };
- if (!once)
- {
- materials.push_back(create_material(true, false, false));
- materials.push_back(create_material(false, false, false, 0));
- materials.push_back(create_material(true, false, true));
- materials.push_back(create_material(false, false, true, 0));
- once = true;
- }
- float vis_color[3] = { options::menu.VisualsTab.ChamsEnemyVis.color[0] / 255.0f, options::menu.VisualsTab.ChamsEnemyVis.color[1] / 255.0f,options::menu.VisualsTab.ChamsEnemyVis.color[2] / 255.0f };
- float hid_color[3] = { options::menu.VisualsTab.ChamsEnemyNotVis.color[0] / 255.0f,options::menu.VisualsTab.ChamsEnemyNotVis.color[1] / 255.0f, options::menu.VisualsTab.ChamsEnemyNotVis.color[2] / 255.0f };
- float local_color[3] = { options::menu.VisualsTab.ChamsColor.color[0] / 255.0f,options::menu.VisualsTab.ChamsColor.color[1] / 255.0f,options::menu.VisualsTab.ChamsColor.color[2] / 255.0f };
- if (IsEnemy)
- {
- {
- g_pRenderView->SetBlend(1.0f);
- switch (options::menu.VisualsTab.visible_chams_type.GetIndex())
- {
- case 0:
- g_pModelRender->ForcedMaterialOverride(materials.at(2)); break;
- case 1:
- g_pModelRender->ForcedMaterialOverride(materials.at(3)); break;
- }
- g_pRenderView->SetColorModulation(vis_color);
- pPlayerEntity->DrawModel(0x00000001, 255);
- }
- }
- else if (IsLocal && options::menu.VisualsTab.chamslocal.GetState())
- {
- g_pRenderView->SetBlend(1.0f);
- switch (options::menu.VisualsTab.local_chams_type.GetIndex())
- {
- case 0:
- g_pModelRender->ForcedMaterialOverride(materials.at(0)); break;
- case 1:
- g_pModelRender->ForcedMaterialOverride(materials.at(1)); break;
- }
- g_pRenderView->SetColorModulation(local_color);
- pPlayerEntity->DrawModel(0x00000001, 255);
- }
- g_pModelRender->ForcedMaterialOverride(nullptr);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement