feat(SpecialAmmo): Added special ammo options

- Removed frame flags #108
This commit is contained in:
Yimura 2022-03-16 19:16:52 +01:00
parent 046759a8cc
commit b644c89e1f
No known key found for this signature in database
GPG Key ID: 3D8FF4397E768682
8 changed files with 83 additions and 88 deletions

View File

@ -40,7 +40,6 @@ namespace big
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
looped::self_clean_player(); looped::self_clean_player();
looped::self_frame_flags();
looped::self_free_cam(); looped::self_free_cam();
looped::self_godmode(); looped::self_godmode();
looped::self_invisibility(); looped::self_invisibility();
@ -63,6 +62,7 @@ namespace big
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
looped::weapons_ammo_special_type();
looped::weapons_cage_gun(); looped::weapons_cage_gun();
looped::weapons_delete_gun(); looped::weapons_delete_gun();
looped::weapons_force_crosshairs(); looped::weapons_force_crosshairs();

View File

@ -18,7 +18,6 @@ namespace big
static void protections_replay_interface(); static void protections_replay_interface();
static void self_clean_player(); static void self_clean_player();
static void self_frame_flags();
static void self_free_cam(); static void self_free_cam();
static void self_godmode(); static void self_godmode();
static void self_invisibility(); static void self_invisibility();
@ -39,6 +38,7 @@ namespace big
static void vehicle_ls_customs(); static void vehicle_ls_customs();
static void vehicle_speedo_meter(); static void vehicle_speedo_meter();
static void weapons_ammo_special_type();
static void weapons_cage_gun(); static void weapons_cage_gun();
static void weapons_delete_gun(); static void weapons_delete_gun();
static void weapons_force_crosshairs(); static void weapons_force_crosshairs();

View File

@ -1,32 +0,0 @@
#include "backend/looped/looped.hpp"
#include "core/enums.hpp"
namespace big
{
enum eFrameFlags : std::uint32_t
{
eFrameFlagExplosiveAmmo = 1 << 11,
eFrameFlagFireAmmo = 1 << 12,
eFrameFlagExplosiveMelee = 1 << 13,
eFrameFlagSuperJump = 1 << 14,
};
void looped::self_frame_flags()
{
if (g_local_player == nullptr || g_local_player->m_player_info == nullptr) return;
uint32_t& flags = g_local_player->m_player_info->m_frame_flags;
if (g->self.frame_flags.explosive_ammo)
flags |= eFrameFlagExplosiveAmmo;
if (g->self.frame_flags.explosive_melee)
flags |= eFrameFlagExplosiveMelee;
if (g->self.frame_flags.fire_ammo)
flags |= eFrameFlagFireAmmo;
if (g->self.frame_flags.super_jump)
flags |= eFrameFlagSuperJump;
}
}

View File

@ -0,0 +1,21 @@
#include "backend/looped/looped.hpp"
namespace big
{
static bool bLastState = false;
void looped::weapons_ammo_special_type()
{
if (g_local_player == nullptr ||
g_local_player->m_weapon_manager == nullptr ||
g_local_player->m_weapon_manager->m_weapon_info == nullptr ||
g_local_player->m_weapon_manager->m_weapon_info->m_ammo_info == nullptr)
return;
if (g->weapons.ammo_special.toggle)
g_local_player->m_weapon_manager->m_weapon_info->m_ammo_info->m_ammo_special_type = g->weapons.ammo_special.type;
else if (bLastState)
g_local_player->m_weapon_manager->m_weapon_info->m_ammo_info->m_ammo_special_type = eAmmoSpecialType::None;
bLastState = g->weapons.ammo_special.toggle;
}
}

View File

