feat(Vehicle): Added option to override vehicle weapons. (#2081)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
+25
-1
@@ -10,6 +10,7 @@
|
||||
#include <rage/rlSessionInfo.hpp>
|
||||
#include <weapon/CAmmoInfo.hpp>
|
||||
#include <weapon/CWeaponInfo.hpp>
|
||||
#include <weapon/CAmmoRocketInfo.hpp>
|
||||
|
||||
#define IMGUI_DEFINE_MATH_OPERATORS
|
||||
#include <imgui.h>
|
||||
@@ -717,7 +718,30 @@ namespace big
|
||||
bool siren_mute = false;
|
||||
bool all_vehs_in_heists = false;
|
||||
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(vehicle, speedo_meter, fly, rainbow_paint, speed_unit, god_mode, proof_bullet, proof_fire, proof_collision, proof_melee, proof_explosion, proof_steam, proof_water, proof_mask, auto_drive_destination, auto_drive_style, auto_drive_speed, auto_turn_signals, boost_behavior, drive_on_water, horn_boost, instant_brake, block_homing, seatbelt, turn_signals, vehicle_jump, keep_vehicle_repaired, no_water_collision, disable_engine_auto_start, change_engine_state_immediately, keep_engine_running, keep_vehicle_clean, vehinvisibility, localveh_visibility, keep_on_ground, no_collision, unlimited_weapons, siren_mute, all_vehs_in_heists)
|
||||
struct vehicle_ammo_special
|
||||
{
|
||||
bool enabled = false;
|
||||
eAmmoSpecialType type = eAmmoSpecialType::None;
|
||||
eExplosionTag explosion_tag = eExplosionTag::EXP_TAG_ROGUE_CANNON;
|
||||
float speed = 2000;
|
||||
float time_between_shots = 0.04;
|
||||
float alternate_wait_time = -1;
|
||||
float weapon_range = 250;
|
||||
float rocket_time_between_shots = 0.66;
|
||||
float rocket_alternate_wait_time = 0.66;
|
||||
float rocket_lock_on_range = 500;
|
||||
float rocket_range = 1000;
|
||||
float rocket_reload_time = -1;
|
||||
eExplosionTag rocket_explosion_tag = eExplosionTag::TANKSHELL;
|
||||
float rocket_lifetime = 15;
|
||||
float rocket_launch_speed = 1200;
|
||||
float rocket_time_before_homing = 0.75;
|
||||
bool rocket_improve_tracking = true;
|
||||
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(vehicle_ammo_special, enabled, type, explosion_tag, speed, time_between_shots, alternate_wait_time, weapon_range, rocket_time_between_shots, rocket_alternate_wait_time, rocket_lock_on_range, rocket_range, rocket_reload_time, rocket_explosion_tag, rocket_lifetime, rocket_launch_speed, rocket_time_before_homing, rocket_improve_tracking)
|
||||
} vehicle_ammo_special{};
|
||||
|
||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(vehicle, speedo_meter, fly, rainbow_paint, speed_unit, god_mode, proof_bullet, proof_fire, proof_collision, proof_melee, proof_explosion, proof_steam, proof_water, proof_mask, auto_drive_destination, auto_drive_style, auto_drive_speed, auto_turn_signals, boost_behavior, drive_on_water, horn_boost, instant_brake, block_homing, seatbelt, turn_signals, vehicle_jump, keep_vehicle_repaired, no_water_collision, disable_engine_auto_start, change_engine_state_immediately, keep_engine_running, keep_vehicle_clean, vehinvisibility, localveh_visibility, keep_on_ground, no_collision, unlimited_weapons, siren_mute, all_vehs_in_heists, vehicle_ammo_special)
|
||||
} vehicle{};
|
||||
|
||||
struct weapons
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "core/data/bullet_impact_types.hpp"
|
||||
#include "core/data/special_ammo_types.hpp"
|
||||
#include "core/data/speed_units.hpp"
|
||||
#include "core/enums.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
@@ -144,7 +146,7 @@ namespace big
|
||||
{
|
||||
ImGui::Text("KEEP_VEHICLE_CLEAN"_T.data());
|
||||
}
|
||||
else if (g.vehicle.keep_vehicle_repaired)
|
||||
else if (g.vehicle.keep_vehicle_repaired)
|
||||
{
|
||||
ImGui::Text("KEEP_VEHICLE_REPAIRED"_T.data());
|
||||
}
|
||||
@@ -246,5 +248,104 @@ namespace big
|
||||
g.vehicle.fly.speed = vehicle::speed_to_mps(fly_speed_user_unit, g.vehicle.speed_unit);
|
||||
}
|
||||
}
|
||||
ImGui::SeparatorText("CUSTOM_VEH_WEAPONS"_T.data());
|
||||
{
|
||||
components::command_checkbox<"customvehweaps">(std::format("{}##customvehweaps", "ENABLED"_T));
|
||||
components::options_modal("CUSTOM_VEH_WEAPONS"_T.data(), [] {
|
||||
eAmmoSpecialType selected_ammo = g.vehicle.vehicle_ammo_special.type;
|
||||
eExplosionTag selected_explosion = g.vehicle.vehicle_ammo_special.explosion_tag;
|
||||
eExplosionTag selected_rocket_explosion = g.vehicle.vehicle_ammo_special.rocket_explosion_tag;
|
||||
|
||||
ImGui::BeginGroup();
|
||||
components::sub_title("CUSTOM_VEH_WEAPONS_MG"_T.data());
|
||||
if (ImGui::BeginCombo("SPECIAL_AMMO"_T.data(), SPECIAL_AMMOS[(int)selected_ammo].name))
|
||||
{
|
||||
for (const auto& special_ammo : SPECIAL_AMMOS)
|
||||
{
|
||||
if (ImGui::Selectable(special_ammo.name, special_ammo.type == selected_ammo))
|
||||
{
|
||||
g.vehicle.vehicle_ammo_special.type = special_ammo.type;
|
||||
}
|
||||
|
||||
if (special_ammo.type == selected_ammo)
|
||||
{
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
if (ImGui::BeginCombo("BULLET_IMPACT"_T.data(), BULLET_IMPACTS[selected_explosion]))
|
||||
{
|
||||
for (const auto& [type, name] : BULLET_IMPACTS)
|
||||
{
|
||||
if (ImGui::Selectable(name, type == selected_explosion))
|
||||
{
|
||||
g.vehicle.vehicle_ammo_special.explosion_tag = type;
|
||||
}
|
||||
|
||||
if (type == selected_explosion)
|
||||
{
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_SPEED"_T.data(), &g.vehicle.vehicle_ammo_special.speed, 10, 100, "%.1f");
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_RANGE"_T.data(), &g.vehicle.vehicle_ammo_special.weapon_range, 50, 100, "%.1f");
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_TBS"_T.data(), &g.vehicle.vehicle_ammo_special.time_between_shots, 0.001, 0.1, "%.3f");
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("CUSTOM_VEH_WEAPONS_TBS_DESC"_T.data());
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_AWT"_T.data(), &g.vehicle.vehicle_ammo_special.alternate_wait_time, 0.001, 0.1, "%.3f");
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("CUSTOM_VEH_WEAPONS_AWT_DESC"_T.data());
|
||||
ImGui::EndGroup();
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginGroup();
|
||||
components::sub_title("CUSTOM_VEH_WEAPONS_MISSILE"_T.data());
|
||||
if (ImGui::BeginCombo(std::format("{}##customvehweaps", "EXPLOSION"_T).data(), BULLET_IMPACTS[selected_rocket_explosion]))
|
||||
{
|
||||
for (const auto& [type, name] : BULLET_IMPACTS)
|
||||
{
|
||||
if (ImGui::Selectable(name, type == selected_rocket_explosion))
|
||||
{
|
||||
g.vehicle.vehicle_ammo_special.rocket_explosion_tag = type;
|
||||
}
|
||||
|
||||
if (type == selected_rocket_explosion)
|
||||
{
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_RELOAD_TIME"_T.data(), &g.vehicle.vehicle_ammo_special.rocket_reload_time, 0.1, 1, "%.1f");
|
||||
ImGui::InputFloat(std::format("{}##rocket", "CUSTOM_VEH_WEAPONS_SPEED"_T).data(),
|
||||
&g.vehicle.vehicle_ammo_special.rocket_launch_speed, 10, 100, "%.1f");
|
||||
ImGui::InputFloat(std::format("{}##rocket", "CUSTOM_VEH_WEAPONS_RANGE"_T).data(),
|
||||
&g.vehicle.vehicle_ammo_special.rocket_range, 50, 100, "%.1f");
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_LOCKON_RANGE"_T.data(), &g.vehicle.vehicle_ammo_special.rocket_lock_on_range, 50, 100, "%.1f");
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_LOCKON_TIME"_T.data(), &g.vehicle.vehicle_ammo_special.rocket_time_before_homing, 0.01, 0.1, "%.2f");
|
||||
ImGui::InputFloat(std::format("{}##rocket", "CUSTOM_VEH_WEAPONS_TBS"_T).data(),
|
||||
&g.vehicle.vehicle_ammo_special.rocket_time_between_shots, 0.001, 0.1, "%.3f");
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("CUSTOM_VEH_WEAPONS_TBS_DESC"_T.data());
|
||||
ImGui::InputFloat(std::format("{}##rocket", "CUSTOM_VEH_WEAPONS_AWT"_T).data(),
|
||||
&g.vehicle.vehicle_ammo_special.rocket_alternate_wait_time, 0.001, 0.1, "%.3f");
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("CUSTOM_VEH_WEAPONS_AWT_DESC"_T.data());
|
||||
ImGui::InputFloat("CUSTOM_VEH_WEAPONS_LIFETIME"_T.data(), &g.vehicle.vehicle_ammo_special.rocket_lifetime, 0.1, 1, "%.1f");
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("CUSTOM_VEH_WEAPONS_LIFETIME_DESC"_T.data());
|
||||
ImGui::Checkbox("CUSTOM_VEH_WEAPONS_SMART_MISSILE"_T.data(), &g.vehicle.vehicle_ammo_special.rocket_improve_tracking);
|
||||
if (ImGui::IsItemHovered())
|
||||
ImGui::SetTooltip("CUSTOM_VEH_WEAPONS_SMART_MISSILE_DESC"_T.data());
|
||||
ImGui::EndGroup();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user