Expert HvHer
this is what people call ai peek but i don't like calling it that
I made this 6 months ago on an extremely basic cheat base
since it's very simple you can easily adapt it for supremacy or whatever paste you have, though i recommend using autowall instead of visual checks
enjoy your winter
AutoPeek:
#include "autopeek.hpp"
#include <Windows.h>
#include <cmath>
#include "../../menu/variables.hpp"
#include "../../../dependencies/utilities/csgo.hpp"
#include "../../../source-sdk/player_data.hpp"
#include "../misc/engine_prediction.hpp"
namespace autopeek {
inline vec3_t saved_peek_point = vec3_t(0, 0, 0);
inline vec3_t start_point = vec3_t(0, 0, 0);
inline bool peek_point_saved = false;
inline player_t* target = nullptr;
void doAutoPeek(c_usercmd* cmd) {
player_t* local = csgo::local_player;
if (!local || !local->is_alive()) {
peek_point_saved = false;
return;
}
if (!(GetAsyncKeyState(VK_XBUTTON1) & 0x8000)) {
start_point = vec3_t(0, 0, 0);
peek_point_saved = false;
return;
}
vec3_t current_origin = local->origin();
if (start_point.x == 0 || start_point.y == 0) {
start_point = current_origin;
}
if (can_see_enemy_from_position(current_origin)) {
peek_point_saved = false;
return;
}
if (peek_point_saved && can_see_enemy_from_position(saved_peek_point) && !is_position_in_wall(saved_peek_point)) {
set_movement_to_position(cmd, saved_peek_point);
return;
}
vec3_t view_angles = cmd->viewangles;
view_angles.x = 0.0f;
vec3_t angleThingExtra;
interfaces::engine->get_view_angles(angleThingExtra);
vec3_t angles = vec3_t(0, angleThingExtra.y, 0);
vec3_t forward, right, up;
math::angle_vectors(angles, &forward, &right, &up);
vec3_t left_point = current_origin + (-right.normalized() * variables::autopeek_radius);
vec3_t right_point = current_origin + (right.normalized() * variables::autopeek_radius);
bool peek_left = !is_position_in_wall(left_point) && can_see_enemy_from_position(left_point);
bool peek_right = !is_position_in_wall(right_point) && can_see_enemy_from_position(right_point);
//TODO: if peek point was found. decrease it's distance to us until it's the minimum possible for where we can see the enmy from
if (peek_left) {
saved_peek_point = left_point;
peek_point_saved = true;
}
else if (peek_right) {
saved_peek_point = right_point;
peek_point_saved = true;
}
else {
peek_point_saved = false;
return;
}
set_movement_to_position(cmd, saved_peek_point);
}
void renderPoints() {
player_t* local = csgo::local_player;
if (!local || !local->is_alive() || !variables::render_things) return;
if (peek_point_saved && !is_position_in_wall(saved_peek_point) && can_see_enemy_from_position(saved_peek_point)) {
render::world_circle_optimized(
saved_peek_point,
10.0f,
color(47, 170, 0, 255),
color(47, 170, 0, 147),
64
);
}
vec3_t eye_pos = local->get_eye_pos();
vec3_t current_origin = local->origin();
vec3_t view_angles = local->eye_angles();
view_angles.x = 0.0f;
vec3_t forward, right, up;
vec3_t angleThingExtra;
interfaces::engine->get_view_angles(angleThingExtra);
vec3_t angles = vec3_t(0, angleThingExtra.y, 0);
math::angle_vectors(angles, &forward, &right, &up);
vec3_t left_point = current_origin + (-right.normalized() * variables::autopeek_radius);
vec3_t right_point = current_origin + (right.normalized() * variables::autopeek_radius);
bool peek_left = !is_position_in_wall(left_point) && can_see_enemy_from_position(left_point);
bool peek_right = !is_position_in_wall(right_point) && can_see_enemy_from_position(right_point);
vec2_t screen_pos;
if (math::world_to_screen(left_point, screen_pos)) {
render::text(screen_pos.x, screen_pos.y, render::fonts::watermark_font, "L", true,
peek_left ? color(0, 255, 0, 255) : color(255, 255, 255, 255));
}
if (math::world_to_screen(right_point, screen_pos)) {
render::text(screen_pos.x, screen_pos.y, render::fonts::watermark_font, "R", true,
peek_right ? color(0, 255, 0, 255) : color(255, 255, 255, 255));
}
if (math::world_to_screen(start_point, screen_pos)) {
render::text(screen_pos.x, screen_pos.y, render::fonts::watermark_font, "S", true,
color(47, 170, 0, 200));
}
}
bool can_see_enemy_from_position(const vec3_t& position) {
player_t* local = csgo::local_player;
if (!local) return false;
for (int i = 1; i <= interfaces::globals->max_clients; ++i) {
auto player = reinterpret_cast<player_t*>(interfaces::entity_list->get_client_entity(i));
if (!player || !player->is_alive() || player->dormant())
continue;
if (player->team() == local->team())
continue;
vec3_t head_pos = player->get_bone_position(8); //head
trace_t trace;
ray_t ray;
ray.initialize(position + vec3_t(0, 0, 64), head_pos);
trace_filter filter;
filter.skip = local;
interfaces::trace_ray->trace_ray(ray, MASK_SHOT, &filter, &trace);
if (trace.entity == player || trace.flFraction > 0.97f) {
target = player;
return true;
}
}
return false;
}
bool is_position_in_wall(const vec3_t& position) {
trace_t trace;
ray_t ray;
ray.initialize(position, vec3_t(position.x, position.y, position.z + 1));
trace_filter filter;
filter.skip = csgo::local_player;
interfaces::trace_ray->trace_ray(ray, MASK_PLAYERSOLID, &filter, &trace);
return trace.startSolid;
}
void set_movement_to_position(c_usercmd* cmd, vec3_t& target) {
player_t* local = csgo::local_player;
if (!local) return;
vec3_t current = local->origin();
vec3_t delta = target - current;
if (delta.length_2d() < 5.0f) {
return;
}
vec3_t move_dir = delta;
move_dir.z = 0.0f;
move_dir.normalize();
float desired_yaw = std::atan2(move_dir.y, move_dir.x) * (180.0f / M_PI);
float view_yaw = globals::debug_info.realYaw;
float delta_yaw = desired_yaw - view_yaw;
delta_yaw = math::normalize(delta_yaw);
float speed = 450.0f;
//ignore china stuff here.
if (variables::reverse_motion) {
cmd->sidemove = std::sin(delta_yaw * (M_PI / 180.0f)) * -speed;
}
else {
cmd->sidemove = -std::sin(delta_yaw * (M_PI / 180.0f)) * -speed;
}
}
}
I made this 6 months ago on an extremely basic cheat base
You must be registered for see links
since it's very simple you can easily adapt it for supremacy or whatever paste you have, though i recommend using autowall instead of visual checks
enjoy your winter