fixes and stuff

This commit is contained in:
LightCat 2018-09-02 14:23:24 +02:00
parent 9195331290
commit d3ddcf37b6
13 changed files with 165 additions and 55 deletions

View File

@ -27,6 +27,7 @@ void Draw();
int FindInVector(size_t id);
int FindNearestValid(Vector vec);
int FindNearestValidbyDist(Vector vec, float mindist, float maxdist);
class inactivityTracker
{

View File

@ -48,7 +48,8 @@ IgnoreReason shouldTargetSteamId(unsigned id)
}
auto &pl = playerlist::AccessData(id);
if (playerlist::IsFriendly(pl.state) || (pl.state == playerlist::k_EState::CAT && *ignoreCathook))
if (playerlist::IsFriendly(pl.state) ||
(pl.state == playerlist::k_EState::CAT && *ignoreCathook))
return IgnoreReason::LOCAL_PLAYER_LIST;
#if ENABLE_ONLINE
auto *co = online::getUserData(id);

View File

@ -125,7 +125,7 @@ void NetVars::Init()
this->m_iObjectType =
gNetvars.get_offset("DT_BaseObject", "m_iObjectType");
this->m_bMiniBuilding =
gNetvars.get_offset("DT_BaseObject", "m_bMiniBuilding");
gNetvars.get_offset("DT_BaseObject", "m_bMiniBuilding");
this->m_iTeleState =
gNetvars.get_offset("DT_ObjectTeleporter", "m_iState");
this->m_flTeleRechargeTime =

View File

@ -218,7 +218,8 @@ void CreateMove()
for (angle.y = -180.0f; angle.y < 180.0f; angle.y += 20.0f)
{
if (unifiedCanBackstab(besttarget, angle, i.entorigin, i.collidable.min, i.collidable.max))
if (unifiedCanBackstab(besttarget, angle, i.entorigin,
i.collidable.min, i.collidable.max))
{
current_user_cmd->tick_count = i.tickcount;
current_user_cmd->viewangles = angle;

View File

@ -124,7 +124,7 @@ void Run()
float _viewangles = CE_VECTOR(pEntity, netvar.m_angEyeAngles).y;
float viewangles =
(_viewangles > 180) ? _viewangles - 360 : _viewangles;
float simtime = CE_FLOAT(pEntity, netvar.m_flSimulationTime);
float simtime = CE_FLOAT(pEntity, netvar.m_flSimulationTime);
Vector ent_orig = pEntity->InternalEntity()->GetAbsOrigin();
std::array<hitboxData, 18> hbdArray;
for (size_t i = 0; i < hbdArray.max_size(); i++)
@ -135,15 +135,21 @@ void Run()
}
hitboxData collidable{};
{
collidable.min = RAW_ENT(pEntity)->GetCollideable()->OBBMins() + ent_orig;
collidable.max = RAW_ENT(pEntity)->GetCollideable()->OBBMaxs() + ent_orig;
collidable.center = (collidable.min + collidable.max)/2;
collidable.min =
RAW_ENT(pEntity)->GetCollideable()->OBBMins() + ent_orig;
collidable.max =
RAW_ENT(pEntity)->GetCollideable()->OBBMaxs() + ent_orig;
collidable.center = (collidable.min + collidable.max) / 2;
}
auto hdr = g_IModelInfo->GetStudiomodel(RAW_ENT(pEntity)->GetModel());
headPositions[i][cmd->command_number % getTicks()] =
BacktrackData{ cmd->tick_count, hbdArray, collidable,
viewangles, simtime,
ent_orig, cmd->command_number % getTicks() };
BacktrackData{ cmd->tick_count,
hbdArray,
collidable,
viewangles,
simtime,
ent_orig,
cmd->command_number % getTicks() };
}
if (iBestTarget != -1 && CanShoot())
{
@ -265,23 +271,24 @@ bool ValidTick(BacktrackData &i, CachedEntity *ent)
{
// TODO: Fix this func
// if (istickvalid[ent->m_IDX][i.index])
// return true;
// if (istickinvalid[ent->m_IDX][i.index])
// return false;
// if (IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes[head].center, true))
// if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) * 1000.0f -
// getLatency() - i.simtime * 1000.0f) <= 200.0f)
// {
// istickvalid[ent->m_IDX][i.index] = true;
// return true;
// }
// istickinvalid[ent->m_IDX][i.index] = true;
// return false;
// if (istickvalid[ent->m_IDX][i.index])
// return true;
// if (istickinvalid[ent->m_IDX][i.index])
// return false;
// if (IsVectorVisible(g_pLocalPlayer->v_Eye, i.hitboxes[head].center,
// true))
// if (fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) *
// 1000.0f -
// getLatency() - i.simtime * 1000.0f) <= 200.0f)
// {
// istickvalid[ent->m_IDX][i.index] = true;
// return true;
// }
// istickinvalid[ent->m_IDX][i.index] = true;
// return false;
if (!(fabsf(NET_FLOAT(RAW_ENT(ent), netvar.m_flSimulationTime) * 1000.0f -
getLatency() - i.simtime * 1000.0f) < 200.0f))
getLatency() - i.simtime * 1000.0f) < 200.0f))
return false;
return true;
}

