diff --git a/premake5.lua b/premake5.lua index d81b803..6ae97c1 100644 --- a/premake5.lua +++ b/premake5.lua @@ -67,13 +67,13 @@ workspace "doghook" files { "src/**.hh", "src/**.cc" } filter "system:linux" - postbuildcommands { + prebuildcommands { "{MKDIR} %{wks.location}/compile_commands/", "{TOUCH} %{wks.location}/compile_commands/%{cfg.shortname}.json", "{COPY} %{wks.location}/compile_commands/%{cfg.shortname}.json ../compile_commands.json" } filter "system:windows" - postbuildcommands { + prebuildcommands { "cmd.exe /c \"" .. "{MKDIR} %{wks.location}/compile_commands/", "cmd.exe /c \"" .. "{TOUCH} %{wks.location}/compile_commands/%{cfg.shortname}.json", "cmd.exe /c \"" .. "{COPY} %{wks.location}/compile_commands/%{cfg.shortname}.json ../compile_commands.json*" diff --git a/src/hooks/createmove.cc b/src/hooks/createmove.cc index 16089dd..d8a837a 100644 --- a/src/hooks/createmove.cc +++ b/src/hooks/createmove.cc @@ -76,8 +76,8 @@ bool hooked_create_move(void *instance, float sample_framerate, UserCmd *user_cm // Do create_move() - backtrack::create_move(user_cmd); aimbot::create_move(user_cmd); + backtrack::create_move(user_cmd); backtrack::create_move_finish(user_cmd); diff --git a/src/modules/aimbot.cc b/src/modules/aimbot.cc index 367b2b5..e89a797 100644 --- a/src/modules/aimbot.cc +++ b/src/modules/aimbot.cc @@ -288,8 +288,10 @@ static auto try_autoshoot(sdk::UserCmd *cmd) { // Only allow autoshoot when we are zoomed and can get headshots if (local_weapon->client_class()->class_id == class_id::CTFSniperRifle && (local_player->cond() & 2)) { - if ((local_player->tick_base() * IFace()->interval_per_tick - local_player->fov_time()) >= 0.2) - autoshoot_allowed = true; + auto player_time = local_player->tick_base() * IFace()->interval_per_tick; + auto time_delta = player_time - local_player->fov_time(); + + if (time_delta >= 0.2) autoshoot_allowed = true; } if (autoshoot_allowed) cmd->buttons |= 1; diff --git a/src/modules/backtra.cc b/src/modules/backtra.cc index 2520b66..6f918dc 100644 --- a/src/modules/backtra.cc +++ b/src/modules/backtra.cc @@ -203,7 +203,7 @@ void create_move_pre_predict(sdk::UserCmd *cmd) { #ifdef _DEBUG if (layer_count > backtrack_max_anim_layers) logging::msg("Not enough space for all layers (has %d, needs %d)", - backtrack_max_anim_layers, layer_count); + backtrack_max_anim_layers, layer_count); #endif auto layer_max = std::min(backtrack_max_anim_layers, layer_count); @@ -228,6 +228,7 @@ static math::Vector hullcolor[8] = { }; void create_move(sdk::UserCmd *cmd) { +#ifdef _DEBUG for (auto entity : IFace()->get_range()) { if (entity->is_valid() == false) continue; auto player = entity->to_player(); @@ -240,19 +241,21 @@ void create_move(sdk::UserCmd *cmd) { IFace()->add_text_overlay(record.origin, 0, "%d", record.this_tick); - if (record.this_tick == cmd->tick_count) - for (u32 i = 0; i < record.max_hitboxes; i++) { - auto &hitboxes = record.hitboxes; + //if (record.this_tick == cmd->tick_count) { + auto &hitboxes = record.hitboxes; + for (u32 i = 0; i < record.max_hitboxes; i++) { - auto j = (record.this_tick % 8); - auto r = (int)(255.0f * hullcolor[j].x); - auto g = (int)(255.0f * hullcolor[j].y); - auto b = (int)(255.0f * hullcolor[j].z); + auto j = (record.this_tick % 8); + auto r = (int)(255.0f * hullcolor[j].x); + auto g = (int)(255.0f * hullcolor[j].y); + auto b = (int)(255.0f * hullcolor[j].z); - IFace()->add_box_overlay(hitboxes.origin[i], hitboxes.raw_min[i], hitboxes.raw_max[i], hitboxes.rotation[i], r, g, b, 100, 0); - } + IFace()->add_box_overlay(hitboxes.origin[i], hitboxes.raw_min[i], hitboxes.raw_max[i], hitboxes.rotation[i], r, g, b, 100, 0); + } + //} } } +#endif } auto create_move_finish(sdk::UserCmd *cmd) -> void { diff --git a/src/sdk/player.cc b/src/sdk/player.cc index aa07b95..dade051 100644 --- a/src/sdk/player.cc +++ b/src/sdk/player.cc @@ -6,6 +6,7 @@ #include "netvar.hh" #include "vfunc.hh" +#include "log.hh" #include "sdk.hh" using namespace sdk; @@ -210,6 +211,7 @@ static auto get_hitboxes_internal(Player *player, const StudioModel *model, Play auto hitbox_set_ptr = model->hitbox_set(0); assert(hitbox_set_ptr); + // Allow us to use operator[] properly auto &hitbox_set = *hitbox_set_ptr; auto hitboxes_count = std::min(128u, hitbox_set.hitboxes_count); @@ -221,24 +223,21 @@ static auto get_hitboxes_internal(Player *player, const StudioModel *model, Play auto box = hitbox_set[i]; assert(box); - math::Vector rotation; - math::matrix_angles(bone_to_world[box->bone], rotation, origin); + const auto &transform = bone_to_world[box->bone]; - math::Matrix3x4 rotate_matrix; - rotate_matrix.from_angle(rotation); - - math::Vector rotated_min, rotated_max; - - rotated_min = rotate_matrix.rotate_vector(box->min); - rotated_max = rotate_matrix.rotate_vector(box->max); + auto rotated_min = transform.vector_transform(box->min); + auto rotated_max = transform.vector_transform(box->max); centre = rotated_min.lerp(rotated_max, 0.5); - hitboxes->centre[i] = origin + centre; - hitboxes->min[i] = origin + rotated_min; - hitboxes->max[i] = origin + rotated_max; + hitboxes->centre[i] = centre; + hitboxes->min[i] = rotated_min; + hitboxes->max[i] = rotated_max; #ifdef _DEBUG + math::Vector rotation; + math::matrix_angles(transform, &rotation.x); + hitboxes->rotation[i] = rotation; hitboxes->origin[i] = origin; hitboxes->raw_min[i] = box->min; diff --git a/src/utils/math.hh b/src/utils/math.hh index 46b221b..2615c77 100644 --- a/src/utils/math.hh +++ b/src/utils/math.hh @@ -263,6 +263,15 @@ public: return out; } + auto vector_transform(const Vector &in) const { + Vector column; + + auto out = rotate_vector(in); + out += (get_column(3, column), column); + + return out; + } + auto from_angle(const Vector &angles) { auto radian_pitch = to_radians(angles.x); auto radian_yaw = to_radians(angles.y); @@ -351,4 +360,4 @@ inline void matrix_angles(const Matrix3x4 &matrix, Vector &angles, Vector &posit } // namespace math -#define Vector_split_components(v) (v).x, (v).y, (v).z +#define vector_split_components(v) (v).x, (v).y, (v).z