Merge remote-tracking branch 'nullworks/newui'
This commit is contained in:
commit
79fc4a44ef
@ -6,7 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include "reclasses.hpp"
|
||||||
namespace re
|
namespace re
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -26,4 +26,14 @@ public:
|
|||||||
int BRequestJoinPlayer(CSteamID steamid);
|
int BRequestJoinPlayer(CSteamID steamid);
|
||||||
static bool BInQueue(CTFPartyClient *this_);
|
static bool BInQueue(CTFPartyClient *this_);
|
||||||
};
|
};
|
||||||
|
class ITFMatchGroupDescription
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
char pad0[4];
|
||||||
|
int m_iID;
|
||||||
|
char pad1[63];
|
||||||
|
bool m_bForceCompetitiveSettings;
|
||||||
|
};
|
||||||
|
|
||||||
|
ITFMatchGroupDescription* GetMatchGroupDescription(int& idx);
|
||||||
} // namespace re
|
} // namespace re
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
#include "C_BaseEntity.hpp"
|
#include "C_BaseEntity.hpp"
|
||||||
|
#include "ITFGroupMatchCriteria.hpp"
|
||||||
#include "CTFPlayerShared.hpp"
|
#include "CTFPlayerShared.hpp"
|
||||||
#include "C_BasePlayer.hpp"
|
#include "C_BasePlayer.hpp"
|
||||||
#include "C_BaseCombatWeapon.hpp"
|
#include "C_BaseCombatWeapon.hpp"
|
||||||
|
11
src/hack.cpp
11
src/hack.cpp
@ -403,6 +403,17 @@ free(logname);*/
|
|||||||
logging::Info("Initializer stack done");
|
logging::Info("Initializer stack done");
|
||||||
|
|
||||||
hack::initialized = true;
|
hack::initialized = true;
|
||||||
|
for (int i = 0; i < 12; i++)
|
||||||
|
{
|
||||||
|
re::ITFMatchGroupDescription* desc = re::GetMatchGroupDescription(i);
|
||||||
|
if (!desc || desc->m_iID > 9) //ID's over 9 are invalid
|
||||||
|
continue;
|
||||||
|
if (desc->m_bForceCompetitiveSettings)
|
||||||
|
{
|
||||||
|
desc->m_bForceCompetitiveSettings = false;
|
||||||
|
logging::Info("Bypassed force competitive cvars!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hack::Think()
|
void hack::Think()
|
||||||
|
@ -48,9 +48,7 @@ void checkAFK()
|
|||||||
if (CE_BAD(entity))
|
if (CE_BAD(entity))
|
||||||
continue;
|
continue;
|
||||||
if (!CE_VECTOR(entity, netvar.vVelocity).IsZero(60.0f))
|
if (!CE_VECTOR(entity, netvar.vVelocity).IsZero(60.0f))
|
||||||
{
|
|
||||||
afkTicks[i].update();
|
afkTicks[i].update();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,6 +56,8 @@ bool HasLowAmmo()
|
|||||||
{
|
{
|
||||||
int *weapon_list =
|
int *weapon_list =
|
||||||
(int *) ((unsigned) (RAW_ENT(LOCAL_E)) + netvar.hMyWeapons);
|
(int *) ((unsigned) (RAW_ENT(LOCAL_E)) + netvar.hMyWeapons);
|
||||||
|
if (g_pLocalPlayer->holding_sniper_rifle && CE_INT(LOCAL_E, netvar.m_iAmmo + 4) <= 5)
|
||||||
|
return true;
|
||||||
for (int i = 0; weapon_list[i]; i++)
|
for (int i = 0; weapon_list[i]; i++)
|
||||||
{
|
{
|
||||||
int handle = weapon_list[i];
|
int handle = weapon_list[i];
|
||||||
@ -66,9 +66,9 @@ bool HasLowAmmo()
|
|||||||
{
|
{
|
||||||
IClientEntity *weapon = g_IEntityList->GetClientEntity(eid);
|
IClientEntity *weapon = g_IEntityList->GetClientEntity(eid);
|
||||||
if (weapon and
|
if (weapon and
|
||||||
re::C_BaseCombatWeapon::IsBaseCombatWeapon(weapon) and
|
re::C_BaseCombatWeapon::IsBaseCombatWeapon(weapon) &&
|
||||||
re::C_TFWeaponBase::UsesPrimaryAmmo(weapon) and
|
re::C_TFWeaponBase::UsesPrimaryAmmo(weapon) &&
|
||||||
not re::C_TFWeaponBase::HasPrimaryAmmo(weapon))
|
!re::C_TFWeaponBase::HasPrimaryAmmo(weapon))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,10 +185,14 @@ void Init()
|
|||||||
sniper_spots.size(), preferred_sniper_spots.size(),
|
sniper_spots.size(), preferred_sniper_spots.size(),
|
||||||
nest_spots.size());
|
nest_spots.size());
|
||||||
}
|
}
|
||||||
|
// I doubtwe'd use more than 128 Sniper spots
|
||||||
|
std::array<int, 128> priority_spots;
|
||||||
void initonce()
|
void initonce()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < afkTicks.size(); i++)
|
for (int i = 0; i < afkTicks.size(); i++)
|
||||||
afkTicks[i].update();
|
afkTicks[i].update();
|
||||||
|
for (auto &e :priority_spots)
|
||||||
|
e = 0;
|
||||||
cdr.update();
|
cdr.update();
|
||||||
cd2.update();
|
cd2.update();
|
||||||
cd3.update();
|
cd3.update();
|
||||||
@ -289,6 +293,43 @@ int GetClosestBuilding()
|
|||||||
}
|
}
|
||||||
return BestBuilding;
|
return BestBuilding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NavToSniperSpot(int priority)
|
||||||
|
{
|
||||||
|
Vector random_spot;
|
||||||
|
if (!sniper_spots.size() && !preferred_sniper_spots.size())
|
||||||
|
return;
|
||||||
|
auto snip_spot = preferred_sniper_spots.size()
|
||||||
|
? preferred_sniper_spots
|
||||||
|
: sniper_spots;
|
||||||
|
int best_spot = -1;
|
||||||
|
float maxscr = FLT_MAX;
|
||||||
|
int lowest_priority = 9999;
|
||||||
|
for (int i = 0; i < snip_spot.size();i++)
|
||||||
|
{
|
||||||
|
if ((priority_spots[i] < lowest_priority))
|
||||||
|
lowest_priority = priority_spots[i];
|
||||||
|
}
|
||||||
|
for (int i = 0; i < snip_spot.size();i++)
|
||||||
|
{
|
||||||
|
if ((priority_spots[i] > lowest_priority))
|
||||||
|
continue;
|
||||||
|
float scr = snip_spot[i].DistTo(g_pLocalPlayer->v_Eye);
|
||||||
|
if (scr < maxscr)
|
||||||
|
{
|
||||||
|
maxscr = scr;
|
||||||
|
best_spot = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (best_spot == -1)
|
||||||
|
return;
|
||||||
|
random_spot = snip_spot.at(best_spot);
|
||||||
|
if (random_spot.z)
|
||||||
|
nav::NavTo(random_spot, false, true, priority);
|
||||||
|
priority_spots[best_spot]++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
int follow_target = 0;
|
int follow_target = 0;
|
||||||
void CreateMove()
|
void CreateMove()
|
||||||
{
|
{
|
||||||
@ -325,38 +366,18 @@ void CreateMove()
|
|||||||
if (!spy_mode && !heavy_mode && !engi_mode)
|
if (!spy_mode && !heavy_mode && !engi_mode)
|
||||||
{
|
{
|
||||||
cd3.update();
|
cd3.update();
|
||||||
Vector random_spot;
|
|
||||||
if (cd2.test_and_set(5000))
|
if (cd2.test_and_set(5000))
|
||||||
Init();
|
Init();
|
||||||
if (!sniper_spots.size() && !preferred_sniper_spots.size())
|
NavToSniperSpot(5);
|
||||||
return;
|
|
||||||
auto snip_spot = preferred_sniper_spots.size()
|
|
||||||
? preferred_sniper_spots
|
|
||||||
: sniper_spots;
|
|
||||||
int rng = rand() % snip_spot.size();
|
|
||||||
random_spot = snip_spot.at(rng);
|
|
||||||
if (random_spot.z)
|
|
||||||
nav::NavTo(random_spot, true, true);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else if (!engi_mode)
|
else if (!engi_mode)
|
||||||
{
|
{
|
||||||
CachedEntity *tar = NearestEnemy();
|
CachedEntity *tar = NearestEnemy();
|
||||||
if (CE_BAD(tar) && last_tar == -1 && nav::ReadyForCommands)
|
if (CE_BAD(tar) && last_tar == -1 && nav::ReadyForCommands)
|
||||||
{
|
{
|
||||||
Vector random_spot;
|
|
||||||
if (cd2.test_and_set(5000))
|
if (cd2.test_and_set(5000))
|
||||||
Init();
|
Init();
|
||||||
if (!sniper_spots.size() && !preferred_sniper_spots.size())
|
NavToSniperSpot(5);
|
||||||
return;
|
|
||||||
auto snip_spot = preferred_sniper_spots.size()
|
|
||||||
? preferred_sniper_spots
|
|
||||||
: sniper_spots;
|
|
||||||
int rng = rand() % snip_spot.size();
|
|
||||||
random_spot = snip_spot.at(rng);
|
|
||||||
if (random_spot.z)
|
|
||||||
nav::NavTo(random_spot, false);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (CE_GOOD(tar))
|
if (CE_GOOD(tar))
|
||||||
{
|
{
|
||||||
@ -412,7 +433,7 @@ void CreateMove()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If Near The best spot and ready for commands
|
// If Near The best spot and ready for commands
|
||||||
if (best_spot.DistTo(LOCAL_E->m_vecOrigin()) < 300.0f &&
|
if (best_spot.DistTo(LOCAL_E->m_vecOrigin()) < 200.0f &&
|
||||||
(nav::ReadyForCommands || nav::priority == 1))
|
(nav::ReadyForCommands || nav::priority == 1))
|
||||||
{
|
{
|
||||||
// Get the closest Building
|
// Get the closest Building
|
||||||
@ -467,7 +488,7 @@ void CreateMove()
|
|||||||
fClampAngle(angles);
|
fClampAngle(angles);
|
||||||
current_user_cmd->viewangles = angles;
|
current_user_cmd->viewangles = angles;
|
||||||
current_user_cmd->buttons |= IN_ATTACK;
|
current_user_cmd->buttons |= IN_ATTACK;
|
||||||
g_pLocalPlayer->bUseSilentAngles = false;
|
g_pLocalPlayer->bUseSilentAngles = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -485,19 +506,9 @@ void CreateMove()
|
|||||||
// Ammo is dormant, go and find it!
|
// Ammo is dormant, go and find it!
|
||||||
else if (sniper_spots.size() && nav::ReadyForCommands)
|
else if (sniper_spots.size() && nav::ReadyForCommands)
|
||||||
{
|
{
|
||||||
Vector random_spot;
|
|
||||||
if (cd2.test_and_set(5000))
|
if (cd2.test_and_set(5000))
|
||||||
Init();
|
Init();
|
||||||
if (!sniper_spots.size() &&
|
NavToSniperSpot(1);
|
||||||
!preferred_sniper_spots.size())
|
|
||||||
return;
|
|
||||||
auto snip_spot = preferred_sniper_spots.size()
|
|
||||||
? preferred_sniper_spots
|
|
||||||
: sniper_spots;
|
|
||||||
int rng = rand() % snip_spot.size();
|
|
||||||
random_spot = snip_spot.at(rng);
|
|
||||||
if (random_spot.z)
|
|
||||||
nav::NavTo(random_spot, false, false, 1);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,3 +119,14 @@ int re::CTFPartyClient::BRequestJoinPlayer(CSteamID steamid)
|
|||||||
BRequestJoinPlayer_t(addr);
|
BRequestJoinPlayer_t(addr);
|
||||||
return BRequestJoinPlayer_fn(this, steamid, false);
|
return BRequestJoinPlayer_fn(this, steamid, false);
|
||||||
}
|
}
|
||||||
|
re::ITFMatchGroupDescription *
|
||||||
|
re::GetMatchGroupDescription(int &idx)
|
||||||
|
{
|
||||||
|
typedef re::ITFMatchGroupDescription *(
|
||||||
|
*GetMatchGroupDescription_t)(int&);
|
||||||
|
static uintptr_t addr = gSignatures.GetClientSignature("55 89 E5 8B 45 08 8B 00 83 F8 FF");
|
||||||
|
static GetMatchGroupDescription_t GetMatchGroupDescription_fn =
|
||||||
|
GetMatchGroupDescription_t(addr);
|
||||||
|
|
||||||
|
return GetMatchGroupDescription_fn(idx);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user