#include "pch.h" #include "Weapon.h" #include "Ui.h" #include "Util.h" #include "Ped.h" Weapon::Weapon() { Events::processScriptsEvent += [] { if (!m_bImagesLoaded) { Util::LoadTexturesInDirRecursive( PLUGIN_PATH((char*)"CheatMenu\\weapons\\"), ".jpg", Weapon::m_WeaponData.m_Categories, Weapon::m_WeaponData.m_ImagesList); m_bImagesLoaded = true; } CPlayerPed* player = FindPlayerPed(); if (m_bAutoAim) { if (CPad::NewMouseControllerState.X == 0 && CPad::NewMouseControllerState.Y == 0) { if (KeyPressed(2)) CCamera::m_bUseMouse3rdPerson = false; } else CCamera::m_bUseMouse3rdPerson = true; } uchar slot = player->m_nActiveWeaponSlot; if (m_nCurrentWeaponSlot != slot) { auto weapon_type = player->m_aWeapons[slot].m_nType; CWeaponInfo* pweapon_info = CWeaponInfo::GetWeaponInfo(weapon_type, player->GetWeaponSkill(weapon_type)); if (m_bHugeDamage) pweapon_info->m_nDamage = 1000; if (m_bLongRange) { pweapon_info->m_fTargetRange = 1000.0f; pweapon_info->m_fWeaponRange = 1000.0f; pweapon_info->m_fAccuracy = 1.0f; pweapon_info->m_nFlags.bReload2Start = true; } if (m_bRapidFire && weapon_type != WEAPON_MINIGUN) // mingun doesn't work with rapidfire pweapon_info->m_nFlags.bContinuosFire = true; if (m_bDualWeild && (weapon_type == WEAPON_PISTOL || weapon_type == WEAPON_MICRO_UZI || weapon_type == WEAPON_TEC9 || weapon_type == WEAPON_SAWNOFF)) pweapon_info->m_nFlags.bTwinPistol = true; if (m_bMoveAim) pweapon_info->m_nFlags.bMoveAim = true; if (m_bMoveFire) pweapon_info->m_nFlags.bMoveFire = true; m_nCurrentWeaponSlot = slot; } }; } Weapon::~Weapon() { Util::ReleaseTextures(Weapon::m_WeaponData.m_ImagesList); } void Weapon::SetGangWeapon(std::string& weapon_type) { m_nGangWeaponList[m_nSelectedGang][m_nSelectedWeapon] = std::stoi(weapon_type); CGangs::SetGangWeapons(m_nSelectedGang, m_nGangWeaponList[m_nSelectedGang][0], m_nGangWeaponList[m_nSelectedGang][1], m_nGangWeaponList[m_nSelectedGang][2]); } void Weapon::GiveWeaponToPlayer(std::string& weapon_type) { CPlayerPed* player = FindPlayerPed(); int hplayer = CPools::GetPedRef(player); if (weapon_type == "-1") // Jetpack Command(hplayer); else { int iweapon_type = std::stoi(weapon_type); int model = NULL; Command(iweapon_type, &model); CStreaming::RequestModel(model, PRIORITY_REQUEST); if (model == 363) // remote bomb CStreaming::RequestModel(364, PRIORITY_REQUEST); // detonator CStreaming::LoadAllRequestedModels(false); Command(hplayer, iweapon_type, m_nAmmoCount); if (model == 363) // remote bomb Command(364); // detonator Command(model); } } void Weapon::Draw() { CPlayerPed* player = FindPlayerPed(); uint hplayer = CPools::GetPedRef(player); ImGui::Spacing(); if (ImGui::Button("Drop weapon", Ui::GetSize(3))) { float x, y, z; Command(hplayer, 0.0, 3.0, 0.0, &x, &y, &z); auto type = player->m_aWeapons[player->m_nActiveWeaponSlot].m_nType; if (type) { int model = 0, pickup = 0; Command(type, &model); Command(model, 3, 999, x, y, z, &pickup); Command(hplayer, type); } } ImGui::SameLine(); if (ImGui::Button("Remove all", Ui::GetSize(3))) Command(hplayer); ImGui::SameLine(); if (ImGui::Button("Remove current", Ui::GetSize(3))) Command(hplayer, player->m_aWeapons[player->m_nActiveWeaponSlot].m_nType); ImGui::Spacing(); if (ImGui::BeginTabBar("Ped", ImGuiTabBarFlags_NoTooltip + ImGuiTabBarFlags_FittingPolicyScroll)) { if (ImGui::BeginTabItem("Checkboxes")) { ImGui::Spacing(); ImGui::BeginChild("CheckboxesChild"); ImGui::Columns(2, 0, false); Ui::CheckboxWithHint("Fast aim", &m_bAutoAim, "Enables aim assist on keyboard\n\nQ = left E = right\n\nPress Q and E to switch targets.\nMoving mouse removes the target!"); if (Ui::CheckboxWithHint("Dual wield", &m_bDualWeild, "Dual wield pistol, shawoff, uzi, tec9\n(Other weapons don't work)")) { if (!m_bDualWeild) CWeaponInfo::LoadWeaponData(); } if (Ui::CheckboxWithHint("Huge damage", &m_bHugeDamage)) { if (!m_bHugeDamage) CWeaponInfo::LoadWeaponData(); } if (Ui::CheckboxWithHint("Fast reload", &m_bFastReload)) Command(hplayer, m_bFastReload); Ui::CheckboxAddress("Infinite ammo", 0x969178); ImGui::NextColumn(); if (Ui::CheckboxWithHint("Long range", &m_bLongRange)) { if (!m_bLongRange) CWeaponInfo::LoadWeaponData(); } if (Ui::CheckboxWithHint("Move when aiming", &m_bMoveAim)) { if (!m_bMoveAim) CWeaponInfo::LoadWeaponData(); } if (Ui::CheckboxWithHint("Move when firing", &m_bMoveFire)) { if (!m_bMoveFire) CWeaponInfo::LoadWeaponData(); } if (Ui::CheckboxWithHint("Rapid fire", &m_bRapidFire)) { if (!m_bRapidFire) CWeaponInfo::LoadWeaponData(); } ImGui::Columns(1, 0, false); ImGui::EndChild(); ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Gang weapon editor")) { ImGui::Spacing(); Ui::ListBox("Select gang", Ped::m_GangNames, m_nSelectedGang); ImGui::Columns(3, 0, false); ImGui::RadioButton("Weap 1", &m_nSelectedWeapon, 0); ImGui::NextColumn(); ImGui::RadioButton("Weap 2", &m_nSelectedWeapon, 1); ImGui::NextColumn(); ImGui::RadioButton("Weap 3", &m_nSelectedWeapon, 2); ImGui::Columns(1); ImGui::Spacing(); ImGui::Text("Current weapon: %s", m_WeaponData.m_Json.m_Data[std::to_string(m_nGangWeaponList[m_nSelectedGang][m_nSelectedWeapon])].get< std::string>().c_str()); ImGui::Spacing(); Ui::DrawImages(m_WeaponData.m_ImagesList, ImVec2(65, 65), m_WeaponData.m_Categories, m_WeaponData.m_Selected, m_WeaponData.m_Filter, SetGangWeapon, nullptr, [](std::string str) { return m_WeaponData.m_Json.m_Data[str].get(); }, [](std::string str) { return str != "-1"; /*Jetpack*/ } ); ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Spawn")) { ImGui::Spacing(); if (ImGui::InputInt("Ammo", &m_nAmmoCount)) { m_nAmmoCount = (m_nAmmoCount < 0) ? 0 : m_nAmmoCount; m_nAmmoCount = (m_nAmmoCount > 99999) ? 99999 : m_nAmmoCount; } Ui::DrawImages(m_WeaponData.m_ImagesList, ImVec2(65, 65), m_WeaponData.m_Categories, m_WeaponData.m_Selected, m_WeaponData.m_Filter, GiveWeaponToPlayer, nullptr, [](std::string str) { return m_WeaponData.m_Json.m_Data[str].get(); }, [](std::string str) { return str != "0"; /*Unarmed*/ } ); ImGui::EndTabItem(); } ImGui::EndTabBar(); } }