Advertisement
fd9F8FD8SDfmd

Untitled

Nov 19th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.95 KB | None | 0 0
  1. #include <random>
  2. #include "Config.h"
  3. #include "Interfaces.h"
  4. #include "Netvars.h"
  5. #include "SDK/Client.h"
  6. #include "SDK/ClientClass.h"
  7. #include "SDK/Entity.h"
  8. #include "SDK/Recv.h"
  9. #include "SDK/ModelInfo.h"
  10.  
  11. static int random(int min, int max) noexcept
  12. {
  13. static std::mt19937 gen{ std::random_device{ }() };
  14. return std::uniform_int_distribution{ min, max }(gen);
  15. }
  16.  
  17. static std::unordered_map<uint32_t, recvProxy> proxies;
  18.  
  19. static void spottedHook(recvProxyData& data, void* arg2, void* arg3) noexcept
  20. {
  21. if (config.misc.radarHack)
  22. data.value._int = 1;
  23.  
  24. constexpr auto hash{ fnv::hash("CBaseEntity->m_bSpotted") };
  25. proxies[hash](data, arg2, arg3);
  26. }
  27.  
  28. #include "nSkinz/config_.hpp"
  29.  
  30. static int get_new_animation(const uint32_t model, const int sequence) noexcept
  31. {
  32. enum Sequence
  33. {
  34. SEQUENCE_DEFAULT_DRAW = 0,
  35. SEQUENCE_DEFAULT_IDLE1 = 1,
  36. SEQUENCE_DEFAULT_IDLE2 = 2,
  37. SEQUENCE_DEFAULT_LIGHT_MISS1 = 3,
  38. SEQUENCE_DEFAULT_LIGHT_MISS2 = 4,
  39. SEQUENCE_DEFAULT_HEAVY_MISS1 = 9,
  40. SEQUENCE_DEFAULT_HEAVY_HIT1 = 10,
  41. SEQUENCE_DEFAULT_HEAVY_BACKSTAB = 11,
  42. SEQUENCE_DEFAULT_LOOKAT01 = 12,
  43.  
  44. SEQUENCE_BUTTERFLY_DRAW = 0,
  45. SEQUENCE_BUTTERFLY_DRAW2 = 1,
  46. SEQUENCE_BUTTERFLY_LOOKAT01 = 13,
  47. SEQUENCE_BUTTERFLY_LOOKAT03 = 15,
  48.  
  49. SEQUENCE_FALCHION_IDLE1 = 1,
  50. SEQUENCE_FALCHION_HEAVY_MISS1 = 8,
  51. SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP = 9,
  52. SEQUENCE_FALCHION_LOOKAT01 = 12,
  53. SEQUENCE_FALCHION_LOOKAT02 = 13,
  54.  
  55. SEQUENCE_DAGGERS_IDLE1 = 1,
  56. SEQUENCE_DAGGERS_LIGHT_MISS1 = 2,
  57. SEQUENCE_DAGGERS_LIGHT_MISS5 = 6,
  58. SEQUENCE_DAGGERS_HEAVY_MISS2 = 11,
  59. SEQUENCE_DAGGERS_HEAVY_MISS1 = 12,
  60.  
  61. SEQUENCE_BOWIE_IDLE1 = 1,
  62. };
  63.  
  64. // Hashes for best performance.
  65. switch (model) {
  66. case fnv::hash("models/weapons/v_knife_butterfly.mdl"):
  67. {
  68. switch (sequence)
  69. {
  70. case SEQUENCE_DEFAULT_DRAW:
  71. return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
  72. case SEQUENCE_DEFAULT_LOOKAT01:
  73. return random(SEQUENCE_BUTTERFLY_LOOKAT01, SEQUENCE_BUTTERFLY_LOOKAT03);
  74. default:
  75. return sequence + 1;
  76. }
  77. }
  78. case fnv::hash("models/weapons/v_knife_falchion_advanced.mdl"):
  79. {
  80. switch (sequence)
  81. {
  82. case SEQUENCE_DEFAULT_IDLE2:
  83. return SEQUENCE_FALCHION_IDLE1;
  84. case SEQUENCE_DEFAULT_HEAVY_MISS1:
  85. return random(SEQUENCE_FALCHION_HEAVY_MISS1, SEQUENCE_FALCHION_HEAVY_MISS1_NOFLIP);
  86. case SEQUENCE_DEFAULT_LOOKAT01:
  87. return random(SEQUENCE_FALCHION_LOOKAT01, SEQUENCE_FALCHION_LOOKAT02);
  88. case SEQUENCE_DEFAULT_DRAW:
  89. case SEQUENCE_DEFAULT_IDLE1:
  90. return sequence;
  91. default:
  92. return sequence - 1;
  93. }
  94. }
  95. case fnv::hash("models/weapons/v_knife_push.mdl"):
  96. {
  97. switch (sequence)
  98. {
  99. case SEQUENCE_DEFAULT_IDLE2:
  100. return SEQUENCE_DAGGERS_IDLE1;
  101. case SEQUENCE_DEFAULT_LIGHT_MISS1:
  102. case SEQUENCE_DEFAULT_LIGHT_MISS2:
  103. return random(SEQUENCE_DAGGERS_LIGHT_MISS1, SEQUENCE_DAGGERS_LIGHT_MISS5);
  104. case SEQUENCE_DEFAULT_HEAVY_MISS1:
  105. return random(SEQUENCE_DAGGERS_HEAVY_MISS2, SEQUENCE_DAGGERS_HEAVY_MISS1);
  106. case SEQUENCE_DEFAULT_HEAVY_HIT1:
  107. case SEQUENCE_DEFAULT_HEAVY_BACKSTAB:
  108. case SEQUENCE_DEFAULT_LOOKAT01:
  109. return sequence + 3;
  110. case SEQUENCE_DEFAULT_DRAW:
  111. case SEQUENCE_DEFAULT_IDLE1:
  112. return sequence;
  113. default:
  114. return sequence + 2;
  115. }
  116. }
  117. case fnv::hash("models/weapons/v_knife_survival_bowie.mdl"):
  118. {
  119. switch (sequence)
  120. {
  121. case SEQUENCE_DEFAULT_DRAW:
  122. case SEQUENCE_DEFAULT_IDLE1:
  123. return sequence;
  124. case SEQUENCE_DEFAULT_IDLE2:
  125. return SEQUENCE_BOWIE_IDLE1;
  126. default:
  127. return sequence - 1;
  128. }
  129. }
  130. case fnv::hash("models/weapons/v_knife_ursus.mdl"):
  131. {
  132. switch (sequence)
  133. {
  134. case SEQUENCE_DEFAULT_DRAW:
  135. return random(SEQUENCE_BUTTERFLY_DRAW, SEQUENCE_BUTTERFLY_DRAW2);
  136. case SEQUENCE_DEFAULT_LOOKAT01:
  137. return random(SEQUENCE_BUTTERFLY_LOOKAT01, 14);
  138. default:
  139. return sequence + 1;
  140. }
  141. }
  142. case fnv::hash("models/weapons/v_knife_stiletto.mdl"):
  143. {
  144. switch (sequence)
  145. {
  146. case SEQUENCE_DEFAULT_LOOKAT01:
  147. return random(12, 13);
  148. }
  149. }
  150. case fnv::hash("models/weapons/v_knife_widowmaker.mdl"):
  151. {
  152. switch (sequence)
  153. {
  154. case SEQUENCE_DEFAULT_LOOKAT01:
  155. return random(14, 15);
  156. }
  157. }
  158. default:
  159. return sequence;
  160. }
  161. }
  162.  
  163. static void viewModelSequence(recvProxyData& data, void* arg2, void* arg3) noexcept
  164. {
  165. if (interfaces.engine->isInGame()) {
  166. if (const auto activeWeapon = interfaces.entityList->getEntity(interfaces.engine->getLocalPlayer())->getActiveWeapon()) {
  167. if (config.visuals.deagleSpinner && activeWeapon->getClientClass()->classId == ClassId::Deagle && !data.value._int)
  168. data.value._int = 8;
  169.  
  170. if (const auto weapon_info = game_data::get_weapon_info(activeWeapon->itemDefinitionIndex()))
  171. data.value._int = get_new_animation(fnv::hashRuntime(weapon_info->model), data.value._int);
  172. }
  173. }
  174. constexpr auto hash{ fnv::hash("CBaseViewModel->m_nSequence") };
  175. proxies[hash](data, arg2, arg3);
  176. }
  177.  
  178. Netvars::Netvars() noexcept
  179. {
  180. for (auto clientClass = interfaces.client->getAllClasses(); clientClass; clientClass = clientClass->next)
  181. walkTable(false, clientClass->networkName, clientClass->recvTable);
  182. }
  183.  
  184. void Netvars::restore() noexcept
  185. {
  186. for (auto clientClass = interfaces.client->getAllClasses(); clientClass; clientClass = clientClass->next)
  187. walkTable(true, clientClass->networkName, clientClass->recvTable);
  188.  
  189. proxies.clear();
  190. offsets.clear();
  191. }
  192.  
  193. void Netvars::walkTable(bool unload, const char* networkName, RecvTable* recvTable, const std::size_t offset) noexcept
  194. {
  195. for (int i = 0; i < recvTable->propCount; ++i) {
  196. auto& prop = recvTable->props[i];
  197.  
  198. if (isdigit(prop.name[0]))
  199. continue;
  200.  
  201. if (fnv::hashRuntime(prop.name) == fnv::hash("baseclass"))
  202. continue;
  203.  
  204. if (prop.type == 6
  205. && prop.dataTable
  206. && prop.dataTable->netTableName[0] == 'D')
  207. walkTable(unload, networkName, prop.dataTable, prop.offset + offset);
  208.  
  209. const auto hash{ fnv::hashRuntime((networkName + std::string{ "->" } + prop.name).c_str()) };
  210.  
  211. constexpr auto getHook{ [](uint32_t hash) noexcept -> recvProxy {
  212. switch (hash) {
  213. case fnv::hash("CBaseEntity->m_bSpotted"):
  214. return spottedHook;
  215. case fnv::hash("CBaseViewModel->m_nSequence"):
  216. return viewModelSequence;
  217. default:
  218. return nullptr;
  219. }
  220. } };
  221.  
  222. if (!unload) {
  223. offsets[hash] = uint16_t(offset + prop.offset);
  224.  
  225. constexpr auto hookProperty{ [](uint32_t hash, recvProxy& originalProxy, recvProxy proxy) noexcept {
  226. if (originalProxy != proxy) {
  227. proxies[hash] = originalProxy;
  228. originalProxy = proxy;
  229. }
  230. } };
  231.  
  232. if (auto hook{ getHook(hash) })
  233. hookProperty(hash, prop.proxy, hook);
  234. } else {
  235. constexpr auto unhookProperty{ [](recvProxy& proxy, uint32_t hash) noexcept {
  236. proxy = proxies[hash];
  237. } };
  238.  
  239. if (auto hook{ getHook(hash) })
  240. unhookProperty(prop.proxy, hash);
  241. }
  242. }
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement