diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/TempleWare-Legacy-main.iml b/.idea/TempleWare-Legacy-main.iml
new file mode 100644
index 0000000..4c94235
--- /dev/null
+++ b/.idea/TempleWare-Legacy-main.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/editor.xml b/.idea/editor.xml
new file mode 100644
index 0000000..e54e87a
--- /dev/null
+++ b/.idea/editor.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..3a4aee6
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/TempleWare_CS2_sln.xml b/.idea/runConfigurations/TempleWare_CS2_sln.xml
new file mode 100644
index 0000000..4144c96
--- /dev/null
+++ b/.idea/runConfigurations/TempleWare_CS2_sln.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..a2f310a
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TempleWare-CS2/TempleWare-CS2.vcxproj b/TempleWare-CS2/TempleWare-CS2.vcxproj
index d3873fb..a2aa1d8 100644
--- a/TempleWare-CS2/TempleWare-CS2.vcxproj
+++ b/TempleWare-CS2/TempleWare-CS2.vcxproj
@@ -171,6 +171,7 @@
+
@@ -227,6 +228,7 @@
+
diff --git a/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.cpp b/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.cpp
index f78ccfd..47203d0 100644
--- a/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.cpp
+++ b/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.cpp
@@ -6,7 +6,7 @@
C_CSPlayerPawn::C_CSPlayerPawn(uintptr_t address) : address(address) {}
Vector_t C_CSPlayerPawn::getPosition() const {
- return *(Vector_t*)(address + SchemaFinder::Get(hash_32_fnv1a_const("C_BasePlayerPawn->m_vOldOrigin")));
+ return *(Vector_t*)(this->address + SchemaFinder::Get(hash_32_fnv1a_const("C_BasePlayerPawn->m_vOldOrigin")));
}
Vector_t C_CSPlayerPawn::getEyePosition() const {
@@ -48,3 +48,7 @@ uint8_t C_CSPlayerPawn::getTeam() const {
Vector_t C_CSPlayerPawn::getViewOffset() const {
return *reinterpret_cast((uintptr_t)this + SchemaFinder::Get(hash_32_fnv1a_const("C_BaseModelEntity->m_vecViewOffset")));
}
+
+int C_CSPlayerPawn::getShotsFired() const {
+ return *reinterpret_cast((uintptr_t)this + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_iShotsFired")));
+} //{ return *reinterpret_cast(address + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_iShotsFired"))); }
diff --git a/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.h b/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.h
index 54efd2d..d9eaf64 100644
--- a/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.h
+++ b/TempleWare-CS2/source/cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.h
@@ -23,6 +23,7 @@ public:
int getHealth() const;
uint8_t getTeam() const;
Vector_t getViewOffset() const;
+ int getShotsFired() const;
private:
uintptr_t address;
};
diff --git a/TempleWare-CS2/source/templeware/config/config.cpp b/TempleWare-CS2/source/templeware/config/config.cpp
index 90d84d6..c1cbd07 100644
--- a/TempleWare-CS2/source/templeware/config/config.cpp
+++ b/TempleWare-CS2/source/templeware/config/config.cpp
@@ -50,4 +50,18 @@ namespace Config {
bool fov_circle = 0;
ImVec4 fovCircleColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
float aimbot_smooth = 0.f;
+ bool aimbot_dynamic_smooth = false;
+ float aimbot_dynamic_smooth_factor = 1.0f;
+ bool aimbot_on_lmb = false;
+ bool shooterAfterAim = false; // Если true, ЛКМ блокируется до наведения на врага
+ bool triggerbot_hold_lmb = false; // Если true, триггербот удерживает ЛКМ пока наведён на врага
+
+ int aimbot_bone = Config::BONE_HEAD;
+ int aimbot_key = 0x12; // VK_MENU (Alt) по умолчанию
+ bool always_on_aimbot = false;
+
+ bool triggerbot = false;
+ bool always_on_triggerbot = false;
+ int triggerbot_key = 0x05; // Например, VK_X или другой
+ float triggerbot_delay = 0.0f;
}
diff --git a/TempleWare-CS2/source/templeware/config/config.h b/TempleWare-CS2/source/templeware/config/config.h
index 0e9d3f9..898bfea 100644
--- a/TempleWare-CS2/source/templeware/config/config.h
+++ b/TempleWare-CS2/source/templeware/config/config.h
@@ -49,4 +49,26 @@ namespace Config {
extern bool fov_circle;
extern ImVec4 fovCircleColor;
extern float aimbot_smooth;
+ extern bool aimbot_dynamic_smooth;
+ extern float aimbot_dynamic_smooth_factor;
+ extern bool aimbot_on_lmb;
+ extern bool shooterAfterAim;
+ extern bool triggerbot_hold_lmb; // Если true, триггербот удерживает ЛКМ пока наведён на врага
+
+ // --- Для аимбота ---
+ enum AimbotBone {
+ BONE_HEAD = 0,
+ BONE_NECK = 1,
+ BONE_BODY = 2,
+ BONE_NEAREST = 3
+ };
+ extern int aimbot_bone; // Используется как int для сериализации
+ extern int aimbot_key;
+ extern bool always_on_aimbot;
+
+ // --- Для триггербота ---
+ extern bool triggerbot;
+ extern bool always_on_triggerbot;
+ extern int triggerbot_key;
+ extern float triggerbot_delay;
}
diff --git a/TempleWare-CS2/source/templeware/config/configmanager.h b/TempleWare-CS2/source/templeware/config/configmanager.h
index 784d018..975d395 100644
--- a/TempleWare-CS2/source/templeware/config/configmanager.h
+++ b/TempleWare-CS2/source/templeware/config/configmanager.h
@@ -120,6 +120,20 @@ namespace internal_config
j["rcs"] = Config::rcs;
j["fov_circle"] = Config::fov_circle;
j["aimbot_smooth"] = Config::aimbot_smooth;
+ j["aimbot_bone"] = Config::aimbot_bone;
+ j["aimbot_key"] = Config::aimbot_key;
+ j["team_check"] = Config::team_check;
+ j["always_on_aimbot"] = Config::always_on_aimbot;
+ j["aimbot_dynamic_smooth"] = Config::aimbot_dynamic_smooth;
+ j["aimbot_dynamic_smooth_factor"] = Config::aimbot_dynamic_smooth_factor;
+ j["aimbot_on_lmb"] = Config::aimbot_on_lmb;
+ j["showNameTags"] = Config::showNameTags;
+ j["triggerbot_hold_lmb"] = Config::triggerbot_hold_lmb;
+ j["shooterAfterAim"] = Config::shooterAfterAim;
+ j["always_on_triggerbot"] = Config::always_on_triggerbot;
+ j["triggerbot"] = Config::triggerbot;
+ j["triggerbot_key"] = Config::triggerbot_key;
+ j["triggerbot_delay"] = Config::triggerbot_delay;
j["enemyChamsInvisible"] = Config::enemyChamsInvisible;
j["enemyChams"] = Config::enemyChams;
@@ -219,6 +233,20 @@ namespace internal_config
Config::rcs = j.value("rcs", false);
Config::aimbot_fov = j.value("aimbot_fov", 0.f);
Config::aimbot_smooth = j.value("aimbot_smooth", 0.f);
+ Config::aimbot_bone = j.value("aimbot_bone", 0);
+ Config::aimbot_key = j.value("aimbot_key", 0x12);
+ Config::team_check = j.value("team_check", true);
+ Config::always_on_aimbot = j.value("always_on_aimbot", false);
+ Config::aimbot_dynamic_smooth = j.value("aimbot_dynamic_smooth", false);
+ Config::aimbot_dynamic_smooth_factor = j.value("aimbot_dynamic_smooth_factor", 1.0f);
+ Config::aimbot_on_lmb = j.value("aimbot_on_lmb", false);
+ Config::showNameTags = j.value("showNameTags", false);
+ Config::triggerbot_hold_lmb = j.value("triggerbot_hold_lmb", false);
+ Config::shooterAfterAim = j.value("shooterAfterAim", false);
+ Config::always_on_triggerbot = j.value("always_on_triggerbot", false);
+ Config::triggerbot = j.value("triggerbot", false);
+ Config::triggerbot_key = j.value("triggerbot_key", 0x05);
+ Config::triggerbot_delay = j.value("triggerbot_delay", 0.0f);
Config::antiflash = j.value("antiflash", false);
diff --git a/TempleWare-CS2/source/templeware/features/aim/aim.cpp b/TempleWare-CS2/source/templeware/features/aim/aim.cpp
index e51255b..42e290d 100644
--- a/TempleWare-CS2/source/templeware/features/aim/aim.cpp
+++ b/TempleWare-CS2/source/templeware/features/aim/aim.cpp
@@ -3,13 +3,93 @@
#include "../../../templeware/interfaces/interfaces.h"
#include "../../../templeware/hooks/hooks.h"
#include "../../../templeware/config/config.h"
+#include "../../utils/memory/patternscan/patternscan.h"
#include
#include
#include "../../menu/hud.h"
+#include "../../menu/menu.h"
+#include
+#include
+
+// Индексы костей (актуально для CS2)
+constexpr int BONE_INDEX_HEAD = 6; // Head
+constexpr int BONE_INDEX_NECK = 5; // Neck
+constexpr int BONE_INDEX_BODY = 4;//0; // Pelvis/Root
+
+// --- lastBoneIdx теперь глобальный static ---
+static int lastBoneIdx = -1;
+
+inline QAngle_t CalcAngles(Vector_t viewPos, Vector_t aimPos)
+{
+ QAngle_t angle = { 0, 0, 0 };
+
+ Vector_t delta = aimPos - viewPos;
+
+ angle.x = -asin(delta.z / delta.Length()) * (180.0f / 3.141592654f);
+ angle.y = atan2(delta.y, delta.x) * (180.0f / 3.141592654f);
+
+ return angle;
+}
+
+inline float GetFov(const QAngle_t& viewAngle, const QAngle_t& aimAngle)
+{
+ QAngle_t delta = (aimAngle - viewAngle).Normalize();
+
+ return sqrtf(powf(delta.x, 2.0f) + powf(delta.y, 2.0f));
+}
+
+// // Сигнатура функции GetBonePosition (актуально для client.dll):
+// // 48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC ? 4D 8B F1
+// using GetBonePositionFn = int64_t(__fastcall*)(void*, uint32_t, Vector_t*, Vector_t*);
+// static GetBonePositionFn oGetBonePosition = nullptr;
+
+// static void InitGetBonePositionSig() {
+// if (!oGetBonePosition) {
+// uintptr_t addr = M::patternScan("client.dll", "48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 48 83 EC ? 4D 8B F1");
+// oGetBonePosition = reinterpret_cast(addr);
+// }
+// }
+
+Vector_t GetBonePosition(const C_CSPlayerPawn* Entity, int boneIdx) {
+ if (!Entity) return {};
+ // Внешний способ: читаем Vector3 по адресу boneMatrix + boneIdx * 0x20
+ uintptr_t pGameSceneNode = *reinterpret_cast((uintptr_t)Entity + 0x328);
+ if (!pGameSceneNode) return {};
+ uintptr_t pBoneMatrix = *reinterpret_cast(pGameSceneNode + 0x1F0);
+ if (!pBoneMatrix) return {};
+ return *reinterpret_cast(pBoneMatrix + boneIdx * 0x20);
+}
+
+// Получить позицию для аимбота в зависимости от выбора пользователя
+Vector_t GetAimbotTargetPos(const C_CSPlayerPawn* Entity, const Vector_t& from, const QAngle_t& viewAngles) {
+ switch (Config::aimbot_bone) {
+ case Config::BONE_HEAD:
+ return GetBonePosition(Entity, BONE_INDEX_HEAD);
+ case Config::BONE_NECK:
+ return GetBonePosition(Entity, BONE_INDEX_NECK);
+ case Config::BONE_BODY:
+ return GetBonePosition(Entity, BONE_INDEX_BODY);
+ case Config::BONE_NEAREST:
+ default: {
+ // Каждый раз ищем ближайшую кость по FOV
+ std::array bones = {BONE_INDEX_HEAD, BONE_INDEX_BODY};
+ float bestFov = FLT_MAX;
+ int bestIdx = BONE_INDEX_HEAD;
+ for (int idx : bones) {
+ Vector_t pos = GetBonePosition(Entity, idx);
+ QAngle_t ang = CalcAngles(from, pos); // <-- Исправлено!
+ float fov = GetFov(viewAngles, ang);
+ if (fov < bestFov && std::isfinite(fov)) {
+ bestFov = fov;
+ bestIdx = idx;
+ }
+ }
+ return GetBonePosition(Entity, bestIdx);
+ }
+ }
+}
-// Literally the most autistic code ive ever written in my life
-// Please dont ever make me do this again
Vector_t GetEntityEyePos(const C_CSPlayerPawn* Entity) {
if (!Entity)
@@ -27,110 +107,306 @@ Vector_t GetEntityEyePos(const C_CSPlayerPawn* Entity) {
return Result;
}
-inline QAngle_t CalcAngles(Vector_t viewPos, Vector_t aimPos)
-{
- QAngle_t angle = { 0, 0, 0 };
-
- Vector_t delta = aimPos - viewPos;
-
- angle.x = -asin(delta.z / delta.Length()) * (180.0f / 3.141592654f);
- angle.y = atan2(delta.y, delta.x) * (180.0f / 3.141592654f);
-
- return angle;
-}
-
-inline float GetFov(const QAngle_t& viewAngle, const QAngle_t& aimAngle)
-{
- QAngle_t delta = (aimAngle - viewAngle).Normalize();
-
- return sqrtf(powf(delta.x, 2.0f) + powf(delta.y, 2.0f));
-}
-
void Aimbot() {
- static C_CSPlayerPawn* lockedTarget = nullptr;
- static bool prevAimbotState = false;
+ static C_CSPlayerPawn* lockedTarget = nullptr;
+ static bool prevAimbotState = false;
+ static bool targetWasLost = false;
+ static QAngle_t last_punch_angle = {0,0,0};
+ static int shotCount = 0;
+ bool aimbotActive = Config::always_on_aimbot ? true : Config::aimbot;
+ // --- shooterAfterAim + triggerbot_key ---
+ if (Config::shooterAfterAim && (GetAsyncKeyState(Config::triggerbot_key) & 0x8000)) {
+ aimbotActive = true;
+ }
+ C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
+ Vector_t lep = GetEntityEyePos(lp);
+ QAngle_t* viewangles = (QAngle_t*)(modules.getModule("client") + 0x1A78650);
+ bool isShooting = (GetAsyncKeyState(Config::triggerbot_key) & 0x8000) || (GetAsyncKeyState(VK_LBUTTON) & 0x8000);
- bool aimbotActive = Config::aimbot;
+ int shotsFired = lp ? lp->getShotsFired() : 0;
+ shotCount = shotsFired;
+ g_DebugString = "debug: " + std::to_string(shotsFired);
+
+ if (Config::aimbot_on_lmb && !Config::always_on_aimbot) {
+ aimbotActive = isShooting;
+ }
- // Получаем локального игрока и viewangles всегда, чтобы не дублировать код
- C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
- Vector_t lep = GetEntityEyePos(lp);
- QAngle_t* viewangles = (QAngle_t*)(modules.getModule("client") + 0x1A78650);
+ // Получаем локального игрока и viewangles всегда, чтобы не дублировать код
+ // C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
+ // Vector_t lep = GetEntityEyePos(lp);
+ // QAngle_t* viewangles = (QAngle_t*)(modules.getModule("client") + 0x1A78650);
- // Если кнопка только что нажата (переход с false на true) — ищем новую цель
- if (aimbotActive && !prevAimbotState) {
- int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
- float bestFov = Config::aimbot_fov;
- C_CSPlayerPawn* bestTarget = nullptr;
- QAngle_t bestAngle = { 0, 0, 0 };
+ // Проверка: стреляет ли игрок (LMB)
+ // bool isShooting = (GetAsyncKeyState(VK_LBUTTON) & 0x8000);
- for (int i = 1; i <= nMaxHighestEntity; i++) {
- auto Entity = I::GameEntity->Instance->Get(i);
- if (!Entity)
- continue;
- if (!Entity->handle().valid())
- continue;
- SchemaClassInfoData_t* _class = nullptr;
- Entity->dump_class_info(&_class);
- if (!_class)
- continue;
- const uint32_t hash = HASH(_class->szName);
- if (hash == HASH("C_CSPlayerPawn")) {
- C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
- if (pawn->get_entity_by_handle() == lp->get_entity_by_handle())
- continue;
- if (pawn->getHealth() <= 0)
- continue;
- if (!Config::team_check && pawn->getTeam() == lp->getTeam())
- continue;
- Vector_t eye_pos = GetEntityEyePos(pawn);
- QAngle_t angle = CalcAngles(eye_pos, lep);
- angle.x *= -1.f;
- angle.y += 180.f;
- const float fov = GetFov(*viewangles, angle);
- if (!std::isfinite(fov) || fov > bestFov)
- continue;
- bestFov = fov;
- bestTarget = pawn;
- bestAngle = angle;
- }
- }
- lockedTarget = bestTarget;
- }
+ // --- Новый режим: always_on_aimbot ---
+ if (Config::always_on_aimbot) {
+ int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
+ float bestFov = Config::aimbot_fov;
+ C_CSPlayerPawn* bestTarget = nullptr;
+ QAngle_t bestAngle = { 0, 0, 0 };
- // Если кнопка отпущена — сбрасываем захват
- if (!aimbotActive)
- lockedTarget = nullptr;
+ for (int i = 1; i <= nMaxHighestEntity; i++) {
+ auto Entity = I::GameEntity->Instance->Get(i);
+ if (!Entity)
+ continue;
+ if (!Entity->handle().valid())
+ continue;
+ SchemaClassInfoData_t* _class = nullptr;
+ Entity->dump_class_info(&_class);
+ if (!_class)
+ continue;
+ const uint32_t hash = HASH(_class->szName);
+ if (hash == HASH("C_CSPlayerPawn")) {
+ C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
+ if (pawn->get_entity_by_handle() == lp->get_entity_by_handle())
+ continue;
+ if (pawn->getHealth() <= 0)
+ continue;
+ if (Config::team_check && pawn->getTeam() == lp->getTeam())
+ continue;
+ Vector_t target_pos = GetEntityEyePos(pawn);//GetAimbotTargetPos(pawn, lep);
+ QAngle_t angle = CalcAngles(target_pos, lep);
+ angle.x *= -1.f;
+ angle.y += 180.f;
+ const float fov = GetFov(*viewangles, angle);
+ if (!std::isfinite(fov) || fov > bestFov)
+ continue;
+ bestFov = fov;
+ bestTarget = pawn;
+ bestAngle = angle;
+ }
+ }
+ if (bestTarget) {
+ Vector_t target_pos = GetAimbotTargetPos(bestTarget, lep, *viewangles);
+ //Vector_t target_pos = GetEntityEyePos(bestTarget);
+ QAngle_t angle = CalcAngles(target_pos, lep);
+ angle.x *= -1.f;
+ angle.y += 180.f;
+ QAngle_t ang_punch_angle = *(QAngle_t*)((uintptr_t)lp + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_aimPunchAngle")));
+ if (isShooting) {
+ last_punch_angle = ang_punch_angle;
+ } else {
+ last_punch_angle = {0,0,0};
+ }
+ // --- RCS ---
+ bool rcsActive = (Config::rcs || Config::shooterAfterAim) && (shotCount > 1);
+ if (rcsActive)
+ angle -= last_punch_angle * 2.f;
+ angle.z = 0.f;
+ angle = angle.Normalize();
+ // --- RCS ---
+ QAngle_t delta = (angle - *viewangles).Normalize();
+ if (rcsActive) {
+ float smooth_rcs = Config::aimbot_smooth;
+ if (Config::aimbot_dynamic_smooth) {
+ float fov = sqrtf(delta.x * delta.x + delta.y * delta.y);
+ float maxFov = Config::aimbot_fov;
+ float factor = (maxFov > 0.01f) ? (fov / maxFov) : 0.f;
+ smooth_rcs = Config::aimbot_smooth + (Config::aimbot_smooth * factor * Config::aimbot_dynamic_smooth_factor);
+ }
+ smooth_rcs = std::fmax(smooth_rcs / 10.f, 1.0f);
+ angle -= last_punch_angle * 2.f * smooth_rcs;
+ }
+ // --- Smooth ---
+ if (Config::aimbot_smooth > 0.f) {
+ QAngle_t cur = *viewangles;
+ QAngle_t delta = (angle - cur).Normalize();
+ float smooth = Config::aimbot_smooth;
+ if (Config::aimbot_dynamic_smooth) {
+ float fov = sqrtf(delta.x * delta.x + delta.y * delta.y);
+ float maxFov = Config::aimbot_fov;
+ float factor = (maxFov > 0.01f) ? (fov / maxFov) : 0.f;
+ smooth = smooth + (smooth * factor * Config::aimbot_dynamic_smooth_factor);
+ }
+ angle = cur + delta * (1.f / smooth);
+ angle = angle.Normalize();
+ *viewangles = angle;
+ } else {
+ *viewangles = angle;
+ }
+ }
+ // В этом режиме не используем lockedTarget и не трогаем targetWasLost/prevAimbotState
+ return;
+ }
- // Если есть захваченная цель и кнопка удерживается
- if (aimbotActive && lockedTarget) {
- // Проверяем, что цель всё ещё валидна
- if (!lockedTarget->handle().valid() || lockedTarget->getHealth() <= 0) {
- lockedTarget = nullptr;
- }
- else {
- Vector_t eye_pos = GetEntityEyePos(lockedTarget);
- QAngle_t angle = CalcAngles(eye_pos, lep);
- angle.x *= -1.f;
- angle.y += 180.f;
- QAngle_t ang_punch_angle = *(QAngle_t*)((uintptr_t)lp + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_aimPunchAngle")));
- if (Config::rcs)
- angle -= ang_punch_angle * 2.f;
- angle.z = 0.f;
- angle = angle.Normalize();
- if (Config::aimbot_smooth > 0.f) {
- QAngle_t cur = *viewangles;
- QAngle_t delta = (angle - cur).Normalize();
- float smooth = Config::aimbot_smooth;
- angle = cur + delta * (1.f / smooth);
- angle = angle.Normalize();
- *viewangles = angle;
- }
- else {
- *viewangles = angle;
- }
- }
- }
+ // Если кнопка только что нажата (переход с false на true) — ищем новую цель
+ if (aimbotActive && !prevAimbotState) {
+ lastBoneIdx = -1; // Сброс при новой активации
+ int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
+ float bestFov = Config::aimbot_fov;
+ C_CSPlayerPawn* bestTarget = nullptr;
+ QAngle_t bestAngle = { 0, 0, 0 };
- prevAimbotState = aimbotActive;
+ for (int i = 1; i <= nMaxHighestEntity; i++) {
+ auto Entity = I::GameEntity->Instance->Get(i);
+ if (!Entity)
+ continue;
+ if (!Entity->handle().valid())
+ continue;
+ SchemaClassInfoData_t* _class = nullptr;
+ Entity->dump_class_info(&_class);
+ if (!_class)
+ continue;
+ const uint32_t hash = HASH(_class->szName);
+ if (hash == HASH("C_CSPlayerPawn")) {
+ C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
+ if (pawn->get_entity_by_handle() == lp->get_entity_by_handle())
+ continue;
+ if (pawn->getHealth() <= 0)
+ continue;
+ if (Config::team_check && pawn->getTeam() == lp->getTeam())
+ continue;
+ Vector_t target_pos = GetEntityEyePos(pawn);//GetAimbotTargetPos(pawn, lep);
+ QAngle_t angle = CalcAngles(target_pos, lep);
+ angle.x *= -1.f;
+ angle.y += 180.f;
+ const float fov = GetFov(*viewangles, angle);
+ if (!std::isfinite(fov) || fov > bestFov)
+ continue;
+ bestFov = fov;
+ bestTarget = pawn;
+ bestAngle = angle;
+ }
+ }
+ lockedTarget = bestTarget;
+ targetWasLost = false;
+ // Сброс punch_angle при смене цели
+ last_punch_angle = {0,0,0};
+ }
+
+ // Если кнопка отпущена — сбрасываем захват
+ if (!aimbotActive) {
+ lockedTarget = nullptr;
+ targetWasLost = false;
+ last_punch_angle = {0,0,0}; // сброс rcs
+ // Сброс lastBoneIdx при отпускании кнопки аимбота (например, в Aimbot()):
+ // if (!aimbotActive) lastBoneIdx = -1;
+ }
+
+ // Если есть захваченная цель и кнопка удерживается
+ if (aimbotActive && lockedTarget) {
+ // Проверяем, что цель всё ещё валидна
+ if (!lockedTarget->handle().valid() || lockedTarget->getHealth() <= 0) {
+ lockedTarget = nullptr;
+ targetWasLost = true;
+ // Не ищем новую цель до повторного нажатия!
+ last_punch_angle = {0,0,0}; // сброс rcs
+ }
+ else {
+ Vector_t target_pos = GetAimbotTargetPos(lockedTarget, lep, *viewangles);
+ QAngle_t angle = CalcAngles(target_pos, lep);
+ angle.x *= -1.f;
+ angle.y += 180.f;
+ QAngle_t ang_punch_angle = *(QAngle_t*)((uintptr_t)lp + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_aimPunchAngle")));
+ if (isShooting) {
+ last_punch_angle = ang_punch_angle;
+ } else {
+ last_punch_angle = {0,0,0};
+ }
+ // --- RCS ---
+ bool rcsActive = (Config::rcs || Config::shooterAfterAim) && (shotCount > 1);
+ if (rcsActive)
+ angle -= last_punch_angle * 2.f;
+ angle.z = 0.f;
+ angle = angle.Normalize();
+ // --- RCS ---
+ QAngle_t delta = (angle - *viewangles).Normalize();
+ if (rcsActive) {
+ float smooth_rcs = Config::aimbot_smooth;
+ if (Config::aimbot_dynamic_smooth) {
+ float fov = sqrtf(delta.x * delta.x + delta.y * delta.y);
+ float maxFov = Config::aimbot_fov;
+ float factor = (maxFov > 0.01f) ? (fov / maxFov) : 0.f;
+ smooth_rcs = Config::aimbot_smooth + (Config::aimbot_smooth * factor * Config::aimbot_dynamic_smooth_factor);
+ }
+ smooth_rcs = std::fmax(smooth_rcs / 10.f, 1.0f);
+ angle -= last_punch_angle * 2.f * smooth_rcs;
+ }
+ // --- Smooth ---
+ if (Config::aimbot_smooth > 0.f) {
+ QAngle_t cur = *viewangles;
+ QAngle_t delta = (angle - cur).Normalize();
+ float smooth = Config::aimbot_smooth;
+ if (Config::aimbot_dynamic_smooth) {
+ float fov = sqrtf(delta.x * delta.x + delta.y * delta.y);
+ float maxFov = Config::aimbot_fov;
+ float factor = (maxFov > 0.01f) ? (fov / maxFov) : 0.f;
+ smooth = smooth + (smooth * factor * Config::aimbot_dynamic_smooth_factor);
+ }
+ angle = cur + delta * (1.f / smooth);
+ angle = angle.Normalize();
+ *viewangles = angle;
+ } else {
+ *viewangles = angle;
+ }
+ }
+ }
+
+ //Если кнопка зажата, цели нет, и мы не теряли цель (т.е. только в начале или если цели не было вообще)
+ if (aimbotActive && !lockedTarget && !targetWasLost) {
+ int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
+ float bestFov = Config::aimbot_fov;
+ C_CSPlayerPawn* bestTarget = nullptr;
+ QAngle_t bestAngle = { 0, 0, 0 };
+
+ for (int i = 1; i <= nMaxHighestEntity; i++) {
+ auto Entity = I::GameEntity->Instance->Get(i);
+ if (!Entity)
+ continue;
+ if (!Entity->handle().valid())
+ continue;
+ SchemaClassInfoData_t* _class = nullptr;
+ Entity->dump_class_info(&_class);
+ if (!_class)
+ continue;
+ const uint32_t hash = HASH(_class->szName);
+ if (hash == HASH("C_CSPlayerPawn")) {
+ C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
+ if (pawn->get_entity_by_handle() == lp->get_entity_by_handle())
+ continue;
+ if (pawn->getHealth() <= 0)
+ continue;
+ if (Config::team_check && pawn->getTeam() == lp->getTeam())
+ continue;
+ Vector_t target_pos = GetEntityEyePos(pawn);//GetAimbotTargetPos(pawn, lep);
+ QAngle_t angle = CalcAngles(target_pos, lep);
+ angle.x *= -1.f;
+ angle.y += 180.f;
+ const float fov = GetFov(*viewangles, angle);
+ if (!std::isfinite(fov) || fov > bestFov)
+ continue;
+ bestFov = fov;
+ bestTarget = pawn;
+ bestAngle = angle;
+ }
+ }
+ lockedTarget = bestTarget;
+ // Сброс punch_angle при смене цели
+ last_punch_angle = {0,0,0};
+ }
+
+ prevAimbotState = aimbotActive;
+
+ //if (Config::shooterAfterAim) {
+ // if (g_ShowMenu) return;
+ // C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
+ // bool onEnemy = false;
+ // if (lp) {
+ // int crosshairIdx = *(int*)((uintptr_t)lp + 0x1458); // m_iIDEntIndex
+ // if (crosshairIdx > 0) {
+ // auto target = I::GameEntity->Instance->Get(crosshairIdx);
+ // if (target && target->getHealth() > 0 && (!Config::team_check || target->getTeam() != lp->getTeam()))
+ // onEnemy = true;
+ // }
+ // }
+ // // Если врага нет под прицелом — всегда блокируем ЛКМ
+ // if (!onEnemy && (GetAsyncKeyState(VK_LBUTTON) & 0x8000)) {
+ // INPUT input = { 0 };
+ // input.type = INPUT_MOUSE;
+ // input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
+ // SendInput(1, &input, sizeof(INPUT));
+ // }
+ // // return; // Не делаем return, чтобы аимбот работал всегда
+ //}
}
diff --git a/TempleWare-CS2/source/templeware/features/triggerbot/triggerbot.cpp b/TempleWare-CS2/source/templeware/features/triggerbot/triggerbot.cpp
new file mode 100644
index 0000000..3a867ea
--- /dev/null
+++ b/TempleWare-CS2/source/templeware/features/triggerbot/triggerbot.cpp
@@ -0,0 +1,116 @@
+#include "../../../cs2/entity/C_CSPlayerPawn/C_CSPlayerPawn.h"
+#include "../../../templeware/interfaces/CGameEntitySystem/CGameEntitySystem.h"
+#include "../../../templeware/interfaces/interfaces.h"
+#include "../../../templeware/hooks/hooks.h"
+#include "../../../templeware/config/config.h"
+#include "../../../templeware/features/aim/aim.h"
+#include
+#include
+
+// Симуляция нажатия ЛКМ
+void SimulateLMBClick() {
+ INPUT input = { 0 };
+ input.type = INPUT_MOUSE;
+ input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
+ SendInput(1, &input, sizeof(INPUT));
+ ZeroMemory(&input, sizeof(INPUT));
+ input.type = INPUT_MOUSE;
+ input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
+ SendInput(1, &input, sizeof(INPUT));
+}
+
+void SimulateLMBDown() {
+ INPUT input = { 0 };
+ input.type = INPUT_MOUSE;
+ input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
+ SendInput(1, &input, sizeof(INPUT));
+}
+void SimulateLMBUp() {
+ INPUT input = { 0 };
+ input.type = INPUT_MOUSE;
+ input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
+ SendInput(1, &input, sizeof(INPUT));
+}
+
+static DWORD lastShotTime = 0;
+void Triggerbot() {
+ static DWORD lastShotTime = 0;
+ static bool lmbHeld = false;
+ static bool firstShot = true;
+ if (!Config::triggerbot)
+ return;
+ if (!Config::always_on_triggerbot && Config::triggerbot_key && !(GetAsyncKeyState(Config::triggerbot_key) & 0x8000))
+ return;
+ if (GetAsyncKeyState(VK_LBUTTON) & 0x8000) {
+ if (lmbHeld) {
+ SimulateLMBUp();
+ lmbHeld = false;
+ }
+ firstShot = true;
+ return;
+ }
+ C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
+ if (!lp || lp->getHealth() <= 0) { firstShot = true; return; }
+ int crosshairIdx = *(int*)((uintptr_t)lp + 0x1458); // m_iIDEntIndex
+ //g_DebugString = "debug: " + std::to_string(crosshairIdx);
+ if (crosshairIdx <= 0) {
+ if (lmbHeld) {
+ SimulateLMBUp();
+ lmbHeld = false;
+ }
+ firstShot = true;
+ return;
+ }
+ auto target = I::GameEntity->Instance->Get(crosshairIdx);
+ if (!target) {
+ if (lmbHeld) {
+ SimulateLMBUp();
+ lmbHeld = false;
+ }
+ firstShot = true;
+ return;
+ }
+ if (target->getHealth() <= 0) {
+ if (lmbHeld) {
+ SimulateLMBUp();
+ lmbHeld = false;
+ }
+ firstShot = true;
+ return;
+ }
+ if (Config::team_check && target->getTeam() == lp->getTeam()) {
+ if (lmbHeld) {
+ SimulateLMBUp();
+ lmbHeld = false;
+ }
+ firstShot = true;
+ return;
+ }
+ DWORD64 now = GetTickCount64();
+ if (!Config::triggerbot_hold_lmb) {
+ if (now - lastShotTime < static_cast(Config::triggerbot_delay)) {
+ if (lmbHeld) {
+ SimulateLMBUp();
+ lmbHeld = false;
+ }
+ firstShot = true;
+ return;
+ }
+ }
+ if (Config::triggerbot_hold_lmb) {
+ if (firstShot) {
+ SimulateLMBClick();
+ firstShot = false;
+ lastShotTime = now;
+ return;
+ } else if (!lmbHeld) {
+ SimulateLMBDown();
+ lmbHeld = true;
+ }
+ lastShotTime = now;
+ return;
+ }
+ SimulateLMBClick();
+ lastShotTime = now;
+ firstShot = true;
+}
\ No newline at end of file
diff --git a/TempleWare-CS2/source/templeware/features/triggerbot/triggerbot.h b/TempleWare-CS2/source/templeware/features/triggerbot/triggerbot.h
new file mode 100644
index 0000000..b1115cc
--- /dev/null
+++ b/TempleWare-CS2/source/templeware/features/triggerbot/triggerbot.h
@@ -0,0 +1,3 @@
+#pragma once
+
+void Triggerbot();
diff --git a/TempleWare-CS2/source/templeware/hooks/hooks.cpp b/TempleWare-CS2/source/templeware/hooks/hooks.cpp
index 3158b0f..a3797f8 100644
--- a/TempleWare-CS2/source/templeware/hooks/hooks.cpp
+++ b/TempleWare-CS2/source/templeware/hooks/hooks.cpp
@@ -10,6 +10,7 @@
#include "../players/hook/playerHook.h"
#include "../features/visuals/visuals.h"
#include "../features/chams/chams.h"
+#include "../features/triggerbot/triggerbot.h"
#include "../../cs2/datatypes/cutlbuffer/cutlbuffer.h"
#include "../../cs2/datatypes/keyvalues/keyvalues.h"
@@ -28,6 +29,7 @@ void __fastcall H::hkFrameStageNotify(void* a1, int stage)
Esp::cache();
Aimbot();
+ Triggerbot(); // <--- вызов триггербота
}
}
diff --git a/TempleWare-CS2/source/templeware/keybinds/keybinds.cpp b/TempleWare-CS2/source/templeware/keybinds/keybinds.cpp
index 1cfef70..0e8059a 100644
--- a/TempleWare-CS2/source/templeware/keybinds/keybinds.cpp
+++ b/TempleWare-CS2/source/templeware/keybinds/keybinds.cpp
@@ -16,7 +16,6 @@ Keybinds::Keybinds() {
void Keybinds::pollInputs() {
for (Keybind& k : keybinds) {
if (k.key != 0) {
- // Если кнопка удерживается
if (GetAsyncKeyState(k.key) & 0x8000) {
k.var = true;
} else {
@@ -95,5 +94,65 @@ void Keybinds::menuButton(bool& var) {
}
}
+void Keybinds::menuButton(int& key) {
+ char keyName[32] = "None";
+ if (key != 0) {
+ switch (key) {
+ case VK_INSERT: strcpy_s(keyName, "INSERT"); break;
+ case VK_DELETE: strcpy_s(keyName, "DELETE"); break;
+ case VK_HOME: strcpy_s(keyName, "HOME"); break;
+ case VK_END: strcpy_s(keyName, "END"); break;
+ case VK_PRIOR: strcpy_s(keyName, "PAGE UP"); break;
+ case VK_NEXT: strcpy_s(keyName, "PAGE DOWN"); break;
+ case VK_LBUTTON: strcpy_s(keyName, "MOUSE1"); break;
+ case VK_RBUTTON: strcpy_s(keyName, "MOUSE2"); break;
+ case VK_MBUTTON: strcpy_s(keyName, "MOUSE3"); break;
+ case VK_XBUTTON1: strcpy_s(keyName, "MOUSE4"); break;
+ case VK_XBUTTON2: strcpy_s(keyName, "MOUSE5"); break;
+ default:
+ if (key >= 'A' && key <= 'Z') {
+ sprintf_s(keyName, "%c", key);
+ }
+ else if (key >= '0' && key <= '9') {
+ sprintf_s(keyName, "%c", key);
+ }
+ else {
+ sprintf_s(keyName, "0x%X", key);
+ }
+ break;
+ }
+ }
+ static bool isListening = false;
+ static bool skipFrame = false;
+ if (!isListening) {
+ ImGui::Text("[%s]", keyName);
+ ImGui::SameLine();
+ if (ImGui::Button("Change##BindInt")) {
+ isListening = true;
+ skipFrame = true;
+ }
+ } else {
+ ImGui::Text("Press any key...");
+ ImGui::SameLine();
+ if (ImGui::Button("Cancel") || (GetAsyncKeyState(VK_ESCAPE) & 0x8000)) {
+ isListening = false;
+ return;
+ }
+ if (!skipFrame) {
+ if (GetAsyncKeyState(VK_XBUTTON1) & 0x8000) { key = VK_XBUTTON1; isListening = false; return; }
+ if (GetAsyncKeyState(VK_XBUTTON2) & 0x8000) { key = VK_XBUTTON2; isListening = false; return; }
+ for (int keyCode = 7; keyCode < 256; ++keyCode) {
+ if (GetAsyncKeyState(keyCode) & 0x8000) {
+ key = keyCode;
+ isListening = false;
+ return;
+ }
+ }
+ } else {
+ skipFrame = false;
+ }
+ }
+}
+
Keybinds keybind;
diff --git a/TempleWare-CS2/source/templeware/keybinds/keybinds.h b/TempleWare-CS2/source/templeware/keybinds/keybinds.h
index d565c02..f04f440 100644
--- a/TempleWare-CS2/source/templeware/keybinds/keybinds.h
+++ b/TempleWare-CS2/source/templeware/keybinds/keybinds.h
@@ -17,6 +17,7 @@ public:
void pollInputs();
void menuButton(bool& var);
+ void menuButton(int& key);
private:
std::vector keybinds;
};
diff --git a/TempleWare-CS2/source/templeware/menu/menu.cpp b/TempleWare-CS2/source/templeware/menu/menu.cpp
index 37744cf..a6d5fa0 100644
--- a/TempleWare-CS2/source/templeware/menu/menu.cpp
+++ b/TempleWare-CS2/source/templeware/menu/menu.cpp
@@ -9,6 +9,8 @@
#include "../utils/logging/log.h"
+bool g_ShowMenu = true;
+
void ApplyImGuiTheme() {
ImGui::StyleColorsDark();
@@ -89,18 +91,30 @@ void Menu::init(HWND& window, ID3D11Device* pDevice, ID3D11DeviceContext* pConte
ApplyImGuiTheme();
- io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\arial.ttf", 16.0f);
+ // --- Поддержка кириллицы ---
+ ImFontConfig font_cfg;
+ font_cfg.OversampleH = 2;
+ font_cfg.OversampleV = 2;
+ font_cfg.PixelSnapH = true;
+ static const ImWchar ranges[] = {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0x0400, 0x052F, // Кириллица
+ 0
+ };
+ io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\arial.ttf", 16.0f, &font_cfg, ranges);
+ // --- конец кириллицы ---
std::cout << "initialized menu\n";
}
void Menu::render() {
keybind.pollInputs();
+ g_ShowMenu = showMenu;
if (showMenu) {
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse |
ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoTitleBar;
- ImGui::SetNextWindowSize(ImVec2(600, 400), ImGuiCond_Once);
+ ImGui::SetNextWindowSize(ImVec2(900, 600), ImGuiCond_Once);
ImGui::SetNextWindowPos(ImVec2(50, 50), ImGuiCond_Once);
ImGui::Begin("TempleWare | Internal", nullptr, window_flags);
@@ -139,14 +153,21 @@ void Menu::render() {
ImGui::Separator();
ImGui::Checkbox("Enable##AimBot", &Config::aimbot);
- ImGui::SameLine();
+ // Селектор кости для аимбота
+ const char* boneNames[] = { "Head", "Neck", "Body", "Nearest" };
+ ImGui::Combo("Aimbot Bone", &Config::aimbot_bone, boneNames, IM_ARRAYSIZE(boneNames));
+
ImGui::Text("Key:");
ImGui::SameLine();
- keybind.menuButton(Config::aimbot);
+ keybind.menuButton(Config::aimbot_key);
ImGui::Checkbox("Team Check", &Config::team_check);
- ImGui::SliderFloat("FOV", &Config::aimbot_fov, 0.f, 90.f);
+ ImGui::Checkbox("Aimbot on LMB", &Config::aimbot_on_lmb);
ImGui::SliderFloat("Smooth", &Config::aimbot_smooth, 0.f, 10.f, "%.2f");
+ ImGui::Checkbox("Dynamic Smooth", &Config::aimbot_dynamic_smooth);
+ if (Config::aimbot_dynamic_smooth) {
+ ImGui::SliderFloat("Dynamic Smooth Factor", &Config::aimbot_dynamic_smooth_factor, 0.1f, 25.0f, "%.2f");
+ }
ImGui::Checkbox("Draw FOV Circle", &Config::fov_circle);
if (Config::fov_circle) {
ImGui::ColorEdit4("Circle Color##FovColor", (float*)&Config::fovCircleColor);
@@ -158,8 +179,14 @@ void Menu::render() {
ImGui::BeginChild("AimRight", ImVec2(0, 0), true);
ImGui::Text("TriggerBot");
ImGui::Separator();
- ImGui::Text("No additional settings");
-
+ ImGui::Checkbox("Enable##TriggerBot", &Config::triggerbot);
+ ImGui::Checkbox("Shooter After Aim", &Config::shooterAfterAim);
+ ImGui::Checkbox("TriggerBot Hold LMB", &Config::triggerbot_hold_lmb);
+ ImGui::Checkbox("Always On##TriggerBot", &Config::always_on_triggerbot);
+ ImGui::Text("Key:");
+ ImGui::SameLine();
+ keybind.menuButton(Config::triggerbot_key);
+ ImGui::SliderFloat("Delay (ms)", &Config::triggerbot_delay, 0.0f, 500.0f, "%.0f");
ImGui::EndChild();
}
break;
diff --git a/TempleWare-CS2/source/templeware/menu/menu.h b/TempleWare-CS2/source/templeware/menu/menu.h
index 4cf05f7..90b7c09 100644
--- a/TempleWare-CS2/source/templeware/menu/menu.h
+++ b/TempleWare-CS2/source/templeware/menu/menu.h
@@ -18,3 +18,5 @@ private:
bool showMenu;
int activeTab;
};
+
+extern bool g_ShowMenu;
diff --git a/TempleWare-CS2/source/templeware/templeware.cpp b/TempleWare-CS2/source/templeware/templeware.cpp
index e0b9064..15cba0b 100644
--- a/TempleWare-CS2/source/templeware/templeware.cpp
+++ b/TempleWare-CS2/source/templeware/templeware.cpp
@@ -45,4 +45,5 @@ void TempleWare::init(HWND& window, ID3D11Device* pDevice, ID3D11DeviceContext*
internal_config::ConfigManager::Load("1");
printWithPrefix("Loaded config: 1.json");
// --- конец автозагрузки ---
+
}
diff --git a/aim.cpp b/aim.cpp
new file mode 100644
index 0000000..00c0bdb
--- /dev/null
+++ b/aim.cpp
@@ -0,0 +1,76 @@
+#include "cusercmd.h"
+#define MULTIPLAYER_BACKUP 150
+
+#define _CS_INTERNAL_CONCATENATE(LEFT, RIGHT) LEFT##RIGHT
+#define CS_CONCATENATE(LEFT, RIGHT) _CS_INTERNAL_CONCATENATE(LEFT, RIGHT)
+
+#define MEM_PAD(SIZE) \
+private: \
+ char CS_CONCATENATE(pad_0, __COUNTER__)[SIZE]; \
+public:
+
+class CTinyMoveStepData
+{
+public:
+ float flWhen; //0x0000
+ MEM_PAD(0x4); //0x0004
+ std::uint64_t nButton; //0x0008
+ bool bPressed; //0x0010
+ MEM_PAD(0x7); //0x0011
+}; //Size: 0x0018
+
+class CMoveStepButtons
+{
+public:
+ std::uint64_t nKeyboardPressed; //0x0000
+ std::uint64_t nMouseWheelheelPressed; //0x0008
+ std::uint64_t nUnPressed; //0x0010
+ std::uint64_t nKeyboardCopy; //0x0018
+}; //Size: 0x0020
+
+// @credits: www.unknowncheats.me/forum/members/2943409.html
+class CExtendedMoveData : public CMoveStepButtons
+{
+public:
+ float flForwardMove; //0x0020
+ float flSideMove; //0x0024
+ float flUpMove; //0x0028
+ std::int32_t nMouseDeltaX; //0x002C
+ std::int32_t nMouseDeltaY; //0x0030
+ std::int32_t nAdditionalStepMovesCount; //0x0034
+ CTinyMoveStepData tinyMoveStepData[12]; //0x0038
+ Vector vecViewAngle; //0x0158
+ std::int32_t nTargetHandle; //0x0164
+}; //Size:0x0168
+
+class CCSGOInput
+{
+ public:
+ MEM_PAD(0x250);
+ CUserCmd arrCommands[MULTIPLAYER_BACKUP];
+ MEM_PAD(0x99)
+ bool bInThirdPerson;
+ MEM_PAD(0x6);
+ QAngle_t angThirdPersonAngles;
+ MEM_PAD(0xE);
+ std::int32_t nSequenceNumber;
+ double dbSomeTimer;
+ CExtendedMoveData currentMoveData;
+ std::int32_t nWeaponSwitchTick;
+ MEM_PAD(0x1C4);
+ CExtendedMoveData* pExtendedMoveData;
+ MEM_PAD(0x48);
+ int32_t nAttackStartHistoryIndex1;
+ int32_t nAttackStartHistoryIndex2;
+ int32_t nAttackStartHistoryIndex3;
+
+ CUserCmd* GetUserCmd() { return &arrCommands[nSequenceNumber % MULTIPLAYER_BACKUP]; }
+
+ QAngle_t* GetViewAngles() {
+ return reinterpret_cast(memory::m_CSGOInput_GetViewAngles)(this, 0);
+ }
+
+ bool SetViewAngles(QAngle_t& vecAngles) {
+ return reinterpret_cast(memory::m_CSGOInput_SetViewAngles)(this, 0, vecAngles);
+ }
+};
diff --git a/cs2-dumper.log b/cs2-dumper.log
index 642e330..12bd309 100644
--- a/cs2-dumper.log
+++ b/cs2-dumper.log
@@ -1,5 +1,5 @@
-10:07:35 [INFO] found 16 buttons
-10:07:36 [INFO] found 131 interfaces across 33 modules
-10:07:36 [INFO] found 33 offsets across 5 modules
-10:07:36 [INFO] found 2441 classes and 368 enums across 17 modules
-10:07:36 [INFO] analysis completed in 1.27s
+08:48:07 [INFO] found 16 buttons
+08:48:07 [INFO] found 131 interfaces across 33 modules
+08:48:08 [INFO] found 33 offsets across 5 modules
+08:48:08 [INFO] found 2441 classes and 368 enums across 17 modules
+08:48:08 [INFO] analysis completed in 1.24s
diff --git a/examples/CS2-External-Overlay-Cheat b/examples/CS2-External-Overlay-Cheat
new file mode 160000
index 0000000..2a5ed89
--- /dev/null
+++ b/examples/CS2-External-Overlay-Cheat
@@ -0,0 +1 @@
+Subproject commit 2a5ed894e768b8a66a8c7ddd2ff54bcccf07067b
diff --git a/output/animationsystem_dll.cs b/output/animationsystem_dll.cs
index 084127f..7ed4d5d 100644
--- a/output/animationsystem_dll.cs
+++ b/output/animationsystem_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: animationsystem.dll
diff --git a/output/animationsystem_dll.hpp b/output/animationsystem_dll.hpp
index 765ee86..85c8403 100644
--- a/output/animationsystem_dll.hpp
+++ b/output/animationsystem_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/animationsystem_dll.rs b/output/animationsystem_dll.rs
index 7327c0f..e0d3037 100644
--- a/output/animationsystem_dll.rs
+++ b/output/animationsystem_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/buttons.cs b/output/buttons.cs
index 98af54c..32c8d7e 100644
--- a/output/buttons.cs
+++ b/output/buttons.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper {
// Module: client.dll
diff --git a/output/buttons.hpp b/output/buttons.hpp
index 362b56a..2f9d332 100644
--- a/output/buttons.hpp
+++ b/output/buttons.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/buttons.rs b/output/buttons.rs
index 2b0f578..e0aa4dd 100644
--- a/output/buttons.rs
+++ b/output/buttons.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, unused)]
diff --git a/output/client_dll.cs b/output/client_dll.cs
index 9b5a34f..b360ad4 100644
--- a/output/client_dll.cs
+++ b/output/client_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: client.dll
diff --git a/output/client_dll.hpp b/output/client_dll.hpp
index bf01cdc..265fc69 100644
--- a/output/client_dll.hpp
+++ b/output/client_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/client_dll.rs b/output/client_dll.rs
index 9deabf5..de5f089 100644
--- a/output/client_dll.rs
+++ b/output/client_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/engine2_dll.cs b/output/engine2_dll.cs
index 682af93..889b6bd 100644
--- a/output/engine2_dll.cs
+++ b/output/engine2_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: engine2.dll
diff --git a/output/engine2_dll.hpp b/output/engine2_dll.hpp
index 091a312..45f287a 100644
--- a/output/engine2_dll.hpp
+++ b/output/engine2_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/engine2_dll.rs b/output/engine2_dll.rs
index 35b0c80..9f05655 100644
--- a/output/engine2_dll.rs
+++ b/output/engine2_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/host_dll.cs b/output/host_dll.cs
index 0fc6268..25f5157 100644
--- a/output/host_dll.cs
+++ b/output/host_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: host.dll
diff --git a/output/host_dll.hpp b/output/host_dll.hpp
index c8a4fbb..83b890d 100644
--- a/output/host_dll.hpp
+++ b/output/host_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/host_dll.rs b/output/host_dll.rs
index 387bec3..46f727b 100644
--- a/output/host_dll.rs
+++ b/output/host_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/info.json b/output/info.json
index 28d5620..724d385 100644
--- a/output/info.json
+++ b/output/info.json
@@ -1,4 +1,4 @@
{
"build_number": 14088,
- "timestamp": "2025-07-17T10:07:36.863612600+00:00"
+ "timestamp": "2025-07-18T08:48:08.327988700+00:00"
}
\ No newline at end of file
diff --git a/output/interfaces.cs b/output/interfaces.cs
index 2714367..d9f5df0 100644
--- a/output/interfaces.cs
+++ b/output/interfaces.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Interfaces {
// Module: animationsystem.dll
diff --git a/output/interfaces.hpp b/output/interfaces.hpp
index 2622c9e..d213aaa 100644
--- a/output/interfaces.hpp
+++ b/output/interfaces.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/interfaces.rs b/output/interfaces.rs
index c45696d..d97b19e 100644
--- a/output/interfaces.rs
+++ b/output/interfaces.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, unused)]
diff --git a/output/materialsystem2_dll.cs b/output/materialsystem2_dll.cs
index 20fb0c9..c2c0559 100644
--- a/output/materialsystem2_dll.cs
+++ b/output/materialsystem2_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: materialsystem2.dll
diff --git a/output/materialsystem2_dll.hpp b/output/materialsystem2_dll.hpp
index 6c50d69..7be0838 100644
--- a/output/materialsystem2_dll.hpp
+++ b/output/materialsystem2_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/materialsystem2_dll.rs b/output/materialsystem2_dll.rs
index 593b45d..220a748 100644
--- a/output/materialsystem2_dll.rs
+++ b/output/materialsystem2_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/networksystem_dll.cs b/output/networksystem_dll.cs
index 0988929..ce5911c 100644
--- a/output/networksystem_dll.cs
+++ b/output/networksystem_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: networksystem.dll
diff --git a/output/networksystem_dll.hpp b/output/networksystem_dll.hpp
index 64d5ac0..5335d0e 100644
--- a/output/networksystem_dll.hpp
+++ b/output/networksystem_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/networksystem_dll.rs b/output/networksystem_dll.rs
index 5eec57f..b1512fa 100644
--- a/output/networksystem_dll.rs
+++ b/output/networksystem_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/offsets.cs b/output/offsets.cs
index 872b3e7..2a544af 100644
--- a/output/offsets.cs
+++ b/output/offsets.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Offsets {
// Module: client.dll
diff --git a/output/offsets.hpp b/output/offsets.hpp
index 80c0926..60be573 100644
--- a/output/offsets.hpp
+++ b/output/offsets.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/offsets.rs b/output/offsets.rs
index 681d91e..04ce004 100644
--- a/output/offsets.rs
+++ b/output/offsets.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, unused)]
diff --git a/output/panorama_dll.cs b/output/panorama_dll.cs
index 72bad2f..1ee92c8 100644
--- a/output/panorama_dll.cs
+++ b/output/panorama_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: panorama.dll
diff --git a/output/panorama_dll.hpp b/output/panorama_dll.hpp
index ae6f878..97b9a45 100644
--- a/output/panorama_dll.hpp
+++ b/output/panorama_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/panorama_dll.rs b/output/panorama_dll.rs
index 23d55c4..2710803 100644
--- a/output/panorama_dll.rs
+++ b/output/panorama_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/particles_dll.cs b/output/particles_dll.cs
index b6be8e4..d5e3daa 100644
--- a/output/particles_dll.cs
+++ b/output/particles_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: particles.dll
diff --git a/output/particles_dll.hpp b/output/particles_dll.hpp
index 1505691..6d76055 100644
--- a/output/particles_dll.hpp
+++ b/output/particles_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/particles_dll.rs b/output/particles_dll.rs
index c4737ac..d14f69a 100644
--- a/output/particles_dll.rs
+++ b/output/particles_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/pulse_system_dll.cs b/output/pulse_system_dll.cs
index 8cfa9b6..2385364 100644
--- a/output/pulse_system_dll.cs
+++ b/output/pulse_system_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: pulse_system.dll
diff --git a/output/pulse_system_dll.hpp b/output/pulse_system_dll.hpp
index 25cdadb..2e870e0 100644
--- a/output/pulse_system_dll.hpp
+++ b/output/pulse_system_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/pulse_system_dll.rs b/output/pulse_system_dll.rs
index f1dcbb5..102787a 100644
--- a/output/pulse_system_dll.rs
+++ b/output/pulse_system_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/rendersystemdx11_dll.cs b/output/rendersystemdx11_dll.cs
index 6cb864b..4cf890f 100644
--- a/output/rendersystemdx11_dll.cs
+++ b/output/rendersystemdx11_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: rendersystemdx11.dll
diff --git a/output/rendersystemdx11_dll.hpp b/output/rendersystemdx11_dll.hpp
index b408820..0bfec70 100644
--- a/output/rendersystemdx11_dll.hpp
+++ b/output/rendersystemdx11_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/rendersystemdx11_dll.rs b/output/rendersystemdx11_dll.rs
index b18e81f..06e3651 100644
--- a/output/rendersystemdx11_dll.rs
+++ b/output/rendersystemdx11_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/resourcesystem_dll.cs b/output/resourcesystem_dll.cs
index 8acb48c..5324770 100644
--- a/output/resourcesystem_dll.cs
+++ b/output/resourcesystem_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: resourcesystem.dll
diff --git a/output/resourcesystem_dll.hpp b/output/resourcesystem_dll.hpp
index 74129c2..396fdad 100644
--- a/output/resourcesystem_dll.hpp
+++ b/output/resourcesystem_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/resourcesystem_dll.rs b/output/resourcesystem_dll.rs
index 1ecaca0..40673ff 100644
--- a/output/resourcesystem_dll.rs
+++ b/output/resourcesystem_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/scenesystem_dll.cs b/output/scenesystem_dll.cs
index 34c520c..c8030de 100644
--- a/output/scenesystem_dll.cs
+++ b/output/scenesystem_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: scenesystem.dll
diff --git a/output/scenesystem_dll.hpp b/output/scenesystem_dll.hpp
index cf4f9fe..4a4f93d 100644
--- a/output/scenesystem_dll.hpp
+++ b/output/scenesystem_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/scenesystem_dll.rs b/output/scenesystem_dll.rs
index c109c12..117e5c3 100644
--- a/output/scenesystem_dll.rs
+++ b/output/scenesystem_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/schemasystem_dll.cs b/output/schemasystem_dll.cs
index 7b99869..e6cb08a 100644
--- a/output/schemasystem_dll.cs
+++ b/output/schemasystem_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: schemasystem.dll
diff --git a/output/schemasystem_dll.hpp b/output/schemasystem_dll.hpp
index 259be7e..4572420 100644
--- a/output/schemasystem_dll.hpp
+++ b/output/schemasystem_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/schemasystem_dll.rs b/output/schemasystem_dll.rs
index 3958c8c..a797413 100644
--- a/output/schemasystem_dll.rs
+++ b/output/schemasystem_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/server_dll.cs b/output/server_dll.cs
index 609bdd4..0bff4a0 100644
--- a/output/server_dll.cs
+++ b/output/server_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: server.dll
diff --git a/output/server_dll.hpp b/output/server_dll.hpp
index 9e74f4e..09843c0 100644
--- a/output/server_dll.hpp
+++ b/output/server_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/server_dll.rs b/output/server_dll.rs
index 0c6ed8d..9317aa1 100644
--- a/output/server_dll.rs
+++ b/output/server_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/soundsystem_dll.cs b/output/soundsystem_dll.cs
index 1a9cb0b..490b384 100644
--- a/output/soundsystem_dll.cs
+++ b/output/soundsystem_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: soundsystem.dll
diff --git a/output/soundsystem_dll.hpp b/output/soundsystem_dll.hpp
index 4fddf37..a7e0f22 100644
--- a/output/soundsystem_dll.hpp
+++ b/output/soundsystem_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/soundsystem_dll.rs b/output/soundsystem_dll.rs
index 165d710..d967b26 100644
--- a/output/soundsystem_dll.rs
+++ b/output/soundsystem_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/vphysics2_dll.cs b/output/vphysics2_dll.cs
index 867c4c7..89cf509 100644
--- a/output/vphysics2_dll.cs
+++ b/output/vphysics2_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: vphysics2.dll
diff --git a/output/vphysics2_dll.hpp b/output/vphysics2_dll.hpp
index 5356206..ce2d21f 100644
--- a/output/vphysics2_dll.hpp
+++ b/output/vphysics2_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/vphysics2_dll.rs b/output/vphysics2_dll.rs
index 0f7de7b..eadf026 100644
--- a/output/vphysics2_dll.rs
+++ b/output/vphysics2_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/output/worldrenderer_dll.cs b/output/worldrenderer_dll.cs
index fb8fa4d..0c8e946 100644
--- a/output/worldrenderer_dll.cs
+++ b/output/worldrenderer_dll.cs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
namespace CS2Dumper.Schemas {
// Module: worldrenderer.dll
diff --git a/output/worldrenderer_dll.hpp b/output/worldrenderer_dll.hpp
index 0ef8991..ff576f8 100644
--- a/output/worldrenderer_dll.hpp
+++ b/output/worldrenderer_dll.hpp
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#pragma once
diff --git a/output/worldrenderer_dll.rs b/output/worldrenderer_dll.rs
index 7b90305..2f41d74 100644
--- a/output/worldrenderer_dll.rs
+++ b/output/worldrenderer_dll.rs
@@ -1,5 +1,5 @@
// Generated using https://github.com/a2x/cs2-dumper
-// 2025-07-17 10:07:36.863612600 UTC
+// 2025-07-18 08:48:08.327988700 UTC
#![allow(non_upper_case_globals, non_camel_case_types, non_snake_case, unused)]
diff --git a/x64/Release/TempleWare.dll b/x64/Release/TempleWare.dll
index b8ecef1..3880c49 100644
Binary files a/x64/Release/TempleWare.dll and b/x64/Release/TempleWare.dll differ
diff --git a/x64/Release/TempleWare.pdb b/x64/Release/TempleWare.pdb
index 66cc2ea..bf299c8 100644
Binary files a/x64/Release/TempleWare.pdb and b/x64/Release/TempleWare.pdb differ