tried to fix crit hack and probably made it worse

This commit is contained in:
nullifiedcat 2017-04-16 13:16:39 +03:00
parent e718f7bd0e
commit ec42c576ae
4 changed files with 62 additions and 7 deletions

View File

@ -16,7 +16,7 @@ std::unordered_map<int, int> command_number_mod {};
int* g_PredictionRandomSeed = nullptr;
bool AllowAttacking() {
if (!(hacks::shared::misc::crit_hack || ((GetWeaponMode(LOCAL_E) == weapon_melee) && hacks::shared::misc::crit_melee))) return true;
if (!(hacks::shared::misc::crit_hack || ((GetWeaponMode(LOCAL_E) == weapon_melee) && hacks::shared::misc::crit_melee)) && !hacks::shared::misc::crit_suppress) return true;
bool crit = IsAttackACrit(g_pUserCmd);
if (hacks::shared::misc::crit_suppress && !(hacks::shared::misc::crit_hack || ((GetWeaponMode(LOCAL_E) == weapon_melee) && hacks::shared::misc::crit_melee))) {
if (crit && !IsPlayerCritBoosted(LOCAL_E)) {
@ -37,6 +37,50 @@ bool WeaponCanCrit() {
return TF && CE_GOOD(LOCAL_W) && vfunc<bool(*)(IClientEntity*)>(RAW_ENT(LOCAL_W), 465 + 21, 0)(RAW_ENT(LOCAL_W));
}
struct crithack_saved_state {
float bucket; // 2612
bool unknown2831;
int seed; // 2868
float time; // 2872
int unknown2616;
int unknown2620;
float unknown2856;
float unknown2860;
void Save(IClientEntity* entity) {
bucket = *(float*)((uintptr_t)entity + 2612);
unknown2831 = *(float*)((uintptr_t)entity + 2831);
seed = *(int*)((uintptr_t)entity + 2868);
time = *(float*)((uintptr_t)entity + 2872);
unknown2616 = *(int*)((uintptr_t)entity + 2616);
unknown2620 = *(int*)((uintptr_t)entity + 2620);
unknown2856 = *(float*)((uintptr_t)entity + 2856);
unknown2860 = *(float*)((uintptr_t)entity + 2860);
}
void Load(IClientEntity* entity) {
*(float*)((uintptr_t)entity + 2612) = bucket;
*(float*)((uintptr_t)entity + 2831) = unknown2831;
*(int*)((uintptr_t)entity + 2868) = seed;
*(float*)((uintptr_t)entity + 2872) = time;
*(int*)((uintptr_t)entity + 2616) = unknown2616;
*(int*)((uintptr_t)entity + 2620) = unknown2620;
*(float*)((uintptr_t)entity + 2856) = unknown2856;
*(float*)((uintptr_t)entity + 2860) = unknown2860;
}
};
static crithack_saved_state state;
static bool state_saved { false };
void LoadSavedState() {
if (!state_saved) return;
if (CE_GOOD(LOCAL_W) && TF) {
IClientEntity* weapon = RAW_ENT(LOCAL_W);
state.Load(weapon);
}
}
void ResetCritHack() {
state_saved = false;
}
bool IsAttackACrit(CUserCmd* cmd) {
if (CE_GOOD(LOCAL_W) && TF) {
IClientEntity* weapon = RAW_ENT(LOCAL_W);
@ -71,14 +115,18 @@ bool IsAttackACrit(CUserCmd* cmd) {
bool chc = false;
int md5seed = MD5_PseudoRandom(cmd->command_number) & 0x7fffffff;
int rseed = md5seed;
float bucket = *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u);
//float bucket = *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u);
*g_PredictionRandomSeed = md5seed;
int c = LOCAL_W->m_IDX << 8;
int b = LOCAL_E->m_IDX;
rseed = rseed ^ (b | c);
*(float*)(weapon + 2856ul) = 0.0f;
RandomSeed(rseed);
state.Save(weapon);
state_saved = true;
//float saved_time = *(float*)(weapon + 2872ul);
//*(float*)(weapon + 2872ul) = 0.0f;
bool crits = vfunc<bool(*)(IClientEntity*)>(weapon, 1836 / 4, 0)(weapon);
//*(float*)(weapon + 2872ul) = saved_time;
//if (!crits) *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u) = bucket;
return crits;
}

View File

@ -15,6 +15,8 @@ bool AllowAttacking();
bool RandomCrits();
bool WeaponCanCrit();
bool IsAttackACrit(CUserCmd* cmd);
void ResetCritHack();
void LoadSavedState();
#include "beforecheaders.h"
#include <unordered_map>

View File

@ -146,12 +146,12 @@ void CreateMove() {
while (!chc && tries < 4096) {
int md5seed = MD5_PseudoRandom(cmdn) & 0x7fffffff;
int rseed = md5seed;
float bucket = *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u);
//float bucket = *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u);
*g_PredictionRandomSeed = md5seed;
int c = LOCAL_W->m_IDX << 8;
int b = LOCAL_E->m_IDX;
rseed = rseed ^ (b | c);
*(float*)(weapon + 2856ul) = 0.0f;
*(float*)(weapon + 2872ul) = 0.0f;
RandomSeed(rseed);
chc = vfunc<bool(*)(IClientEntity*)>(weapon, 1836 / 4, 0)(weapon);
if (!chc) {
@ -198,7 +198,8 @@ void Draw() {
else
AddCenterString("Weapon can randomly crit");
}
AddCenterString(format("Bucket: %.2f", *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u)));
AddCenterString(format("Bucket: ", *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u)));
//AddCenterString(format("Time: ", *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2872u)));
}
}

View File

@ -77,7 +77,7 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
//if (!cmd) return ret;
bool time_replaced = false;
float curtime_old = g_GlobalVars->curtime;;
float curtime_old = g_GlobalVars->curtime;
if (hacks::shared::airstuck::IsStuck()) {
return ret;
@ -150,6 +150,7 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
}
if (CE_GOOD(g_pLocalPlayer->entity)) {
ResetCritHack();
if (TF2) SAFE_CALL(UpdateHoovyList());
g_pLocalPlayer->v_OrigViewangles = cmd->viewangles;
// PROF_BEGIN();
@ -242,6 +243,9 @@ bool CreateMove_hook(void* thisptr, float inputSample, CUserCmd* cmd) {
}
// PROF_END("CreateMove");
if (!(cmd->buttons & IN_ATTACK)) {
//LoadSavedState();
}
g_pLocalPlayer->bAttackLastTick = (cmd->buttons & IN_ATTACK);
return ret;