What's new

Welcome to HvH Forum!

SignUp Now! Download Free HvH CS2/CS:GO Cheats, CFG, LUA/JS Scripts, And More!


SignUp Now!

Source Code Simple AutoPeek (NOT AutoRetreat)

Expert HvHer
User ID
59937
Messages
134
Reactions
214
Level
29
this is what people call ai peek but i don't like calling it that

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
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
 

Create an account or login to comment

You must be a member in order to leave a comment

Create account

Create an account on our community. It's easy!

Log in

Already have an account? Log in here.

Top