refactor(Restructure): Moved everything to their own class/struct to improve compile times and cleanup the code.

This commit is contained in:
Yimura 2021-02-05 02:38:56 +01:00
parent 8c9a829ef4
commit c6c7fbd90f
No known key found for this signature in database
GPG Key ID: 3D8FF4397E768682
72 changed files with 721 additions and 451 deletions

View File

@ -49,9 +49,13 @@
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include "logger.hpp" #include "logger.hpp"
#include "settings.h" #include "settings.h"
#include "gta/ped_factory.hpp"
#include "structs/lists.hpp"
#include "structs/player.hpp"
#include "structs/temp.hpp"
namespace big namespace big
{ {
using namespace std::chrono_literals; using namespace std::chrono_literals;
@ -63,4 +67,16 @@ namespace big
inline HANDLE g_main_thread{}; inline HANDLE g_main_thread{};
inline DWORD g_main_thread_id{}; inline DWORD g_main_thread_id{};
inline std::atomic_bool g_running{ true }; inline std::atomic_bool g_running{ true };
// Global Variables
inline player g_player;
inline player g_selectedPlayer;
inline std::unordered_map<Player, player> g_players;
inline CAutomobile* g_vehicle;
inline temp g_temp = temp{};
// screen width and height
inline int x, y;
} }

View File

@ -1,54 +1,41 @@
#include "features.hpp" #include "features.hpp"
#include "logger.hpp" #include "features/custom_guns.hpp"
#include "natives.hpp" #include "features/protections.hpp"
#include "features/self.hpp"
#include "features/sys.hpp"
#include "features/tunables.hpp"
#include "features/util.hpp"
#include "features/vehicle.hpp"
#include "features/world.hpp"
#include "script.hpp" #include "script.hpp"
namespace big namespace big
{ {
void features::run_tick() void features::run_tick()
{ {
g_playerId = PLAYER::PLAYER_ID();
// System // System
update_player_structs(); sys::loop();
update_screen_sizes();
// Custom Guns // Custom Guns
cage_gun(); custom_guns::loop();
delete_gun();
gravity_gun();
money_gun();
repair_gun();
vehicle_gun();
// Tunable
disable_phone();
no_idle_kick();
// Self
god_mode();
never_wanted();
noclip();
no_ragdoll();
off_radar();
super_sprint();
spoof_rank();
// Vehicle
handling();
no_bike_fall();
speedo_meter();
sticky_tyres();
// World
population_modifiers();
// Util
spectate_player();
// Protections // Protections
replay_interface(); protections::loop();
//version_mismatch();
// Self
self::loop();
// Tunable
tunables::loop();
// Util
util::loop();
// Vehicle
vehicle::loop();
// World
world::loop();
} }
void features::script_func() void features::script_func()

View File

@ -1,69 +1,11 @@
#pragma once #pragma once
#include "common.hpp" #include "common.hpp"
#include "fiber_pool.hpp"
#include "gta/joaat.hpp"
#include "structs/lists.hpp"
#include "structs/player.hpp"
#include "structs/temp.hpp"
#include "features/functions.hpp"
#include "features/notify.hpp"
#include "features/stats.hpp"
#include "features/teleport.hpp"
#include "gta/ped_factory.hpp"
namespace big namespace big
{ {
inline Player g_playerId;
inline Player g_selectedPlayerId;
inline player g_currentPlayer;
inline player g_selectedPlayer;
inline player g_players[32];
// Temporary Variable struct
inline temp g_temp = temp{};
inline CAutomobile* g_vehicle;
inline bool g_in_vehicle = false;
inline bool g_handling_window = false;
// Screen Width & Height
inline int x, y;
namespace features namespace features
{ {
void run_tick(); void run_tick();
void script_func(); void script_func();
void cage_gun();
void delete_gun();
void gravity_gun();
void money_gun();
void repair_gun();
void vehicle_gun();
void replay_interface();
void version_mismatch();
void disable_phone();
void god_mode();
void never_wanted();
void noclip();
void no_bike_fall();
void no_idle_kick();
void no_ragdoll();
void off_radar();
void population_modifiers();
void spectate_player();
void speedo_meter();
void spoof_rank();
void sticky_tyres();
void super_sprint();
void handling();
void update_screen_sizes();
void update_player_structs();
} }
} }

View File

@ -0,0 +1,26 @@
#include "custom_guns.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void custom_guns::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
cage_gun();
delete_gun();
gravity_gun();
money_gun();
repair_gun();
vehicle_gun();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,25 @@
#pragma once
#include "common.hpp"
#include "functions.hpp"
#include "gta/joaat.hpp"
#include "natives.hpp"
namespace big
{
class custom_guns
{
public:
static void loop();
private:
static void cage_gun();
static void delete_gun();
static void gravity_gun();
static void money_gun();
static void repair_gun();
static void vehicle_gun();
};
}

View File

@ -1,9 +1,9 @@
#include "functions.hpp" #include "functions.hpp"
#include "features.hpp"
#include "gta/joaat.hpp" #include "gta/joaat.hpp"
#include "gta/levels.hpp" #include "gta/levels.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "natives.hpp" #include "natives.hpp"
#include "notify.hpp"
#include "script.hpp" #include "script.hpp"
#include "script_global.hpp" #include "script_global.hpp"
@ -194,7 +194,7 @@ namespace big
} }
if (!STREAMING::HAS_MODEL_LOADED(hash)) if (!STREAMING::HAS_MODEL_LOADED(hash))
{ {
features::notify::above_map("~r~Failed to spawn model, did you give an incorrect model?"); notify::above_map("~r~Failed to spawn model, did you give an incorrect model?");
return -1; return -1;
} }

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "common.hpp"
#include "structs/session_type.hpp" #include "structs/session_type.hpp"
namespace big namespace big

View File

@ -1,23 +1,24 @@
#include "features.hpp" #include "features/custom_guns.hpp"
#include "features/notify.hpp"
namespace big namespace big
{ {
static const int controls[] = { 14, 15, 24 }; static const int controls[] = { 14, 15, 24 };
void features::cage_gun() void custom_guns::cage_gun()
{ {
bool bCageGun = g_settings.options["custom_gun"]["type"] == 5; bool bCageGun = g_settings.options["custom_gun"]["type"] == 5;
if (bCageGun) if (bCageGun)
{ {
Hash currWeapon; Hash currWeapon;
WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), &currWeapon, 1); WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), &currWeapon, 1);
if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return; if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return;
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25)) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25))
{ {
PLAYER::DISABLE_PLAYER_FIRING(g_playerId, true); PLAYER::DISABLE_PLAYER_FIRING(g_player.id, true);
for (int control : controls) for (int control : controls)
PAD::DISABLE_CONTROL_ACTION(0, control, true); PAD::DISABLE_CONTROL_ACTION(0, control, true);
@ -32,7 +33,7 @@ namespace big
func::cage_ped(entity); func::cage_ped(entity);
} }
} }
else features::notify::above_map("No entity found."); else notify::above_map("No entity found.");
} }
} }
} }

View File

@ -1,23 +1,24 @@
#include "features.hpp" #include "features/custom_guns.hpp"
#include "features/notify.hpp"
namespace big namespace big
{ {
static const int controls[] = { 14, 15, 24 }; static const int controls[] = { 14, 15, 24 };
void features::delete_gun() void custom_guns::delete_gun()
{ {
bool bDeleteGun = g_settings.options["custom_gun"]["type"] == 1; bool bDeleteGun = g_settings.options["custom_gun"]["type"] == 1;
if (bDeleteGun) if (bDeleteGun)
{ {
Hash currWeapon; Hash currWeapon;
WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), &currWeapon, 1); WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), &currWeapon, 1);
if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return; if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return;
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25)) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25))
{ {
PLAYER::DISABLE_PLAYER_FIRING(g_playerId, true); PLAYER::DISABLE_PLAYER_FIRING(g_player.id, true);
for (int control : controls) for (int control : controls)
PAD::DISABLE_CONTROL_ACTION(0, control, true); PAD::DISABLE_CONTROL_ACTION(0, control, true);
@ -33,7 +34,7 @@ namespace big
} }
else else
{ {
Vector3 player = ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), true); Vector3 player = ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), true);
Vector3 entLoc = ENTITY::GET_ENTITY_COORDS(entity, true); Vector3 entLoc = ENTITY::GET_ENTITY_COORDS(entity, true);
double dist = func::distance_between_vectors(player, entLoc); double dist = func::distance_between_vectors(player, entLoc);
@ -51,7 +52,7 @@ namespace big
} }
} }
} }
else features::notify::above_map("No entity found."); else notify::above_map("No entity found.");
} }
} }
} }

