Skip to content

Commit

Permalink
Merge pull request #4 from nullifiedcat/unstable
Browse files Browse the repository at this point in the history
Unstable
  • Loading branch information
nullifiedcat authored Mar 2, 2017
2 parents dffc54d + 6e5a250 commit 78dee3a
Show file tree
Hide file tree
Showing 44 changed files with 451 additions and 663 deletions.
7 changes: 2 additions & 5 deletions .cproject
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/uran/Debug"/>
<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/uran/TF2"/>
<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/cathook/TF2"/>
<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/cathook"/>
<entry flags="RESOLVED" kind="libraryFile" name="UranHack" srcPrefixMapping="" srcRootPath=""/>
<entry flags="RESOLVED" kind="libraryFile" name="uran" srcPrefixMapping="" srcRootPath=""/>
<entry flags="RESOLVED" kind="libraryFile" name="cathook" srcPrefixMapping="" srcRootPath=""/>
Expand All @@ -31,7 +32,7 @@
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1168214098." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.965909756" name="Linux GCC" nonInternalBuilderId="cdt.managedbuild.target.gnu.builder.exe.debug" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1799148153" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
<builder buildPath="${workspace_loc:/cathook}/TF2" id="cdt.managedbuild.target.gnu.builder.exe.debug.1548213350" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
<builder buildPath="${workspace_loc:/cathook}" id="cdt.managedbuild.target.gnu.builder.exe.debug.1548213350" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.782611349" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.883030293" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.908662295" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
Expand Down Expand Up @@ -108,7 +109,6 @@
<entry excluding="depr" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/gui"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/ipc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/segvcatch"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/targeting"/>
</sourceEntries>
</configuration>
</storageModule>
Expand Down Expand Up @@ -163,7 +163,6 @@
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/hooks"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/ipc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/segvcatch"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/targeting"/>
</sourceEntries>
</configuration>
</storageModule>
Expand Down Expand Up @@ -260,7 +259,6 @@
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/hooks"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/ipc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/segvcatch"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/targeting"/>
</sourceEntries>
</configuration>
</storageModule>
Expand Down Expand Up @@ -355,7 +353,6 @@
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/hooks"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/ipc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/segvcatch"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src/targeting"/>
</sourceEntries>
</configuration>
</storageModule>
Expand Down
3 changes: 3 additions & 0 deletions src/beforecheaders.h
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
#undef min
#undef max

#undef private
#undef public
3 changes: 2 additions & 1 deletion src/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "textfile.h"
#include "gui/GUI.h"
#include "classid.h"
#include "crits.h"

#include "hacks/hacklist.h"
#include "glowobjects.h"
Expand All @@ -52,7 +53,7 @@
#ifndef CATHOOK_BUILD_NUMBER
#define CATHOOK_BUILD_NUMBER "LATEST"
#endif
#define CATHOOK_BUILD_NAME "Butterscotch Pie"
#define CATHOOK_BUILD_NAME "Cat's Eye"

#define CON_NAME "cat"
#define CON_PREFIX CON_NAME "_"
Expand Down
69 changes: 69 additions & 0 deletions src/crits.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* crits.cpp
*
* Created on: Feb 25, 2017
* Author: nullifiedcat
*/

#include "crits.h"
#include "common.h"
#include "sharedobj.h"
#include "copypasted/CSignature.h"
#include <link.h>

bool RandomCrits() {
static ConVar* tf_weapon_criticals = interfaces::cvar->FindVar("tf_weapon_criticals");
return tf_weapon_criticals->GetBool();
}

bool WeaponCanCrit() {
return TF && CE_GOOD(LOCAL_W) && vfunc<bool(*)(IClientEntity*)>(RAW_ENT(LOCAL_W), 465 + 21, 0)(RAW_ENT(LOCAL_W));
}

