2022-05-04 19:16:40 +02:00
|
|
|
#include "core/data/custom_weapons.hpp"
|
|
|
|
#include "fiber_pool.hpp"
|
2022-06-30 00:11:54 +02:00
|
|
|
#include "natives.hpp"
|
2022-05-04 19:16:40 +02:00
|
|
|
#include "core/data/special_ammo_types.hpp"
|
2022-07-06 04:55:18 +08:00
|
|
|
#include "core/data/bullet_impact_types.hpp"
|
2022-07-29 19:51:19 +08:00
|
|
|
#include "services/gta_data/gta_data_service.hpp"
|
|
|
|
#include "gta/joaat.hpp"
|
2022-05-04 19:16:40 +02:00
|
|
|
#include "views/view.hpp"
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
|
|
|
void view::weapons() {
|
2022-08-10 08:42:34 +08:00
|
|
|
components::sub_title("Ammo");
|
2022-05-04 19:16:40 +02:00
|
|
|
ImGui::Checkbox("Infinite Ammo", &g->weapons.infinite_ammo);
|
|
|
|
|
|
|
|
ImGui::SameLine();
|
|
|
|
|
|
|
|
ImGui::Checkbox("Infinite Clip", &g->weapons.infinite_mag);
|
|
|
|
|
|
|
|
ImGui::Checkbox("Enable Special Ammo", &g->weapons.ammo_special.toggle);
|
|
|
|
|
|
|
|
eAmmoSpecialType selected_ammo = g->weapons.ammo_special.type;
|
2022-09-30 22:38:56 +02:00
|
|
|
eExplosionTag selected_explosion = g->weapons.ammo_special.explosion_tag;
|
2022-05-04 19:16:40 +02:00
|
|
|
|
2022-05-23 06:38:45 +08:00
|
|
|
if (ImGui::BeginCombo("Special Ammo", SPECIAL_AMMOS[(int)selected_ammo].name))
|
2022-05-04 19:16:40 +02:00
|
|
|
{
|
|
|
|
for (const auto& special_ammo : SPECIAL_AMMOS)
|
|
|
|
{
|
|
|
|
if (ImGui::Selectable(special_ammo.name, special_ammo.type == selected_ammo))
|
2022-07-29 19:51:19 +08:00
|
|
|
{
|
2022-05-04 19:16:40 +02:00
|
|
|
g->weapons.ammo_special.type = special_ammo.type;
|
2022-07-29 19:51:19 +08:00
|
|
|
}
|
2022-05-04 19:16:40 +02:00
|
|
|
|
|
|
|
if (special_ammo.type == selected_ammo)
|
2022-07-29 19:51:19 +08:00
|
|
|
{
|
2022-05-04 19:16:40 +02:00
|
|
|
ImGui::SetItemDefaultFocus();
|
2022-07-29 19:51:19 +08:00
|
|
|
}
|
2022-05-04 19:16:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
|
2022-09-30 22:38:56 +02:00
|
|
|
if (ImGui::BeginCombo("Bullet Impact", BULLET_IMPACTS[selected_explosion]))
|
2022-07-06 04:55:18 +08:00
|
|
|
{
|
|
|
|
for (const auto& [type, name] : BULLET_IMPACTS)
|
|
|
|
{
|
2022-09-30 22:38:56 +02:00
|
|
|
if (ImGui::Selectable(name, type == selected_explosion))
|
2022-07-29 19:51:19 +08:00
|
|
|
{
|
2022-09-30 22:38:56 +02:00
|
|
|
g->weapons.ammo_special.explosion_tag = type;
|
2022-07-29 19:51:19 +08:00
|
|
|
}
|
2022-07-06 04:55:18 +08:00
|
|
|
|
2022-09-30 22:38:56 +02:00
|
|
|
if (type == selected_explosion)
|
2022-07-29 19:51:19 +08:00
|
|
|
{
|
2022-07-06 04:55:18 +08:00
|
|
|
ImGui::SetItemDefaultFocus();
|
2022-07-29 19:51:19 +08:00
|
|
|
}
|
2022-07-06 04:55:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
|
2022-05-04 19:16:40 +02:00
|
|
|
ImGui::Separator();
|
|
|
|
|
2022-08-10 08:42:34 +08:00
|
|
|
components::sub_title("Misc");
|
2022-05-04 19:16:40 +02:00
|
|
|
|
|
|
|
ImGui::Checkbox("Force Crosshairs", &g->weapons.force_crosshairs);
|
|
|
|
|
|
|
|
ImGui::SameLine();
|
|
|
|
|
|
|
|
ImGui::Checkbox("No Recoil", &g->weapons.no_recoil);
|
|
|
|
|
|
|
|
ImGui::SameLine();
|
|
|
|
|
|
|
|
ImGui::Checkbox("No Spread", &g->weapons.no_spread);
|
|
|
|
|
2022-05-23 06:38:45 +08:00
|
|
|
components::button("Get All Weapons", [] {
|
2022-07-29 19:51:19 +08:00
|
|
|
for (auto const& weapon : g_gta_data_service->get_weapon_arr())
|
|
|
|
{
|
|
|
|
WEAPON::GIVE_DELAYED_WEAPON_TO_PED(self::ped, weapon.hash, 9999, false);
|
2022-05-04 19:16:40 +02:00
|
|
|
}
|
2022-07-29 19:51:19 +08:00
|
|
|
|
|
|
|
constexpr auto parachute_hash = RAGE_JOAAT("GADGET_PARACHUTE");
|
|
|
|
WEAPON::GIVE_DELAYED_WEAPON_TO_PED(self::ped, parachute_hash, 0, true);
|
2022-09-30 22:38:56 +02:00
|
|
|
});
|
2022-05-23 06:38:45 +08:00
|
|
|
ImGui::SameLine();
|
|
|
|
components::button("Remove Current Weapon", [] {
|
|
|
|
Hash weaponHash;
|
|
|
|
WEAPON::GET_CURRENT_PED_WEAPON(self::ped, &weaponHash, 1);
|
2022-07-29 19:51:19 +08:00
|
|
|
if (weaponHash != RAGE_JOAAT("WEAPON_UNARMED"))
|
|
|
|
{
|
2022-05-23 06:38:45 +08:00
|
|
|
WEAPON::REMOVE_WEAPON_FROM_PED(self::ped, weaponHash);
|
|
|
|
}
|
2022-09-30 22:38:56 +02:00
|
|
|
});
|
2022-05-04 19:16:40 +02:00
|
|
|
|
|
|
|
ImGui::SliderFloat("Damage Multiplier", &g->weapons.increased_damage, 1.f, 10.f, "%.1f");
|
|
|
|
|
|
|
|
ImGui::Separator();
|
|
|
|
|
2022-08-10 08:42:34 +08:00
|
|
|
components::sub_title("Custom Weapons");
|
2022-05-04 19:16:40 +02:00
|
|
|
|
|
|
|
CustomWeapon selected = g->weapons.custom_weapon;
|
|
|
|
|
|
|
|
if (ImGui::BeginCombo("Weapon", custom_weapons[(int)selected].name))
|
|
|
|
{
|
|
|
|
for (const custom_weapon& weapon : custom_weapons)
|
|
|
|
{
|
|
|
|
if (ImGui::Selectable(weapon.name, weapon.id == selected))
|
|
|
|
{
|
|
|
|
g->weapons.custom_weapon = weapon.id;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (weapon.id == selected)
|
2022-07-29 19:51:19 +08:00
|
|
|
{
|
2022-05-04 19:16:40 +02:00
|
|
|
ImGui::SetItemDefaultFocus();
|
2022-07-29 19:51:19 +08:00
|
|
|
}
|
2022-05-04 19:16:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::EndCombo();
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (selected)
|
|
|
|
{
|
|
|
|
case CustomWeapon::VEHICLE_GUN:
|
2022-06-27 15:59:25 +02:00
|
|
|
components::input_text_with_hint(
|
|
|
|
"Shooting Model",
|
|
|
|
"Name of the vehicle model",
|
2022-07-29 19:51:19 +08:00
|
|
|
g->weapons.vehicle_gun_model, sizeof(g->weapons.vehicle_gun_model)
|
|
|
|
);
|
2022-05-04 19:16:40 +02:00
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2022-06-27 15:59:25 +02:00
|
|
|
}
|