View File

@ -1,4 +1,5 @@
#include "features.hpp" #include "features/custom_guns.hpp"
#include "features/notify.hpp"
namespace big namespace big
{ {
@ -10,7 +11,7 @@ namespace big
static const int scroll = 2; static const int scroll = 2;
static const int controls[] = { 14, 15, 24 }; static const int controls[] = { 14, 15, 24 };
void features::gravity_gun() void custom_guns::gravity_gun()
{ {
bool bGravityGun = g_settings.options["custom_gun"]["type"] == 2; bool bGravityGun = g_settings.options["custom_gun"]["type"] == 2;
double multiplier = g_settings.options["custom_gun"]["gravity_velocity_multiplier"]; double multiplier = g_settings.options["custom_gun"]["gravity_velocity_multiplier"];
@ -18,18 +19,18 @@ namespace big
if (bGravityGun) if (bGravityGun)
{ {
Hash currWeapon; Hash currWeapon;
WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), &currWeapon, 1); WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), &currWeapon, 1);
if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return; if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return;
// ZOOMED IN // ZOOMED IN
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25)) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25))
{ {
PLAYER::DISABLE_PLAYER_FIRING(g_playerId, true); PLAYER::DISABLE_PLAYER_FIRING(g_player.id, true);
for (int control : controls) for (int control : controls)
PAD::DISABLE_CONTROL_ACTION(0, control, true); PAD::DISABLE_CONTROL_ACTION(0, control, true);
location = ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), true); location = ENTITY::GET_ENTITY_COORDS(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), true);
// Attack RELEASED // Attack RELEASED
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 24) && entity == 0) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 24) && entity == 0)
@ -59,7 +60,7 @@ namespace big
if (ENTITY::IS_ENTITY_A_PED(entity) && !PED::IS_PED_RAGDOLL(entity)) TASK::SET_HIGH_FALL_TASK(entity, 0, 0, 0); if (ENTITY::IS_ENTITY_A_PED(entity) && !PED::IS_PED_RAGDOLL(entity)) TASK::SET_HIGH_FALL_TASK(entity, 0, 0, 0);
features::notify::above_map("Selected entity at crosshair."); notify::above_map("Selected entity at crosshair.");
} }
} }
} }
@ -67,7 +68,7 @@ namespace big
{ {
entity = 0; entity = 0;
features::notify::above_map("No entity found."); notify::above_map("No entity found.");
} }
} }
@ -108,7 +109,7 @@ namespace big
entity = 0; entity = 0;
features::notify::above_map("Released entity."); notify::above_map("Released entity.");
} }
} }
} }

View File

@ -1,4 +1,6 @@
#include "features.hpp" #include "features/custom_guns.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big namespace big
{ {
@ -7,13 +9,13 @@ namespace big
static bool busy = false; static bool busy = false;
static Entity entity = 0; static Entity entity = 0;
void features::money_gun() void custom_guns::money_gun()
{ {
bool bMoneyGun = g_settings.options["custom_gun"]["type"] == 3; bool bMoneyGun = g_settings.options["custom_gun"]["type"] == 3;
if (bMoneyGun) if (bMoneyGun)
{ {
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
Hash currWeapon; Hash currWeapon;
WEAPON::GET_CURRENT_PED_WEAPON(player, &currWeapon, 1); WEAPON::GET_CURRENT_PED_WEAPON(player, &currWeapon, 1);
@ -22,7 +24,7 @@ namespace big
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25)) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25))
{ {
PLAYER::DISABLE_PLAYER_FIRING(g_playerId, true); PLAYER::DISABLE_PLAYER_FIRING(g_player.id, true);
for (int control : controls) for (int control : controls)
PAD::DISABLE_CONTROL_ACTION(0, control, true); PAD::DISABLE_CONTROL_ACTION(0, control, true);
@ -30,7 +32,7 @@ namespace big
{ {
busy = true; busy = true;
QUEUE_JOB_BEGIN_CLAUSE(&) g_fiber_pool->queue_job([&]
{ {
if (func::raycast_entity(&entity)) if (func::raycast_entity(&entity))
{ {
@ -49,7 +51,7 @@ namespace big
busy = false; busy = false;
} }
}QUEUE_JOB_END_CLAUSE });
} }
} }
} }

View File