bool IsAttackACrit(CUserCmd* cmd) {
if (CE_GOOD(LOCAL_W) && TF) {
IClientEntity* weapon = RAW_ENT(LOCAL_W);
if (TF2C) {
if (vfunc<bool(*)(IClientEntity*)>(weapon, 1824 / 4, 0)(weapon)) {
static uintptr_t CalcIsAttackCritical_s = gSignatures.GetClientSignature("55 89 E5 56 53 83 EC 10 8B 5D 08 89 1C 24 E8 ? ? ? ? 85 C0 89 C6 74 59 8B 00 89 34 24 FF 90 E0 02 00 00 84 C0 74 4A A1 ? ? ? ? 8B 40 04 3B 83 A8 09 00 00 74 3A");
typedef void(*CalcIsAttackCritical_t)(IClientEntity*);
CalcIsAttackCritical_t CIACFn = (CalcIsAttackCritical_t)(CalcIsAttackCritical_s);
*(float*)((uintptr_t)weapon + 2468ul) = 0.0f;
int tries = 0;
static int lcmdn = 0;
if (*(bool*)((uintptr_t)RAW_ENT(LOCAL_W) + 2454ul)) return true;
static int& seed = *(int*)(sharedobj::client->lmap->l_addr + 0x00D53F68ul);
bool cmds = false;
seed = MD5_PseudoRandom(cmd->command_number) & 0x7fffffff;
RandomSeed(seed);
CIACFn(RAW_ENT(LOCAL_W));
return *(bool*)((uintptr_t)RAW_ENT(LOCAL_W) + 2454ul);
}
} else if (TF2) {
if (vfunc<bool(*)(IClientEntity*)>(weapon, 1944 / 4, 0)(weapon)) {
static uintptr_t CalcIsAttackCritical_s = gSignatures.GetClientSignature("55 89 E5 83 EC 28 89 5D F4 8B 5D 08 89 75 F8 89 7D FC 89 1C 24 E8 ? ? ? ? 85 C0 89 C6 74 60 8B 00 89 34 24 FF 90 E0 02 00 00 84 C0 74 51 A1 ? ? ? ? 8B 40 04");
typedef void(*CalcIsAttackCritical_t)(IClientEntity*);
CalcIsAttackCritical_t CIACFn = (CalcIsAttackCritical_t)(CalcIsAttackCritical_s);
if (cmd->command_number) {
int tries = 0;
static int cmdn = 0;
bool chc = false;
int md5seed = MD5_PseudoRandom(cmd->command_number) & 0x7fffffff;
int rseed = md5seed;
float bucket = *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u);
int& a = *(int*)((uintptr_t)(sharedobj::client->lmap->l_addr) + 0x01F8B228);
a = 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);
bool crits = vfunc<bool(*)(IClientEntity*)>(weapon, 1836 / 4, 0)(weapon);
//if (!crits) *(float*)((uintptr_t)RAW_ENT(LOCAL_W) + 2612u) = bucket;
return crits;
}
}
}
}
return false;
}
21 changes: 21 additions & 0 deletions src/crits.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* crits.h
*
* Created on: Feb 25, 2017
* Author: nullifiedcat
*/

#ifndef CRITS_H_
#define CRITS_H_

class CUserCmd;
class IClientEntity;

bool RandomCrits();
bool WeaponCanCrit();
bool IsAttackACrit(CUserCmd* cmd);

//bool CalcIsAttackCritical(IClientEntity* weapon);


#endif /* CRITS_H_ */
130 changes: 56 additions & 74 deletions src/cvwrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,98 +10,80 @@
#include "common.h"
#include "sdk.h"

