commit b18b555a43a87a9b65f0ce5d22f1352cf6f03e51 Author: Pcornat Date: Thu Mar 4 22:14:31 2021 +0100 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..de08f6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +cmake-build-* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..601236c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,57 @@ +cmake_minimum_required(VERSION 3.19) +project(GTA_SA_cheat) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_COMPILER_LAUNCHER ccache) + +find_package(OpenMP REQUIRED) +# see https://cmake.org/cmake/help/latest/module/FindBoost.html +find_package(Boost REQUIRED) + +include_directories(${Boost_INCLUDE_DIR}) + + +set(COMPILE_DEFINITIONS + $<$:_LIBCPP_DEBUG> + #[[_FORTIFY_SOURCE=2]] + ) + +set(COMPILE_FLAGS + -pipe + -march=skylake # change to native or your architecture. + -mtune=skylake # same as above + -mrdseed # be careful about this, this is linked to the x86 architecture. + -mrdrnd # same as above + -stdlib=libc++ + -Wpedantic + -Wall + -Wextra + -Wmove + -Wopenmp + -funroll-loops + -flto=thin + -fwhole-program-vtables + -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free + ) +set(LINKER_OPTIONS + -Wl,--sort-common,--as-needed + -stdlib=libc++ + -flto=thin + -fwhole-program-vtables + -fuse-ld=gold + ) + +set(LINKER_FLAGS + jemalloc + ${Boost_LIBRARIES} + OpenMP::OpenMP_CXX + ) + + +add_executable(GTA_SA_cheat main.cpp) +target_compile_definitions(GTA_SA_cheat PRIVATE ${COMPILE_DEFINITIONS}) +target_compile_options(GTA_SA_cheat PRIVATE ${COMPILE_FLAGS}) +target_link_options(GTA_SA_cheat PRIVATE ${LINKER_OPTIONS}) +target_link_libraries(GTA_SA_cheat ${Boost_LIBRARIES}) \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..0914536 --- /dev/null +++ b/main.cpp @@ -0,0 +1,207 @@ +#include +#include +#include + +/** + * \brief + * \param my_string + * \return + */ +std::uint32_t getCrc32(const std::string_view my_string) { + boost::crc_32_type result; + result.process_bytes(my_string.data(), my_string.length()); + return result.checksum(); +} + +/** + * \brief Un nombre ressort sous la forme d'une chaîne de caractère avec les lettres de l'alphabet. A étant 1 puis B = 2, etc. + * En gros, c'est la conversion d'une base 10 vers 26. + * \tparam T + * \param n + * \param array + */ +template alphabet> +void findStringInv(const T n, char *array) { + // le nombre de lettre présent dans le nouveau mot : le nombre / 26 donnera le nombre de lettre. + const std::size_t iterLoop{ n / alphabet.size() }; + for (size_t i = 0; i < iterLoop; ++i) { + array[i] = alphabet.back(); + } + if (n < alphabet.size()) { + array[0] = alphabet[n - 1]; + return; + } + /*while (n > 0) { + array[i] = alphabet[(--n) % alphabet.size()]; + n /= alphabetSize; + ++i; + }*/ +} + +/** + * \brief + * \tparam T + * \param n + * \return + */ +template +constexpr std::size_t maxDigits(T n) { + std::size_t numDigit = 1; + while (n != 0) { + n /= 26; + ++numDigit; + } + return numDigit; +} + +template +struct NumberBase26 final { + std::array data{}; + + const std::array &alphabet{}; + + NumberBase26() = delete; + + explicit NumberBase26(const std::array &_alphabet) : alphabet(_alphabet) { + data.fill('A'); + } + + ~NumberBase26() noexcept = default; + + NumberBase26 &operator++() { + if (whichDigit > 0 && data[whichDigit] == 'Z') + --whichDigit; + + } + +private: + std::size_t whichDigit{ data.size() - 1 }; +}; + +int main() { + // I love deduction guides :D + constexpr std::array cheat_list{ + 0xDE4B237Du, + 0xB22A28D1u, + 0x5A783FAEu, + 0xEECCEA2Bu, + 0x42AF1E28u, + 0x555FC201u, + 0x2A845345u, + 0xE1EF01EAu, + 0x771B83FCu, + 0x5BF12848u, + 0x44453A17u, + 0xFCFF1D08u, + 0xB69E8532u, + 0x8B828076u, + 0xDD6ED9E9u, + 0xA290FD8Cu, + 0x3484B5A7u, + 0x43DB914Eu, + 0xDBC0DD65u, + 0xD08A30FEu, + 0x37BF1B4Eu, + 0xB5D40866u, + 0xE63B0D99u, + 0x675B8945u, + 0x4987D5EEu, + 0x2E8F84E8u, + 0x1A9AA3D6u, + 0xE842F3BCu, + 0x0D5C6A4Eu, + 0x74D4FCB1u, + 0xB01D13B8u, + 0x66516EBCu, + 0x4B137E45u, + 0x78520E33u, + 0x3A577325u, + 0xD4966D59u, + 0x5FD1B49Du, + 0xA7613F99u, + 0x1792D871u, + 0xCBC579DFu, + 0x4FEDCCFFu, + 0x44B34866u, + 0x2EF877DBu, + 0x2781E797u, + 0x2BC1A045u, + 0xB2AFE368u, + 0xFA8DD45Bu, + 0x8DED75BDu, + 0x1A5526BCu, + 0xA48A770Bu, + 0xB07D3B32u, + 0x80C1E54Bu, + 0x5DAD0087u, + 0x7F80B950u, + 0x6C0FA650u, + 0xF46F2FA4u, + 0x70164385u, + 0x885D0B50u, + 0x151BDCB3u, + 0xADFA640Au, + 0xE57F96CEu, + 0x040CF761u, + 0xE1B33EB9u, + 0xFEDA77F7u, + 0x8CA870DDu, + 0x9A629401u, + 0xF53EF5A5u, + 0xF2AA0C1Du, + 0xF36345A8u, + 0x8990D5E1u, + 0xB7013B1Bu, + 0xCAEC94EEu, + 0x31F0C3CCu, + 0xB3B3E72Au, + 0xC25CDBFFu, + 0xD5CF4EFFu, + 0x680416B1u, + 0xCF5FDA18u, + 0xF01286E9u, + 0xA841CC0Au, + 0x31EA09CFu, + 0xE958788Au, + 0x02C83A7Cu, + 0xE49C3ED4u, + 0x171BA8CCu, + 0x86988DAEu, + 0x2BDD2FA1u }; + constexpr std::array alphabet{ + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z' }; // taille = 26 + constexpr std::size_t maxCompute = 308915776; + constexpr std::size_t maxDig = maxDigits(maxCompute); + std::array tmp{}; + tmp.fill('\0'); + for (size_t i = 0; i < maxCompute; ++i) { + + } + std::cout << "Hello, World!" << std::endl; + return EXIT_SUCCESS; +}