@ -1,23 +1,24 @@
#include "features.hpp" #include "features/custom_guns.hpp"
#include "features/notify.hpp"
namespace big namespace big
{ {
static const int controls[] = { 14, 15, 24 }; static const int controls[] = { 14, 15, 24 };
void features::repair_gun() void custom_guns::repair_gun()
{ {
bool bRepairGun = g_settings.options["custom_gun"]["type"] == 6; bool bRepairGun = g_settings.options["custom_gun"]["type"] == 6;
if (bRepairGun) if (bRepairGun)
{ {
Hash currWeapon; Hash currWeapon;
WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), &currWeapon, 1); WEAPON::GET_CURRENT_PED_WEAPON(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), &currWeapon, 1);
if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return; if (currWeapon != RAGE_JOAAT("weapon_pistol") && currWeapon != RAGE_JOAAT("weapon_pistol_mk2")) return;
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25)) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25))
{ {
PLAYER::DISABLE_PLAYER_FIRING(g_playerId, true); PLAYER::DISABLE_PLAYER_FIRING(g_player.id, true);
for (int control : controls) for (int control : controls)
PAD::DISABLE_CONTROL_ACTION(0, control, true); PAD::DISABLE_CONTROL_ACTION(0, control, true);

View File

@ -1,16 +1,16 @@
#include "features.hpp" #include "features/custom_guns.hpp"
namespace big namespace big
{ {
static const int controls[] = { 14, 15, 24 }; static const int controls[] = { 14, 15, 24 };
void features::vehicle_gun() void custom_guns::vehicle_gun()
{ {
bool bVehicleGun = g_settings.options["custom_gun"]["type"] == 4; bool bVehicleGun = g_settings.options["custom_gun"]["type"] == 4;
if (bVehicleGun) if (bVehicleGun)
{ {
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
Hash currWeapon; Hash currWeapon;
WEAPON::GET_CURRENT_PED_WEAPON(player, &currWeapon, 1); WEAPON::GET_CURRENT_PED_WEAPON(player, &currWeapon, 1);
@ -19,7 +19,7 @@ namespace big
if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25)) if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 25))
{ {
PLAYER::DISABLE_PLAYER_FIRING(g_playerId, true); PLAYER::DISABLE_PLAYER_FIRING(g_player.id, true);
for (int control : controls) for (int control : controls)
PAD::DISABLE_CONTROL_ACTION(0, control, true); PAD::DISABLE_CONTROL_ACTION(0, control, true);
@ -44,8 +44,6 @@ namespace big
velocity.y = dist * sin(yaw) * cos(pitch); velocity.y = dist * sin(yaw) * cos(pitch);
velocity.z = dist * sin(pitch); velocity.z = dist * sin(pitch);
script::get_current()->yield();
ENTITY::SET_ENTITY_ROTATION(veh, rot.x, rot.y, rot.z, 2, 1); ENTITY::SET_ENTITY_ROTATION(veh, rot.x, rot.y, rot.z, 2, 1);
ENTITY::SET_ENTITY_VELOCITY(veh, velocity.x, velocity.y, velocity.z); ENTITY::SET_ENTITY_VELOCITY(veh, velocity.x, velocity.y, velocity.z);
} }

View File

@ -1,10 +1,14 @@
#include "features.hpp" #include "features/protections.hpp"
#include "features/functions.hpp"
#include "gta/joaat.hpp"
#include "gta/replay.hpp" #include "gta/replay.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "natives.hpp"
#include "script.hpp"
namespace big namespace big
{ {
void features::replay_interface() void protections::replay_interface()
{ {
Ped player = PLAYER::PLAYER_PED_ID(); Ped player = PLAYER::PLAYER_PED_ID();
@ -32,6 +36,8 @@ namespace big
if (protections["cage"] && ENTITY::GET_ENTITY_MODEL(ent) == RAGE_JOAAT("prop_gold_cont_01")) if (protections["cage"] && ENTITY::GET_ENTITY_MODEL(ent) == RAGE_JOAAT("prop_gold_cont_01"))
func::delete_entity(ent); func::delete_entity(ent);
script::get_current()->yield();
} }
} }
} }

View File

@ -1,11 +1,11 @@
#include "features.hpp" #include "features/self.hpp"
#include "gta_util.hpp" #include "gta_util.hpp"
namespace big namespace big
{ {
static bool bLastGodMode = false; static bool bLastGodMode = false;
void features::god_mode() void self::god_mode()
{ {
bool bGodMode = g_settings.options["god_mode"].get<bool>(); bool bGodMode = g_settings.options["god_mode"].get<bool>();
@ -15,7 +15,7 @@ namespace big
ped->m_godmode = bGodMode ? 0x1 : 0x0; ped->m_godmode = bGodMode ? 0x1 : 0x0;
//ENTITY::SET_ENTITY_INVINCIBLE(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), bGodMode); //ENTITY::SET_ENTITY_INVINCIBLE(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), bGodMode);
bLastGodMode = bGodMode; bLastGodMode = bGodMode;
} }

View File

@ -1,26 +1,24 @@
#include "features.hpp" #include "features/self.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
static bool bLastNeverWanted = false; static bool bLastNeverWanted = false;
void features::never_wanted() void self::never_wanted()
{ {
QUEUE_JOB_BEGIN_CLAUSE() bool bNeverWanted = g_settings.options["never_wanted"].get<bool>();
if (bNeverWanted && PLAYER::GET_PLAYER_WANTED_LEVEL(g_player.id) > 0)
{ {
bool bNeverWanted = g_settings.options["never_wanted"].get<bool>(); PLAYER::SET_PLAYER_WANTED_LEVEL(g_player.id, 0, true);
PLAYER::SET_MAX_WANTED_LEVEL(0);
}
else if (!bNeverWanted && bNeverWanted != bLastNeverWanted)
{
PLAYER::SET_MAX_WANTED_LEVEL(5);
}
if (bNeverWanted && PLAYER::GET_PLAYER_WANTED_LEVEL(g_playerId) > 0) bLastNeverWanted = bNeverWanted;
{
PLAYER::SET_PLAYER_WANTED_LEVEL(g_playerId, 0, true);
PLAYER::SET_MAX_WANTED_LEVEL(0);
}
else if (!bNeverWanted && bNeverWanted != bLastNeverWanted)
{
PLAYER::SET_MAX_WANTED_LEVEL(5);
}
bLastNeverWanted = bNeverWanted;
}QUEUE_JOB_END_CLAUSE
} }
} }

View File

@ -1,25 +1,23 @@
#include "features.hpp" #include "features/self.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
static bool bLastNoRagdoll = false; static bool bLastNoRagdoll = false;
void features::no_ragdoll() void self::no_ragdoll()
{ {
bool bNoRagdoll = g_settings.options["ragdoll"].get<bool>(); bool bNoRagdoll = g_settings.options["ragdoll"].get<bool>();
if (bNoRagdoll || (!bNoRagdoll && bNoRagdoll != bLastNoRagdoll)) if (bNoRagdoll || (!bNoRagdoll && bNoRagdoll != bLastNoRagdoll))
{ {
QUEUE_JOB_BEGIN_CLAUSE(= ) Ped player = PLAYER::PLAYER_PED_ID();
{
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId);
PED::SET_PED_CAN_RAGDOLL(player, !bNoRagdoll); PED::SET_PED_CAN_RAGDOLL(player, !bNoRagdoll);
PED::SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(player, !bNoRagdoll); PED::SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(player, !bNoRagdoll);
PED::SET_PED_RAGDOLL_ON_COLLISION(player, !bNoRagdoll); PED::SET_PED_RAGDOLL_ON_COLLISION(player, !bNoRagdoll);
}QUEUE_JOB_END_CLAUSE
bLastNoRagdoll = bNoRagdoll; bLastNoRagdoll = bNoRagdoll;
} }
} }
} }

View File

@ -1,4 +1,6 @@
#include "features.hpp" #include "features/self.hpp"
#include "features/functions.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
@ -8,13 +10,13 @@ namespace big
static bool bLastNoClip; static bool bLastNoClip;
void features::noclip() void self::noclip()
{ {
bool bNoclip = g_settings.options["noclip"]["enabled"]; bool bNoclip = g_settings.options["noclip"]["enabled"];
float fHorizontal = g_settings.options["noclip"]["horizontal"]; float fHorizontal = g_settings.options["noclip"]["horizontal"];
float fVertical = g_settings.options["noclip"]["vertical"]; float fVertical = g_settings.options["noclip"]["vertical"];
Entity ent = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Entity ent = PLAYER::PLAYER_PED_ID();
bool inVehicle = PED::IS_PED_IN_ANY_VEHICLE(ent, true); bool inVehicle = PED::IS_PED_IN_ANY_VEHICLE(ent, true);
if (inVehicle) ent = PED::GET_VEHICLE_PED_IS_IN(ent, false); if (inVehicle) ent = PED::GET_VEHICLE_PED_IS_IN(ent, false);

View File

@ -1,20 +1,18 @@
#include "features.hpp" #include "features/self.hpp"
#include "natives.hpp"
#include "script_global.hpp" #include "script_global.hpp"
namespace big namespace big
{ {
void features::off_radar() void self::off_radar()
{ {
if (g_settings.options["off_radar"].get<bool>()) if (g_settings.options["off_radar"].get<bool>())
{ {
QUEUE_JOB_BEGIN_CLAUSE() if (PLAYER::IS_PLAYER_ONLINE())
{ {
if (PLAYER::IS_PLAYER_ONLINE()) *script_global(2425869).at(g_player.id, 443).at(204).as<int*>() = 1;
{ *script_global(2440049).at(70).as<int*>() = NETWORK::GET_NETWORK_TIME() + 999;
*script_global(2425869).at(1 + (g_playerId * 443)).at(204).as<int*>() = 1; }
*script_global(2440049).at(70).as<int*>() = NETWORK::GET_NETWORK_TIME() + 999;
}
}QUEUE_JOB_END_CLAUSE
} }
} }
} }

View File

@ -1,18 +1,14 @@
#include "features.hpp" #include "features/self.hpp"
#include "features/functions.hpp"
#include "script_global.hpp" #include "script_global.hpp"
namespace big namespace big
{ {
void features::spoof_rank() void self::spoof_rank()
{ {
bool bSpoofRank = g_settings.options["spoof_rank"].get<bool>(); bool bSpoofRank = g_settings.options["spoof_rank"].get<bool>();
if (bSpoofRank) if (bSpoofRank)
{ func::spoof_rank(g_settings.options["rank"].get<int>());
QUEUE_JOB_BEGIN_CLAUSE()
{
func::spoof_rank(g_settings.options["rank"].get<int>());
}QUEUE_JOB_END_CLAUSE
}
} }
} }

View File

@ -1,13 +1,14 @@
#include "features.hpp" #include "features/self.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
static bool bLastSuperSprint = false; static bool bLastSuperSprint = false;
static bool bSkyDiving = false; static bool bSkyDiving = false;
void features::super_sprint() void self::super_sprint()
{ {
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
if (PED::IS_PED_IN_ANY_VEHICLE(player, true)) return; if (PED::IS_PED_IN_ANY_VEHICLE(player, true)) return;
@ -15,39 +16,22 @@ namespace big
if (bSuperSprint) if (bSuperSprint)
{ {
float height = ENTITY::GET_ENTITY_HEIGHT_ABOVE_GROUND(player); if (TASK::IS_PED_SPRINTING(player))
bool flying = height > 5;
if (flying && !bSkyDiving)
{
TASK::TASK_SKY_DIVE(player, true);
bSkyDiving = true;
}
else if (!flying && bSkyDiving)
{
bSkyDiving = false;
flying = false;
TASK::TASK_SKY_DIVE(player, false);
}
if (TASK::IS_PED_SPRINTING(player) || flying)
{ {
Vector3 offset = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(player, 0, 0.6, 0); Vector3 offset = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(player, 0, 0.6, 0);
ENTITY::APPLY_FORCE_TO_ENTITY(player, 1, 0.0f, 1.3, bSkyDiving ? 1.f : 0.f, 0.0f, 0.0f, 0.0f, 0, 1, 1, 1, 0, 1); ENTITY::APPLY_FORCE_TO_ENTITY(player, 1, 0.0f, 1.3, bSkyDiving ? 1.f : 0.f, 0.0f, 0.0f, 0.0f, 0, 1, 1, 1, 0, 1);
PLAYER::SET_PLAYER_SPRINT(g_playerId, 1); PLAYER::SET_PLAYER_SPRINT(g_player.id, 1);
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.49); PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_player.id, 1.49);
} }
else else
{ {
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.0); PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_player.id, 1.0);
} }
} }
else if (!bSuperSprint && bSuperSprint != bLastSuperSprint) else if (!bSuperSprint && bSuperSprint != bLastSuperSprint)
{ {
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.0); PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_player.id, 1.0);
} }
bLastSuperSprint = bSuperSprint; bLastSuperSprint = bSuperSprint;