CatVar::CatVar(CatVar_t type, std::string name, std::string value, std::string help, ICatEnum* enum_type, std::string long_description, bool hasminmax, float maxv, float minv) {
m_Type = type;
m_pConVar = CreateConVar(CON_PREFIX + name, value, help);
m_EnumType = enum_type;
m_flMinValue = minv;
m_flMaxValue = maxv;
m_bHasMinmax = hasminmax;
SetDescription(long_description);
CatVar::CatVar(CatVar_t type, std::string name, std::string value, std::string help, CatEnum* enum_type, std::string long_description, bool hasminmax, float maxv, float minv)
: type(type), name(name), defaults(value), desc_short(help), desc_long(long_description), enum_type(enum_type) {
min = minv;
max = maxv;
restricted = hasminmax;
g_UnregisteredCatVars.push(this);
}

CatEnum::CatEnum(std::vector<std::string> values, int min) {
m_values = values;
m_iMin = min;
m_iMax = min + values.size() - 1;
m_iLength = values.size();
CatVar::CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long)
: type(type), name(name), defaults(defaults), desc_short(desc_short), desc_long(desc_long), enum_type(nullptr), restricted(false) {
// For some reason, adding min(0.0f), max(0.0f) gives a compilation error.
min = 0.0f;
max = 0.0f;
g_UnregisteredCatVars.push(this);
}

std::string CatEnum::Name(int value) {
if (value - m_iMin >= 0 && value - m_iMin <= m_iMax) {
return m_values.at(value - Minimum());
}
return "unknown";
CatVar::CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, float max_val)
: type(type), name(name), defaults(defaults), desc_short(desc_short), desc_long(desc_long), enum_type(nullptr), restricted(true) {
min = 0.0f;
max = max_val;
g_UnregisteredCatVars.push(this);
}

int CatEnum::Maximum() {
return m_iMax;
CatVar::CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, float min_val, float max_val)
: type(type), name(name), defaults(defaults), desc_short(desc_short), desc_long(desc_long), enum_type(nullptr), restricted(true) {
min = min_val;
max = max_val;
g_UnregisteredCatVars.push(this);
}

int CatEnum::Minimum() {
return m_iMin;
CatVar::CatVar(CatVar_t type, std::string name, std::string defaults, std::string desc_short, std::string desc_long, CatEnum& cat_enum)
: type(type), name(name), defaults(defaults), desc_short(desc_short), desc_long(desc_long), enum_type(&cat_enum), restricted(true) {
min = cat_enum.Minimum();
max = cat_enum.Maximum();
g_UnregisteredCatVars.push(this);
}

bool CatVar::GetBool() { return m_pConVar->GetBool(); }
int CatVar::GetInt() { return m_pConVar->GetInt(); }
float CatVar::GetFloat() { return m_pConVar->GetFloat(); }
const char* CatVar::GetString() { return m_pConVar->GetString(); }

void CatVar::SetValue(float value) {
m_pConVar->SetValue(value);
void CatVar::Register() {
convar = CreateConVar(CON_PREFIX + name, defaults, desc_short);
convar_parent = convar->m_pParent;
while (!callbacks.empty()) {
callbacks.top()(this);
callbacks.pop();
}
registered = true;
}

void CatVar::SetValue(std::string value) {
m_pConVar->SetValue(value.c_str());
std::stack<CatVar*> g_UnregisteredCatVars;
void RegisterCatVars() {
while (g_UnregisteredCatVars.size()) {
CatVar* var = g_UnregisteredCatVars.top();
var->Register();
g_UnregisteredCatVars.pop();
}
}

void CatVar::SetValue(int value) {
m_pConVar->SetValue(value);
CatEnum::CatEnum(std::vector<std::string> values, int min) : m_values(values) {
m_iMin = min;
m_iMax = min + values.size() - 1;
m_iLength = values.size();
}

void CatVar::Increment(int factor) {
if (!m_pConVar) return;
switch (m_Type) {
case CatVar_t::CV_SWITCH: {
m_pConVar->SetValue(!m_pConVar->GetInt());
} break;
case CatVar_t::CV_INT:
m_pConVar->SetValue(m_pConVar->GetInt() + factor * m_fStep);
break;
case CatVar_t::CV_FLOAT:
m_pConVar->SetValue(m_pConVar->GetFloat() + (float)factor * m_fStep);
break;
case CatVar_t::CV_ENUM: {
int cur = m_pConVar->GetInt();
int newv = cur + 1;
if (newv > m_EnumType->Maximum()) {
newv = m_EnumType->Minimum();
}
m_pConVar->SetValue(newv);
} break;
std::string CatEnum::Name(int value) {
if (value - m_iMin >= 0 && value - m_iMin <= m_iMax) {
return m_values.at(value - Minimum());
}
return "unknown";
}

void CatVar::Decrement(int factor) {
if (!m_pConVar) return;
switch (m_Type) {
case CatVar_t::CV_SWITCH:
m_pConVar->SetValue((int)!m_pConVar->GetInt());
break;
case CatVar_t::CV_INT:
m_pConVar->SetValue(m_pConVar->GetInt() - factor * m_fStep);
break;
case CatVar_t::CV_FLOAT:
m_pConVar->SetValue(m_pConVar->GetFloat() - (float)factor * m_fStep);
break;
case CatVar_t::CV_ENUM: {
int cur = m_pConVar->GetInt();
int newv = cur - 1;
if (newv < m_EnumType->Minimum()) {
newv = m_EnumType->Maximum() - 1;
}
m_pConVar->SetValue(newv);
} break;
}
int CatEnum::Maximum() const {
return m_iMax;
}

int CatEnum::Minimum() const {
return m_iMin;
}

Loading

0 comments on commit 78dee3a

Please sign in to comment.