2025-07-25 21:45:33 +03:00

164 lines
4.2 KiB
C++

#pragma once
#include "../../common.h"
#include <memory>
// used: draw system
#include "../../utilities/draw.h"
#include "../../sdk/datatypes/vector.h"
#include "../../sdk/datatypes/transform.h"
#include "../../sdk/datatypes/qangle.h"
#include "../cstrike/core/config.h"
class CCSPlayerController;
class C_BaseEntity;
class C_CSPlayerPawn;
class CBaseHandle;
class CEntityInstance;
class CUserCmd;
class CBaseUserCmdPB;
class QAngle_t;
class CCSGOInput;
class IGameEvent;
class C_CSWeaponBase;
class CCSWeaponBaseVData;
class scan_data;
class scan_point;
class scanned_target;
#define MAX_STUDIO_BONES 1024
#include <array>
namespace F::RAGE
{
enum events {
round_start = 1,
player_death = 2,
};
class impl {
public:
enum reset {
entity,
aimbot
};
enum scan_mode {
single, /* only 1 hitbox */
adaptive /* multiple bones pushed in the same time */
};
enum hitboxes {
scan_head,
scan_neck,
scan_chest,
scan_pelvis
};
enum stop_mode {
slow = 0,
early = 1
};
enum silent_info {
skipping = 0,
on_tick = 1,
};
struct aim_info {
int minimum_damage;
int rage_hitchance;
int rage_target_select;
int rage_enable;
bool auto_stop;
bool penetration;
bool remove_weapon_accuracy_spread;
bool hitbox_head;
bool hitbox_neck;
bool hitbox_uppeer_chest;
bool hitbox_chest;
bool hitbox_stomach;
bool hitbox_legs;
bool hitbox_feets;
bool rapid_fire;
bool failed_hitchance = false;
bool do_rapid_fire;
bool accurate;
}rage_data;
enum command_msg {
none = 0,
rapid_fire = 1,
teleport = 2,
silent = 3,
};
enum response_msg {
empty = 0,
validated_view_angles = 1,
};
struct SubTickData {
QAngle_t best_point = QAngle_t(0, 0, 0);
Vector_t best_point_vec = Vector_t(0, 0, 0);
command_msg command = command_msg::none;
response_msg response = response_msg::empty;
void reset() {
best_point.Reset();
best_point_vec = Vector_t(0, 0, 0);
command = command_msg::none;
response = response_msg::empty;
}
}sub_tick_data;
float GetSpread(C_CSWeaponBase* weapon);
float GetInaccuracy(C_CSPlayerPawn* pLocal, C_CSWeaponBase* weapon);
float HitchanceFast(C_CSPlayerPawn* pLocal, C_CSWeaponBase* weapon);
void Hitchance(C_CSPlayerPawn* pLocal, C_CSPlayerPawn* record, C_CSWeaponBase* weapon, QAngle_t vAimpoint);
void AutomaticStop(C_CSPlayerPawn* pLocal, C_CSWeaponBase* weapon, CUserCmd* cmd, stop_mode mode = slow);
void SortTarget();
/* void inits */
bool valid(C_CSPlayerPawn* pawn, C_CSPlayerPawn* pLocal, bool check = false);
void ScanPoint(C_CSPlayerPawn* pLocal, CUserCmd* cmd, C_CSPlayerPawn* record, scan_data& data, const Vector_t& shoot_pos, bool optimized);
std::vector <scan_point> get_points(C_CSPlayerPawn* pLocal, C_CSPlayerPawn* record, uint32_t hitbox, bool from_aim);
void Scan();
void Triggerbot(CUserCmd* cmd, C_BaseEntity* localent, C_BaseEntity* playerent, C_CSPlayerPawn* local, C_CSPlayerPawn* player, CCSWeaponBaseVData* vdata);
void BuildSeed();
void SetupTarget(C_CSPlayerPawn* pawn);
void SetupAdaptiveWeapon(C_CSPlayerPawn* pawn);
void ScanTarget(C_CSPlayerPawn* pLocal, CUserCmd* cmd, QAngle_t viewangles);
Vector_t eye_pos;
float ScaleDamage(C_CSPlayerPawn* target, C_CSPlayerPawn* pLocal, C_CSWeaponBase* weapon, Vector_t aim_point, float& dmg, bool& canHit);
bool CanHit(Vector_t start, Vector_t end, C_CSPlayerPawn* pLocal, C_CSPlayerPawn* record, int box);
void Reset(reset type);
void Run(C_CSPlayerPawn* pLocal, CCSGOInput* pInput, CUserCmd* cmd);
bool Ready(C_CSPlayerPawn* pLocal);
void Events(IGameEvent* event_listener, events type);
bool IsAccurate(scan_data& data, CUserCmd* cmd, C_CSPlayerPawn* local);
bool Attack(CUserCmd* cmd, C_CSPlayerPawn* pLocal, scan_data& data);
void AjustRecoil(C_CSPlayerPawn* player, CUserCmd* pCmd);
/* init class */
aim_info aimbot_info;
silent_info silent_info;
inline static std::vector<std::pair<float, float>> m_computed_seeds;
};
const auto rage = std::make_unique<impl>();
}
namespace F::LAGCOMP
{
class impl {
public:
/* void inits */
void Initialize();
void Start(CUserCmd* cmd) noexcept;
void Render() noexcept;
};
const auto lagcomp = std::make_unique<impl>();
}