View File

@ -1,51 +1,50 @@
#include "features/sys.hpp"
#include <algorithm> #include <algorithm>
#include "features.hpp" #include "fiber_pool.hpp"
#include "script.hpp"
namespace big namespace big
{ {
static bool busy = false; void sys::update_player_structs()
void features::update_player_structs()
{ {
if (busy) return; player players[32];
QUEUE_JOB_BEGIN_CLAUSE() for (uint8_t i = 0; i < 32; i++)
{ {
busy = true; if (NETWORK::NETWORK_IS_PLAYER_CONNECTED(i))
player players[32];
for (uint8_t i = 0; i < 32; i++)
{ {
if (NETWORK::NETWORK_IS_PLAYER_CONNECTED(i)) // if (!g_players[i].is_online) features::join_message((Player)i);
{
// if (!g_players[i].is_online) features::join_message((Player)i);
players[i].id = i; players[i].id = i;
players[i].is_online = true; players[i].is_online = true;
int iNetworkHandle[26]; int iNetworkHandle[26];
NETWORK::NETWORK_HANDLE_FROM_PLAYER(i, &iNetworkHandle[0], 13); NETWORK::NETWORK_HANDLE_FROM_PLAYER(i, &iNetworkHandle[0], 13);
NETWORK::NETWORK_IS_HANDLE_VALID(&iNetworkHandle[0], 13) && NETWORK::NETWORK_IS_FRIEND(&iNetworkHandle[0]); NETWORK::NETWORK_IS_HANDLE_VALID(&iNetworkHandle[0], 13) && NETWORK::NETWORK_IS_FRIEND(&iNetworkHandle[0]);
players[i].is_friend = NETWORK::NETWORK_IS_HANDLE_VALID(iNetworkHandle, 13) && NETWORK::NETWORK_IS_FRIEND(iNetworkHandle); players[i].is_friend = NETWORK::NETWORK_IS_HANDLE_VALID(iNetworkHandle, 13) && NETWORK::NETWORK_IS_FRIEND(iNetworkHandle);
strcpy(players[i].name, PLAYER::GET_PLAYER_NAME(i)); strcpy(players[i].name, PLAYER::GET_PLAYER_NAME(i));
} }
else else
{ {
players[i].is_online = false; players[i].is_online = false;
players[i].is_friend = false; players[i].is_friend = false;
}
script::get_current()->yield();
} }
std::sort(std::begin(players), std::end(players)); script::get_current()->yield();
}
for (uint8_t i = 0; i < 32; i++) std::sort(std::begin(players), std::end(players));
g_players[i] = players[i];
busy = false; g_players.clear();
}QUEUE_JOB_END_CLAUSE for (uint8_t i = 0; i < 32; i++)
{
player player = players[i];
if (player.id == PLAYER::PLAYER_ID()) g_player = player;
g_players.emplace(player.id, player);
}
} }
} }

View File

@ -1,12 +1,13 @@
#include "features.hpp" #include "features/sys.hpp"
#include "fiber_pool.hpp"
namespace big namespace big
{ {
void features::update_screen_sizes() void sys::update_screen_sizes()
{ {
QUEUE_JOB_BEGIN_CLAUSE() g_fiber_pool->queue_job([]
{ {
GRAPHICS::_GET_ACTIVE_SCREEN_RESOLUTION(&x, &y); GRAPHICS::_GET_ACTIVE_SCREEN_RESOLUTION(&x, &y);
}QUEUE_JOB_END_CLAUSE });
} }
} }

View File

