upd
This commit is contained in:
parent
4d216b662b
commit
d3c189f949
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -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
|
||||
2
.idea/TempleWare-Legacy-main.iml
generated
Normal file
2
.idea/TempleWare-Legacy-main.iml
generated
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="CIDR" type="CPP_MODULE" version="4" />
|
||||
102
.idea/editor.xml
generated
Normal file
102
.idea/editor.xml
generated
Normal file
@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BackendCodeEditorSettings">
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/FREE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||
</component>
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/TempleWare-Legacy-main.iml" filepath="$PROJECT_DIR$/.idea/TempleWare-Legacy-main.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
8
.idea/runConfigurations/TempleWare_CS2_sln.xml
generated
Normal file
8
.idea/runConfigurations/TempleWare_CS2_sln.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="TempleWare-CS2.sln" type="CppFileRunConfiguration" factoryName="CppFileRunConfiguration" nameIsGenerated="true" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$PROJECT_DIR$" PASS_PARENT_ENVS_2="true" PROJECT_NAME="TempleWare-Legacy-main" TARGET_NAME="TempleWare-CS2.sln" CONFIG_NAME="TempleWare-CS2.sln">
|
||||
<option name="sourceFile" value="A:\Hacker228\TempleWare-Legacy-main\TempleWare-CS2\source\main.cpp" />
|
||||
<method v="2">
|
||||
<option name="com.jetbrains.cidr.cpp.runfile.CppFileBuildBeforeRunTaskProvider$BasicBuildBeforeRunTask" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
||||
7
.idea/vcs.xml
generated
Normal file
7
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/examples/CS2-External-Overlay-Cheat" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@ -171,6 +171,7 @@
|
||||
<ClCompile Include="source\cs2\entity\C_CSWeaponBase\C_CSWeaponBase.cpp" />
|
||||
<ClCompile Include="source\templeware\features\aim\aim.cpp" />
|
||||
<ClCompile Include="source\templeware\features\chams\chams.cpp" />
|
||||
<ClCompile Include="source\templeware\features\triggerbot\triggerbot.cpp" />
|
||||
<ClCompile Include="source\templeware\features\visuals\antiflash\antiflash.cpp" />
|
||||
<ClCompile Include="source\templeware\features\visuals\fov\fov.cpp" />
|
||||
<ClCompile Include="source\templeware\interfaces\CGameEntitySystem\CGameEntitySystem.cpp" />
|
||||
@ -227,6 +228,7 @@
|
||||
<ClInclude Include="source\cs2\entity\handle.h" />
|
||||
<ClInclude Include="source\templeware\features\aim\aim.h" />
|
||||
<ClInclude Include="source\templeware\features\chams\chams.h" />
|
||||
<ClInclude Include="source\templeware\features\triggerbot\triggerbot.h" />
|
||||
<ClInclude Include="source\templeware\interfaces\CGameEntitySystem\CGameEntitySystem.h" />
|
||||
<ClInclude Include="source\templeware\interfaces\IEngineClient\IEngineClient.h" />
|
||||
<ClInclude Include="source\templeware\interfaces\interfaces.h" />
|
||||
|
||||
@ -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<Vector_t*>((uintptr_t)this + SchemaFinder::Get(hash_32_fnv1a_const("C_BaseModelEntity->m_vecViewOffset")));
|
||||
}
|
||||
|
||||
int C_CSPlayerPawn::getShotsFired() const {
|
||||
return *reinterpret_cast<int*>((uintptr_t)this + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_iShotsFired")));
|
||||
} //{ return *reinterpret_cast<int*>(address + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_iShotsFired"))); }
|
||||
|
||||
@ -23,6 +23,7 @@ public:
|
||||
int getHealth() const;
|
||||
uint8_t getTeam() const;
|
||||
Vector_t getViewOffset() const;
|
||||
int getShotsFired() const;
|
||||
private:
|
||||
uintptr_t address;
|
||||
};
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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 <chrono>
|
||||
#include <Windows.h>
|
||||
#include "../../menu/hud.h"
|
||||
#include "../../menu/menu.h"
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
|
||||
// Индексы костей (актуально для 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<GetBonePositionFn>(addr);
|
||||
// }
|
||||
// }
|
||||
|
||||
Vector_t GetBonePosition(const C_CSPlayerPawn* Entity, int boneIdx) {
|
||||
if (!Entity) return {};
|
||||
// Внешний способ: читаем Vector3 по адресу boneMatrix + boneIdx * 0x20
|
||||
uintptr_t pGameSceneNode = *reinterpret_cast<uintptr_t*>((uintptr_t)Entity + 0x328);
|
||||
if (!pGameSceneNode) return {};
|
||||
uintptr_t pBoneMatrix = *reinterpret_cast<uintptr_t*>(pGameSceneNode + 0x1F0);
|
||||
if (!pBoneMatrix) return {};
|
||||
return *reinterpret_cast<Vector_t*>(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<int, 2> 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<C_CSPlayerPawn>(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, чтобы аимбот работал всегда
|
||||
//}
|
||||
}
|
||||
|
||||
@ -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 <Windows.h>
|
||||
#include <cmath>
|
||||
|
||||
// Симуляция нажатия ЛКМ
|
||||
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<C_CSPlayerPawn>(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<DWORD64>(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;
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
void Triggerbot();
|
||||
@ -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(); // <--- вызов триггербота
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -17,6 +17,7 @@ public:
|
||||
void pollInputs();
|
||||
|
||||
void menuButton(bool& var);
|
||||
void menuButton(int& key);
|
||||
private:
|
||||
std::vector<Keybind> keybinds;
|
||||
};
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -18,3 +18,5 @@ private:
|
||||
bool showMenu;
|
||||
int activeTab;
|
||||
};
|
||||
|
||||
extern bool g_ShowMenu;
|
||||
|
||||
@ -45,4 +45,5 @@ void TempleWare::init(HWND& window, ID3D11Device* pDevice, ID3D11DeviceContext*
|
||||
internal_config::ConfigManager::Load("1");
|
||||
printWithPrefix("Loaded config: 1.json");
|
||||
// --- конец автозагрузки ---
|
||||
|
||||
}
|
||||
|
||||
76
aim.cpp
Normal file
76
aim.cpp
Normal file
@ -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<QAngle_t*(__fastcall*)(CCSGOInput*, int32_t)>(memory::m_CSGOInput_GetViewAngles)(this, 0);
|
||||
}
|
||||
|
||||
bool SetViewAngles(QAngle_t& vecAngles) {
|
||||
return reinterpret_cast<bool(__fastcall*)(CCSGOInput*, int32_t, QAngle_t&)>(memory::m_CSGOInput_SetViewAngles)(this, 0, vecAngles);
|
||||
}
|
||||
};
|
||||
@ -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
|
||||
|
||||
1
examples/CS2-External-Overlay-Cheat
Submodule
1
examples/CS2-External-Overlay-Cheat
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 2a5ed894e768b8a66a8c7ddd2ff54bcccf07067b
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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"
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)]
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user