View File

@ -78,8 +78,9 @@ void do_random_votekick()
{
std::vector<int> targets;
player_info_s local_info;
if (CE_BAD(LOCAL_E) || !g_IEngine->GetPlayerInfo(LOCAL_E->m_IDX, &local_info))
if (CE_BAD(LOCAL_E) ||
!g_IEngine->GetPlayerInfo(LOCAL_E->m_IDX, &local_info))
return;
for (int i = 1; i <= g_GlobalVars->maxClients; ++i)
{
@ -92,7 +93,10 @@ void do_random_votekick()
continue;
if (info.friendsID == local_info.friendsID)
continue;
if (playerlist::AccessData(info.friendsID).state != playerlist::k_EState::RAGE && playerlist::AccessData(info.friendsID).state != playerlist::k_EState::DEFAULT)
if (playerlist::AccessData(info.friendsID).state !=
playerlist::k_EState::RAGE &&
playerlist::AccessData(info.friendsID).state !=
playerlist::k_EState::DEFAULT)
continue;
targets.push_back(info.userID);

View File

@ -260,7 +260,7 @@ void CreateMove()
ResetEntityStrings(); // Clear any strings entities have
entities_need_repaint.clear(); // Clear data on entities that need redraw
int max_clients = g_IEngine->GetMaxClients();
int limit = HIGHEST_ENTITY;
int limit = HIGHEST_ENTITY;
// If not using any other special esp, we lower the min to the max clients
if (!buildings && !proj_esp && !item_esp)
@ -1037,7 +1037,7 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
? "Teleporter"
: (classid == CL_CLASS(CObjectSentrygun) ? "Sentry Gun"
: "Dispenser"));
int level = CE_INT(ent, netvar.iUpgradeLevel);
int level = CE_INT(ent, netvar.iUpgradeLevel);
int IsMini = CE_INT(ent, netvar.m_bMiniBuilding);
if (!IsMini)
AddEntityString(ent, format("LV ", level, ' ', name));
@ -1045,14 +1045,17 @@ void _FASTCALL ProcessEntity(CachedEntity *ent)
AddEntityString(ent, format("Mini ", name));
if (classid == CL_CLASS(CObjectTeleporter))
{
float next_teleport = CE_FLOAT(ent, netvar.m_flTeleRechargeTime);
float next_teleport =
CE_FLOAT(ent, netvar.m_flTeleRechargeTime);
float yaw_to_exit = CE_FLOAT(ent, netvar.m_flTeleYawToExit);
if (yaw_to_exit)
{
if (next_teleport < g_GlobalVars->curtime)
AddEntityString(ent, "Ready");
else
AddEntityString(ent, format(next_teleport - g_GlobalVars->curtime, "s"));
AddEntityString(
ent,
format(next_teleport - g_GlobalVars->curtime, "s"));
}
}
}

View File

