commit
706d086f1d
@ -16,6 +16,7 @@ namespace shared
|
|||||||
namespace announcer
|
namespace announcer
|
||||||
{
|
{
|
||||||
|
|
||||||
|
void playsound(const std::string&);
|
||||||
void init();
|
void init();
|
||||||
void shutdown();
|
void shutdown();
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,8 @@ public:
|
|||||||
void FillWithCatVars(std::vector<CatVar *> vec);
|
void FillWithCatVars(std::vector<CatVar *> vec);
|
||||||
void OpenSublist(List *sublist, int dy);
|
void OpenSublist(List *sublist, int dy);
|
||||||
bool ShouldClose();
|
bool ShouldClose();
|
||||||
|
static void ShowInvalidCatVars();
|
||||||
|
static void ShowMissingCatVars();
|
||||||
|
|
||||||
static List *FromString(const std::string &string);
|
static List *FromString(const std::string &string);
|
||||||
|
|
||||||
@ -48,6 +50,20 @@ public:
|
|||||||
List *open_sublist{ nullptr };
|
List *open_sublist{ nullptr };
|
||||||
std::string title;
|
std::string title;
|
||||||
};
|
};
|
||||||
|
class DecoyCatVar
|
||||||
|
{
|
||||||
|
CatVar_t type{ CV_SWITCH };
|
||||||
|
const std::string name;
|
||||||
|
int defaults{ 0 };
|
||||||
|
const std::string desc_short{ "" };
|
||||||
|
const std::string desc_long{ "INVALID COMMAND" };
|
||||||
|
bool registered{ false };
|
||||||
|
|
||||||
|
public:
|
||||||
|
DecoyCatVar(const std::string value) : desc_short(value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,6 +50,9 @@ CatVar tauntslide(CV_SWITCH, "tauntslide", "0", "TF2C tauntslide",
|
|||||||
CatVar tauntslide_tf2(CV_SWITCH, "tauntslide_tf2", "0", "Tauntslide",
|
CatVar tauntslide_tf2(CV_SWITCH, "tauntslide_tf2", "0", "Tauntslide",
|
||||||
"Allows free movement while taunting with movable "
|
"Allows free movement while taunting with movable "
|
||||||
"taunts\nOnly works in tf2");
|
"taunts\nOnly works in tf2");
|
||||||
|
CatVar
|
||||||
|
show_spectators(CV_SWITCH, "show_spectators", "0", "Show spectators",
|
||||||
|
"Show who's spectating you\nonly works in valve servers");
|
||||||
|
|
||||||
void *C_TFPlayer__ShouldDraw_original = nullptr;
|
void *C_TFPlayer__ShouldDraw_original = nullptr;
|
||||||
|
|
||||||
@ -108,7 +111,6 @@ CatCommand
|
|||||||
|
|
||||||
void CreateMove()
|
void CreateMove()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Crithack
|
// Crithack
|
||||||
static IClientEntity *localplayer, *weapon, *last_weapon = nullptr;
|
static IClientEntity *localplayer, *weapon, *last_weapon = nullptr;
|
||||||
static int tries, cmdn, md5seed, rseed, c, b;
|
static int tries, cmdn, md5seed, rseed, c, b;
|
||||||
@ -123,22 +125,23 @@ void CreateMove()
|
|||||||
static IClientEntity *last_checked_weapon = nullptr;
|
static IClientEntity *last_checked_weapon = nullptr;
|
||||||
|
|
||||||
/*IF_GAME (IsTF2()) {
|
/*IF_GAME (IsTF2()) {
|
||||||
if (crit_hack_next && CE_GOOD(LOCAL_E) && CE_GOOD(LOCAL_W) && WeaponCanCrit() && RandomCrits()) {
|
if (crit_hack_next && CE_GOOD(LOCAL_E) && CE_GOOD(LOCAL_W) &&
|
||||||
PROF_SECTION(CM_misc_crit_hack_prediction);
|
WeaponCanCrit() && RandomCrits()) {
|
||||||
weapon = RAW_ENT(LOCAL_W);
|
PROF_SECTION(CM_misc_crit_hack_prediction);
|
||||||
// IsBaseCombatWeapon
|
weapon = RAW_ENT(LOCAL_W);
|
||||||
if (weapon &&
|
// IsBaseCombatWeapon
|
||||||
vfunc<bool(*)(IClientEntity*)>(weapon, 1944 / 4, 0)(weapon)) {
|
if (weapon &&
|
||||||
/*if (experimental_crit_hack.KeyDown()) {
|
vfunc<bool(*)(IClientEntity*)>(weapon, 1944 / 4, 0)(weapon)) {
|
||||||
if (!g_pUserCmd->command_number || critWarmup < 8) {
|
/*if (experimental_crit_hack.KeyDown()) {
|
||||||
if (g_pUserCmd->buttons & IN_ATTACK) {
|
if (!g_pUserCmd->command_number || critWarmup < 8) {
|
||||||
critWarmup++;
|
if (g_pUserCmd->buttons & IN_ATTACK) {
|
||||||
} else {
|
critWarmup++;
|
||||||
critWarmup = 0;
|
} else {
|
||||||
}
|
critWarmup = 0;
|
||||||
g_pUserCmd->buttons &= ~(IN_ATTACK);
|
}
|
||||||
}
|
g_pUserCmd->buttons &= ~(IN_ATTACK);
|
||||||
}*/ /*
|
}
|
||||||
|
}*/ /*
|
||||||
if (g_pUserCmd->command_number &&
|
if (g_pUserCmd->command_number &&
|
||||||
(last_checked_weapon !=
|
(last_checked_weapon !=
|
||||||
weapon || last_checked_command_number <
|
weapon || last_checked_command_number <
|
||||||
@ -280,7 +283,7 @@ void CreateMove()
|
|||||||
static bool flswitch = false;
|
static bool flswitch = false;
|
||||||
if (flswitch && !g_pUserCmd->impulse)
|
if (flswitch && !g_pUserCmd->impulse)
|
||||||
g_pUserCmd->impulse = 100;
|
g_pUserCmd->impulse = 100;
|
||||||
flswitch = !flswitch;
|
flswitch = !flswitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +320,7 @@ void CreateMove()
|
|||||||
if (!(hacks::shared::antiaim::enabled &&
|
if (!(hacks::shared::antiaim::enabled &&
|
||||||
hacks::shared::antiaim::yaw_mode &&
|
hacks::shared::antiaim::yaw_mode &&
|
||||||
!(side || forward)))
|
!(side || forward)))
|
||||||
g_pUserCmd->viewangles.y = camera_angle[1];
|
g_pUserCmd->viewangles.y = camera_angle[1];
|
||||||
g_pLocalPlayer->v_OrigViewangles.y = camera_angle[1];
|
g_pLocalPlayer->v_OrigViewangles.y = camera_angle[1];
|
||||||
|
|
||||||
// Use silent since we dont want to prevent the player from
|
// Use silent since we dont want to prevent the player from
|
||||||
@ -375,7 +378,37 @@ void DrawText()
|
|||||||
fonts::font_main, color);
|
fonts::font_main, color);
|
||||||
|
|
||||||
}*/
|
}*/
|
||||||
|
if (show_spectators)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 32; i++)
|
||||||
|
{
|
||||||
|
// Assign the for loops tick number to an ent
|
||||||
|
CachedEntity *ent = ENTITY(i);
|
||||||
|
player_info_s info;
|
||||||
|
if (!CE_BAD(ent) && ent != LOCAL_E &&
|
||||||
|
ent->m_Type == ENTITY_PLAYER &&
|
||||||
|
(CE_INT(ent, netvar.hObserverTarget) & 0xFFF) ==
|
||||||
|
LOCAL_E->m_IDX &&
|
||||||
|
CE_INT(ent, netvar.iObserverMode) >= 4 &&
|
||||||
|
g_IEngine->GetPlayerInfo(i, &info))
|
||||||
|
{
|
||||||
|
auto observermode = "N/A";
|
||||||
|
switch (CE_INT(ent, netvar.iObserverMode))
|
||||||
|
{
|
||||||
|
case 4:
|
||||||
|
observermode = "Firstperson";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
observermode = "Thirdperson";
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
observermode = "Freecam";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
AddSideString(format(info.name, " ", observermode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!debug_info)
|
if (!debug_info)
|
||||||
return;
|
return;
|
||||||
if (CE_GOOD(g_pLocalPlayer->weapon()))
|
if (CE_GOOD(g_pLocalPlayer->weapon()))
|
||||||
@ -655,9 +688,9 @@ static CatCommand
|
|||||||
const char *ft = (args.ArgC() > 1 ? args[2] : 0);
|
const char *ft = (args.ArgC() > 1 ? args[2] : 0);
|
||||||
DumpRecvTable(ent, clz->m_pRecvTable, 0, ft, 0);
|
DumpRecvTable(ent, clz->m_pRecvTable, 0, ft, 0);
|
||||||
});
|
});
|
||||||
}
|
} // namespace misc
|
||||||
}
|
} // namespace shared
|
||||||
}
|
} // namespace hacks
|
||||||
|
|
||||||
/*void DumpRecvTable(CachedEntity* ent, RecvTable* table, int depth, const char*
|
/*void DumpRecvTable(CachedEntity* ent, RecvTable* table, int depth, const char*
|
||||||
ft, unsigned acc_offset) { bool forcetable = ft && strlen(ft); if (!forcetable
|
ft, unsigned acc_offset) { bool forcetable = ft && strlen(ft); if (!forcetable
|
||||||
|
@ -37,8 +37,10 @@ CatVar gui_visible(CV_SWITCH, "gui_visible", "0", "GUI Active",
|
|||||||
"GUI switch (bind it to a key!)");
|
"GUI switch (bind it to a key!)");
|
||||||
CatVar gui_draw_bounds(CV_SWITCH, "gui_bounds", "0", "Draw Bounds",
|
CatVar gui_draw_bounds(CV_SWITCH, "gui_bounds", "0", "Draw Bounds",
|
||||||
"Draw GUI elements' bounding boxes");
|
"Draw GUI elements' bounding boxes");
|
||||||
// CatVar gui_nullcore(CV_SWITCH, "gui_nullcore", "1", "NullCore GUI", "Use
|
CatCommand debug_invalid("debug_invalid", "Display all invalid CatVars",
|
||||||
// NullCoreCheat GUI");
|
[]() { menu::ncc::List::ShowInvalidCatVars(); });
|
||||||
|
CatCommand debug_missing("debug_missing", "Display all missing CatVars",
|
||||||
|
[]() { menu::ncc::List::ShowMissingCatVars(); });
|
||||||
|
|
||||||
CatGUI::CatGUI()
|
CatGUI::CatGUI()
|
||||||
{
|
{
|
||||||
@ -76,6 +78,7 @@ int NCGUIColor()
|
|||||||
void CatGUI::Setup()
|
void CatGUI::Setup()
|
||||||
{
|
{
|
||||||
menu::ncc::Init();
|
menu::ncc::Init();
|
||||||
|
menu::ncc::List::ShowInvalidCatVars();
|
||||||
root_nullcore = menu::ncc::root;
|
root_nullcore = menu::ncc::root;
|
||||||
gui_visible.OnRegister([](CatVar *var) {
|
gui_visible.OnRegister([](CatVar *var) {
|
||||||
var->convar->InstallChangeCallback(GUIVisibleCallback);
|
var->convar->InstallChangeCallback(GUIVisibleCallback);
|
||||||
|
@ -40,7 +40,8 @@ void ItemVariable::Change(float amount)
|
|||||||
{
|
{
|
||||||
case CV_SWITCH:
|
case CV_SWITCH:
|
||||||
{
|
{
|
||||||
catvar = !catvar;
|
if (catvar.desc_long != "INVALID COMMAND")
|
||||||
|
catvar = !catvar;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_ENUM:
|
case CV_ENUM:
|
||||||
@ -89,7 +90,8 @@ void ItemVariable::OnMousePress()
|
|||||||
capturing = true;
|
capturing = true;
|
||||||
}
|
}
|
||||||
if (catvar.type == CV_SWITCH)
|
if (catvar.type == CV_SWITCH)
|
||||||
catvar = !catvar;
|
if (catvar.desc_long != "INVALID COMMAND")
|
||||||
|
catvar = !catvar;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemVariable::OnFocusLose()
|
void ItemVariable::OnFocusLose()
|
||||||
@ -107,7 +109,7 @@ void ItemVariable::OnKeyPress(ButtonCode_t key, bool repeat)
|
|||||||
if (capturing)
|
if (capturing)
|
||||||
{
|
{
|
||||||
if (key == ButtonCode_t::KEY_ESCAPE)
|
if (key == ButtonCode_t::KEY_ESCAPE)
|
||||||
key = (ButtonCode_t) 0;
|
key = (ButtonCode_t) 0;
|
||||||
catvar = (int) key;
|
catvar = (int) key;
|
||||||
capturing = false;
|
capturing = false;
|
||||||
return;
|
return;
|
||||||
@ -159,10 +161,10 @@ void ItemVariable::OnKeyPress(ButtonCode_t key, bool repeat)
|
|||||||
|
|
||||||
if (key == ButtonCode_t::MOUSE_WHEEL_UP)
|
if (key == ButtonCode_t::MOUSE_WHEEL_UP)
|
||||||
{
|
{
|
||||||
if (catvar.type == CV_FLOAT &&
|
if ((catvar.type == CV_FLOAT || catvar.type == CV_INT) &&
|
||||||
g_IInputSystem->IsButtonDown(ButtonCode_t::KEY_LSHIFT))
|
g_IInputSystem->IsButtonDown(ButtonCode_t::KEY_LSHIFT))
|
||||||
Change(change * 2);
|
Change(change * 2);
|
||||||
else if (catvar.type == CV_FLOAT &&
|
else if ((catvar.type == CV_FLOAT || catvar.type == CV_INT) &&
|
||||||
g_IInputSystem->IsButtonDown(ButtonCode_t::KEY_LCONTROL))
|
g_IInputSystem->IsButtonDown(ButtonCode_t::KEY_LCONTROL))
|
||||||
Change(change / 4);
|
Change(change / 4);
|
||||||
else
|
else
|
||||||
@ -189,7 +191,8 @@ void ItemVariable::Draw(int x, int y)
|
|||||||
{
|
{
|
||||||
case CV_SWITCH:
|
case CV_SWITCH:
|
||||||
{
|
{
|
||||||
val = catvar ? "ON" : "OFF";
|
if (catvar.desc_long != "INVALID COMMAND")
|
||||||
|
val = catvar ? "ON" : "OFF";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_INT:
|
case CV_INT:
|
||||||
|
@ -18,6 +18,7 @@ namespace menu
|
|||||||
{
|
{
|
||||||
namespace ncc
|
namespace ncc
|
||||||
{
|
{
|
||||||
|
std::vector<std::string> invalidvars, missingvars, menu_vars;
|
||||||
|
|
||||||
List::List(std::string title)
|
List::List(std::string title)
|
||||||
: open_sublist(nullptr), title(title), got_mouse(false),
|
: open_sublist(nullptr), title(title), got_mouse(false),
|
||||||
@ -100,8 +101,51 @@ CatVar *FindCatVar(const std::string name)
|
|||||||
if (var->name == name)
|
if (var->name == name)
|
||||||
return var;
|
return var;
|
||||||
}
|
}
|
||||||
logging::Info("can't find %s", name.c_str());
|
invalidvars.push_back(name);
|
||||||
throw std::runtime_error("can't find catvar " + name);
|
DecoyCatVar *unknownvar =
|
||||||
|
new DecoyCatVar(format("Error, can't find ", name));
|
||||||
|
logging::Info("Can't find %s", name.c_str());
|
||||||
|
return (CatVar *) unknownvar;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FindMissingCatVars()
|
||||||
|
{
|
||||||
|
for (auto var : CatVarList())
|
||||||
|
{
|
||||||
|
if (std::find(menu_vars.begin(), menu_vars.end(), var->name) ==
|
||||||
|
menu_vars.end())
|
||||||
|
missingvars.push_back(var->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void List::ShowInvalidCatVars()
|
||||||
|
{
|
||||||
|
if (invalidvars.size())
|
||||||
|
{
|
||||||
|
g_ICvar->ConsolePrintf("The following CatVars are invalid\n");
|
||||||
|
for (int i = 0; i < invalidvars.size(); i++)
|
||||||
|
g_ICvar->ConsolePrintf("%s\n", invalidvars[i].c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_ICvar->ConsolePrintf("No CatVars are invalid\n");
|
||||||
|
static bool init = false;
|
||||||
|
if (!init)
|
||||||
|
{
|
||||||
|
FindMissingCatVars();
|
||||||
|
init = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void List::ShowMissingCatVars()
|
||||||
|
{
|
||||||
|
if (missingvars.size())
|
||||||
|
{
|
||||||
|
g_ICvar->ConsolePrintf("The following CatVars are missing\n");
|
||||||
|
for (int i = 0; i < missingvars.size(); i++)
|
||||||
|
g_ICvar->ConsolePrintf("%s\n", missingvars[i].c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_ICvar->ConsolePrintf("No CatVars are missing\n");
|
||||||
}
|
}
|
||||||
// abc def, ghj, [, fdg sgf saqw rter, ], gs
|
// abc def, ghj, [, fdg sgf saqw rter, ], gs
|
||||||
void FillFromTokens(List *list, const std::vector<std::string> &tokens)
|
void FillFromTokens(List *list, const std::vector<std::string> &tokens)
|
||||||
@ -114,6 +158,7 @@ void FillFromTokens(List *list, const std::vector<std::string> &tokens)
|
|||||||
if (i == tokens.size() - 1 || tokens[i + 1] != "[")
|
if (i == tokens.size() - 1 || tokens[i + 1] != "[")
|
||||||
{
|
{
|
||||||
list->AddChild(new ItemVariable(*FindCatVar(str)));
|
list->AddChild(new ItemVariable(*FindCatVar(str)));
|
||||||
|
menu_vars.push_back(str);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -451,6 +451,7 @@ static const std::string list_tf2 = R"(
|
|||||||
"gui_ncc_font_family"
|
"gui_ncc_font_family"
|
||||||
"gui_ncc_font_title_family"
|
"gui_ncc_font_title_family"
|
||||||
"fast_outline"
|
"fast_outline"
|
||||||
|
"show_spectators"
|
||||||
"ESP" [
|
"ESP" [
|
||||||
"ESP Menu"
|
"ESP Menu"
|
||||||
"esp_enabled"
|
"esp_enabled"
|
||||||
@ -586,7 +587,7 @@ static const std::string list_tf2 = R"(
|
|||||||
"Air Stuck Menu"
|
"Air Stuck Menu"
|
||||||
"airstuck"
|
"airstuck"
|
||||||
]
|
]
|
||||||
"Anti-/Anti-Aim" [
|
"Anti-Aim" [
|
||||||
"Anti-Aim Menu"
|
"Anti-Aim Menu"
|
||||||
"aa_enabled"
|
"aa_enabled"
|
||||||
"aa_realfakes"
|
"aa_realfakes"
|
||||||
@ -603,7 +604,8 @@ static const std::string list_tf2 = R"(
|
|||||||
"aa_no_clamp"
|
"aa_no_clamp"
|
||||||
"resolver"
|
"resolver"
|
||||||
"identify"
|
"identify"
|
||||||
"Anti Anti Aim" [
|
"Anti-/Anti-Aim" [
|
||||||
|
"Anti-/Anti-Aim"
|
||||||
"aa_aaaa_enabled"
|
"aa_aaaa_enabled"
|
||||||
"aa_aaaa_flip_key"
|
"aa_aaaa_flip_key"
|
||||||
"aa_aaaa_mode"
|
"aa_aaaa_mode"
|
||||||
|
Reference in New Issue
Block a user