{"id":15047739,"url":"https://github.com/rollraw/qo0-csgo","last_synced_at":"2026-01-23T06:20:42.741Z","repository":{"id":38027793,"uuid":"263122532","full_name":"rollraw/qo0-csgo","owner":"rollraw","description":"internal cs:go cheat base/template","archived":false,"fork":false,"pushed_at":"2024-01-16T10:32:25.000Z","size":7911,"stargazers_count":340,"open_issues_count":6,"forks_count":97,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-05-14T15:16:45.551Z","etag":null,"topics":["base","cheat","cpp20","csgo","internal"],"latest_commit_sha":null,"homepage":"https://www.unknowncheats.me/forum/cs-go-releases/585900-v2-qo0s-internal-cheat-base-template.html","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rollraw.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/funding.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["btc:192UyLkZAkSZr9NWFSZ2UVC1w4roaxScq3","bch:qpvq33v9k8j6xptglr476wkuq76g3ek9r5lcmyfkkf","eth|erc20:0xC5d33ED31d91A8b2a20e0Da8121C7fd91Ea62f70"]}},"created_at":"2020-05-11T18:20:08.000Z","updated_at":"2025-05-08T01:33:46.000Z","dependencies_parsed_at":"2023-02-16T06:46:12.982Z","dependency_job_id":"e91750e9-9977-44e3-b4c1-1995a4946b30","html_url":"https://github.com/rollraw/qo0-csgo","commit_stats":null,"previous_names":["rollraw/qo0-csgo","rollraw/qo0-base"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rollraw/qo0-csgo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollraw%2Fqo0-csgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollraw%2Fqo0-csgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollraw%2Fqo0-csgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollraw%2Fqo0-csgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rollraw","download_url":"https://codeload.github.com/rollraw/qo0-csgo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rollraw%2Fqo0-csgo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28682259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base","cheat","cpp20","csgo","internal"],"created_at":"2024-09-24T21:04:07.069Z","updated_at":"2026-01-23T06:20:42.709Z","avatar_url":"https://github.com/rollraw.png","language":"C++","funding_links":["btc:192UyLkZAkSZr9NWFSZ2UVC1w4roaxScq3","bch:qpvq33v9k8j6xptglr476wkuq76g3ek9r5lcmyfkkf","eth|erc20:0xC5d33ED31d91A8b2a20e0Da8121C7fd91Ea62f70"],"categories":[],"sub_categories":[],"readme":"# :space_invader: about\nqo0-csgo is a CS:GO game cheat base/template that was intended to be as a starting point to cheat making scene for beginners, it also implies that the end-user is quite familiar with the given programming language, namely C++/C. available under [MIT License](LICENSE).\nit was designed to:\n* have a good, clean and simple file/code structure based on hybrid modular/functional paradigm.\n* have a unified code style. see [code style](#page_facing_up-code-style).\n* be user-friendly, most of compile-time things end-user would like to tune is located in all-in-one configuration header file.\n* support most of the popular compilators, such as: MSVC, LLVM/Clang. also comes with code solution generators [Premake](https://premake.github.io/) and [CMake](https://cmake.org/) configuration files. see [project setup](#hammer_and_wrench-getting-started).\n* let end-user to make it absolutely self-containing, this means that STL is not longer used (except meta-programming and other call/run-time dependency free features) and not recommended but allowed for future use; implies CRT rebuild; ability to overload WinAPI to call externally; ability to overload memory allocators/deallocators.\n* have decent documentation and side notes with navigation. see [hot words](#comment).\n* provide a useful game-reverse information to ease keep it updated.\n\n# :bulb: common features\n* nice and lightweight graphical library used for drawings and user interface, powered by [ImGui](https://github.com/ocornut/imgui/).\n* simple keyboard/mouse input system.\n* minimal overhead, thread-safe render system, powered by [ImGui](https://github.com/ocornut/imgui/) `ImDrawList` API.\n* structured, callback-based features manager. following hacks are implemented as basic example of base usage:\n\t- anti-aim, based on client-server angles desynchronization with animation correction to visuallize.\n\t- triggerbot, with auto wall feature implemented.\n\t- overlay, based on auto-positioning components system.\n\t- glow.\n\t- chams, based on custom material system to ease material overriding.\n\t- other, movement, fake-lag, etc.\n* game's console/networkable variables dumper with formatting.\n* extensive library for working with memory, with fast pattern search, virtual method tables search based on RTTI, etc.\n* fast, feature rich configuration manager, with automatic version adaptation algorithm, easist user type registration, single variables load/save/remove and so on. you can select one of customizable formatters. see [extensions](#zap-extensions).\n* safe function hooking and return address spoofer of game's methods calls.\n* easy to use, STL-stream like file/console logging system.\n\nthe newest 2.0 version is more adapted to the latest VAC/VACnet and game updates generally, but this does not mean that it is completely safe to use \"out of the box\", rather a simplification for you to do this.\n\n# :dart: to do\ncurrently it is still under development and there are major things that have already been done recently or planned to do in the future, arranged by priority. feel free to open an issue or pull request to speed up the process.\n- [ ] custom user types support for json/toml formatters\n- [ ] improve the animation correction\n- [ ] get rid of the CRT/STL completely\n- [ ] different hooking methods selectable by the extensions\n- [ ] improve safety against VAC/VACnet\n- [ ] merge to the new rendering/GUI library\n- [ ] thread-safe logging system and it's code refactor\n\n# :hammer_and_wrench: getting started\nthe language standard requirement are c++20, means minimal supported compilator version is MSVC: 1.16.10; LLVM/Clang: 12.0, accordingly.\nthe repository contains pre-built solution \u0026 project files for MSVC or can be auto-generated yourself with `premake5.lua` file by [Premake](https://premake.github.io/) utility, and `CMakeLists.txt` for [CMake](https://cmake.org/).\nthe project is self-contained and doesn't require any third-party libraries to be compiled by default, but may vary regarding to `user.h` preferences.\n\n# :zap: extensions\nthere are additional functionality, that can be enabled by editing the special `user.h` configuration file, which allows the user to customize string encryption, configuration file serializer/de-serializer (formatter) WIP; switching logging, return address spoofer; specify and override certain behavior, and so on.\n\n# :page_facing_up: code style\nconditions are indexed by their priority, if a higher priority condition overrides condition with a lower priority, then first is preferred.\nroot directory contains `.editorconfig` and `.clang-format` configuration files.\n### flow control\n1. when comparing an unknown value with a constant/keyword value, first must be on the left side of comparison.\n```cpp\nif (flName \u003c 0.0f || flName \u003e M_PI)\n```\n2. check for pointer validity shouldn't look like boolean check and must be compared explicitly with keyword.\n```cpp\nif (pName != nullptr)\n```\n3. check for result of expression when it may not be in range \\[0, 1\\] shouldn't look like a boolean check and must be compared explicitly.\n```cpp\nif ((uName \u0026 0xAF) != 0U)\n```\n```cpp\nif (iName \u003c 0 || iName \u003e 0)\n```\n### literals\n- number literals:\n\n\t1\\. differentiate numbers use with *lowercase* hex/binary/exponent/binary-exponent literals.\n\t```cpp\n\tunsigned int uNameAddress = 0x1EE7;\n\tunsigned int uNameBits = 0b1100100;\n\tfloat flNamePower = 0x1p4f;\n\t```\n\t2\\. specify number data type with *UPPERCASE* (except float, with *lowercase*) type literal.\n\t```cpp\n\tunsigned int uName = 0U;\n\tlong lName = 0L;\n\tlong long llName = 0LL;\n\tlong double ldName = 0.0L;\n\tfloat flName = 0.0f;\n\t```\n\t3\\. wrap long constant numbers with apostrophe literal.\n\t```cpp\n\tint iName = 2'147'483'648;\n\t```\n- string literals\n\n\t1\\. wrap string that frequently contain code escapes with *UPPERCASE* raw string literal.\n\t```cpp\n\tstd::string strName = R\"(no new \\n line)\";\n\t```\n\t2\\. specify string/character encoding with case-sensetive literal.\n\t```cpp\n\twchar_t wName = L'\\u2764';\n\tstd::wstring wstrName = L\"\\u2764\"s;\n\tchar8_t uchName = u8'\\u00AE';\n\tstd::u8string ustrName = u8\"\\u2764\"s;\n\tchar16_t uchName = u'\\u2764';\n\tstd::u16string ustrName = u\"\\u2764\"s;\n\tchar32_t uchName = U'\\U0010FFFF';\n\tstd::u32string ustrName = U\"\\U0010FFFF\"s;\n\t```\n\t3\\. specify string type with custom literal.\n\t```cpp\n\tstd::string strName = \"string\"s;\n\tstd::string_view strName = \"string\"sv;\n\t```\n### break\n1. line breaks must be LF (line feed, single '\\n' character without carriage return '\\r' character)\n2. braces with short aggregate initialization, short lambda expression can be on same line.\n```cpp\nstd::array\u003cstd::pair\u003cint, float\u003e\u003e arrName{{ { 0, 0.0f } }};\nFunctionName([\u0026x](const auto\u0026 name) { return name.x \u003e x; });\n```\n3. each brace must be on it's own line, except when enclosed body are empty.\n```cpp\nvoid Function()\n{\n\tint iName = 0;\n}\n\nvoid EmptyFunction() { };\n```\n4. one-line body statements, must be on new-line\n```cpp\nif (bCondition)\n\tFunction();\n\nwhile (bCondition)\n\tFunction();\n\nfor (int i = 0; i \u003c n; i++)\n\tFunction(i);\n```\n### space\n1. must be placed after pointer/reference to align them on left side, except declarations of multiple variables.\n```cpp\nvoid* pName = nullptr;\nchar *szNameFirst = nullptr, *szNameSecond = nullptr;\nstd::string\u0026 strName = \"name\";\nstd::string\u0026\u0026 strName = \"name\";\n```\n2. must be placed around assignment/ternary/binary but not unary/member operators.\n```cpp\niName = -iName;\nuName = (uName \u0026 0x2);\nbName = (bName ? true : false);\n```\n3. must be placed after keywords in control flow statements.\n```cpp\nwhile (bName)\n{\n\tif (bName)\n\t\tbName = !bName;\n}\n```\n4. must be placed between empty curve/square braces, such as list initialization, constructor with initializer list, lambda capture etc, but not aggregate initialization.\n```cpp\nint iName = { };\nstd::array\u003cstd::pair\u003cint, float\u003e\u003e arrName{{ { 0, 0.0f } }};\n\nName_t(const int iName) :\n\tiName(iName) { }\n\nauto Name = [ ](int\u0026 nNameCount)\n{\n\tnNameCount++;\n};\n```\n5. must be placed after comma and colon, except conditions when new line must be placed instead.\n```cpp\nint iName = 0, iSecondName = 0;\n\nclass CDerived : IBase { };\n\nName_t(const int iName) :\n\tiName(iName) { }\n```\n### macro\n1. arguments must be enclosed in parenthesis if they can be used as an expression.\n```cpp\n#define Q_NAME(X) ((X) * 0.5f)\nfloat flName = Q_NAME(5.0f - 8.0f);\n```\n2. expression must be enclosed in parenthesis.\n```cpp\n#define Q_NAME (-1)\n```\n### comment\n- hot words:\n\n\t1\\. `@todo: \u003cexplanation\u003e` - explains things to do/fix/improve in the future updates.\n\n\t2\\. `@note: \u003cinfo\u003e` - recommended information for the user to read.\n\n\t3\\. `@test: [date] \u003creason\u003e` - explains things to test for some reason.\n\n\t4\\. `@credits: \u003cauthor\u003e` - credentials of the author of used/referenced code.\n\t\n\t5\\. `@source: master/\u003cpath\u003e` - path to the following file of the VALVE Source SDK.\n\t\n\t6\\. `@ida \u003cfull method/variable name if known\u003e [inlined]: (method name of pattern source if known) \u003cmodule\u003e -\u003e \u003cpattern\u003e`\n\t- syntax:\n\n\t\tpattern itself are enclosed with quotes `\"\"` and represent found address.\n\n\t\taddress enclosed with brackets `[]` represent it's dereference.\n\n\t\taddress enclosed with parentheses `()` used to clarify sequence when it's unclear.\n\n\t\taddress prefixed with `U8`/`U16`/`U32`/`U64` or `I8`/`I16`/`I32`/`I64` represent data type for the cast, if not specified, it's `U32` by default.\n\n\t\taddress prefixed with `ABS` represent conversion of relative address to absolute.\n\n\t7\\. `@xref: (method name of reference source if known) \u003cstring/name\u003e` - reference to the following pattern.\n\t- syntax:\n\n\t\treference by string are enclosed with quotes `\"\"`.\n\n\t\treference by name are enclosed with apostrophes `''`.\n\n1. preferred to be in *lowercase*, except when extra attention is required.\n2. stylistic comments must be written in doxygen style, with spaces around colon.\n3. multi-line comments less than 5 lines must be written in C++ style (double-slash and triple-slash for stylistic), otherwise C style must be used (slash with asterisk and slash with double-asterisk for stylistic).\n\n# :bookmark: naming conventions\nconditions are sorted by their priority, if a higher priority condition overrides condition with a lower priority, it is preferred.\nwe're prefer concrete and explicit definition over simplicity, but remain readability.\n### function\n1. function name must be written in *PascalCase*.\n```cpp\nvoid FunctionName();\n```\n### variable\n1. variable name must be written in *camelCase* and prefixed with hungarian notation of data type, if data type isn't specified nor based on STL/WinAPI data type, then *lowerCamelCase* is used.\n\t- pointer:\n\n\t\t1\\. if the variable supposed to be a handle of any data type, prefix with 'h' overriding any other prefix.\n\t\t```cpp\n\t\tHANDLE hName = nullptr;\n\t\t```\n\t\t2\\. if the variable is a function argument and supposed to be used as output, prefix with 'p' and append the variable's data type if specified.\n\t\t```cpp\n\t\tvoid Function(unsigned int* puOutput);\n\t\t```\n\t\t3\\. if none of the conditions are met, prefix with 'p' overriding any other data type prefix.\n\t\t```cpp\n\t\tstd::uint32_t* pName = \u0026uAddress;\n\t\t```\n\t- function:\n\n\t\t1\\. no additional conditions.\n\t\t```cpp\n\t\tvoid Function();\n\t\t```\n\t- container:\n\n\t\t1\\. fixed-size C/C++/STL massive variable must be prefixed with 'arr'.\n\t\t```cpp\n\t\tchar arrName[20] = { };\n\t\tstd::array\u003cchar, 20U\u003e arrName = { };\n\t\t```\n\t\t2\\. varying-size C/C++/STL container variable must be prefixed with 'vec'.\n\t\t```cpp\n\t\tint* vecName = malloc(nSize);\n\t\tint* vecName = new int[nSize];\n\t\tstd::vector\u003cint\u003e vecName = { };\n\t\t```\n\t- boolean:\n\n\t\t1\\. no additional conditions.\n\t\t```cpp\n\t\tbool bName = false;\n\t\t```\n\t- integer:\n\n\t\t1\\. if the variable supposed to indicate index/count/size/mode/type, prefix becomes 'n' regardless the data type.\n\t\t```cpp\n\t\tstd::ptrdiff_t nNameIndex = arrName.find(...);\n\t\tstd::size_t nNameSize = arrName.size();\n\t\tstd::ptrdiff_t nNameCount = arrName.size() - arrInvalidName.size();\n\t\tENameMode nNameMode = NAME_MODE_FIRST;\n\t\t```\n\t\t2\\. if the variable is unsigned, prefix becomes 'u' regardless the data type, except `long` qualifiers, where it must be appended instead.\n\t\t```cpp\n\t\tstd::uint8_t uNameByte = 0U;\n\t\tstd::uint16_t uNameShort = 0U;\n\t\tstd::uint32_t uNameInt = 0U;\n\t\tstd::uint64_t ullNameLongLongInt = 0ULL;\n\t\t```\n\t\t3\\. if none of the conditions are met.\n\t\t```cpp\n\t\tchar chName;\n\t\tshort shName;\n\t\tint iName;\n\t\tlong long llName;\n\t\t```\n\t- floating point:\n\n\t\t1\\. no additional conditions.\n\t\t```cpp\n\t\tfloat flName = 0.0f;\n\t\tdouble dName = 0.0;\n\t\tlong double ldName = 0.0L;\n\t\t```\n\t- string:\n\n\t\t1\\. if the variable is a single character.\n\t\t```cpp\n\t\tchar chName = '\\0';\n\t\twchar_t wName = L'\\000';\n\t\tchar8_t uchName = u8'\\u0000';\n\t\tchar16_t uchName = u'\\u0000';\n\t\tchar32_t uchName = U'\\U00000000';\n\t\t```\n\t\t2\\. if the variable a zero-terminated string it must be prefixed with 'sz' and safe wrapped string variables with 'str'.\n\t\t```cpp\n\t\tconst char* szName = \"\";\n\t\tstd::string strName = \"\"s;\n\t\t```\n\t\t3\\. if the variable have character type `wchar_t`, `char8_t`, `char16_t`, `char32_t` it must append string type to the prefix, other character types don't affect the prefix.\n\t\t```cpp\n\t\tconst wchar_t* wszName = L\"Example\";\n\t\tconst char8_t* uszName = u8\"Example\";\n\t\tconst char16_t* uszName = u\"Example\";\n\t\tconst char32_t* uszName = U\"Example\";\n\t\tstd::wstring wstrName = L\"Example\"s;\n\t\tstd::u8string ustrName = u8\"Example\"s;\n\t\tstd::u16string ustrName = u\"Example\"s;\n\t\tstd::u32string ustrName = U\"Example\"s;\n\t\t```\n\t- other:\n\n\t\t1\\. if the data type of the variable is part of the STL.\n\t\t```cpp\n\t\tstd::filesystem::path pathName = { };\n\t\tstd::ifstream ifsName = { };\n\t\tstd::ofstream ofsName = { };\n\t\t```\n\t\t2\\. if the data type of the variable is part of the WinAPI.\n\t\t```cpp\n\t\tDWORD dwName = 0UL;\n\t\tWORD wName = 0U;\n\t\tBYTE dName = 0U;\n\t\tWPARAM wName = 0U;\n\t\tLPARAM lName = 0L;\n\t\tHRESULT hName = 0L;\n\t\tLRESULT lName = 0L;\n\t\t```\n2. if variable defined as `auto` type, and final type is known, it still requires to include hungarian notation.\n```cpp\nauto iName = 0;\n```\n3. if none of the conditions are met, then hungarian notation is redundant.\n```cpp\nUnknown_t unknownName = { };\n```\n### structure\n1. must be suffixed with '\\_t' to specify that it's an structure.\n```cpp\nstruct Name_t;\n```\n### class\n1. if class is interface (have virtual table and doesn't have variables), then it must be prefixed with 'I'.\n```cpp\nclass IName;\n```\n2. must be prefixed with 'C' to specify that it's an class.\n```cpp\nclass CName;\n```\n### enumeration\n1. must be prefixed with 'E' to specify that it's an enumeration.\n```cpp\nenum EName : int { };\n```\n### namespace\n1. if the namespace is part of a particular module, then it must be named by at least one letter of the module name.\n\n\u003csub\u003efont.h\u003c/sub\u003e\n```cpp\nnamespace F;\n```\n### macro\n1. the name must be written in *UPPER_SNAKE_CASE*.\n```cpp\n#define Q_NAME\n```\n2. if the macro is defined in a particular module/header, then it must be prefixed with at least one letter of the module/header name.\n\n\u003csub\u003emath.h\u003c/sub\u003e\n```cpp\n#define M_NAME\n```\n3. arguments must be written in *UPPER_SNAKE_CASE*.\n```cpp\n#define Q_STRINGIFY(PLAIN_NAME) #PLAIN_NAME\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frollraw%2Fqo0-csgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frollraw%2Fqo0-csgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frollraw%2Fqo0-csgo/lists"}