@ -6,6 +6,7 @@
#include "navparser.hpp"
#include "FollowBot.hpp"
#include "NavBot.hpp"
#include "PlayerTools.hpp"
namespace hacks::tf2::NavBot
{
@ -16,6 +17,7 @@ static settings::Bool engi_mode("navbot.engi-mode", "false");
static settings::Bool primary_only("navbot.primary-only", "true");
static settings::Bool target_sentry{ "navbot.target-sentry", "true" };
static settings::Bool stay_near{ "navbot.stay-near", "false" };
static settings::Bool take_tele{ "navbot.take-teleporters", "true" };
static settings::Bool enable_fb{ "navbot.medbot", "false" };
static settings::Bool roambot{ "navbot.roaming", "true" };
@ -158,6 +160,9 @@ CachedEntity *NearestEnemy()
CachedEntity *ent = ENTITY(i);
if (CE_BAD(ent) || ent->m_Type() != ENTITY_PLAYER)
continue;
if (player_tools::shouldTarget(ent) !=
player_tools::IgnoreReason::DO_NOT_IGNORE)
continue;
if (ent == LOCAL_E || !ent->m_bAlivePlayer() ||
ent->m_iTeam() == LOCAL_E->m_iTeam())
continue;
@ -357,7 +362,21 @@ bool NavToSniperSpot(int priority)
bool use_preferred = !preferred_sniper_spots.empty();
auto snip_spot = use_preferred ? preferred_sniper_spots : sniper_spots;
bool toret = false;
if (*stay_near)
{
CachedEntity *ent = NearestEnemy();
if (CE_GOOD(ent))
{
int nearestvalid =
nav::FindNearestValidbyDist(ent->m_vecOrigin(), 1000, 4000);
if (nearestvalid != -1)
{
auto area = nav::areas[nearestvalid];
nav::NavTo(area.m_center, false, true, priority);
return true;
}
}
}
if (use_preferred)
{
int best_spot = -1;

View File

@ -1158,7 +1158,6 @@ void WhatIAmLookingAt(int *result_eindex, Vector *result_pos)
*result_eindex = -1;
if (trace.m_pEnt && result_eindex)
*result_eindex = ((IClientEntity *) (trace.m_pEnt))->entindex();
}
bool IsSentryBuster(CachedEntity *entity)

View File

@ -218,8 +218,8 @@ DEFINE_HOOKED_METHOD(DispatchUserMessage, bool, void *this_, int type,
}
}
#if !LAGBOT_MODE
if (*identify && sendmsg.test_and_set(300000))
chat_stack::Say("!!meow");
if (*identify && sendmsg.test_and_set(300000))
chat_stack::Say("!!meow");
#endif
if (crypt_chat)
{
@ -229,24 +229,30 @@ if (*identify && sendmsg.test_and_set(300000))
{
std::string msg = ucccccp::decrypt(message);
#if !LAGBOT_MODE
// if (ucccccp::decrypt(message) == "meow" &&
// hacks::shared::antiaim::communicate &&
// data[0] != LOCAL_E->m_IDX &&
// playerlist::AccessData(ENTITY(data[0])).state !=
// playerlist::k_EState::CAT)
// {
// playerlist::AccessData(ENTITY(data[0])).state =
// playerlist::k_EState::CAT;
// chat_stack::Say("!!meow");
// }
// if (ucccccp::decrypt(message)
// == "meow" &&
// hacks::shared::antiaim::communicate
// && data[0] !=
// LOCAL_E->m_IDX &&
// playerlist::AccessData(ENTITY(data[0])).state
// !=
// playerlist::k_EState::CAT)
// {
// playerlist::AccessData(ENTITY(data[0])).state
// =
// playerlist::k_EState::CAT;
// chat_stack::Say("!!meow");
// }
CachedEntity *ent = ENTITY(data[0]);
if (msg != "Attempt at ucccccping and failing" && msg != "Unsupported version" && ent != LOCAL_E)
if (msg != "Attempt at ucccccping and failing" &&
msg != "Unsupported version" && ent != LOCAL_E)
{
auto &state = playerlist::AccessData(ent).state;
if (state == playerlist::k_EState::DEFAULT)
{
state = playerlist::k_EState::CAT;
if (*answerIdentify && sendmsg.test_and_set(5000))
if (*answerIdentify &&
sendmsg.test_and_set(5000))
chat_stack::Say("!!meow");
}
}

View File

@ -21,7 +21,32 @@ DEFINE_HOOKED_METHOD(Shutdown, void, INetChannel *this_, const char *reason)
// This is a INetChannel hook - it SHOULDN'T be static because netchannel
// changes.
logging::Info("Disconnect: %s", reason);
if (strstr(reason, "banned") || strstr(reason, "Generic_Kicked"))
if (strstr(reason, "Generic_Kicked"))
{
if (die_if_vac) {
static uintptr_t addr =
gSignatures.GetClientSignature("C7 04 24 ? ? ? ? 8D 7D ? 31 F6");
static uintptr_t offset0 = uintptr_t(*(uintptr_t *) (addr + 0x3));
static uintptr_t offset1 = gSignatures.GetClientSignature(
"55 89 E5 83 EC ? 8B 45 ? 8B 80 ? ? ? ? 85 C0 74 ? C7 44 24 ? ? ? ? ? "
"89 04 24 E8 ? ? ? ? 85 C0 74 ? 8B 40");
typedef int (*GetPendingInvites_t)(uintptr_t);
GetPendingInvites_t GetPendingInvites = GetPendingInvites_t(offset1);
int invites = GetPendingInvites(offset0);
re::CTFGCClientSystem *gc = re::CTFGCClientSystem::GTFGCClientSystem();
re::CTFPartyClient *pc = re::CTFPartyClient::GTFPartyClient();
if (gc && !gc->BConnectedToMatchServer(false) && !gc->BHaveLiveMatch() &&
!invites)
if (!(pc && pc->BInQueueForMatchGroup(tfmm::getQueue())))
{
logging::Info("VAC/Matchmaking banned");
*(int *) 0 = 0;
exit(1);
}
}
}
if (strstr(reason, "banned"))
{
if (die_if_vac)
{

View File

@ -28,6 +28,44 @@ int FindInVector(size_t id)
}
static int bestarea = -1;
Timer reselect{};
int FindNearestValidbyDist(Vector vec, float mindist, float maxdist)
{
if (reselect.test_and_set(500))
{
float bestscr = FLT_MAX;
if (bestarea != -1)
{
bool success = false;
Vector area = areas[bestarea].m_center;
float scr = area.DistTo(vec);
if (scr < maxdist && scr > mindist)
if (IsVectorVisible(vec, area, false))
success = true;
if (!success)
bestarea = -1;
}
else
{
bestarea = -1;
for (int ar = 0; ar < areas.size(); ar++)
{
Vector area = areas[ar].m_center;
area.z += 72.0f;
float scr = area.DistTo(vec);
if (scr > maxdist || scr < mindist)
continue;
if (scr > bestscr)
continue;
if (IsVectorVisible(vec, area, false))
{
bestscr = scr;
bestarea = ar;
}
}
}
}
return bestarea;
}
int FindNearestValid(Vector vec)
{
if (reselect.test_and_set(500))
@ -238,8 +276,8 @@ static std::vector<Vector> crumbs;
static bool ensureArrival;
// Priority value for current instructions, only higher or equal priorites can
// overwrite it
int priority = 0;
static Vector lastArea = { 0.0f, 0.0f, 0.0f };
int priority = 0;
static Vector lastArea = { 0.0f, 0.0f, 0.0f };
static int persistentTries = 0;
// dest = Destination, navToLocalCenter = Should bot travel to local center

View File

@ -10,8 +10,8 @@
#include <settings/Bool.hpp>
static settings::Bool requeue{ "hack.requeue-on-kick", "false" };
static settings::Bool vote_kicky{"hack.autovote.yes", "false"};
static settings::Bool vote_kickn{"hack.autovote.no", "false"};
static settings::Bool vote_kicky{ "hack.autovote.yes", "false" };
static settings::Bool vote_kickn{ "hack.autovote.no", "false" };
namespace votelogger
{
@ -47,10 +47,16 @@ void dispatchUserMessage(bf_read &buffer, int type)
if (eid == LOCAL_E->m_IDX)
was_local_player = true;
if (*vote_kickn)
if (playerlist::AccessData(info.friendsID).state != playerlist::k_EState::RAGE && playerlist::AccessData(info.friendsID).state != playerlist::k_EState::DEFAULT)
if (playerlist::AccessData(info.friendsID).state !=
playerlist::k_EState::RAGE &&
playerlist::AccessData(info.friendsID).state !=
playerlist::k_EState::DEFAULT)
g_IEngine->ClientCmd_Unrestricted("vote option2");
if (*vote_kicky)
if (playerlist::AccessData(info.friendsID).state == playerlist::k_EState::RAGE || playerlist::AccessData(info.friendsID).state == playerlist::k_EState::DEFAULT)
if (playerlist::AccessData(info.friendsID).state ==
playerlist::k_EState::RAGE ||
playerlist::AccessData(info.friendsID).state ==
playerlist::k_EState::DEFAULT)
g_IEngine->ClientCmd_Unrestricted("vote option1");
logging::Info("Vote called to kick %s [U:1:%u] for %s", name, steamID,
reason);