#ifndef PCH_H #define PCH_H #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #define RAPIDJSON_NOMEMBERITERATORCLASS // need this for rapidjson #define NOMINMAX // this too #define _WINSOCK_DEPRECATED_NO_WARNINGS // temp because i'm very lazy and want to use inet_addr, remove later #define RAPIDJSON_HAS_STDSTRING 1 // add headers that you want to pre-compile here #include "memalloc.h" #include #include #include #include #include #include #include "logging.h" #include "MinHook.h" #include "spdlog/spdlog.h" #include "libcurl/include/curl/curl.h" #include "hooks.h" #include "memory.h" template ReturnType CallVFunc(int index, void* thisPtr, Args... args) { return (*reinterpret_cast(thisPtr))[index](thisPtr, args...); } template constexpr T CallVFunc_Alt(void* classBase, Args... args) noexcept { return ((*(T(__thiscall***)(void*, Args...))(classBase))[index])(classBase, args...); } #define STR_HASH(s) (std::hash()(s)) // Example usage: M_VMETHOD(int, GetEntityIndex, 8, (CBaseEntity* ent), (this, ent)) #define M_VMETHOD(returnType, name, index, args, argsRaw) \ FORCEINLINE returnType name args noexcept \ { \ return CallVFunc_Alt argsRaw; \ } #endif