Seaside/Menu.hpp
2022-11-12 14:07:35 +03:00

2198 lines
107 KiB
C++

#pragma once
IMaterial* CreateMaterial(std::string matname, std::string mat_data = "")
{
KeyValues* keyValues = new KeyValues(matname.c_str());
keyValues->Init();
keyValues->LoadFromBuffer(matname.c_str(), mat_data.c_str());
IMaterial* newmat = iff.g_pMaterialSystem->CreateMaterial(matname.c_str(), keyValues);
printfdbg("Material %s created\n", matname.c_str());
return newmat;
}
void colorWorld(bool on = 1) noexcept
{
if (on) {
if (!*g_Options.worldcoloractive) return;
iff.g_pCVar->FindVar("r_drawspecificstaticprop")->SetValue(false);
for (MaterialHandle_t h = iff.g_pMaterialSystem->FirstMaterial(); h != iff.g_pMaterialSystem->InvalidMaterial(); h = iff.g_pMaterialSystem->NextMaterial(h)) {
IMaterial* pMaterial = iff.g_pMaterialSystem->GetMaterial(h);
if (!pMaterial || !pMaterial->IsPrecached())
continue;
const char* textureGroup = pMaterial->GetTextureGroupName();
if (strstr(textureGroup, "World textures"))
pMaterial->ColorModulate(g_Options.worldcolor.value->r, g_Options.worldcolor.value->g, g_Options.worldcolor.value->b);
if (strstr(textureGroup, "StaticProp"))
pMaterial->ColorModulate(g_Options.staticpropcolor.value->r, g_Options.staticpropcolor.value->g, g_Options.staticpropcolor.value->b);
if (strstr(textureGroup, "SkyBox"))
pMaterial->ColorModulate(g_Options.staticpropcolor.value->r, g_Options.staticpropcolor.value->g, g_Options.staticpropcolor.value->b);
if (strstr(textureGroup, "Model"))
pMaterial->ColorModulate(g_Options.modelcolor.value->r, g_Options.modelcolor.value->g, g_Options.modelcolor.value->b);
}
}
else
{
iff.g_pCVar->FindVar("r_drawspecificstaticprop")->SetValue(true);
for (MaterialHandle_t h = iff.g_pMaterialSystem->FirstMaterial(); h != iff.g_pMaterialSystem->InvalidMaterial(); h = iff.g_pMaterialSystem->NextMaterial(h)) {
IMaterial* pMaterial = iff.g_pMaterialSystem->GetMaterial(h);
if (!pMaterial || !pMaterial->IsPrecached())
continue;
const char* textureGroup = pMaterial->GetTextureGroupName();
if (strstr(textureGroup, "World textures"))
pMaterial->ColorModulate(1.0f, 1.0f, 1.0f);
if (strstr(textureGroup, "StaticProp"))
pMaterial->ColorModulate(1.0f, 1.0f, 1.0f);
if (strstr(textureGroup, "Model"))
pMaterial->ColorModulate(1.0f, 1.0f, 1.0f);
}
}
}
void ResetMisc()
{
float f0 = 0, fm1 = -1.0f, f1 = 1.0f, f60 = 60.0f, f90 = 90.0f, f600 = 600.0f;
SetValueUnrestricted("r_aspectratio", 0); memcpy(g_Options.aspectratio, &f0, 4);
SetValueUnrestricted("mat_postprocess_enable", 1); memcpy(g_Options.postproc, &f0, 4);
SetValueUnrestricted("cl_csm_enabled", 1); memcpy(g_Options.shadows, &f0, 4);
SetValueUnrestricted("mat_fullbright", 0); memcpy(g_Options.fullbright, &f0, 4);
SetValueUnrestricted("mat_drawgray", 0); memcpy(g_Options.drawgray, &f0, 4);
SetValueUnrestricted("mat_showlowresimage", 0); memcpy(g_Options.showlowresimage, &f0, 4);
SetValueUnrestricted("viewmodel_offset_x", 1.0f); memcpy(g_Options.viewmodel_x, &f1, 4);
SetValueUnrestricted("viewmodel_offset_y", 1.0f); memcpy(g_Options.viewmodel_y, &f1, 4);
SetValueUnrestricted("viewmodel_offset_z", -1.0f); memcpy(g_Options.viewmodel_z, &fm1, 4);
memcpy(g_Options.viewmodel_ang_x, &f0, 4);
memcpy(g_Options.viewmodel_ang_y, &f0, 4);
memcpy(g_Options.viewmodel_ang_z, &f0, 4);
memcpy(g_Options.fov, &f90, 4);
SetValueUnrestricted("viewmodel_fov", 60.0f); memcpy(g_Options.viewmodel_fov, &f60, 4);
memcpy(g_Options.viewmodel_moving, &f0, 4);
SetValueUnrestricted("cl_viewmodel_shift_left_amt", GetVisibleFloat("cl_viewmodel_shift_left_amt"));
SetValueUnrestricted("cl_viewmodel_shift_right_amt", GetVisibleFloat("cl_viewmodel_shift_right_amt"));
SetValueUnrestricted("cl_bob_lower_amt", GetVisibleFloat("cl_bob_lower_amt"));
SetValueUnrestricted("cl_bobamt_lat", GetVisibleFloat("cl_bobamt_lat"));
SetValueUnrestricted("cl_bobamt_vert", GetVisibleFloat("cl_bobamt_vert"));
SetValueUnrestricted("cl_wpn_sway_scale", GetVisibleFloat("cl_wpn_sway_scale"));
iff.g_pCVar->FindVar("cl_ragdoll_gravity")->SetValue(600.0f); memcpy(g_Options.ragdollgravity, &f600, 4);
SetValueUnrestricted("cl_phys_timescale", 1.0f); memcpy(g_Options.ragdolltime, &f1, 4);
}
void RefreshThread(int* skinid)
{
int localskinid = *skinid;
*skinid = 0;
iff.g_pClientState->ForceFullUpdate();
Sleep(350);
*skinid = localskinid;
iff.g_pClientState->ForceFullUpdate();
opt.needupdate = 1;
ProtoFeatures.SendClientHello();
ProtoFeatures.SendMatchmakingClient2GCHello();
}
struct float3 colorConverter(int hexValue)
{
float3 rgbColor;
rgbColor.b = ((hexValue >> 16) & 0xFF) / 255.0;
rgbColor.g = ((hexValue >> 8) & 0xFF) / 255.0;
rgbColor.r = ((hexValue) & 0xFF) / 255.0;
return rgbColor;
}
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
WNDPROC oWndProc;
static HWND window = NULL;
LRESULT __stdcall WndProc(const HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (true && ImGui_ImplWin32_WndProcHandler(hWnd, uMsg, wParam, lParam))
return true;
return CallWindowProc(oWndProc, hWnd, uMsg, wParam, lParam);
}
#include "imgui/imgui_internal.h"
ImFont* ifont; ImFont* ifontBD; ImFont* ifontmini;
void InitImGui(LPDIRECT3DDEVICE9 pDevice)
{
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
auto a = ImFontConfig();
a.FontBuilderFlags = 1 << 7 | 1 << 4 | 1 << 5;
ifontBD = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\segoeuib.ttf", 14);
ifont = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\arial.ttf", 14);
ifontmini = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\arial.ttf", 12);
ImGuiStyle* style = &ImGui::GetStyle();
style->WindowMenuButtonPosition = 2;
style->WindowTitleAlign = ImVec2(0.00f, 1.2f);
style->WindowRounding = 6;
style->Colors[ImGuiCol_FrameBg] = ImVec4(0.463f, 0.463f, 0.463f, 1.0f);
style->Colors[ImGuiCol_TitleBgActive] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->Colors[ImGuiCol_TitleBg] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->Colors[ImGuiCol_WindowBg] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->Colors[ImGuiCol_MenuBarBg] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->Colors[ImGuiCol_Button] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->ButtonTextAlign = ImVec2(0.1f, 0.5f);
style->TabRounding = 0;
style->TabBorderSize = 1;
style->Colors[ImGuiCol_Tab] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->WindowPadding = ImVec2(20.0f, 20.0f);
style->ItemSpacing = ImVec2(7.0f, 15.0f);
style->Colors[ImGuiCol_Border] = ImVec4(0.757f, 0.757f, 0.757f, 1.0f);
style->Colors[ImGuiCol_CheckMark] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
style->Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.757f, 0.757f, 0.757f, 1.0f);
style->Colors[ImGuiCol_FrameBgActive] = ImVec4(0.757f, 0.757f, 0.757f, 1.0f);
style->Colors[ImGuiCol_HeaderHovered] = ImVec4(1.0f, 0.612f, 0, 1.0f);
style->Colors[ImGuiCol_HeaderActive] = ImVec4(1.0f, 0.612f, 0, 1.0f);
style->Colors[ImGuiCol_Header] = ImVec4(1.0f, 0.612f, 0, 1.0f);
style->Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.424f, 0.424f, 0.424f, 1.0f);
style->Colors[ImGuiCol_SliderGrab] = ImVec4(0.424f, 0.424f, 0.424f, 1.0f);
style->Colors[ImGuiCol_PopupBg] = ImVec4(0.635f, 0.635f, 0.635f, 1.0f);
style->ScrollbarRounding = 0;
style->SelectableTextAlign = ImVec2(0, 0);
ImGui_ImplWin32_Init(window);
ImGui_ImplDX9_Init(pDevice);
printfdbg("Imgui initiated\n");
}
bool init = false;
ID3DXFont* font;
VMTHook* D3DHook = nullptr;
void DisableElements(bool check, bool dis)
{
if (!check) {
if (dis)
{
ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.5f);
}
if (!dis)
{
ImGui::PopItemFlag();
ImGui::PopStyleVar();
}
}
}
long __stdcall hkEndScene(IDirect3DDevice9* pDevice)
{
static auto oEndScene = D3DHook->GetOriginal<long(__stdcall*)(IDirect3DDevice9*)>(42);
if (!init)
{
D3DDEVICE_CREATION_PARAMETERS params;
pDevice->GetCreationParameters(&params);
window = params.hFocusWindow;
oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
#ifdef DEBUG
cout << "oWndProc " << oWndProc << endl;
#endif
InitImGui(pDevice);
init = true;
}
if (opt.show) {
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
ImGuiStyle* style = &ImGui::GetStyle();
ImGui::PushFont(ifontBD);
ImGui::SetNextWindowSize(ImVec2{ 650, 455 });
ImGui::Begin(XorStr("Spy's Seaside"), 0, ImGuiWindowFlags_NoResize);
ImGui::PushFont(ifont);
ImGui::BeginTabBar("1");
if (ImGui::BeginTabItem("Effects"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
ImGui::Columns(2, nullptr, false);
ImGui::Checkbox("Bullet trace beam", g_Options.beamtrace);
DisableElements(*g_Options.beamtrace, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
if (ImGui::BeginTable("ssplit", 2, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::TextInputComboBox("Path to .vmt", g_Options.beampath.value->mystring, 255, opt.spriteslist, 0);
ImGui::InputInt("Beam type", g_Options.beamtype, 0, 0);
ImGui::InputFloat("Width", g_Options.beamwidth, 0, 0);
ImGui::InputFloat("Amplitude", g_Options.beamamplitude, 0, 0);
ImGui::InputFloat("Halo scale", g_Options.beamhaloscale, 0, 0);
ImGui::InputFloat("Start frame", g_Options.beamstartframe, 0, 0);
ImGui::InputInt("Segments", g_Options.beamsegments, 0, 0);
ImGui::TableNextColumn();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 20.0f);
ImGui::ColorEdit4("##BeamColor", (float*)g_Options.beamcolor.value.get(), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_AlphaBar);
ImGui::SameLine();
ImGui::Text("Color/Alpha");
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputFloat("Life##beam", g_Options.beamlife, 0, 0);
ImGui::InputFloat("End width", g_Options.beamendwidth, 0, 0);
ImGui::InputFloat("Speed##beam", g_Options.beamspeed, 0, 0);
ImGui::InputFloat("Fade length", g_Options.beamfadelength, 0, 0);
ImGui::InputFloat("Framerate", g_Options.beamframerate, 0, 0);
ImGui::InputInt("Flags", g_Options.beamflags, 0, 0, ImGuiInputTextFlags_CharsHexadecimal);
ImGui::EndTable();
}
DisableElements(*g_Options.beamtrace, 0);
ImGui::NextColumn();
ImGui::Checkbox("Bullet impact effect", g_Options.attacheffects);
DisableElements(g_Options.attacheffects, 1);
if (ImGui::BeginTable("split", 2, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn();
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Interface", opt.EffTypes.at(g_Options.effects.value->type).c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < opt.EffTypes.size(); n++)
{
bool selected = (g_Options.effects.value->type == n);
if (ImGui::Selectable(opt.EffTypes.at(n).c_str(), selected, 0, ImVec2(0, 0), false))
{
g_Options.effects.value->type = n;
g_Options.effects.value->selectedc = 0;
}
if (selected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
if (ImGui::BeginCombo("Name", opt.Map.at(opt.EffTypes.at(g_Options.effects.value->type)).at(g_Options.effects.value->selectedc).c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < opt.Map.at(opt.EffTypes.at(g_Options.effects.value->type)).size(); n++)
{
bool selected = (g_Options.effects.value->selectedc == n);
if (ImGui::Selectable(opt.Map.at(opt.EffTypes.at(g_Options.effects.value->type)).at(n).c_str(), selected, 0, ImVec2(0, 0), false))
g_Options.effects.value->selectedc = n;
if (selected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::TableNextColumn();
ImGui::SetCursorPos(ImVec2(ImGui::GetCursorPosX() - 25.0f, ImGui::GetCursorPosY() - 20.0f));
ImGuiWindowFlags window_flags = ImGuiWindowFlags_None;
style->ItemSpacing = ImVec2(7.0f, 2.0f);
if (ImGui::BeginChild("ChildR", ImVec2(135, 100), true, window_flags | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
switch (g_Options.effects.value->type)
{
case (0):
{
switch (g_Options.effects.value->selectedc)
{
case 0:
case 2:
{
ImGui::InputFloat("Size", &g_Options.effects.value->fx_fsize, 0, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputFloat("Speed", &g_Options.effects.value->fx_fspeed, 0, 0);
break;
}
case 1:
{
ImGui::InputInt("Magnitude", &g_Options.effects.value->fx_magnitude, 0, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputInt("Trail length", &g_Options.effects.value->fx_traillength, 0, 0);
break;
}
case 3:
{
ImGui::InputFloat("Scale", &g_Options.effects.value->fx_fsize, 0, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputInt("Type", &g_Options.effects.value->fx_itype, 0, 0);
break;
}
case 4:
case 6:
{
break;
}
case 5:
{
ImGui::Checkbox("Explosive", &g_Options.effects.value->fx_bexplosive);
break;
}
}
break;
}
case (1):
{
ImGui::InputInt("Colors", &g_Options.effects.value->icolors, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputFloat("Magnitude", &g_Options.effects.value->fmagtinude, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputFloat("Scale##de", &g_Options.effects.value->fscale, 0, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputInt("Flags##de", &g_Options.effects.value->fflags, 0, 0, ImGuiInputTextFlags_CharsHexadecimal); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputFloat("Radius", &g_Options.effects.value->fradius, 0, 0);
break;
}
case (2):
{
switch (g_Options.effects.value->selectedc)
{
case (0):
{
ImGui::InputFloat("Beam width", &g_Options.effects.value->fbeamwidth, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputFloat("Time visible", &g_Options.effects.value->fltimevisible, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
ImGui::ColorEdit3("##teslacolor", (float*)g_Options.effects.value->teslacolor, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputFloat("Radius##tesla", &g_Options.effects.value->teslaradius, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputInt("Beams", &g_Options.effects.value->ibeams, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputText("Sprite name", g_Options.effects.value->szSpriteName, 256);
break;
}
case (1):
{
ImGui::InputFloat("Die", &g_Options.effects.value->fdie, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputInt("Style", &g_Options.effects.value->style, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
ImGui::ColorEdit3("##dlightcolor", (float*)g_Options.effects.value->dlightcolor, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::InputFloat("Radius##dlight", &g_Options.effects.value->frad, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputInt("Key", &g_Options.effects.value->key, 0, 0); ImGui::InvisibleButton("##ib", ImVec2(0, 10.0f));
ImGui::InputFloat("Decay", &g_Options.effects.value->decay, 0, 0);
break;
}
}
break;
}
}
ImGui::EndChild();
}
DisableElements(g_Options.attacheffects, 0);
ImGui::EndTable();
}
if (ImGui::BeginTable("sssplit", 2, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Checkbox("Hit sound", g_Options.hitsound);
DisableElements(*g_Options.hitsound, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 7.0f);
ImGui::TextInputComboBox("Head shot", g_Options.hspath.value->mystring, 255, opt.soundslist, 0);
DisableElements(*g_Options.hitsound, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 13.0f);
ImGui::Checkbox("Flashlight (L)", g_Options.flashlightON);
DisableElements(*g_Options.flashlightON, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
ImGui::TextInputComboBox("Path to .vmt ", g_Options.flashlightTexture.value->mystring, 255, opt.flashlightlist, 0);
DisableElements(*g_Options.flashlightON, 0);
ImGui::Checkbox("Nightvision (N)", g_Options.nvgsON);
ImGui::TableNextColumn();
ImGui::Checkbox("Hit marker", g_Options.hitmarker);
DisableElements(*g_Options.hitsound, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
ImGui::TextInputComboBox("Other bone", g_Options.obpath.value->mystring, 255, opt.soundslist, 0);
DisableElements(*g_Options.hitsound, 0);
DisableElements(*g_Options.flashlightON, 1);
ImGui::Checkbox("Cast shadows", g_Options.flashlightShadows);
ImGui::InputFloat("Flaslight FOV", g_Options.flashlightFOV, 0, 0);
DisableElements(*g_Options.flashlightON, 0);
ImGui::EndTable();
}
ImGui::Columns(1, nullptr, false);
ImGui::EndChild();
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("World"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
ImGui::Columns(2, nullptr, false);
if (ImGui::Checkbox("Skybox", g_Options.skyboxactive))
{
if (g_Options.skyboxactive)
{
iff.g_pCVar->FindVar("sv_skyname")->SetValue((char*)g_Options.skyboxtemp.value.get());
iff.g_pCVar->FindVar("r_3dsky")->SetValue(false);
}
else iff.g_pCVar->FindVar("r_3dsky")->SetValue(true);
}
DisableElements(*g_Options.skyboxactive, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
ImGui::PushItemWidth(170.0f);
ImGui::TextInputComboBox("##W1", (char*)g_Options.skyboxtemp.value.get(), 255, opt.skyboxitems, 0);
ImGui::PopItemWidth();
ImGui::SameLine();
if (ImGui::Button("Apply##W1", ImVec2(70, 22)))
{
iff.g_pCVar->FindVar("sv_skyname")->SetValue((char*)g_Options.skyboxtemp.value.get());
}
DisableElements(*g_Options.skyboxactive, 0);
if (ImGui::Checkbox("Weather", g_Options.weatheractive))
{
if (!*g_Options.weatheractive) iff.g_pClientState->ForceFullUpdate();
iff.g_pCVar->FindVar("r_rainlength")->SetValue(*g_Options.rainlength);
iff.g_pCVar->FindVar("r_rainspeed")->SetValue(*g_Options.rainspeed);
iff.g_pCVar->FindVar("r_rainradius")->SetValue(*g_Options.rainradius);
iff.g_pCVar->FindVar("cl_windspeed")->SetValue(*g_Options.windspeed);
iff.g_pCVar->FindVar("r_rainwidth")->SetValue(*g_Options.rainwidth);
iff.g_pCVar->FindVar("r_RainSideVel")->SetValue(*g_Options.rainsidevel);
iff.g_pCVar->FindVar("r_rainalpha")->SetValue(*g_Options.rainalpha);
}
DisableElements(*g_Options.weatheractive, 1);
if (ImGui::BeginTable("##Weather", 2, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::InputInt("Precipitation type", g_Options.weathertype, 0, 0);
if (ImGui::InputFloat("Length", g_Options.rainlength, 0, 0))
iff.g_pCVar->FindVar("r_rainlength")->SetValue(*g_Options.rainlength);
if (ImGui::InputFloat("Speed", g_Options.rainspeed, 0, 0))
iff.g_pCVar->FindVar("r_rainspeed")->SetValue(*g_Options.rainspeed);
if (ImGui::InputFloat("Radius", g_Options.rainradius, 0, 0))
iff.g_pCVar->FindVar("r_rainradius")->SetValue(*g_Options.rainradius);
ImGui::TableNextColumn();
if (ImGui::InputFloat("Wind speed", g_Options.windspeed, 0, 0))
iff.g_pCVar->FindVar("cl_windspeed")->SetValue(*g_Options.windspeed);
if (ImGui::InputFloat("Width", g_Options.rainwidth, 0, 0))
iff.g_pCVar->FindVar("r_rainwidth")->SetValue(*g_Options.rainwidth);
if (ImGui::InputFloat("Side velocity", g_Options.rainsidevel, 0, 0))
iff.g_pCVar->FindVar("r_RainSideVel")->SetValue(*g_Options.rainsidevel);
if (ImGui::InputFloat("Alpha", g_Options.rainalpha, 0, 0))
iff.g_pCVar->FindVar("r_rainalpha")->SetValue(*g_Options.rainalpha);
ImGui::EndTable();
}
DisableElements(*g_Options.weatheractive, 0);
ImGui::NextColumn();
if (ImGui::BeginTable("##Fog", 4, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextColumn();
if (ImGui::Checkbox("Fog", g_Options.fogactive))
{
if (g_Options.fogactive)
{
SetValueUnrestricted("fog_enable", 1);
SetValueUnrestricted("fog_enableskybox", 1);
SetValueUnrestricted("fog_override", 1);
iff.g_pCVar->FindVar("fog_color")->SetValue(
std::string("").
append(to_string(g_Options.fogcolor.value->r * 255)).
append(" ").
append(to_string(g_Options.fogcolor.value->g * 255)).
append(" ").
append(to_string(g_Options.fogcolor.value->b * 255)).
append(" ").c_str()
);
iff.g_pCVar->FindVar("fog_colorskybox")->SetValue(
std::string("").
append(std::to_string(g_Options.fogcolor.value->r * 255)).
append(" ").
append(std::to_string(g_Options.fogcolor.value->g * 255)).
append(" ").
append(std::to_string(g_Options.fogcolor.value->b * 255)).
append(" ").c_str()
);
SetValueUnrestricted("fog_maxdensity", g_Options.fogdensity);
SetValueUnrestricted("fog_maxdensityskybox", g_Options.fogdensity);
SetValueUnrestricted("fog_start", g_Options.fogstart);
SetValueUnrestricted("fog_startskybox", g_Options.fogstart);
SetValueUnrestricted("fog_end", g_Options.fogend);
SetValueUnrestricted("fog_endskybox", g_Options.fogend);
}
else
SetValueUnrestricted("fog_override", 0);
}
ImGui::TableNextColumn();
DisableElements(*g_Options.fogactive, 1);
if (ImGui::ColorEdit3("##MyColor##W1", (float*)g_Options.fogcolor.value.get(), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf))
{
iff.g_pCVar->FindVar("fog_color")->SetValue(
std::string("").
append(std::to_string(g_Options.fogcolor.value->r * 255)).
append(" ").
append(std::to_string(g_Options.fogcolor.value->g * 255)).
append(" ").
append(std::to_string(g_Options.fogcolor.value->b * 255)).
append(" ").c_str()
);
iff.g_pCVar->FindVar("fog_colorskybox")->SetValue(
std::string("").
append(std::to_string(g_Options.fogcolor.value->r * 255)).
append(" ").
append(std::to_string(g_Options.fogcolor.value->g * 255)).
append(" ").
append(std::to_string(g_Options.fogcolor.value->b * 255)).
append(" ").c_str()
);
}
ImGui::EndTable();
}
ImGui::PushItemWidth(252.0f);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
if (ImGui::SliderFloat("Max density", g_Options.fogdensity, 0.0f, 1.0f))
{
iff.g_pCVar->FindVar("fog_maxdensity")->SetValue(g_Options.fogdensity);
iff.g_pCVar->FindVar("fog_maxdensityskybox")->SetValue(g_Options.fogdensity);
}
if (ImGui::SliderFloat("Start", g_Options.fogstart, 0.0f, 5000.0f))
{
iff.g_pCVar->FindVar("fog_start")->SetValue(g_Options.fogstart);
iff.g_pCVar->FindVar("fog_startskybox")->SetValue(g_Options.fogstart);
}
if (ImGui::SliderFloat("End", g_Options.fogend, 0.0f, 5000.0f))
{
iff.g_pCVar->FindVar("fog_end")->SetValue(g_Options.fogend);
iff.g_pCVar->FindVar("fog_endskybox")->SetValue(g_Options.fogend);
}
DisableElements(*g_Options.fogactive, 0);
ImGui::InvisibleButton("##W4", ImVec2(0, 0.0f));
if (ImGui::SliderFloat("Tonemap scale", g_Options.tonemapscale, 0.001f, 1.0f))
SetValueUnrestricted("mat_force_tonemap_scale", g_Options.tonemapscale);
ImGui::PopItemWidth();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
if (ImGui::Checkbox("Colorize map textures ", g_Options.worldcoloractive))
{
if (*g_Options.worldcoloractive) colorWorld();
else colorWorld(0);
}
DisableElements(*g_Options.worldcoloractive, 1);
ImGui::SameLine();
if (ImGui::Button("Modulate", ImVec2(70, 22)))
colorWorld();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
if (ImGui::BeginTable("##Colorworld", 4, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextColumn();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 3.0f);
ImGui::Text("World");
ImGui::ColorEdit3("##W1", (float*)g_Options.worldcolor.value.get(), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf);
ImGui::TableNextColumn();
ImGui::Text("Prop/Sky");
ImGui::ColorEdit3("##W2", (float*)g_Options.staticpropcolor.value.get(), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf);
ImGui::TableNextColumn();
ImGui::Text("Particles");
ImGui::ColorEdit4("##W4", (float*)g_Options.smokeskycolor.value.get(), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_AlphaBar);
ImGui::TableNextColumn();
ImGui::Text("Model");
ImGui::ColorEdit3("##W3", (float*)g_Options.modelcolor.value.get(), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf);
ImGui::EndTable();
}
DisableElements(*g_Options.worldcoloractive, 0);
ImGui::Columns(1, nullptr, false);
ImGui::EndChild();
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Models"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
static int selectedwep = 0;
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 5.0f);
if (ImGui::BeginTable("##Models", 2, ImGuiTableFlags_NoSavedSettings))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::PushItemWidth(170.0f);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Item", g_Options.models.value->arr[selectedwep].name))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < g_Options.models.value->itemcount; n++)
{
g_Options.models.value->arr[n].isSelected = (selectedwep == n);
if (ImGui::Selectable(g_Options.models.value->arr[n].name, g_Options.models.value->arr[n].isSelected, 0, ImVec2(0, 0), false))
selectedwep = n;
if (g_Options.models.value->arr[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::PopItemWidth();
ImGui::SameLine();
if (ImGui::Button("Update", ImVec2(70, 22)))
iff.g_pClientState->ForceFullUpdate();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 6.0f);
if (ImGui::Checkbox("Set viewmodel ", &g_Options.models.value->arr[selectedwep].active))
{
if (!g_Options.models.value->arr[selectedwep].active) {
g_Options.models.value->arr[selectedwep].vmodel_hash = fnv2::hash(g_Options.models.value->arr[selectedwep].vmodel_orig);
}
if (g_Options.models.value->arr[selectedwep].active) {
g_Options.models.value->arr[selectedwep].vmodel_hash = fnv2::hash(g_Options.models.value->arr[selectedwep].vmodel_repl);
}
if (selectedwep < 2)
{
if (g_Options.models.value->arr[selectedwep].active)
*g_Options.playerloop_count += 1;
else *g_Options.playerloop_count -= 1;
printfdbg("pl count %d\n", *g_Options.playerloop_count);
}
}
ImGui::SameLine();
DisableElements(selectedwep > 2 ? true : false, 1);
ImGui::Checkbox("Via FindMDL hook", &g_Options.models.value->arr[selectedwep].findMDLmethode);
DisableElements(selectedwep > 2 ? true : false, 0);
ImGui::PushItemWidth(170.0f);
ImGui::InputText("Path to .mdl##viewmodel", g_Options.models.value->arr[selectedwep].vmodel_repl_temp, 256);
ImGui::PopItemWidth();
ImGui::SameLine();
if (ImGui::Button("Apply##viewmodel", ImVec2(70, 22)))
{
if (const auto modelprecache = iff.g_pNetworkStringTableContainer->FindTable("modelprecache"))
modelprecache->AddString(false, g_Options.models.value->arr[selectedwep].vmodel_repl_temp);
if (selectedwep > 2) {
for (int i = 0; i < 20; i++)
strcpy(g_Options.models.value->arr[selectedwep].seqs[i].seq_orig_def, "");
opt.needtogetseqact = selectedwep;
}
strcpy(g_Options.models.value->arr[selectedwep].vmodel_repl, g_Options.models.value->arr[selectedwep].vmodel_repl_temp);
g_Options.models.value->arr[selectedwep].vmodel_hash = fnv2::hashRuntime(g_Options.models.value->arr[selectedwep].vmodel_repl);
}
ImGui::TableNextColumn();
DisableElements(selectedwep == 2 ? false : true, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
if (ImGui::Checkbox("Set scale", &g_Options.models.value->arr[selectedwep].active_scale))
{
if (g_Options.models.value->arr[selectedwep].active_scale)
*g_Options.entityloop_count += 1;
else *g_Options.entityloop_count -= 1;
printfdbg("el count %d\n", *g_Options.entityloop_count);
}
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 30.0f);
DisableElements(g_Options.models.value->arr[selectedwep].active_scale, 1);
ImGui::PushItemWidth(252.0f);
ImGui::SliderFloat("##scale", &g_Options.models.value->arr[selectedwep].scale, 0.0f, 10.0f);
ImGui::PopItemWidth();
DisableElements(g_Options.models.value->arr[selectedwep].active_scale, 0);
DisableElements(selectedwep == 2 ? false : true, 0);
DisableElements(selectedwep > 2 ? true : false, 1);
if (ImGui::Checkbox("Set worldmodel", &g_Options.models.value->arr[selectedwep].active_w))
{
if (g_Options.models.value->arr[selectedwep].active_w)
*g_Options.entityloop_count += 1;
else *g_Options.entityloop_count -= 1;
printfdbg("el count %d\n", *g_Options.entityloop_count);
}
ImGui::PushItemWidth(170.0f);
ImGui::InputText("Path to .mdl##worldmodel", g_Options.models.value->arr[selectedwep].wmodel_repl_temp, 256);
ImGui::PopItemWidth();
ImGui::SameLine();
if (ImGui::Button("Apply##worldmodel", ImVec2(70, 22)))
{
strcpy(g_Options.models.value->arr[selectedwep].wmodel_repl, g_Options.models.value->arr[selectedwep].wmodel_repl_temp);
g_Options.models.value->arr[selectedwep].wmodel_hash = fnv2::hashRuntime(g_Options.models.value->arr[selectedwep].wmodel_repl);
}
DisableElements(selectedwep > 2 ? true : false, 0);
ImGui::EndTable();
}
ImGui::Columns(2, nullptr, false);
DisableElements(selectedwep > 2 ? true : false, 1);
if (ImGui::Checkbox("Set animations", &g_Options.models.value->arr[selectedwep].seq_active))
opt.needtogetseqact = selectedwep;
DisableElements(selectedwep > 2 ? true : false, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
DisableElements(g_Options.models.value->arr[selectedwep].seq_active, 1);
static char ccc[20][5] = { "##0","##1","##2","##3","##4","##5","##6","##7","##8","##9","##10","##11","##12","##13","##14","##15","##16","##17","##18","##19" };
static ImGuiTableFlags flags = ImGuiTableFlags_None;
static ImGuiWindowFlags window_flags = ImGuiWindowFlags_None;
style->ItemSpacing = ImVec2(7.0f, 2.0f);
if (ImGui::BeginChild("ChildR", ImVec2(252, 150), true, window_flags | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
ImGui::SetCursorPos(ImVec2(ImGui::GetCursorPosX() - 10.0f, ImGui::GetCursorPosY() - 10.0f));
if (ImGui::BeginTable("split", 2, flags | ImGuiTableFlags_NoSavedSettings))
{
for (int i = 0; i < 20; i++)
{
char buf[32];
sprintf(buf, "%01d:", i);
ImGui::TableNextColumn();
ImGui::Text(buf);
ImGui::SameLine();
ImGui::Text(g_Options.models.value->arr[selectedwep].seqs[i].seq_orig_def);
ImGui::TableNextColumn();
ImGui::PushItemWidth(100.0f);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo(ccc[i], g_Options.models.value->arr[selectedwep].seqs[g_Options.models.value->arr[selectedwep].seqs[i].seq_repl].seq_repl_def_preview))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < 20; n++)
{
g_Options.models.value->arr[selectedwep].seqs[i].isSelected[n] = (g_Options.models.value->arr[selectedwep].seqs[i].seq_repl == n);
if (ImGui::Selectable(g_Options.models.value->arr[selectedwep].seqs[n].seq_repl_def_preview, g_Options.models.value->arr[selectedwep].seqs[i].isSelected[n], 0, ImVec2(0, 0), false))
g_Options.models.value->arr[selectedwep].seqs[i].seq_repl = n;
if (g_Options.models.value->arr[selectedwep].seqs[i].isSelected[n])
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::PopItemWidth();
}
ImGui::EndTable();
}
ImGui::EndChild();
}
DisableElements(g_Options.models.value->arr[selectedwep].seq_active, 0);
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::NextColumn();
static const char sss[20][6] = { "##0s","##1s","##2s","##3s","##4s","##5s","##6s","##7s","##8s","##9s","##10s",
"##11s","##12s","##13s","##14s","##15s","##16s","##17s","##18s","##19s" };
static const char sss1[5][6] = { "##0v","##1v","##2v","##3v","##4v" };
static const char sss2[5][6] = { "##0p","##1p","##2p","##3p","##4p" };
DisableElements(selectedwep > 3 ? true : false, 1);
if (ImGui::Checkbox("Set sounds", &g_Options.models.value->arr[selectedwep].sound_active))
{
if (g_Options.models.value->arr[selectedwep].sound_active)
*g_Options.soundhook_count += 1;
else *g_Options.soundhook_count -= 1;
printfdbg("sh count %d\n", *g_Options.soundhook_count);
}
DisableElements(selectedwep > 3 ? true : false, 0);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
DisableElements(g_Options.models.value->arr[selectedwep].sound_active, 1);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
if (ImGui::BeginChild("ChildS", ImVec2(252, 150), true, ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_NoScrollbar)) {
ImGui::SetCursorPos(ImVec2(ImGui::GetCursorPosX() - 10.0f, ImGui::GetCursorPosY() - 10.0f));
if (ImGui::BeginTable("splits", 2, ImGuiTableFlags_NoSavedSettings))
{
for (int i = 0; i < g_Options.models.value->arr[selectedwep].soundcount; i++)
{
ImGui::TableNextColumn();
ImGui::Text(g_Options.models.value->arr[selectedwep].sounds[i].name);
ImGui::InvisibleButton("##xz", ImVec2(0, 14.0f));
ImGui::Text("Pitch");
ImGui::SameLine();
ImGui::InputInt((char*)sss2[i], &g_Options.models.value->arr[selectedwep].sounds[i].pitch, 0, 0);
ImGui::TableNextColumn();
ImGui::PushItemWidth(106.0f);
ImGui::InputText((char*)sss[i], g_Options.models.value->arr[selectedwep].sounds[i].wavpath, 255);
ImGui::PopItemWidth();
ImGui::Text("Volume");
ImGui::SameLine();
ImGui::PushItemWidth(56.0f);
ImGui::InputFloat((char*)sss1[i], &g_Options.models.value->arr[selectedwep].sounds[i].volume, 0, 0);
ImGui::PopItemWidth();
}
ImGui::EndTable();
}
ImGui::EndChild();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
DisableElements(g_Options.models.value->arr[selectedwep].sound_active, 0);
ImGui::Columns(1, nullptr, false);
ImGui::EndChild();
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Materials"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
ImGui::Columns(2, nullptr, false);
static int selectedwep = 0;
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::PushItemWidth(170.0f);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Item", g_Options.materials.value->arr[selectedwep].name))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < g_Options.materials.value->itemcount; n++)
{
g_Options.materials.value->arr[n].isSelected = (selectedwep == n);
if (ImGui::Selectable(g_Options.materials.value->arr[n].name, g_Options.materials.value->arr[n].isSelected, 0, ImVec2(0, 0), false))
selectedwep = n;
if (g_Options.materials.value->arr[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::PopItemWidth();
ImGui::SameLine();
if (ImGui::Checkbox("Active##S1", &g_Options.materials.value->arr[selectedwep].active))
{
if (g_Options.materials.value->arr[selectedwep].active)
*g_Options.dmeloop_count += 1;
else *g_Options.dmeloop_count -= 1;
printfdbg("dl count %d\n", *g_Options.dmeloop_count);
}
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
DisableElements(g_Options.materials.value->arr[selectedwep].active, 1);
ImGui::PushItemWidth(170.0f);
ImGui::TextInputComboBox("Texture", g_Options.materials.value->arr[selectedwep].texture_temp, 255, opt.dmeitems, 0);
ImGui::PopItemWidth();
ImGui::SameLine();
if (ImGui::Button("Apply", ImVec2(70, 22)))
{
if (strstr(g_Options.materials.value->arr[selectedwep].texture_temp, "(0)"))
g_Options.materials.value->arr[selectedwep].customtextureselected = 0;
else if (strstr(g_Options.materials.value->arr[selectedwep].texture_temp, "(1)"))
g_Options.materials.value->arr[selectedwep].customtextureselected = 1;
else if (strstr(g_Options.materials.value->arr[selectedwep].texture_temp, "(2)"))
g_Options.materials.value->arr[selectedwep].customtextureselected = 2;
else if (strstr(g_Options.materials.value->arr[selectedwep].texture_temp, "(3)"))
g_Options.materials.value->arr[selectedwep].customtextureselected = 3;
else if (strstr(g_Options.materials.value->arr[selectedwep].texture_temp, "(4)"))
g_Options.materials.value->arr[selectedwep].customtextureselected = 4;
else g_Options.materials.value->arr[selectedwep].customtextureselected = -1;
printfdbg("Custom texture selected? %d\n", g_Options.materials.value->arr[selectedwep].customtextureselected);
strcpy(g_Options.materials.value->arr[selectedwep].texture, g_Options.materials.value->arr[selectedwep].texture_temp);
}
ImGui::NextColumn();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 5.0f);
if (ImGui::BeginTable("##tablexz", 2))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Checkbox("Wireframe", &g_Options.materials.value->arr[selectedwep].wireframe);
ImGui::Checkbox("Flat", &g_Options.materials.value->arr[selectedwep].flat);
ImGui::TableNextColumn();
ImGui::Checkbox("No draw", &g_Options.materials.value->arr[selectedwep].nodraw);
ImGui::ColorEdit4("MyColor##0", (float*)&g_Options.materials.value->arr[selectedwep].coloralpha, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_AlphaBar);
ImGui::SameLine();
ImGui::Text("Color/Alpha");
ImGui::EndTable();
}
DisableElements(g_Options.materials.value->arr[selectedwep].active, 0);
ImGui::Columns(1, nullptr, false);
ImGui::Separator();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
static int item_current_idx = 0;
ImGui::InputTextMultiline("KeyValue", g_Options.customtextures.value->arr[item_current_idx].keyvalue, 0x1000, ImVec2(467, 200), ImGuiInputTextFlags_AllowTabInput);
ImGui::SameLine();
ImVec2 savepos = ImGui::GetCursorPos();
style->ItemSpacing = ImVec2(7.0f, 2.0f);
if (ImGui::BeginListBox("Custom textures", ImVec2(98, 100)))
{
ImGui::PushFont(ifontmini);
for (int n = 0; n < 5; n++)
{
g_Options.customtextures.value->arr[n].IsSelected = (item_current_idx == n);
if (ImGui::Selectable(g_Options.customtextures.value->arr[n].Preview, g_Options.customtextures.value->arr[n].IsSelected, 0, ImVec2(0, 0), true))
item_current_idx = n;
if (g_Options.customtextures.value->arr[n].IsSelected)
ImGui::SetItemDefaultFocus();
}
ImGui::EndListBox();
ImGui::PushFont(ifont);
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
savepos.y += 130.0f;
ImGui::SetCursorPos(savepos);
ImGui::PushItemWidth(100.0f);
ImGui::InputText("Name", g_Options.customtextures.value->arr[item_current_idx].Name, 256);
ImGui::PopItemWidth();
savepos.y += 40.0f;
ImGui::SetCursorPos(savepos);
if (ImGui::Button("Apply##refresh", ImVec2(70, 22)))
{
if (g_Options.customtextures.value->arr[item_current_idx].Name[0] == 0x0 && g_Options.customtextures.value->arr[item_current_idx].keyvalue[0] == 0x0)
{
char newpreview[256] = "(";
strcat_s(newpreview, to_string(item_current_idx).c_str());
strcat_s(newpreview, ") null");
strcpy(g_Options.customtextures.value->arr[item_current_idx].Preview, newpreview);
g_Options.customtextures.value->arr[item_current_idx].texturelink = nullptr;
}
else
{
char newpreview[256] = "(";
strcat_s(newpreview, to_string(item_current_idx).c_str());
strcat_s(newpreview, ") ");
strcat_s(newpreview, g_Options.customtextures.value->arr[item_current_idx].Name);
strcpy(g_Options.customtextures.value->arr[item_current_idx].Preview, newpreview);
g_Options.customtextures.value->arr[item_current_idx].texturelink = CreateMaterial(
string(g_Options.customtextures.value->arr[item_current_idx].Name),
string(g_Options.customtextures.value->arr[item_current_idx].keyvalue));
}
opt.dmeitems.at(item_current_idx) = g_Options.customtextures.value->arr[item_current_idx].Preview;
}
ImGui::EndChild();
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Inventory"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
static int selectedwep = 0;
ImGui::Text("Item");
ImGui::SameLine();
ImGui::PushItemWidth(390.0f);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("##label1", g_Options.weapons.value->arr[selectedwep].name))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < g_Options.weapons.value->weaponzcount; n++)
{
g_Options.weapons.value->arr[n].isSelected = (selectedwep == n);
if (ImGui::Selectable(g_Options.weapons.value->arr[n].name, g_Options.weapons.value->arr[n].isSelected, 0, ImVec2(0, 0), false))
selectedwep = n;
if (g_Options.weapons.value->arr[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::SameLine();
ImGui::Checkbox("Active##S1", &g_Options.weapons.value->arr[selectedwep].active);
ImGui::SameLine();
if (ImGui::Button("Update", ImVec2(70, 22))) {
CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)RefreshThread, &g_Options.weapons.value->arr[selectedwep].skinid, 0, 0);
}
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
DisableElements(g_Options.weapons.value->arr[selectedwep].active, 1);
ImGui::Columns(2, nullptr, false);
style->WindowPadding = ImVec2(5.0f, 5.0f);
ImGui::PushItemWidth(252.0f);
if (ImGui::BeginCombo("Paint kit ID", opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < opt.sc_skins.size(); n++)
{
opt.sc_skins[n].isSelected = (g_Options.weapons.value->arr[selectedwep].skinidc == n);
if (ImGui::Selectable(opt.sc_skins[n].Preview.c_str(), opt.sc_skins[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].skinidc = n;
g_Options.weapons.value->arr[selectedwep].skinid = opt.sc_skins[n].id;
g_Options.weapons.value->arr[selectedwep].rarity = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].rarity;
g_Options.weapons.value->arr[selectedwep].pearl = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].pearl;
g_Options.weapons.value->arr[selectedwep].color1 = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color1;
g_Options.weapons.value->arr[selectedwep].color2 = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color2;
g_Options.weapons.value->arr[selectedwep].color3 = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color3;
g_Options.weapons.value->arr[selectedwep].color4 = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color4;
}
if (opt.sc_skins[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::PopItemWidth();
if (ImGui::BeginTable("##table1", 2))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::InputInt("Seed", &g_Options.weapons.value->arr[selectedwep].seed, 0);
ImGui::InputInt("StatTrak(tm)", &g_Options.weapons.value->arr[selectedwep].stattrak, 0);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Quality", qualities[g_Options.weapons.value->arr[selectedwep].qualityc].name.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < qualities.size(); n++)
{
qualities[n].isSelected = (g_Options.weapons.value->arr[selectedwep].quality == qualities[n].defindex);
if (ImGui::Selectable(qualities[n].name.c_str(), qualities[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].qualityc = n;
g_Options.weapons.value->arr[selectedwep].quality = qualities[n].defindex;
}
if (qualities[n].isSelected)
{
ImGui::SetItemDefaultFocus();
}
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::TableNextColumn();
float thisy = ImGui::GetCursorPosY();
ImGui::SetCursorPosY(thisy - 20.0f);
ImGui::Text("Custom colors");
ImGui::SetCursorPosY(thisy);
float3 color1 = colorConverter(opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color1);
if (ImGui::ColorEdit3("##Custom colors", (float*)&color1, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf))
{
int color1int = 0xFF000000 + ((int)(color1.b * 255) << 16) | ((int)(color1.g * 255) << 8) | (int)(color1.r * 255);
opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color1 = color1int;
CPaintKit* pk = (CPaintKit*)opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].link;
pk->color1 = color1int;
g_Options.weapons.value->arr[selectedwep].color1 = color1int;
}
ImGui::SameLine();
float3 color2 = colorConverter(opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color2);
if (ImGui::ColorEdit3("##Color2", (float*)&color2, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf))
{
int color2int = 0xFF000000 + ((int)(color2.b * 255) << 16) | ((int)(color2.g * 255) << 8) | (int)(color2.r * 255);
opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color2 = color2int;
CPaintKit* pk = (CPaintKit*)opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].link;
pk->color2 = color2int;
g_Options.weapons.value->arr[selectedwep].color2 = color2int;
}
ImGui::SameLine();
float3 color3 = colorConverter(opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color3);
if (ImGui::ColorEdit3("##Color3", (float*)&color3, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf))
{
int color3int = 0xFF000000 + ((int)(color3.b * 255) << 16) | ((int)(color3.g * 255) << 8) | (int)(color3.r * 255);
opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color3 = color3int;
CPaintKit* pk = (CPaintKit*)opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].link;
pk->color3 = color3int;
g_Options.weapons.value->arr[selectedwep].color3 = color3int;
}
ImGui::SameLine();
float3 color4 = colorConverter(opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color4);
if (ImGui::ColorEdit3("##Color4", (float*)&color4, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf))
{
int color4int = 0xFF000000 + ((int)(color4.b * 255) << 16) | ((int)(color4.g * 255) << 8) | (int)(color4.r * 255);
opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].color4 = color4int;
CPaintKit* pk = (CPaintKit*)opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].link;
pk->color4 = color4int;
g_Options.weapons.value->arr[selectedwep].color4 = color4int;
}
ImGui::Checkbox("Freeze count", &g_Options.weapons.value->arr[selectedwep].ownerunk);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Rarity", rarities[opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].rarity].name.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < rarities.size(); n++)
{
rarities[n].isSelected = (opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].rarity == rarities[n].defindex);
if (ImGui::Selectable(rarities[n].name.c_str(), rarities[n].isSelected, 0, ImVec2(0, 0), false))
{
opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].rarity = rarities[n].defindex;
CPaintKit* pk = (CPaintKit*)opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].link;
pk->rarity = rarities[n].defindex;
g_Options.weapons.value->arr[selectedwep].rarity = rarities[n].defindex;
}
if (rarities[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::EndTable();
}
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 5.0f);
ImGui::PushItemWidth(252.0f);
ImGui::SliderFloat("Wear", &g_Options.weapons.value->arr[selectedwep].wear, 0.0f, 1.0f);
if (ImGui::SliderFloat("Pearlescent", &opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].pearl, 0.0f, 255.0f))
{
CPaintKit* pk = (CPaintKit*)opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].link;
pk->pearlescent = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].pearl;
g_Options.weapons.value->arr[selectedwep].pearl = opt.sc_skins[g_Options.weapons.value->arr[selectedwep].skinidc].pearl;
}
ImGui::PopItemWidth();
if (ImGui::BeginTable("##table3", 2))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
style->WindowPadding = ImVec2(5.0f, 5.0f);
bool disabledDefIndex = (selectedwep > 5) && (selectedwep < (g_Options.weapons.value->weaponzcount - 1)) ? false : true;
bool disabledKFIcon = ((selectedwep > 0) && (selectedwep < 6)) || (selectedwep == g_Options.weapons.value->weaponzcount - 1) ? false : true;
DisableElements(disabledDefIndex, 1);
if (selectedwep == 0) {
if (ImGui::BeginCombo("Definition", knives[g_Options.weapons.value->arr[selectedwep].modelcount].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < knives.size(); n++)
{
knives[n].isSelected = (g_Options.weapons.value->arr[selectedwep].modelcount == n);
if (ImGui::Selectable(knives[n].Preview.c_str(), knives[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].modelcount = n;
g_Options.weapons.value->arr[selectedwep].modeldefindex = knives[n].defindex;
strcpy(g_Options.weapons.value->arr[selectedwep].model, knives[n].viewmodel.c_str());
strcpy(g_Options.weapons.value->arr[selectedwep].worldmodel, knives[n].worldmodel.c_str());
}
if (knives[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
}
else if (selectedwep == 1)
{
if (ImGui::BeginCombo("Definition", gloves[g_Options.weapons.value->arr[selectedwep].modelcount].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < gloves.size(); n++)
{
gloves[n].isSelected = (g_Options.weapons.value->arr[selectedwep].modelcount == n);
if (ImGui::Selectable(gloves[n].Preview.c_str(), gloves[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].modelcount = n;
g_Options.weapons.value->arr[selectedwep].modeldefindex = gloves[n].defindex;
strcpy(g_Options.weapons.value->arr[selectedwep].model, gloves[n].viewmodel.c_str());
strcpy(g_Options.weapons.value->arr[selectedwep].worldmodel, gloves[n].worldmodel.c_str());
}
if (gloves[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
}
else if (selectedwep == 2 || selectedwep == 3)
{
if (ImGui::BeginCombo("Definition", agents[g_Options.weapons.value->arr[selectedwep].modelcount].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < agents.size(); n++)
{
agents[n].isSelected = (g_Options.weapons.value->arr[selectedwep].modelcount == n);
if (ImGui::Selectable(agents[n].Preview.c_str(), agents[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].modelcount = n;
g_Options.weapons.value->arr[selectedwep].modeldefindex = agents[n].defindex;
strcpy(g_Options.weapons.value->arr[selectedwep].model, agents[n].viewmodel.c_str());
}
if (agents[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
}
else if (selectedwep == 4)
{
if (ImGui::BeginCombo("Definition", medals[g_Options.weapons.value->arr[selectedwep].modelcount].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < medals.size(); n++)
{
medals[n].isSelected = (g_Options.weapons.value->arr[selectedwep].modelcount == n);
if (ImGui::Selectable(medals[n].Preview.c_str(), medals[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].modelcount = n;
g_Options.weapons.value->arr[selectedwep].modeldefindex = medals[n].defindex;
}
if (medals[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
}
else if (selectedwep == 5)
{
if (ImGui::BeginCombo("Definition", musickits[g_Options.weapons.value->arr[selectedwep].modelcount].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < musickits.size(); n++)
{
musickits[n].isSelected = (g_Options.weapons.value->arr[selectedwep].modelcount == n);
if (ImGui::Selectable(musickits[n].Preview.c_str(), musickits[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].modelcount = n;
g_Options.weapons.value->arr[selectedwep].modeldefindex = musickits[n].defindex;
}
if (musickits[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
}
else if (selectedwep == (g_Options.weapons.value->weaponzcount - 1))
{
if (ImGui::InputInt("Definition", &g_Options.weapons.value->arr[selectedwep].defindex, 0, 0))
g_Options.weapons.value->arr[selectedwep].modeldefindex = g_Options.weapons.value->arr[selectedwep].defindex;
}
else
{
ImGui::BeginCombo("Definition", "Disabled");
ImGui::EndCombo;
}
style->WindowPadding = ImVec2(20.f, 20.0f);
DisableElements(disabledDefIndex, 0);
ImGui::TableNextColumn();
DisableElements(disabledKFIcon, 1);
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Killfeed icon", g_Options.weapons.value->arr[selectedwep].killfeediconreplace))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < opt.killfeedicons.size(); n++)
{
if (ImGui::Selectable(opt.killfeedicons[n].c_str(), false, 0, ImVec2(0, 0), false))
{
strcpy(g_Options.weapons.value->arr[selectedwep].killfeediconreplace, opt.killfeedicons[n].c_str());
if (n > 0)
g_Options.weapons.value->arr[selectedwep].killfeediconactive = 1;
else
g_Options.weapons.value->arr[selectedwep].killfeediconactive = 0;
}
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
DisableElements(disabledKFIcon, 0);
ImGui::EndTable();
}
ImGui::NextColumn();
static int stickerselected = 0;
style->ItemSpacing = ImVec2(7.0f, 2.0f);
if (ImGui::BeginListBox("Stickers##lb", ImVec2(251.0f, 5 * ImGui::GetTextLineHeightWithSpacing())))
{
ImGui::PushFont(ifontmini);
for (int n = 0; n < 5; n++)
{
g_Options.weapons.value->arr[selectedwep].stickers[n].isselected = (stickerselected == n);
if (ImGui::Selectable(g_Options.weapons.value->arr[selectedwep].stickers[n].name,
g_Options.weapons.value->arr[selectedwep].stickers[n].isselected, 0, ImVec2(0, 0), true)) {
stickerselected = n;
}
if (g_Options.weapons.value->arr[selectedwep].stickers[n].isselected)
ImGui::SetItemDefaultFocus();
}
ImGui::PushFont(ifont);
ImGui::EndListBox();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::InvisibleButton("##invis", ImVec2(0, 10.0f));
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 5.0f);
style->WindowPadding = ImVec2(5.0f, 5.0f);
ImGui::PushItemWidth(252.0f);
if (ImGui::BeginCombo("Sticker ID", opt.sc_stickers[g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].stickerc].Preview.c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < opt.sc_stickers.size(); n++)
{
opt.sc_stickers[n].isSelected = (g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].stickerc == n);
if (ImGui::Selectable(opt.sc_stickers[n].Preview.c_str(), opt.sc_stickers[n].isSelected, 0, ImVec2(0, 0), false))
{
g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].stickerc = n;
g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].stickerid = opt.sc_stickers[n].id;
char newname[64] = "(";
strcat_s(newname, to_string(stickerselected).c_str());
strcat_s(newname, ") ");
strcat_s(newname, opt.sc_stickers[g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].stickerc].Name.c_str());
strcpy(g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].name,
newname);
}
if (opt.sc_stickers[n].isSelected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::PopItemWidth();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 7.0f);
ImGui::PushItemWidth(252.0f);
ImGui::SliderFloat("Wear##st", &g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].wear, 0, 1.0f);
ImGui::SliderFloat("Scale##st", &g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].scale, 2.0f, 0.0f);
ImGui::SliderFloat("Rotation##st", &g_Options.weapons.value->arr[selectedwep].stickers[stickerselected].rotation, 0, 360.0f);
ImGui::PopItemWidth();
if (ImGui::BeginTable("##table5", 2))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::InputText("Name tag", g_Options.weapons.value->arr[selectedwep].nametag, 32);
ImGui::TableNextColumn();
ImGui::InputText("Desc tag", g_Options.weapons.value->arr[selectedwep].desctag, 32);
ImGui::EndTable();
}
ImGui::Columns(1, nullptr, false);
DisableElements(g_Options.weapons.value->arr[selectedwep].active, 0);
ImGui::EndChild();
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Profile"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
if (ImGui::BeginTable("##tablexz", 4))
{
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 20.0f);
ImGui::TextInputComboBox("Name", g_Options.playername.value->mystring, 1024, opt.names, 0);
ImGui::InputText("Clan tag", g_Options.playerclan.value->mystring, 1024);
DisableElements(*g_Options.discmsg_active, 1);
ImGui::InputText("Disconnect msg", g_Options.discmsg.value->mystring, 1024);
DisableElements(*g_Options.discmsg_active, 0);
ImGui::TableNextColumn();
if (ImGui::Button("Apply##name", ImVec2(70, 22)))
{
ConVar* nameConvar = iff.g_pCVar->FindVar("name");
*(int*)((DWORD)&nameConvar->m_fnChangeCallbacks.m_Size) = 0;
printfdbg("m_fnChangeCallbacks %x\n", (DWORD)&nameConvar->m_fnChangeCallbacks.m_Size);
//nameConvar->SetValue(MakeControlChars(g_Options.playername.value->mystring));
*g_Options.changing_name = 1;
NETSetConVar("name", MakeControlChars(g_Options.playername.value->mystring));
}
if (ImGui::Button("Apply##clan", ImVec2(70, 22)))
{
char* newclan = MakeControlChars(g_Options.playerclan.value->mystring);
static auto fnClantagChanged = (int(__fastcall*)(const char*, const char*))FindPatternV2("engine.dll", "53 56 57 8B DA 8B F9 FF 15");
fnClantagChanged(newclan, newclan);
}
ImGui::Checkbox("Active##discmsg", g_Options.discmsg_active);
ImGui::TableNextColumn();
ImGui::Checkbox("Set score", g_Options.fakescore);
DisableElements(g_Options.fakescore, 1);
ImGui::InputInt("Score", g_Options.score, 0);
ImGui::InputInt("MVPs", g_Options.MVPs, 0);
ImGui::TableNextColumn();
ImGui::InputInt("Kills", g_Options.kills, 0);
ImGui::InputInt("Assists", g_Options.assists, 0);
ImGui::InputInt("Deaths", g_Options.deaths, 0);
DisableElements(g_Options.fakescore, 0);
ImGui::EndTable();
}
ImGui::Separator();
if (ImGui::BeginTable("##tablexz", 4))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Checkbox("Set MM info", g_Options.profile_active);
ImGui::TableNextColumn();
if (ImGui::Button("Update##ranks", ImVec2(70, 22)))
{
g_Options.rankz.value->selectedrank = 2;
ProtoFeatures.SendMatchmakingClient2GCHello();
ProtoFeatures.SendClientGcRankUpdate();
}
ImGui::EndTable();
}
DisableElements(g_Options.profile_active, 1);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
if (ImGui::BeginTable("##tablexz", 4))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
static int selectedrank_this = 0;
style->WindowPadding = ImVec2(5.0f, 5.0f);
if (ImGui::BeginCombo("Rank Type", g_Options.rankz.value->arr[selectedrank_this].Name))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < 3; n++)
{
if (ImGui::Selectable(g_Options.rankz.value->arr[n].Name, g_Options.rankz.value->arr[n].isselected, 0, ImVec2(0, 0), false))
selectedrank_this = n;
if (g_Options.rankz.value->arr[n].isselected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
ImGui::InputInt("Rank", &g_Options.rankz.value->arr[selectedrank_this].rank, 0);
ImGui::InputInt("Wins", &g_Options.rankz.value->arr[selectedrank_this].wins, 0);
ImGui::TableNextColumn();
ImGui::Checkbox("Prime", g_Options.prime);
ImGui::InputInt("level", g_Options.level, 0);
ImGui::InputInt("XP", g_Options.xp, 0);
ImGui::TableNextColumn();
ImGui::InputInt("Leader", g_Options.comleader, 0);
ImGui::InputInt("Teacher", g_Options.comteacher, 0);
ImGui::InputInt("Friendly", g_Options.comfriendly, 0);
ImGui::TableNextColumn();
ImGui::Checkbox("VAC ban", g_Options.vacban);
ImGui::InputInt("Ban reason", g_Options.banreason, 0);
ImGui::InputInt("Ban duration", g_Options.banduration, 0);
DisableElements(g_Options.profile_active, 0);
ImGui::EndTable();
}
ImGui::EndChild();
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Player"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
ImGui::Text("Set ConVar");
ImGui::SameLine();
static char cvarbuf[255] = "";
ImGui::PushItemWidth(200.0f);
ImGui::InputText("##Set ConVar", cvarbuf, 255);
ImGui::SameLine();
static float floatbuf = 0;
ImGui::PushItemWidth(200.0f);
ImGui::InputFloat("Value##f", &floatbuf);
ImGui::SameLine();
if (ImGui::Button("Apply", ImVec2(70, 22)))
{
SetValueUnrestricted(cvarbuf, floatbuf);
}
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 10.0f);
ImGui::Separator();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f);
ImGui::Columns(3, nullptr, false);
ImGui::Checkbox("C4 timer", g_Options.c4timer);
ImGui::Checkbox("Vote reveal", g_Options.votereveal);
ImGui::Checkbox("Rank reveal", g_Options.rankreveal);
ImGui::Checkbox("Spectator list", g_Options.speclist);
if (ImGui::Checkbox("No postprocessing", g_Options.postproc))
SetValueUnrestricted("mat_postprocess_enable", !g_Options.postproc);
//if (ImGui::Checkbox("No shadows", g_Options.shadows))
// SetValueUnrestricted("cl_csm_enabled", !g_Options.shadows);
style->WindowPadding = ImVec2(5.0f, 5.0f);
static string types[3] = { "0", "1", "2" };
if (ImGui::BeginCombo("Fullbright", types[g_Options.fullbright].c_str()))
{
ImGui::PushFont(ifontmini);
style->ItemSpacing = ImVec2(7.0f, 2.0f);
for (int n = 0; n < 3; n++)
{
bool selected = (g_Options.fullbright == n);
if (ImGui::Selectable(types[n].c_str(), false, 0, ImVec2(0, 0), false))
{
memcpy(g_Options.fullbright, &n, 4);
SetValueUnrestricted("mat_fullbright", g_Options.fullbright);
}
if (selected)
ImGui::SetItemDefaultFocus();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::PushFont(ifont);
ImGui::EndCombo();
}
style->WindowPadding = ImVec2(20.f, 20.0f);
//if (ImGui::Checkbox("Gray world", g_Options.drawgray))
// SetValueUnrestricted("mat_drawgray", g_Options.drawgray);
//if (ImGui::Checkbox("Low res world", g_Options.showlowresimage))
// SetValueUnrestricted("mat_showlowresimage", g_Options.showlowresimage);
ImGui::NextColumn();
if (ImGui::SliderFloat("Viewmodel pos X", g_Options.viewmodel_x, -90.0f, 90.0f))
SetValueUnrestricted("viewmodel_offset_x", g_Options.viewmodel_x);
if (ImGui::SliderFloat("Viewmodel pos Y", g_Options.viewmodel_y, -90.0f, 90.0f))
SetValueUnrestricted("viewmodel_offset_y", g_Options.viewmodel_y);
if (ImGui::SliderFloat("Viewmodel pos Z", g_Options.viewmodel_z, -90.0f, 90.0f))
SetValueUnrestricted("viewmodel_offset_z", g_Options.viewmodel_z);
ImGui::SliderFloat("Viewmodel ang X", g_Options.viewmodel_ang_x, -180.0f, 180.0f);
ImGui::SliderFloat("Viewmodel ang Y", g_Options.viewmodel_ang_y, -180.0f, 180.0f);
ImGui::SliderFloat("Viewmodel ang Z", g_Options.viewmodel_ang_z, -180.0f, 180.0f);
ImGui::NextColumn();
ImGui::SliderFloat("FOV", g_Options.fov, 0, 360);
if (ImGui::SliderFloat("Viewmodel FOV", g_Options.viewmodel_fov, 0, 180.0f))
SetValueUnrestricted("viewmodel_fov", g_Options.viewmodel_fov);
if (ImGui::SliderFloat("Aspect Ratio", g_Options.aspectratio, 0, 25.0f))
SetValueUnrestricted("r_aspectratio", g_Options.aspectratio);
/*
if (ImGui::Checkbox("No viewmodel bob", g_Options.viewmodel_moving))
{
if (g_Options.viewmodel_moving)
{
SetValueUnrestricted("cl_viewmodel_shift_left_amt", 0);
SetValueUnrestricted("cl_viewmodel_shift_right_amt", 0);
SetValueUnrestricted("cl_bob_lower_amt", 0);
SetValueUnrestricted("cl_bobamt_lat", 0);
SetValueUnrestricted("cl_bobamt_vert", 0);
SetValueUnrestricted("cl_wpn_sway_scale", 0);
}
else
{
SetValueUnrestricted("cl_viewmodel_shift_left_amt", GetVisibleFloat("cl_viewmodel_shift_left_amt"));
SetValueUnrestricted("cl_viewmodel_shift_right_amt", GetVisibleFloat("cl_viewmodel_shift_right_amt"));
SetValueUnrestricted("cl_bob_lower_amt", GetVisibleFloat("cl_bob_lower_amt"));
SetValueUnrestricted("cl_bobamt_lat", GetVisibleFloat("cl_bobamt_lat"));
SetValueUnrestricted("cl_bobamt_vert", GetVisibleFloat("cl_bobamt_vert"));
SetValueUnrestricted("cl_wpn_sway_scale", GetVisibleFloat("cl_wpn_sway_scale"));
}
}
*/
if (ImGui::InputFloat("Ragdoll Gravity", g_Options.ragdollgravity))
iff.g_pCVar->FindVar("cl_ragdoll_gravity")->SetValue(g_Options.ragdollgravity);
if (ImGui::InputFloat("Ragdoll Timescale", g_Options.ragdolltime))
SetValueUnrestricted("cl_phys_timescale", g_Options.ragdolltime);
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 67.0f);
if (ImGui::Button("Reset", ImVec2(70, 22)))
ResetMisc();
ImGui::Columns(1, nullptr, false);
ImGui::EndChild();
}
ImGui::EndTabItem();
}
#ifdef DEBUG
if (ImGui::BeginTabItem("Movement"))
{
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
ImGui::Columns(2, nullptr, false);
ImGui::Checkbox("Bunny hop", g_Options.bunnyhop);
ImGui::Checkbox("Fast duck", g_Options.fastduck);
ImGui::Checkbox("Slide walk", g_Options.slidewalk);
ImGui::NextColumn();
ImGui::EndChild();
}
ImGui::EndTabItem();
}
#endif
if (ImGui::BeginTabItem("About"))
{
static ImVec4 colwhite = { 0.8f, 0.8f, 0.8f, 1.0f };
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
ImGui::Columns(2, nullptr, false);
ImGui::TextColored(colwhite, XorStr("Seaside"));
ImGui::Text(XorStr("Build November 9, 2022"));
ImGui::InvisibleButton("##inv", ImVec2(0, 0));
ImGui::TextColored(colwhite, XorStr("Developer"));
ImGui::Text(XorStr("0TheSpy"));
ImGui::InvisibleButton("##inv", ImVec2(0, 0));
ImGui::TextColored(colwhite, XorStr("Check for updates"));
ImGui::Text(XorStr("unknowncheats.me"));
style->ItemSpacing = ImVec2(20.0f, 9.0f);
if (ImGui::Checkbox("Output NetMsg, UserMsg, DevMsg", g_Options.debugstuff))
{
if (*g_Options.debugstuff.value)
{
SetValueUnrestricted("developer", 1);
SetValueUnrestricted("sv_show_usermessage", 2);
}
else
{
SetValueUnrestricted("developer", 0);
SetValueUnrestricted("sv_show_usermessage", 0);
}
}
if (ImGui::Button("Unhook", ImVec2(70, 22)))
opt.unhook = true;
ImGui::NextColumn();
static int selected = 0;
static char name[255] = "";
style->ItemSpacing = ImVec2(7.0f, 2.0f);
if (ImGui::BeginListBox("##cfgs", ImVec2(251.0f, 5 * ImGui::GetTextLineHeightWithSpacing())))
{
ImGui::PushFont(ifontmini);
if (ImGui::BeginTable("split", 3, ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings ))
{
ImGui::TableSetColumnWidth(0, 10);
ImGui::TableSetColumnWidth(1, 80);
for (int n = 0; n < Config::Get().configs.size(); n++)
{
bool isselected = selected == n;
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Text(opt.autoconfig == n ? " *" : " ");
ImGui::TableNextColumn();
if (ImGui::Selectable(Config::Get().configs[n].c_str(), isselected, ImGuiSelectableFlags_SpanAllColumns, ImVec2(0, 0), true)) {
selected = n;
string namewithoutss = Config::Get().configs[n].substr(0, Config::Get().configs[n].size() - 3);
memcpy(name, namewithoutss.c_str(), 255);
}
ImGui::TableNextColumn();
ImGui::Text(Config::Get().times[n].c_str());
if (isselected)
ImGui::SetItemDefaultFocus();
}
ImGui::EndTable();
}
ImGui::PushFont(ifont);
ImGui::EndListBox();
}
style->ItemSpacing = ImVec2(7.0f, 15.0f);
ImGui::InvisibleButton("##invis", ImVec2(0, 10.0f));
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 5.0f);
ImGui::PushItemWidth(130.0f);
ImGui::InputText("File name", name, 255);
ImGui::PopItemWidth();
ImGui::SameLine();
bool isloadonstartup = opt.autoconfig == selected;
if (ImGui::Checkbox("Load on startup", &isloadonstartup))
{
if (isloadonstartup)
{
ofstream autoload;
autoload.open("seaside_autoload");
autoload << Config::Get().configs[selected];
autoload.close();
opt.autoconfig = selected;
}
else
{
if (remove("seaside_autoload") != 0)
perror("Error deleting file");
else
{
puts("File successfully deleted");
opt.autoconfig = -1;
}
}
}
if (ImGui::BeginTable("##tablexz", 2))
{
ImGui::TableNextRow();
ImGui::TableNextRow();
ImGui::TableNextColumn();
if (ImGui::Button("Create", ImVec2(70, 22)))
{
Config::Get().Create(name);
Config::Get().FindAutoexec();
}
DisableElements(Config::Get().configs.size(), 1);
if (ImGui::Button("Save", ImVec2(70, 22)))
Config::Get().Save(selected, name);
DisableElements(Config::Get().configs.size(), 0);
if (ImGui::Button("Refresh", ImVec2(70, 22)))
{
Config::Get().Refresh();
Config::Get().FindAutoexec();
}
ImGui::TableNextColumn();
DisableElements(Config::Get().configs.size(), 1);
if (ImGui::Button("Delete", ImVec2(70, 22)))
{
Config::Get().Delete(selected);
if (selected >= Config::Get().configs.size()) selected = 0;
if (selected == opt.autoconfig) opt.autoconfig = -1;
Config::Get().FindAutoexec();
}
if (ImGui::Button("Load", ImVec2(70, 22)))
Config::Get().Load(selected);
DisableElements(Config::Get().configs.size(), 0);
if (ImGui::Button("Folder", ImVec2(70, 22)))
Config::Get().OpenFolder();
ImGui::EndTable();
}
ImGui::Columns(1, nullptr, false);
ImGui::TextColored(colwhite, " Author does not take any responsibility for bans caused by this software");
ImGui::TextColored(colwhite, " Please use VAC Bypass for better protection");
ImGui::EndChild();
}
ImGui::EndTabItem();
}
ImGui::EndTabBar();
ImGui::End();
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
}
if (*g_Options.hitmarker && iff.g_pEngineClient->IsInGame()) {
iff.g_pDebugOverlay->ClearAllOverlays();
for (int i = 0; i < bulletdata.size(); i++) {
Vector pos = bulletdata[i].pos;
float delta = bulletdata[i].time - bulletdata[i].curtime;
pos.z += delta * 35;
int alpha = 255;
if (bulletdata[i].time >= bulletdata[i].curtime + 0.70f)
alpha = int(850.0f * (-(delta - 1.0f)));
if (alpha < 0) alpha = 0;
if (!bulletdata[i].hs)
iff.g_pDebugOverlay->AddTextOverlayRGB(pos, 0, 0.09, 255, 50, 50, alpha, std::to_string(bulletdata[i].dmg).c_str());
else
iff.g_pDebugOverlay->AddTextOverlayRGB(pos, 0, 0.09, 0, 255, 0, alpha, std::to_string(bulletdata[i].dmg).c_str());
if (delta >= 1.000f)
bulletdata.erase(bulletdata.begin() + i);
bulletdata[i].time += iff.g_pGlobals->curtime - bulletdata[i].time;
}
}
return oEndScene(pDevice);
}