@ -1,9 +1,9 @@
#include "features.hpp" #include "features/tunables.hpp"
#include "script_global.hpp" #include "script_global.hpp"
namespace big namespace big
{ {
void features::disable_phone() void tunables::disable_phone()
{ {
if (g_settings.options["disable_phone"]) if (g_settings.options["disable_phone"])
*script_global(19664).as<int*>() = 1; *script_global(19664).as<int*>() = 1;

View File

@ -1,9 +1,9 @@
#include "features.hpp" #include "features/tunables.hpp"
#include "script_global.hpp" #include "script_global.hpp"
namespace big namespace big
{ {
void features::no_idle_kick() void tunables::no_idle_kick()
{ {
bool bNoIdleKick = g_settings.options["no_idle_kick"].get<bool>(); bool bNoIdleKick = g_settings.options["no_idle_kick"].get<bool>();

View File

@ -1,14 +1,16 @@
#include "features.hpp" #include "features/util.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
static bool bReset = true; static bool bReset = true;
void features::spectate_player()
void util::spectate_player()
{ {
if (g_selectedPlayerId == -1 || !g_selectedPlayer.is_online || !g_temp.spectate_player) if (g_selectedPlayer.id == -1 || !g_selectedPlayer.is_online || !g_temp.is_spectating)
{ {
if (g_temp.spectate_player) g_temp.spectate_player = false; if (g_temp.is_spectating) g_temp.is_spectating = false;
if (!bReset) if (!bReset)
{ {
@ -20,7 +22,7 @@ namespace big
return; return;
} }
g_pointers->m_spectate_player(true, PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_selectedPlayerId)); g_pointers->m_spectate_player(true, PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_selectedPlayer.id));
bReset = false; bReset = false;
} }

View File

@ -1,17 +1,18 @@
#include "features.hpp" #include "features/vehicle.hpp"
#include "gta_util.hpp" #include "gta_util.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
static Vehicle veh = -1; static Vehicle veh = -1;
void features::handling() void vehicle::handling()
{ {
CPed* ped = gta_util::get_local_ped(); CPed* ped = gta_util::get_local_ped();
g_in_vehicle = ped->m_in_vehicle == 0; g_temp.in_vehicle = ped->m_in_vehicle == 0;
if (g_in_vehicle) if (g_temp.in_vehicle)
{ {
Vehicle currVeh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::PLAYER_PED_ID(), false); Vehicle currVeh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::PLAYER_PED_ID(), false);
if (veh != currVeh && ped->m_vehicle != nullptr) if (veh != currVeh && ped->m_vehicle != nullptr)

View File

@ -1,14 +1,17 @@
#include "features.hpp" #include "features/vehicle.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
void features::no_bike_fall() static bool bLastNoBikeFall = false;
void vehicle::no_bike_fall()
{ {
bool bNoBikeFall = g_settings.options["no_bike_fall"].get<bool>(); bool bNoBikeFall = g_settings.options["no_bike_fall"].get<bool>();
QUEUE_JOB_BEGIN_CLAUSE(= ) if (bNoBikeFall || bLastNoBikeFall != bNoBikeFall)
{
PED::SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(PLAYER::PLAYER_PED_ID(), bNoBikeFall); PED::SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(PLAYER::PLAYER_PED_ID(), bNoBikeFall);
}QUEUE_JOB_END_CLAUSE
bLastNoBikeFall = bNoBikeFall;
} }
} }

View File

@ -1,8 +1,9 @@
#include "features.hpp" #include "features/vehicle.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
void features::speedo_meter() void vehicle::speedo_meter()
{ {
static const float x = .9f; static const float x = .9f;
static const float y = .72f; static const float y = .72f;
@ -11,7 +12,7 @@ namespace big
if (speedo_type == 0 || HUD::IS_PAUSE_MENU_ACTIVE()) return; if (speedo_type == 0 || HUD::IS_PAUSE_MENU_ACTIVE()) return;
Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), false); Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), false);
if (veh == 0) return; if (veh == 0) return;

View File

@ -1,28 +1,22 @@
#include "features.hpp" #include "features/vehicle.hpp"
#include "features/functions.hpp"
#include "natives.hpp"
#include "script.hpp"
namespace big namespace big
{ {
void features::sticky_tyres() void vehicle::sticky_tyres()
{ {
if (g_settings.options["sticky_tyres"].get<bool>()) if (g_settings.options["sticky_tyres"].get<bool>())
{ {
QUEUE_JOB_BEGIN_CLAUSE() Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::PLAYER_PED_ID(), false);
if (veh)
{ {
func::take_control_of_entity(veh);
Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::PLAYER_PED_ID(), false); VEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(veh, 5.f);
}
if (veh)
{
while (!NETWORK::NETWORK_HAS_CONTROL_OF_ENTITY(veh))
{
NETWORK::NETWORK_REQUEST_CONTROL_OF_ENTITY(veh);
script::get_current()->yield();
}
VEHICLE::SET_VEHICLE_ON_GROUND_PROPERLY(veh, 5.f);
}
}QUEUE_JOB_END_CLAUSE
} }
} }
} }

View File

@ -1,8 +1,9 @@
#include "features.hpp" #include "features/world.hpp"
#include "natives.hpp"
namespace big namespace big
{ {
void features::population_modifiers() void world::population_modifiers()
{ {
auto& population = g_settings.options["world"]["population"]; auto& population = g_settings.options["world"]["population"];

View File

@ -1,8 +1,9 @@
#include "notify.hpp" #include "notify.hpp"
#include "natives.hpp"
namespace big::features::notify namespace big
{ {
void above_map(const char* text) void notify::above_map(const char* text)
{ {
HUD::SET_TEXT_OUTLINE(); HUD::SET_TEXT_OUTLINE();
HUD::BEGIN_TEXT_COMMAND_THEFEED_POST("STRING"); HUD::BEGIN_TEXT_COMMAND_THEFEED_POST("STRING");

View File

@ -1,7 +1,14 @@
#pragma once #pragma once
#include "natives.hpp" #include "common.hpp"
namespace big::features::notify namespace big
{ {
void above_map(const char* text); class notify
{
public:
static void above_map(const char* text);
private:
};
} }

View File

@ -0,0 +1,21 @@
#include "protections.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void protections::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
replay_interface();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,15 @@
#pragma once
#include "common.hpp"
namespace big
{
class protections
{
public:
static void loop();
private:
static void replay_interface();
};
}

View File

@ -0,0 +1,27 @@
#include "self.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void self::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
god_mode();
never_wanted();
no_ragdoll();
noclip();
off_radar();
spoof_rank();
super_sprint();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,21 @@
#pragma once
#include "common.hpp"
namespace big
{
class self
{
public:
static void loop();
private:
static void god_mode();
static void never_wanted();
static void no_ragdoll();
static void noclip();
static void off_radar();
static void spoof_rank();
static void super_sprint();
};
}

View File

@ -1,8 +1,9 @@
#include "stats.hpp" #include "stats.hpp"
#include "script.hpp"
#include "gta/joaat.hpp" #include "gta/joaat.hpp"
#include "natives.hpp"
#include "script.hpp"
namespace big::features namespace big
{ {
static const char character_stats[][64] = { static const char character_stats[][64] = {
"MP%d_SCRIPT_INCREASE_STAM", "MP%d_SCRIPT_INCREASE_STAM",

View File

@ -1,9 +1,7 @@
#pragma once #pragma once
#include "natives.hpp" #include "common.hpp"
#include "script.hpp"
#include "fiber_pool.hpp"
namespace big::features namespace big
{ {
class stats class stats
{ {

View File

@ -0,0 +1,22 @@
#include "sys.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void sys::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
update_player_structs();
update_screen_sizes();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,17 @@
#pragma once
#include "common.hpp"
#include "natives.hpp"
namespace big
{
class sys
{
public:
static void loop();
private:
static void update_player_structs();
static void update_screen_sizes();
};
}

View File

@ -1,8 +1,11 @@
#include "teleport.hpp" #include "teleport.hpp"
#include "natives.hpp"
#include "notify.hpp"
#include "script.hpp"
namespace big::features::teleport namespace big
{ {
bool load_ground_at_3dcoord(Vector3 location) bool teleport::load_ground_at_3dcoord(Vector3 location)
{ {
float groundZ; float groundZ;
uint8_t attempts = 10; uint8_t attempts = 10;
@ -25,7 +28,7 @@ namespace big::features::teleport
return false; return false;
} }
Vector3 get_ground_at_3dcoord(Vector3 location) Vector3 teleport::get_ground_at_3dcoord(Vector3 location)
{ {
float groundZ; float groundZ;
uint8_t attempts = 10; uint8_t attempts = 10;
@ -54,7 +57,7 @@ namespace big::features::teleport
return location; return location;
} }
bool bring_blip(int blipSprite, int blipColor, int flag) bool teleport::bring_blip(int blipSprite, int blipColor, int flag)
{ {
Blip blipHandle = HUD::GET_FIRST_BLIP_INFO_ID(blipSprite); Blip blipHandle = HUD::GET_FIRST_BLIP_INFO_ID(blipSprite);
while (HUD::DOES_BLIP_EXIST(blipHandle) && (blipColor != -1 && HUD::GET_BLIP_COLOUR(blipHandle) != blipColor)) while (HUD::DOES_BLIP_EXIST(blipHandle) && (blipColor != -1 && HUD::GET_BLIP_COLOUR(blipHandle) != blipColor))
@ -78,14 +81,14 @@ namespace big::features::teleport
script::get_current()->yield(); script::get_current()->yield();
} }
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
location = ENTITY::GET_ENTITY_COORDS(player, true); location = ENTITY::GET_ENTITY_COORDS(player, true);
ENTITY::SET_ENTITY_COORDS(veh, location.x, location.y, location.z + 1.f, 0, 0, 0, true); ENTITY::SET_ENTITY_COORDS(veh, location.x, location.y, location.z + 1.f, 0, 0, 0, true);
if (!VEHICLE::ARE_ANY_VEHICLE_SEATS_FREE(veh)) if (!VEHICLE::ARE_ANY_VEHICLE_SEATS_FREE(veh))
{ {
features::notify::above_map("The vehicle is full."); notify::above_map("The vehicle is full.");
ENTITY::SET_ENTITY_COORDS(player, location.x, location.y, location.z + 3.f, 0, 0, 0, true); ENTITY::SET_ENTITY_COORDS(player, location.x, location.y, location.z + 3.f, 0, 0, 0, true);
} }
else else
@ -96,9 +99,9 @@ namespace big::features::teleport
return true; return true;
} }
bool teleport_to_blip(int blipSprite, int blipColor) bool teleport::teleport_to_blip(int blipSprite, int blipColor)
{ {
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
Blip blipHandle = HUD::GET_FIRST_BLIP_INFO_ID(blipSprite); Blip blipHandle = HUD::GET_FIRST_BLIP_INFO_ID(blipSprite);
while (HUD::DOES_BLIP_EXIST(blipHandle) && (blipColor != -1 && HUD::GET_BLIP_COLOUR(blipHandle) != blipColor)) while (HUD::DOES_BLIP_EXIST(blipHandle) && (blipColor != -1 && HUD::GET_BLIP_COLOUR(blipHandle) != blipColor))
@ -117,13 +120,13 @@ namespace big::features::teleport
return true; return true;
} }
void teleport_into_player_vehicle(Player player) void teleport::teleport_into_player_vehicle(Player player)
{ {
Ped target = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(player); Ped target = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(player);
if (!PED::IS_PED_IN_ANY_VEHICLE(target, true)) if (!PED::IS_PED_IN_ANY_VEHICLE(target, true))
{ {
features::notify::above_map("This player is not in a vehicle right now."); notify::above_map("This player is not in a vehicle right now.");
return; return;
} }
@ -133,14 +136,14 @@ namespace big::features::teleport
for (uint8_t i = 0; !load_ground_at_3dcoord(location); i++) for (uint8_t i = 0; !load_ground_at_3dcoord(location); i++)
if (i == 5) break; if (i == 5) break;
Ped current = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped current = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
Vehicle veh; Vehicle veh;
for (veh = 0; !veh; veh = PED::GET_VEHICLE_PED_IS_IN(target, false)) for (veh = 0; !veh; veh = PED::GET_VEHICLE_PED_IS_IN(target, false))
{ {
if (!PED::IS_PED_IN_ANY_VEHICLE(target, true)) if (!PED::IS_PED_IN_ANY_VEHICLE(target, true))
{ {
features::notify::above_map("Player is no longer in a vehicle."); notify::above_map("Player is no longer in a vehicle.");
return; return;
} }
@ -161,20 +164,20 @@ namespace big::features::teleport
PED::SET_PED_INTO_VEHICLE(current, veh, seatIndex); PED::SET_PED_INTO_VEHICLE(current, veh, seatIndex);
} }
void teleport_to_player(Player player) void teleport::teleport_to_player(Player player)
{ {
Ped target = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(player); Ped target = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(player);
Vector3 location = ENTITY::GET_ENTITY_COORDS(target, true); Vector3 location = ENTITY::GET_ENTITY_COORDS(target, true);
load_ground_at_3dcoord(location); load_ground_at_3dcoord(location);
PED::SET_PED_COORDS_KEEP_VEHICLE(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), location.x, location.y, location.z); PED::SET_PED_COORDS_KEEP_VEHICLE(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), location.x, location.y, location.z);
} }
// Teleport the player (with/without car to a waypoint) // Teleport the player (with/without car to a waypoint)
bool waypoint() bool teleport::waypoint()
{ {
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
Blip blipHandle = HUD::GET_FIRST_BLIP_INFO_ID(8); Blip blipHandle = HUD::GET_FIRST_BLIP_INFO_ID(8);
if (!HUD::DOES_BLIP_EXIST(blipHandle)) return false; if (!HUD::DOES_BLIP_EXIST(blipHandle)) return false;

View File

@ -1,15 +1,20 @@
#pragma once #pragma once
#include "features.hpp" #include "common.hpp"
#include "natives.hpp"
#include "script.hpp"
namespace big::features::teleport namespace big
{ {
bool bring_blip(int blipSprite, int blipColor, int flag = 70); class teleport
bool load_ground_at_3dcoord(Vector3 location); {
Vector3 get_ground_at_3dcoord(Vector3 location); public:
bool teleport_to_blip(int blipSprite, int blipColor = -1); static bool bring_blip(int blipSprite, int blipColor, int flag = 70);
void teleport_into_player_vehicle(Player player); static bool load_ground_at_3dcoord(Vector3 location);
void teleport_to_player(Player player); static Vector3 get_ground_at_3dcoord(Vector3 location);
bool waypoint(); static bool teleport_to_blip(int blipSprite, int blipColor = -1);
static void teleport_into_player_vehicle(Player player);
static void teleport_to_player(Player player);
static bool waypoint();
private:
};
} }

View File

@ -0,0 +1,10 @@
#include "tunables.hpp"
namespace big
{
void tunables::loop()
{
disable_phone();
no_idle_kick();
}
}

View File

@ -0,0 +1,16 @@
#pragma once
#include "common.hpp"
namespace big
{
class tunables
{
public:
static void loop();
private:
static void disable_phone();
static void no_idle_kick();
};
}

View File

@ -0,0 +1,21 @@
#include "util.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void util::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
spectate_player();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,14 @@
#pragma once
namespace big
{
class util
{
public:
static void loop();
private:
static void spectate_player();
};
}

View File

@ -0,0 +1,24 @@
#include "vehicle.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void vehicle::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
handling();
no_bike_fall();
speedo_meter();
sticky_tyres();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,18 @@
#pragma once
#include "common.hpp"
namespace big
{
class vehicle
{
public:
static void loop();
private:
static void handling();
static void no_bike_fall();
static void speedo_meter();
static void sticky_tyres();
};
}

View File

@ -0,0 +1,21 @@
#include "world.hpp"
#include "fiber_pool.hpp"
#include "script.hpp"
namespace big
{
static bool busy = false;
void world::loop()
{
if (busy) return;
busy = true;
QUEUE_JOB_BEGIN_CLAUSE()
{
population_modifiers();
busy = false;
}QUEUE_JOB_END_CLAUSE
}
}

View File

@ -0,0 +1,15 @@
#pragma once
#include "common.hpp"
namespace big
{
class world
{
public:
static void loop();
private:
static void population_modifiers();
};
}

View File

@ -135,7 +135,7 @@ namespace big
g_custom_text->add_text(RAGE_JOAAT("HUD_SAVDNWARN"), "Rockstar crashed their toaster again..."); g_custom_text->add_text(RAGE_JOAAT("HUD_SAVDNWARN"), "Rockstar crashed their toaster again...");
features::notify::above_map("Yim's Menu is ready."); notify::above_map("Yim's Menu is ready.");
} }
void gui::script_on_tick() void gui::script_on_tick()

View File

@ -1,4 +1,6 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/functions.hpp"
#include "features/stats.hpp"
#include "natives.hpp" #include "natives.hpp"
namespace big namespace big
@ -21,7 +23,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::stats::unlock_achievements(); stats::unlock_achievements();
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -32,7 +34,7 @@ namespace big
int character_index; int character_index;
func::get_active_character_slot(&character_index); func::get_active_character_slot(&character_index);
features::stats::max_stats(character_index); stats::max_stats(character_index);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -40,7 +42,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::stats::unlock_all(); stats::unlock_all();
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }

View File

@ -1,4 +1,5 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/functions.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "script_global.hpp" #include "script_global.hpp"

View File

@ -10,7 +10,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
Entity player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Entity player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
ENTITY::SET_ENTITY_HEALTH(player, ENTITY::GET_ENTITY_MAX_HEALTH(player), 0); ENTITY::SET_ENTITY_HEALTH(player, ENTITY::GET_ENTITY_MAX_HEALTH(player), 0);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
@ -20,7 +20,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
ENTITY::SET_ENTITY_HEALTH(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), 0, 0); ENTITY::SET_ENTITY_HEALTH(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), 0, 0);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -79,18 +79,18 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
PLAYER::CLEAR_PLAYER_WANTED_LEVEL(g_playerId); PLAYER::CLEAR_PLAYER_WANTED_LEVEL(g_player.id);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
if (ImGui::Button("Cops Ignore")) if (ImGui::Button("Cops Ignore"))
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
if (PLAYER::GET_PLAYER_WANTED_LEVEL(g_playerId) > 0) if (PLAYER::GET_PLAYER_WANTED_LEVEL(g_player.id) > 0)
{ {
PLAYER::CLEAR_PLAYER_WANTED_LEVEL(g_playerId); PLAYER::CLEAR_PLAYER_WANTED_LEVEL(g_player.id);
} }
PLAYER::SET_POLICE_IGNORE_PLAYER(g_playerId, true); PLAYER::SET_POLICE_IGNORE_PLAYER(g_player.id, true);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -103,8 +103,8 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE(= ) QUEUE_JOB_BEGIN_CLAUSE(= )
{ {
PLAYER::SET_PLAYER_WANTED_LEVEL(g_playerId, g_temp.wanted_level, true); PLAYER::SET_PLAYER_WANTED_LEVEL(g_player.id, g_temp.wanted_level, true);
PLAYER::SET_PLAYER_WANTED_LEVEL_NOW(g_playerId, true); PLAYER::SET_PLAYER_WANTED_LEVEL_NOW(g_player.id, true);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
} }

View File

@ -1,4 +1,5 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/functions.hpp"
#include "pointers.hpp" #include "pointers.hpp"
namespace big namespace big

View File

@ -1,4 +1,5 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/functions.hpp"
#include "pointers.hpp" #include "pointers.hpp"
namespace big namespace big
@ -21,7 +22,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE(= ) QUEUE_JOB_BEGIN_CLAUSE(= )
{ {
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId); Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id);
Vector3 location = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(player, .0, 8.0, .5); Vector3 location = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(player, .0, 8.0, .5);
func::spawn_vehicle((const char*)model, location, ENTITY::GET_ENTITY_HEADING(player) + 90.f); func::spawn_vehicle((const char*)model, location, ENTITY::GET_ENTITY_HEADING(player) + 90.f);

View File

@ -1,4 +1,6 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/notify.hpp"
#include "features/teleport.hpp"
namespace big namespace big
{ {
@ -10,13 +12,13 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
if (features::teleport::waypoint()) if (teleport::waypoint())
{ {
features::notify::above_map("You've been teleported."); notify::above_map("You've been teleported.");
} }
else else
{ {
features::notify::above_map("No waypoint set."); notify::above_map("No waypoint set.");
} }
} QUEUE_JOB_END_CLAUSE } QUEUE_JOB_END_CLAUSE
} }
@ -25,7 +27,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::teleport::teleport_to_blip(1, 5); teleport::teleport_to_blip(1, 5);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -35,7 +37,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::teleport::teleport_to_blip(225); teleport::teleport_to_blip(225);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
ImGui::SameLine(); ImGui::SameLine();
@ -43,7 +45,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::teleport::bring_blip(225, 0); teleport::bring_blip(225, 0);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }

View File

@ -1,4 +1,6 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/notify.hpp"
#include "features/teleport.hpp"
#include "gta_util.hpp" #include "gta_util.hpp"
namespace big namespace big
@ -41,7 +43,7 @@ namespace big
ImGui::Separator(); ImGui::Separator();
ImGui::Checkbox("Handling", &g_handling_window); ImGui::Checkbox("Handling", &g_temp.windows.handling);
ImGui::Separator(); ImGui::Separator();
@ -53,14 +55,14 @@ namespace big
Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::PLAYER_PED_ID(), false); Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::PLAYER_PED_ID(), false);
if (!veh) if (!veh)
features::notify::above_map("~r~Make sure you are in a vehicle."); notify::above_map("~r~Make sure you are in a vehicle.");
else if (!HUD::DOES_BLIP_EXIST(blipHandle)) else if (!HUD::DOES_BLIP_EXIST(blipHandle))
features::notify::above_map("~r~Waypoint needs to be set."); notify::above_map("~r~Waypoint needs to be set.");
else else
{ {
Vector3 location = HUD::GET_BLIP_COORDS(blipHandle); Vector3 location = HUD::GET_BLIP_COORDS(blipHandle);
// Make sure the AI can reach this // Make sure the AI can reach this
location = features::teleport::get_ground_at_3dcoord(location); location = teleport::get_ground_at_3dcoord(location);
TASK::TASK_VEHICLE_DRIVE_TO_COORD(PLAYER::PLAYER_PED_ID(), veh, location.x, location.y, location.z, 35.f, 0, veh, 2883620, 10.f, true); TASK::TASK_VEHICLE_DRIVE_TO_COORD(PLAYER::PLAYER_PED_ID(), veh, location.x, location.y, location.z, 35.f, 0, veh, 2883620, 10.f, true);
} }
@ -89,13 +91,13 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), false); Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), false);
if (veh) if (veh)
{ {
VEHICLE::SET_VEHICLE_FIXED(veh); VEHICLE::SET_VEHICLE_FIXED(veh);
features::notify::above_map("Vehicle has been repaired."); notify::above_map("Vehicle has been repaired.");
} }
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -104,13 +106,13 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), false); Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), false);
if (veh) if (veh)
{ {
VEHICLE::SET_VEHICLE_DIRT_LEVEL(veh, 0.0); VEHICLE::SET_VEHICLE_DIRT_LEVEL(veh, 0.0);
features::notify::above_map("Vehicle has been cleaned."); notify::above_map("Vehicle has been cleaned.");
} }
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -119,7 +121,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId), false); Vehicle veh = PED::GET_VEHICLE_PED_IS_IN(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_player.id), false);
if (veh) if (veh)
{ {

View File

@ -1,4 +1,5 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/functions.hpp"
namespace big namespace big
{ {

View File

@ -1,4 +1,6 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/functions.hpp"
#include "features/notify.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "script_global.hpp" #include "script_global.hpp"
@ -41,7 +43,7 @@ namespace big
} }
else else
{ {
features::notify::above_map("You aren't the host"); notify::above_map("You aren't the host");
} }
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }

View File

@ -6,7 +6,7 @@ namespace big
{ {
if (ImGui::BeginTabItem("Info")) if (ImGui::BeginTabItem("Info"))
{ {
ImGui::Checkbox("Spectate Player", &g_temp.spectate_player); ImGui::Checkbox("Spectate Player", &g_temp.is_spectating);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }

View File

@ -1,4 +1,5 @@
#include "gui/tab_bar.hpp" #include "gui/tab_bar.hpp"
#include "features/teleport.hpp"
namespace big namespace big
{ {
@ -10,7 +11,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::teleport::teleport_to_player(g_selectedPlayer.id); teleport::teleport_to_player(g_selectedPlayer.id);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }
@ -18,7 +19,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::teleport::teleport_into_player_vehicle(g_selectedPlayer.id); teleport::teleport_into_player_vehicle(g_selectedPlayer.id);
}QUEUE_JOB_END_CLAUSE }QUEUE_JOB_END_CLAUSE
} }

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "common.hpp"
#include "imgui.h" #include "imgui.h"
namespace big namespace big

View File

@ -7,9 +7,9 @@ namespace big
void window::render_handling_window() void window::render_handling_window()
{ {
ImGui::SetNextWindowSize({ 500, 780 }, ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize({ 500, 780 }, ImGuiCond_FirstUseEver);
if (g_handling_window && ImGui::Begin("Handling", &g_handling_window)) if (g_temp.windows.handling && ImGui::Begin("Handling", &g_temp.windows.handling))
{ {
if (g_in_vehicle && g_vehicle != nullptr) if (g_temp.in_vehicle && g_vehicle != nullptr)
{ {
ImGui::BeginTabBar("handling_tabbar"); ImGui::BeginTabBar("handling_tabbar");
tabbar::handling_physics(); tabbar::handling_physics();

View File

@ -5,7 +5,7 @@ namespace big
{ {
void window::render_player_window() void window::render_player_window()
{ {
if (g_selectedPlayer.id != g_selectedPlayerId || !g_selectedPlayer.is_online) return; if (g_selectedPlayer.id != g_selectedPlayer.id || !g_selectedPlayer.is_online) return;
char title[64]; char title[64];
strcpy(title, "Player Options: "); strcpy(title, "Player Options: ");
@ -13,13 +13,8 @@ namespace big
strcat(title, "###player_options"); strcat(title, "###player_options");
ImGui::SetNextWindowSize({ 350.f, 300.f }, ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize({ 350.f, 300.f }, ImGuiCond_FirstUseEver);
if (ImGui::Begin(title)) if (g_temp.windows.player && ImGui::Begin(title, &g_temp.windows.player))
{ {
if (ImGui::Button("Close"))
{
g_selectedPlayerId = -2;
}
ImGui::BeginTabBar("tabbar_player"); ImGui::BeginTabBar("tabbar_player");
tabbar::player_info(); tabbar::player_info();
tabbar::player_griefing(); tabbar::player_griefing();

View File

@ -1,34 +1,26 @@
#include "gui/window.hpp" #include "gui/window.hpp"
#include "features.hpp" #include "features/functions.hpp"
#include "features/notify.hpp"
#include "natives.hpp" #include "natives.hpp"
#include "script.hpp" #include "script.hpp"
#include "fiber_pool.hpp" #include "fiber_pool.hpp"
#include "structs/lists.hpp"
namespace big namespace big
{ {
static char* player_name = "";
void window::render_top_bar() void window::render_top_bar()
{ {
if (ImGui::BeginMainMenuBar()) if (ImGui::BeginMainMenuBar())
{ {
if (ImGui::BeginMenu("Info")) if (ImGui::BeginMenu("Info"))
{ {
if (strlen(player_name) == 0) ImGui::MenuItem("Logged in as:", NULL, false, false);
QUEUE_JOB_BEGIN_CLAUSE(&) ImGui::MenuItem(g_player.name, NULL, false, false);
{
player_name = (char*)PLAYER::GET_PLAYER_NAME(g_playerId);
}QUEUE_JOB_END_CLAUSE
ImGui::MenuItem("Logged in as:", NULL, false, false);
ImGui::MenuItem(player_name, NULL, false, false);
if (ImGui::MenuItem("Am I lobby host?")) if (ImGui::MenuItem("Am I lobby host?"))
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::notify::above_map(NETWORK::NETWORK_IS_HOST() ? "~g~Yes you are the host." : "You aren't the host."); notify::above_map(NETWORK::NETWORK_IS_HOST() ? "~g~Yes you are the host." : "You aren't the host.");
} }
QUEUE_JOB_END_CLAUSE QUEUE_JOB_END_CLAUSE
@ -38,7 +30,7 @@ namespace big
{ {
QUEUE_JOB_BEGIN_CLAUSE() QUEUE_JOB_BEGIN_CLAUSE()
{ {
features::notify::above_map(NETWORK::NETWORK_PLAYER_IS_BADSPORT() ? "You have been ~r~reported multiple times!" : "Your account is in good standing."); notify::above_map(NETWORK::NETWORK_PLAYER_IS_BADSPORT() ? "You have been ~r~reported multiple times!" : "Your account is in good standing.");
} }
QUEUE_JOB_END_CLAUSE QUEUE_JOB_END_CLAUSE
} }
@ -55,7 +47,7 @@ namespace big
if (CUTSCENE::IS_CUTSCENE_ACTIVE()) if (CUTSCENE::IS_CUTSCENE_ACTIVE())
CUTSCENE::STOP_CUTSCENE_IMMEDIATELY(); CUTSCENE::STOP_CUTSCENE_IMMEDIATELY();
else else
features::notify::above_map("There's no cutscene active at the moment."); notify::above_map("There's no cutscene active at the moment.");
} }
QUEUE_JOB_END_CLAUSE QUEUE_JOB_END_CLAUSE
} }

View File

@ -16,16 +16,10 @@ namespace big
ImGui::TextColored({ 255,255,255,255 }, "YOU:"); ImGui::TextColored({ 255,255,255,255 }, "YOU:");
for (uint8_t i = 0; i < 32; i++) if (ImGui::Button(g_player.name, vecButtonWidth))
{ {
player player = g_players[i]; g_selectedPlayer = g_player;
g_temp.windows.player = true;
if (player.id == g_playerId) g_currentPlayer = player;
}
if (ImGui::Button(g_currentPlayer.name, vecButtonWidth))
{
g_selectedPlayer = g_currentPlayer;
g_selectedPlayerId = g_currentPlayer.id;
} }
ImGui::Separator(); ImGui::Separator();
@ -36,9 +30,9 @@ namespace big
bool friendInLobby = false; bool friendInLobby = false;
for (int i = 0; i < 32; i++) for (auto& pair : g_players)
{ {
player player = g_players[i]; player player = pair.second;
if (player.is_friend && player.is_online) if (player.is_friend && player.is_online)
{ {
@ -47,7 +41,7 @@ namespace big
if (ImGui::Button(player.name, vecButtonWidth)) if (ImGui::Button(player.name, vecButtonWidth))
{ {
g_selectedPlayer = player; g_selectedPlayer = player;
g_selectedPlayerId = player.id; g_temp.windows.player = true;
} }
} }
} }
@ -66,16 +60,16 @@ namespace big
{ {
ImGui::Unindent(); ImGui::Unindent();
for (int i = 0; i < 32; i++) for (auto& pair : g_players)
{ {
player player = g_players[i]; player player = pair.second;
if (!player.is_friend && player.is_online && player.id != g_playerId) if (!player.is_friend && player.is_online && player.id != g_player.id)
{ {
if (ImGui::Button(player.name, vecButtonWidth)) if (ImGui::Button(player.name, vecButtonWidth))
{ {
g_selectedPlayer = player; g_selectedPlayer = player;
g_selectedPlayerId = player.id; g_temp.windows.player = true;
} }
} }
} }

View File

@ -1,4 +1,5 @@
#include "features.hpp" #include "features.hpp"
#include "features/notify.hpp"
#include "hooking.hpp" #include "hooking.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "natives.hpp" #include "natives.hpp"
@ -140,7 +141,7 @@ namespace big
strcat(msg, "</C>\nEvent Type: ~b~"); strcat(msg, "</C>\nEvent Type: ~b~");
strcat(msg, type); strcat(msg, type);
features::notify::above_map(msg); notify::above_map(msg);
return false; return false;
} }

View File

@ -21,7 +21,7 @@ namespace big
strcat(report, PLAYER::GET_PLAYER_NAME(sender_id)); strcat(report, PLAYER::GET_PLAYER_NAME(sender_id));
strcat(report, "</C>"); strcat(report, "</C>");
features::notify::above_map(report); notify::above_map(report);
return true; return true;
} }

View File

@ -1,8 +1,9 @@
#include "hooking.hpp" #include "hooking.hpp"
#include "features.hpp" #include "features.hpp"
#include "features/notify.hpp"
#include "gta/enums.hpp"
#include "pointers.hpp" #include "pointers.hpp"
#include "natives.hpp" #include "natives.hpp"
#include "gta/enums.hpp"
namespace big namespace big
{ {
@ -21,7 +22,7 @@ namespace big
char join_msg[128]; char join_msg[128];
sprintf(join_msg, "<C>%s</C> is joining...", g_pointers->m_get_player_name((Player)args[1])); sprintf(join_msg, "<C>%s</C> is joining...", g_pointers->m_get_player_name((Player)args[1]));
features::notify::above_map(join_msg); notify::above_map(join_msg);
} }
} }

View File

@ -2,21 +2,32 @@
namespace big namespace big
{ {
struct game_time
{
int hour = 0;
int minutes = 0;
};
struct temp struct temp
{ {
struct game_time
{
int hour = 0;
int minutes = 0;
};
struct window
{
bool handling = false;
bool player = false;
};
bool in_vehicle = false;
bool is_spectating = false;
int character_slot = 0; int character_slot = 0;
int set_level = 0; int set_level = 0;
int spoofed_rank = 0; int spoofed_rank = 0;
game_time time = game_time{};
bool spectate_player = false;
int teleport_location = 0; int teleport_location = 0;
int wanted_level = 0; int wanted_level = 0;
int weather_type = 0; int weather_type = 0;
game_time time = game_time{};
window windows = window{};
}; };
} }