@ -0,0 +1,18 @@
#pragma once
#include "CAmmoInfo.hpp"
struct SpecialAmmo
{
char name[32];
eAmmoSpecialType type;
};
constexpr std::array<SpecialAmmo, 7> SPECIAL_AMMOS = {{
{ "No Special Ammo", eAmmoSpecialType::None },
{ "Armor Piercing Ammo", eAmmoSpecialType::ArmorPiercing },
{ "Explosive Ammo", eAmmoSpecialType::Explosive },
{ "Full Metal Jacket Ammo",eAmmoSpecialType::FMJ },
{ "Hollow Point Ammo", eAmmoSpecialType::HollowPoint },
{ "Incendiary Ammo", eAmmoSpecialType::Incendiary },
{ "Tracer Ammo", eAmmoSpecialType::Tracer },
}};

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "CAmmoInfo.hpp"
#include "enums.hpp" #include "enums.hpp"
#include "file_manager.hpp" #include "file_manager.hpp"
#include "imgui.h" #include "imgui.h"
@ -57,13 +58,6 @@ namespace big
}; };
struct self { struct self {
struct frame_flags {
bool explosive_ammo = false;
bool explosive_melee = false;
bool fire_ammo = false;
bool super_jump = false;
};
bool clean_player = false; bool clean_player = false;
bool force_wanted_level = false; bool force_wanted_level = false;
bool free_cam = false; bool free_cam = false;
@ -75,8 +69,6 @@ namespace big
bool off_radar = false; bool off_radar = false;
bool super_run = false; bool super_run = false;
int wanted_level = 0; int wanted_level = 0;
frame_flags frame_flags{};
}; };
struct settings { struct settings {
@ -127,6 +119,12 @@ namespace big
}; };
struct weapons { struct weapons {
struct ammo_special
{
bool toggle = false;
eAmmoSpecialType type = eAmmoSpecialType::None;
} ammo_special;
CustomWeapon custom_weapon = CustomWeapon::NONE; CustomWeapon custom_weapon = CustomWeapon::NONE;
bool force_crosshairs = false; bool force_crosshairs = false;
bool infinite_ammo = false; bool infinite_ammo = false;
@ -234,11 +232,6 @@ namespace big
this->self.off_radar = j["self"]["off_radar"]; this->self.off_radar = j["self"]["off_radar"];
this->self.super_run = j["self"]["super_run"]; this->self.super_run = j["self"]["super_run"];
this->self.frame_flags.explosive_ammo = j["self"]["frame_flags"]["explosive_ammo"];
this->self.frame_flags.explosive_melee = j["self"]["frame_flags"]["explosive_melee"];
this->self.frame_flags.fire_ammo = j["self"]["frame_flags"]["fire_ammo"];
this->self.frame_flags.super_jump = j["self"]["frame_flags"]["super_jump"];
this->settings.hotkeys.menu_toggle = j["settings"]["hotkeys"]["menu_toggle"]; this->settings.hotkeys.menu_toggle = j["settings"]["hotkeys"]["menu_toggle"];
this->spawn.preview_vehicle = j["spawn"]["preview_vehicle"]; this->spawn.preview_vehicle = j["spawn"]["preview_vehicle"];
@ -271,6 +264,9 @@ namespace big
this->weapons.no_recoil = j["weapons"]["no_recoil"]; this->weapons.no_recoil = j["weapons"]["no_recoil"];
this->weapons.no_spread = j["weapons"]["no_spread"]; this->weapons.no_spread = j["weapons"]["no_spread"];
this->weapons.ammo_special.type = (eAmmoSpecialType)j["weapons"]["ammo_special"]["type"];
this->weapons.ammo_special.toggle = j["weapons"]["ammo_special"]["toggle"];
this->window.debug = j["window"]["debug"]; this->window.debug = j["window"]["debug"];
this->window.handling = j["window"]["handling"]; this->window.handling = j["window"]["handling"];
this->window.log = j["window"]["log"]; this->window.log = j["window"]["log"];
@ -345,16 +341,7 @@ namespace big
{ "never_wanted", this->self.never_wanted }, { "never_wanted", this->self.never_wanted },
{ "no_ragdoll", this->self.no_ragdoll }, { "no_ragdoll", this->self.no_ragdoll },
{ "off_radar", this->self.off_radar }, { "off_radar", this->self.off_radar },
{ "super_run", this->self.super_run }, { "super_run", this->self.super_run }
{
"frame_flags", {
{ "explosive_ammo", this->self.frame_flags.explosive_ammo },
{ "explosive_melee", this->self.frame_flags.explosive_melee },
{ "fire_ammo", this->self.frame_flags.fire_ammo },
{ "super_jump", this->self.frame_flags.super_jump }
}
}
} }
}, },
{ {
@ -404,6 +391,12 @@ namespace big
}, },
{ {
"weapons", { "weapons", {
{ "ammo_special", {
{ "toggle", this->weapons.ammo_special.toggle },
{ "type", (int)this->weapons.ammo_special.type },
}
},
{ "custom_weapon", (int)this->weapons.custom_weapon }, { "custom_weapon", (int)this->weapons.custom_weapon },
{ "force_crosshairs", this->weapons.force_crosshairs }, { "force_crosshairs", this->weapons.force_crosshairs },
{ "increased_damage", this->weapons.increased_damage }, { "increased_damage", this->weapons.increased_damage },

View File

@ -47,25 +47,6 @@ namespace big
ImGui::TreePop(); ImGui::TreePop();
} }
if (ImGui::TreeNode("Frame Flags"))
{
ImGui::BeginGroup();
ImGui::Checkbox("Explosive Ammo", &g->self.frame_flags.explosive_ammo);
ImGui::Checkbox("Fire Ammo", &g->self.frame_flags.fire_ammo);
ImGui::EndGroup();
ImGui::SameLine();
ImGui::BeginGroup();
ImGui::Checkbox("Explosive Melee", &g->self.frame_flags.explosive_melee);
ImGui::Checkbox("Super Jump", &g->self.frame_flags.super_jump);
ImGui::EndGroup();
ImGui::TreePop();
}
if (ImGui::TreeNode("Player Model")) if (ImGui::TreeNode("Player Model"))
{ {
static char model[32]; static char model[32];

View File

@ -2,6 +2,7 @@
#include "fiber_pool.hpp" #include "fiber_pool.hpp"
#include "gta/Weapons.h" #include "gta/Weapons.h"
#include "script.hpp" #include "script.hpp"
#include "core/data/special_ammo_types.hpp"
#include "views/view.hpp" #include "views/view.hpp"
namespace big namespace big
@ -46,7 +47,30 @@ namespace big
ImGui::TreePop(); ImGui::TreePop();
} }
if (ImGui::TreeNode("Ammo Special"))
{
ImGui::Checkbox("Enable Special Ammo", &g->weapons.ammo_special.toggle);
eAmmoSpecialType selected = g->weapons.ammo_special.type;
if (ImGui::BeginCombo("Ammo Special", SPECIAL_AMMOS[(int)selected].name))
{
for (const auto& special_ammo : SPECIAL_AMMOS)
{
if (ImGui::Selectable(special_ammo.name, special_ammo.type == selected))
g->weapons.ammo_special.type = special_ammo.type;
if (special_ammo.type == selected)
ImGui::SetItemDefaultFocus();
}
ImGui::EndCombo();
}
ImGui::TreePop();
}
if (ImGui::TreeNode("Custom Weapons")) if (ImGui::TreeNode("Custom Weapons"))
{ {
CustomWeapon selected = g->weapons.custom_weapon; CustomWeapon selected = g->weapons.custom_weapon;
@ -69,16 +93,6 @@ namespace big
switch (selected) switch (selected)
{ {
case CustomWeapon::NONE:
break;
case CustomWeapon::CAGE_GUN:
break;
case CustomWeapon::DELETE_GUN:
break;
case CustomWeapon::GRAVITY_GUN:
break;
case CustomWeapon::REPAIR_GUN:
break;
case CustomWeapon::VEHICLE_GUN: case CustomWeapon::VEHICLE_GUN:
ImGui::Text("Shooting Model:"); ImGui::Text("Shooting Model:");
ImGui::InputText("##vehicle_gun_model", g->weapons.vehicle_gun_model, 12); ImGui::InputText("##vehicle_gun_model", g->weapons.vehicle_gun_model, 12);