mirror of
https://github.com/0TheSpy/Seaside.git
synced 2025-07-18 16:57:51 +08:00
Add files via upload
This commit is contained in:
578
SpyCustom/Aimbot.cpp
Normal file
578
SpyCustom/Aimbot.cpp
Normal file
@ -0,0 +1,578 @@
|
||||
#include "Aimbot.hpp"
|
||||
|
||||
///autowall
|
||||
/*
|
||||
bool IsBreakableEntity(C_BaseEntity* pEntity)
|
||||
{
|
||||
// @ida isbreakableentity: 55 8B EC 51 56 8B F1 85 F6 74 68
|
||||
|
||||
// skip invalid entities
|
||||
if (pEntity == nullptr)
|
||||
return false;
|
||||
|
||||
const int iHealth = ((C_BasePlayer*)pEntity)->GetHealth();
|
||||
|
||||
// first check to see if it's already broken
|
||||
if (iHealth < 0 && pEntity->IsMaxHealth() > 0)
|
||||
return true;
|
||||
|
||||
if (pEntity->GetTakeDamage() != DAMAGE_YES)
|
||||
{
|
||||
const char* szClassName = pEntity->GetClientClass()->GetName();
|
||||
if (!strcmp(szClassName, XorStr("func_brush")))
|
||||
return false;
|
||||
}
|
||||
|
||||
const int nCollisionGroup = pEntity->GetCollisionGroup();
|
||||
|
||||
if (nCollisionGroup != COLLISION_GROUP_PUSHAWAY && nCollisionGroup != COLLISION_GROUP_BREAKABLE_GLASS && nCollisionGroup != COLLISION_GROUP_NONE)
|
||||
return false;
|
||||
|
||||
if (iHealth > 200)
|
||||
return false;
|
||||
|
||||
IMultiplayerPhysics* pPhysicsInterface = dynamic_cast<IMultiplayerPhysics*>(pEntity);
|
||||
if (pPhysicsInterface != nullptr)
|
||||
{
|
||||
if (pPhysicsInterface->GetMultiplayerPhysicsMode() != PHYSICS_MULTIPLAYER_SOLID)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* szClassName = pEntity->GetClientClass()->GetName();
|
||||
|
||||
if (!strcmp(szClassName, XorStr("func_breakable")) || !strcmp(szClassName, XorStr("func_breakable_surf")))
|
||||
{
|
||||
if (!strcmp(szClassName, XorStr("func_breakable_surf")))
|
||||
{
|
||||
CBreakableSurface* pSurface = static_cast<CBreakableSurface*>(pEntity);
|
||||
|
||||
// don't try to break it if it has already been broken
|
||||
if (pSurface->IsBroken())
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (pEntity->PhysicsSolidMaskForEntity() & CONTENTS_PLAYERCLIP)
|
||||
{
|
||||
// hostages and players use CONTENTS_PLAYERCLIP, so we can use it to ignore them
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
IBreakableWithPropData* pBreakableInterface = dynamic_cast<IBreakableWithPropData*>(pEntity);
|
||||
if (pBreakableInterface != nullptr)
|
||||
{
|
||||
// bullets don't damage it - ignore
|
||||
if (pBreakableInterface->GetDmgModBullet() <= 0.0f)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ScaleDamage(int iHitGroup, C_BaseEntity* pEntity, float flWeaponArmorRatio, float& flDamage)
|
||||
{
|
||||
const bool bHeavyArmor = pEntity->HasHeavyArmor();
|
||||
const int iArmor = pEntity->GetArmor();
|
||||
|
||||
static ConVar* mp_damage_scale_ct_head = iff.g_pCVar->FindVar(XorStr("mp_damage_scale_ct_head"));
|
||||
static ConVar* mp_damage_scale_t_head = iff.g_pCVar->FindVar(XorStr("mp_damage_scale_t_head"));
|
||||
|
||||
static ConVar* mp_damage_scale_ct_body = iff.g_pCVar->FindVar(XorStr("mp_damage_scale_ct_body"));
|
||||
static ConVar* mp_damage_scale_t_body = iff.g_pCVar->FindVar(XorStr("mp_damage_scale_t_body"));
|
||||
|
||||
const float flHeadScale = ((C_BasePlayer*)pEntity)->GetTeam() == TEAM_CT ? mp_damage_scale_ct_head->GetFloat() : ((C_BasePlayer*)pEntity)->GetTeam() == TEAM_TERRORIST ? mp_damage_scale_t_head->GetFloat() : 1.0f;
|
||||
const float flBodyScale = ((C_BasePlayer*)pEntity)->GetTeam() == TEAM_CT ? mp_damage_scale_ct_body->GetFloat() : ((C_BasePlayer*)pEntity)->GetTeam() == TEAM_TERRORIST ? mp_damage_scale_t_body->GetFloat() : 1.0f;
|
||||
|
||||
switch (iHitGroup)
|
||||
{
|
||||
case HITGROUP_HEAD:
|
||||
flDamage *= (bHeavyArmor ? 2.0f : 4.0f) * flHeadScale;
|
||||
break;
|
||||
case HITGROUP_STOMACH:
|
||||
flDamage *= 1.25f * flBodyScale;
|
||||
break;
|
||||
case HITGROUP_CHEST:
|
||||
case HITGROUP_LEFTARM:
|
||||
case HITGROUP_RIGHTARM:
|
||||
flDamage *= flBodyScale;
|
||||
break;
|
||||
case HITGROUP_LEFTLEG:
|
||||
case HITGROUP_RIGHTLEG:
|
||||
flDamage *= 0.75f * flBodyScale;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// check is armored
|
||||
if (iArmor > 0 && ((iHitGroup == HITGROUP_HEAD && pEntity->HasHelmet()) || (iHitGroup >= HITGROUP_GENERIC && iHitGroup <= HITGROUP_RIGHTARM)))
|
||||
{
|
||||
float flArmorScale = 1.0f, flArmorBonusRatio = 0.5f, flArmorRatio = flWeaponArmorRatio * 0.5f;
|
||||
|
||||
if (bHeavyArmor)
|
||||
{
|
||||
flArmorScale = 0.33f;
|
||||
flArmorBonusRatio = 0.33f;
|
||||
flArmorRatio *= 0.5f;
|
||||
}
|
||||
|
||||
float flNewDamage = flDamage * flArmorRatio;
|
||||
|
||||
if (bHeavyArmor)
|
||||
flNewDamage *= 0.85f;
|
||||
|
||||
if (((flDamage - flDamage * flArmorRatio) * (flArmorScale * flArmorBonusRatio)) > iArmor)
|
||||
flNewDamage = flDamage - iArmor / flArmorBonusRatio;
|
||||
|
||||
flDamage = flNewDamage;
|
||||
}
|
||||
}
|
||||
|
||||
bool TraceToExit(CGameTrace& enterTrace, CGameTrace& exitTrace, Vector vecPosition, Vector vecDirection)
|
||||
{
|
||||
float flDistance = 0.0f;
|
||||
int iStartContents = 0;
|
||||
|
||||
while (flDistance <= 90.0f)
|
||||
{
|
||||
// add extra distance to our ray
|
||||
flDistance += 4.0f;
|
||||
|
||||
// multiply the direction vector to the distance so we go outwards, add our position to it
|
||||
Vector vecStart = vecPosition + vecDirection * flDistance;
|
||||
|
||||
if (!iStartContents)
|
||||
iStartContents = iff.g_pEnginetrace->GetPointContents(vecStart, MASK_SHOT_HULL | CONTENTS_HITBOX, nullptr);
|
||||
|
||||
const int iCurrentContents = iff.g_pEnginetrace->GetPointContents(vecStart, MASK_SHOT_HULL | CONTENTS_HITBOX, nullptr);
|
||||
|
||||
if (!(iCurrentContents & MASK_SHOT_HULL) || (iCurrentContents & CONTENTS_HITBOX && iCurrentContents != iStartContents))
|
||||
{
|
||||
// setup our end position by deducting the direction by the extra added distance
|
||||
const Vector vecEnd = vecStart - (vecDirection * 4.0f);
|
||||
|
||||
// trace ray to world
|
||||
Ray_t rayWorld; rayWorld.Init(vecStart, vecEnd);
|
||||
iff.g_pEnginetrace->TraceRay(rayWorld, MASK_SHOT_HULL | CONTENTS_HITBOX, nullptr, &exitTrace);
|
||||
|
||||
// check if a hitbox is in-front of our enemy and if they are behind of a solid wall
|
||||
if (exitTrace.startsolid && exitTrace.surface.flags & SURF_HITBOX)
|
||||
{
|
||||
// trace ray to entity
|
||||
Ray_t ray; ray.Init(vecStart, vecPosition);
|
||||
CTraceFilter filter(exitTrace.m_pEnt);
|
||||
|
||||
iff.g_pEnginetrace->TraceRay(ray, MASK_SHOT_HULL, &filter, &exitTrace);
|
||||
|
||||
if (exitTrace.DidHit() && !exitTrace.startsolid)
|
||||
{
|
||||
vecStart = exitTrace.vecEnd;
|
||||
return true;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (exitTrace.DidHit() && !exitTrace.startsolid)
|
||||
{
|
||||
if (IsBreakableEntity(enterTrace.m_pEnt) && IsBreakableEntity(exitTrace.m_pEnt))
|
||||
return true;
|
||||
|
||||
if (enterTrace.surface.flags & SURF_NODRAW || (!(exitTrace.surface.flags & SURF_NODRAW) && exitTrace.plane.normal.DotProduct(vecDirection) <= 1.0f))
|
||||
{
|
||||
const float flMultiplier = exitTrace.fraction * 4.0f;
|
||||
vecStart -= vecDirection * flMultiplier;
|
||||
return true;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!exitTrace.DidHit() || exitTrace.startsolid)
|
||||
{
|
||||
if (enterTrace.m_pEnt != nullptr && enterTrace.m_pEnt->GetIndex() != 0 && IsBreakableEntity(enterTrace.m_pEnt))
|
||||
{
|
||||
// did hit breakable non world entity
|
||||
exitTrace = enterTrace;
|
||||
exitTrace.vecEnd = vecStart + vecDirection;
|
||||
return true;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool HandleBulletPenetration(CBaseEntity* pLocal, CCSWeaponInfo* pWeaponData, surfacedata_t* pEnterSurfaceData, FireBulletData_t& data)
|
||||
{
|
||||
static ConVar* ff_damage_reduction_bullets = iff.g_pCVar->FindVar(XorStr("ff_damage_reduction_bullets"));
|
||||
static ConVar* ff_damage_bullet_penetration = iff.g_pCVar->FindVar(XorStr("ff_damage_bullet_penetration"));
|
||||
|
||||
const float flReductionDamage = ff_damage_reduction_bullets->GetFloat();
|
||||
const float flPenetrateDamage = ff_damage_bullet_penetration->GetFloat();
|
||||
|
||||
const MaterialHandle_t hEnterMaterial = pEnterSurfaceData->game.hMaterial;
|
||||
const float flEnterPenetrationModifier = pEnterSurfaceData->game.flPenetrationModifier;
|
||||
const bool bIsSolidSurf = ((data.enterTrace.contents >> 3) & CONTENTS_SOLID);
|
||||
const bool bIsLightSurf = ((data.enterTrace.surface.flags >> 7) & SURF_LIGHT);
|
||||
|
||||
CGameTrace exitTrace = { };
|
||||
|
||||
if (data.iPenetrateCount <= 0 ||
|
||||
(!data.iPenetrateCount && !bIsLightSurf && !bIsSolidSurf && hEnterMaterial != CHAR_TEX_GRATE && hEnterMaterial != CHAR_TEX_GLASS) ||
|
||||
(pWeaponData->m_flPenetration <= 0.0f) ||
|
||||
(!TraceToExit(data.enterTrace, exitTrace, data.enterTrace.vecEnd, data.vecDirection) && !(I::EngineTrace->GetPointContents(data.enterTrace.vecEnd, MASK_SHOT_HULL, nullptr) & MASK_SHOT_HULL)))
|
||||
return false;
|
||||
|
||||
const surfacedata_t* pExitSurfaceData = I::PhysicsProps->GetSurfaceData(exitTrace.surface.surfaceProps);
|
||||
const MaterialHandle_t hExitMaterial = pExitSurfaceData->game.hMaterial;
|
||||
const float flExitPenetrationModifier = pExitSurfaceData->game.flPenetrationModifier;
|
||||
|
||||
float flDamageLostModifier = 0.16f;
|
||||
float flPenetrationModifier = 0.0f;
|
||||
|
||||
if (hEnterMaterial == CHAR_TEX_GRATE || hEnterMaterial == CHAR_TEX_GLASS)
|
||||
{
|
||||
flDamageLostModifier = 0.05f;
|
||||
flPenetrationModifier = 3.0f;
|
||||
}
|
||||
else if (bIsSolidSurf || bIsLightSurf)
|
||||
{
|
||||
flDamageLostModifier = 0.16f;
|
||||
flPenetrationModifier = 1.0f;
|
||||
}
|
||||
else if (hEnterMaterial == CHAR_TEX_FLESH && (((C_BasePlayer*)pLocal)->GetTeam() == ((C_BasePlayer*)data.enterTrace.m_pEnt)->GetTeam() && flReductionDamage == 0.0f))
|
||||
{
|
||||
if (flPenetrateDamage == 0.0f)
|
||||
return false;
|
||||
|
||||
// shoot through teammates
|
||||
flDamageLostModifier = 0.16f;
|
||||
flPenetrationModifier = flPenetrateDamage;
|
||||
}
|
||||
else
|
||||
{
|
||||
flDamageLostModifier = 0.16f;
|
||||
flPenetrationModifier = (flEnterPenetrationModifier + flExitPenetrationModifier) * 0.5f;
|
||||
}
|
||||
|
||||
if (hEnterMaterial == hExitMaterial)
|
||||
{
|
||||
if (hExitMaterial == CHAR_TEX_CARDBOARD || hExitMaterial == CHAR_TEX_WOOD)
|
||||
flPenetrationModifier = 3.0f;
|
||||
else if (hExitMaterial == CHAR_TEX_PLASTIC)
|
||||
flPenetrationModifier = 2.0f;
|
||||
}
|
||||
|
||||
const float flTraceDistance = (exitTrace.vecEnd - data.enterTrace.vecEnd).LengthSqr();
|
||||
|
||||
// penetration modifier
|
||||
const float flModifier = std::max(0.0f, 1.0f / flPenetrationModifier);
|
||||
|
||||
// this calculates how much damage we've lost depending on thickness of the wall, our penetration, damage, and the modifiers set earlier
|
||||
const float flLostDamage = (data.flCurrentDamage * flDamageLostModifier + std::max(0.0f, 3.75f / pWeaponData->flPenetration) * (flModifier * 3.0f)) + ((flModifier * flTraceDistance) / 24.0f);
|
||||
|
||||
// did we loose too much damage?
|
||||
if (flLostDamage > data.flCurrentDamage)
|
||||
return false;
|
||||
|
||||
// we can't use any of the damage that we've lost
|
||||
if (flLostDamage > 0.0f)
|
||||
data.flCurrentDamage -= flLostDamage;
|
||||
|
||||
// do we still have enough damage to deal?
|
||||
if (data.flCurrentDamage < 1.0f)
|
||||
return false;
|
||||
|
||||
data.vecPosition = exitTrace.vecEnd;
|
||||
--data.iPenetrateCount;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void ClipTraceToPlayers(const Vector& vecAbsStart, const Vector& vecAbsEnd, unsigned int fMask, ITraceFilter* pFilter, CGameTrace* pTrace)
|
||||
{
|
||||
CGameTrace trace = { };
|
||||
float flSmallestFraction = pTrace->fraction;
|
||||
|
||||
Ray_t ray; ray.Init(vecAbsStart, vecAbsEnd);
|
||||
|
||||
for (int i = 1; i < I::Globals->nMaxClients; i++)
|
||||
{
|
||||
CBaseEntity* pEntity = I::ClientEntityList->Get<CBaseEntity>(i);
|
||||
|
||||
if (pEntity == nullptr || !pEntity->IsAlive() || pEntity->IsDormant())
|
||||
continue;
|
||||
|
||||
if (pFilter != nullptr && !pFilter->ShouldHitEntity(pEntity, fMask))
|
||||
continue;
|
||||
|
||||
ICollideable* pCollideable = pEntity->GetCollideable();
|
||||
|
||||
if (pCollideable == nullptr)
|
||||
continue;
|
||||
|
||||
// get bounding box
|
||||
const Vector vecMin = pCollideable->OBBMins_();
|
||||
const Vector vecMax = pCollideable->OBBMaxs_();
|
||||
|
||||
// calculate world space center
|
||||
const Vector vecCenter = (vecMax + vecMin) * 0.5f;
|
||||
const Vector vecPosition = vecCenter + pEntity->GetAbsOrigin();
|
||||
|
||||
Vector vecTo = vecPosition - vecAbsStart;
|
||||
Vector vecDirection = vecAbsEnd - vecAbsStart;
|
||||
const float flLength = vecDirection.NormalizeInPlace();
|
||||
|
||||
const float flRangeAlong = vecDirection.DotProduct(vecTo);
|
||||
float flRange = 0.0f;
|
||||
|
||||
// calculate distance to ray
|
||||
if (flRangeAlong < 0.0f)
|
||||
// off start point
|
||||
flRange = -vecTo.Length();
|
||||
else if (flRangeAlong > flLength)
|
||||
// off end point
|
||||
flRange = -(vecPosition - vecAbsEnd).Length();
|
||||
else
|
||||
// within ray bounds
|
||||
flRange = (vecPosition - (vecDirection * flRangeAlong + vecAbsStart)).Length();
|
||||
|
||||
if (flRange < 0.0f || flRange > 60.0f)
|
||||
continue;
|
||||
|
||||
I::EngineTrace->ClipRayToEntity(ray, fMask | CONTENTS_HITBOX, pEntity, &trace);
|
||||
|
||||
if (trace.fraction < flSmallestFraction)
|
||||
{
|
||||
// we shortened the ray - save off the trace
|
||||
*pTrace = trace;
|
||||
flSmallestFraction = trace.fraction;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool SimulateFireBullet(C_BaseEntity* pLocal, C_BaseAttributableItem* pWeapon, FireBulletData_t& data)
|
||||
{
|
||||
CCSWeaponInfo* pWeaponData = iff.g_pWeaponSystem->GetWpnData((ItemDefinitionIndex)pWeapon->GetItemDefinitionIndex());
|
||||
|
||||
if (pWeaponData == nullptr)
|
||||
return false;
|
||||
|
||||
float flMaxRange = pWeaponData->m_flRange;
|
||||
|
||||
// the total number of surfaces any bullet can penetrate in a single flight is capped at 4
|
||||
data.iPenetrateCount = 4;
|
||||
// set our current damage to what our gun's initial damage reports it will do
|
||||
data.flCurrentDamage = static_cast<float>(pWeaponData->m_iDamage);
|
||||
|
||||
float flTraceLenght = 0.0f;
|
||||
CTraceFilter filter(pLocal);
|
||||
|
||||
while (data.iPenetrateCount > 0 && data.flCurrentDamage >= 1.0f)
|
||||
{
|
||||
// max bullet range
|
||||
flMaxRange -= flTraceLenght;
|
||||
|
||||
// end position of bullet
|
||||
const Vector vecEnd = data.vecPosition + data.vecDirection * flMaxRange;
|
||||
|
||||
Ray_t ray; ray.Init(data.vecPosition, vecEnd);
|
||||
iff.g_pEnginetrace->TraceRay(ray, MASK_SHOT_HULL | CONTENTS_HITBOX, &filter, &data.enterTrace);
|
||||
|
||||
// check for player hitboxes extending outside their collision bounds
|
||||
ClipTraceToPlayers(data.vecPosition, vecEnd + data.vecDirection * 40.0f, MASK_SHOT_HULL | CONTENTS_HITBOX, &filter, &data.enterTrace);
|
||||
|
||||
surfacedata_t* pEnterSurfaceData = I::PhysicsProps->GetSurfaceData(data.enterTrace.surface.surfaceProps);
|
||||
const float flEnterPenetrationModifier = pEnterSurfaceData->game.flPenetrationModifier;
|
||||
|
||||
// we didn't hit anything, stop tracing shoot
|
||||
if (data.enterTrace.fraction == 1.0f)
|
||||
break;
|
||||
|
||||
// calculate the damage based on the distance the bullet traveled
|
||||
flTraceLenght += data.enterTrace.fraction * flMaxRange;
|
||||
data.flCurrentDamage *= std::powf(pWeaponData->m_flRangeModifier, flTraceLenght / MAX_DAMAGE);
|
||||
|
||||
// check is actually can shoot through
|
||||
if (flTraceLenght > 3000.0f || flEnterPenetrationModifier < 0.1f)
|
||||
break;
|
||||
|
||||
// check is can do damage
|
||||
if (data.enterTrace.hitgroup != HITGROUP_GENERIC && data.enterTrace.hitgroup != HITGROUP_GEAR && pLocal->IsEnemy(data.enterTrace.m_pEnt))
|
||||
{
|
||||
// we got target - scale damage
|
||||
ScaleDamage(data.enterTrace.hitgroup, data.enterTrace.m_pEnt, pWeaponData->m_flArmorRatio, data.flCurrentDamage);
|
||||
return true;
|
||||
}
|
||||
|
||||
// calling handlebulletpenetration here reduces our penetration pounter, and if it returns true, we can't shoot through it
|
||||
if (!HandleBulletPenetration(pLocal, pWeaponData, pEnterSurfaceData, data))
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
float GetDamage(C_BaseEntity* pLocal, const Vector& vecPoint, FireBulletData_t& dataOut)
|
||||
{
|
||||
const Vector vecPosition = pLocal->GetViewPos();
|
||||
|
||||
// setup data
|
||||
FireBulletData_t data = { };
|
||||
data.vecPosition = vecPosition;
|
||||
data.vecDirection = (vecPoint - vecPosition).Normalized();
|
||||
|
||||
auto wep = ((C_BaseCombatCharacter*)pLocal)->GetActiveWeapon();
|
||||
C_BaseAttributableItem* pWeapon = (C_BaseAttributableItem*)iff.g_pEntityList->GetClientEntityFromHandle(wep);
|
||||
|
||||
if (pWeapon == nullptr)
|
||||
return -1.0f;
|
||||
|
||||
if (!SimulateFireBullet(pLocal, pWeapon, data))
|
||||
return -1.0f;
|
||||
|
||||
dataOut = data;
|
||||
return data.flCurrentDamage;
|
||||
}
|
||||
|
||||
bool ScanDamage(CBaseEntity* pLocal, Vector vecStart, Vector vecEnd)
|
||||
{
|
||||
CGameTrace trace = { };
|
||||
if (1) //C::Get<bool>(Vars.bAimAutoWall)
|
||||
{
|
||||
FireBulletData_t data = { };
|
||||
|
||||
// get autowall damage and data from it
|
||||
float flDamage = GetDamage(pLocal, vecEnd, data);
|
||||
|
||||
// check for minimal damage
|
||||
if (flDamage < 1);// C::Get<int>(Vars.iAimMinimalDamage))
|
||||
return false;
|
||||
|
||||
// copy trace from autowall
|
||||
trace = data.enterTrace;
|
||||
}
|
||||
|
||||
//Traced target
|
||||
CBaseEntity* pEntity = trace.m_pEnt;
|
||||
|
||||
//Check the traced target is vailed
|
||||
if (pEntity == nullptr || !pEntity->IsAlive() || pEntity->IsDormant() || !pEntity->IsPlayer() || pEntity->HasImmunity() || !pLocal->IsEnemy(pEntity))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//We can shot the target
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
C_BasePlayer* GetBestTarget(CUserCmd* cmd)
|
||||
{
|
||||
static C_CS_PlayerResource** g_player_resource = C_CS_PlayerResource::GetPlayerResource();
|
||||
|
||||
float ofov = g_Options.aimbotfov;
|
||||
float nfov = 0;
|
||||
C_BasePlayer* player = nullptr;
|
||||
|
||||
for (int iPlayer = 0; iPlayer < iff.g_pGlobals->maxClients; iPlayer++)
|
||||
{
|
||||
auto pCSPlayer = reinterpret_cast<C_BasePlayer*>(iff.g_pEntityList->GetClientEntity(iPlayer));
|
||||
if (!pCSPlayer)
|
||||
continue;
|
||||
if (pCSPlayer == iff.pLocal || pCSPlayer->GetTeam() == iff.pLocal->GetTeam())
|
||||
continue;
|
||||
if (pCSPlayer->IsDormant())
|
||||
continue;
|
||||
if (!((*g_player_resource)->IsAlive()[iPlayer] && pCSPlayer->GetHealth() > 0))
|
||||
continue;
|
||||
if (pCSPlayer->HasImmunity())
|
||||
continue;
|
||||
Vector eyepos = iff.pLocal->GetViewPos();
|
||||
Vector enemyheadpos = pCSPlayer->GetBonePosition(8);
|
||||
|
||||
// If the enemy is not visible, do the scan damage
|
||||
if (!iff.pLocal->IsVisible(pCSPlayer, enemyheadpos))
|
||||
{
|
||||
//if (!ScanDamage(iff.pLocal, eyepos, enemyheadpos))
|
||||
continue;
|
||||
}
|
||||
|
||||
Vector angleTo = CalcAngle(eyepos, enemyheadpos);
|
||||
angleTo.Clamp();
|
||||
if (g_Options.rcs) {
|
||||
Vector myangles;
|
||||
iff.g_pEngineClient->GetViewAngles(myangles);
|
||||
nfov = myangles.DistTo(angleTo);
|
||||
}
|
||||
else
|
||||
nfov = cmd->viewangles.DistTo(angleTo);
|
||||
if (nfov < ofov)
|
||||
{
|
||||
ofov = nfov;
|
||||
player = pCSPlayer;
|
||||
}
|
||||
}
|
||||
|
||||
//printfdbg("Best target %x\n", player);
|
||||
return player;
|
||||
}
|
||||
|
||||
void AimBot(CUserCmd* cmd)
|
||||
{
|
||||
static C_CS_PlayerResource** g_player_resource = C_CS_PlayerResource::GetPlayerResource();
|
||||
|
||||
if (!iff.g_pEngineClient->IsConnected() || !iff.g_pEngineClient->IsInGame())
|
||||
return;
|
||||
if (!iff.pLocal)
|
||||
return;
|
||||
if (!(*g_player_resource)->IsAlive()[iff.pLocal->GetIndex()])
|
||||
return;
|
||||
C_BasePlayer* target = GetBestTarget(cmd);
|
||||
if (target)
|
||||
{
|
||||
//player_info_t pinfo;
|
||||
//iff.g_pEngineClient->GetPlayerInfo(target->GetIndex(), &pinfo);
|
||||
//printfdbg("Best target %x %s\n", target, pinfo.name);
|
||||
Vector eyepos = iff.pLocal->GetViewPos();
|
||||
Vector targethead = target->GetBonePosition(8);
|
||||
Vector viewangles = CalcAngle(eyepos, targethead);
|
||||
viewangles.Clamp();
|
||||
Vector delta = cmd->viewangles - viewangles;
|
||||
delta.Clamp();
|
||||
Vector finalAng = cmd->viewangles - delta;// / (variables::aimbot_smoothing * 20);
|
||||
finalAng.Clamp(); finalAng.Normalize();
|
||||
// if (variables::aimbot_isvisiblecheck && csgo::local_player->can_see_player_pos(target, target->get_eye_pos()))
|
||||
// {
|
||||
// cmd->viewangles = finalAng;
|
||||
// interfaces::engine->set_view_angles(cmd->viewangles);
|
||||
// }
|
||||
// else if (!variables::aimbot_isvisiblecheck)
|
||||
// {
|
||||
|
||||
//rcs
|
||||
if (g_Options.rcs) {
|
||||
Vector aimPunchAngles = iff.pLocal->GetAimPunchAngle();
|
||||
Vector newAngles = (finalAng - aimPunchAngles * 2);
|
||||
newAngles.Clamp(); newAngles.Normalize();
|
||||
cmd->viewangles = newAngles;
|
||||
}
|
||||
else
|
||||
cmd->viewangles = finalAng;
|
||||
|
||||
if (!g_Options.silentaim)
|
||||
iff.g_pEngineClient->SetViewAngles((QAngle&)finalAng);
|
||||
if (g_Options.aimbotautoshoot)
|
||||
cmd->buttons |= IN_ATTACK;
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
30
SpyCustom/Aimbot.hpp
Normal file
30
SpyCustom/Aimbot.hpp
Normal file
@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "sdk/c_baseentity.h"
|
||||
#include "Interfaces.hpp"
|
||||
#include "Options.hpp"
|
||||
|
||||
|
||||
// autowall objects structure
|
||||
struct FireBulletData_t
|
||||
{
|
||||
Vector vecPosition = { };
|
||||
Vector vecDirection = { };
|
||||
CGameTrace enterTrace = { };
|
||||
float flCurrentDamage = 0.0f;
|
||||
int iPenetrateCount = 0;
|
||||
};
|
||||
|
||||
bool IsBreakableEntity(CBaseEntity* pEntity);
|
||||
void ScaleDamage(int iHitGroup, CBaseEntity* pEntity, float flWeaponArmorRatio, float& flDamage);
|
||||
bool TraceToExit(CGameTrace& enterTrace, CGameTrace& exitTrace, Vector vecPosition, Vector vecDirection);
|
||||
bool HandleBulletPenetration(CBaseEntity* pLocal, CCSWeaponInfo* pWeaponData, surfacedata_t* pEnterSurfaceData, FireBulletData_t& data);
|
||||
void ClipTraceToPlayers(const Vector& vecAbsStart, const Vector& vecAbsEnd, unsigned int fMask, ITraceFilter* pFilter, CGameTrace* pTrace);
|
||||
bool SimulateFireBullet(C_BaseEntity* pLocal, C_BaseAttributableItem* pWeapon, FireBulletData_t& data);
|
||||
float GetDamage(C_BaseEntity* pLocal, const Vector& vecPoint, FireBulletData_t& dataOut);
|
||||
bool ScanDamage(CBaseEntity* pLocal, Vector vecStart, Vector vecEnd);
|
||||
|
||||
C_BasePlayer* GetBestTarget(CUserCmd* cmd);
|
||||
void AimBot(CUserCmd* cmd);
|
||||
|
@ -1,8 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "sdk/particles.h"
|
||||
#include "ProtobuffMessages.h"
|
||||
|
||||
#include "ProtobuffMessages.h"
|
||||
#include "Aimbot.hpp"
|
||||
|
||||
VMTHook* SoundHook = nullptr;
|
||||
void __fastcall hkEmitSound1(void* _this, int edx, IRecipientFilter& filter, int iEntIndex, int iChannel, char* pSoundEntry, unsigned int nSoundEntryHash, const char* pSample, float flVolume, int nSeed, float flAttenuation, int iFlags, int iPitch, const Vector* pOrigin, const Vector* pDirection, void* pUtlVecOrigins, bool bUpdatePositions, float soundtime, int speakerentity, int unk) {
|
||||
@ -35,7 +35,7 @@ void replacemat(int d)
|
||||
else
|
||||
material = iff.g_pMaterialSystem->FindMaterial(g_Options.materials.value->arr[d].texture, TEXTURE_GROUP_MODEL);
|
||||
material->SetMaterialVarFlag(MATERIAL_VAR_WIREFRAME, g_Options.materials.value->arr[d].wireframe);
|
||||
material->SetMaterialVarFlag(MATERIAL_VAR_FLAT, g_Options.materials.value->arr[d].flat);
|
||||
material->SetMaterialVarFlag(MATERIAL_VAR_IGNOREZ, g_Options.materials.value->arr[d].ignorez);
|
||||
material->SetMaterialVarFlag(MATERIAL_VAR_NO_DRAW, g_Options.materials.value->arr[d].nodraw);
|
||||
material->ColorModulate(g_Options.materials.value->arr[d].coloralpha.x, g_Options.materials.value->arr[d].coloralpha.y, g_Options.materials.value->arr[d].coloralpha.z);
|
||||
material->AlphaModulate(g_Options.materials.value->arr[d].coloralpha.w);
|
||||
@ -85,7 +85,7 @@ void __stdcall DrawModelExecute(IMatRenderContext* ctx, const DrawModelState_t&
|
||||
replacemat(d);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ofunc(iff.g_pMdlRender, ctx, state, pInfo, pCustomBoneToWorld);
|
||||
|
||||
@ -166,12 +166,12 @@ static void __stdcall hkdoPostScreenEffects(void* param) noexcept
|
||||
{
|
||||
static auto ofunc = ClientModeHook->GetOriginal<void(__thiscall*)(IClientMode*, void*)>(44);
|
||||
|
||||
int localplayer_index = iff.g_pEngineClient->GetLocalPlayer();
|
||||
C_BasePlayer* localplayer = static_cast<C_BasePlayer*>(iff.g_pEntityList->GetClientEntity(localplayer_index));
|
||||
|
||||
if (*g_Options.entityloop_count) {
|
||||
if (iff.g_pEngineClient->IsInGame())
|
||||
{
|
||||
int localplayer_index = iff.g_pEngineClient->GetLocalPlayer();
|
||||
C_BasePlayer* localplayer = static_cast<C_BasePlayer*>(iff.g_pEntityList->GetClientEntity(localplayer_index));
|
||||
|
||||
for (int i = iff.g_pEngineClient->GetMaxClients() + 1; i <= iff.g_pEntityList->GetHighestEntityIndex(); ++i)
|
||||
{
|
||||
C_BasePlayer* pEntity = (C_BasePlayer*)iff.g_pEntityList->GetClientEntity(i);
|
||||
@ -199,10 +199,54 @@ static void __stdcall hkdoPostScreenEffects(void* param) noexcept
|
||||
modelprecache->AddString(false, model);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < iff.g_GlowObjectManager->m_GlowObjectDefinitions.Count(); i++)
|
||||
{
|
||||
CGlowObjectManager::GlowObjectDefinition_t& glow = iff.g_GlowObjectManager->m_GlowObjectDefinitions[i];
|
||||
|
||||
if (glow.m_nNextFreeSlot != CGlowObjectManager::GlowObjectDefinition_t::ENTRY_IN_USE)
|
||||
continue;
|
||||
|
||||
if (!glow.m_pEntity)
|
||||
continue;
|
||||
|
||||
if (fnv2::hash(glow.m_pEntity->GetClientClass()->GetName()) == fnv2::hash("CCSPlayer"))
|
||||
{
|
||||
if (localplayer->GetTeam() != ((C_BasePlayer*)glow.m_pEntity)->GetTeam() && g_Options.glowObjects.value->arr[0].enabled)
|
||||
{
|
||||
memcpy(&glow.m_vGlowColor, &g_Options.glowObjects.value->arr[0].color, sizeof(float) * 4);
|
||||
glow.m_bRenderWhenOccluded = true;
|
||||
glow.m_bRenderWhenUnoccluded = false;
|
||||
glow.m_flGlowAlphaMax = g_Options.glowObjects.value->arr[0].alphamax;
|
||||
glow.m_nRenderStyle = g_Options.glowObjects.value->arr[0].glowstyle;
|
||||
glow.m_bFullBloomRender = false;
|
||||
glow.m_nFullBloomStencilTestValue = 0;
|
||||
}
|
||||
|
||||
if (localplayer->GetTeam() == ((C_BasePlayer*)glow.m_pEntity)->GetTeam() && g_Options.glowObjects.value->arr[1].enabled)
|
||||
{
|
||||
memcpy(&glow.m_vGlowColor, &g_Options.glowObjects.value->arr[1].color, sizeof(float) * 4);
|
||||
glow.m_bRenderWhenOccluded = true;
|
||||
glow.m_bRenderWhenUnoccluded = false;
|
||||
glow.m_flGlowAlphaMax = g_Options.glowObjects.value->arr[1].alphamax;
|
||||
glow.m_nRenderStyle = g_Options.glowObjects.value->arr[1].glowstyle;
|
||||
glow.m_bFullBloomRender = false;
|
||||
glow.m_nFullBloomStencilTestValue = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (g_Options.flashalpha != 255.0f)
|
||||
{
|
||||
localplayer->GetFlashMaxAlpha() = g_Options.flashalpha;
|
||||
}
|
||||
|
||||
ofunc(iff.g_ClientMode, param);
|
||||
}
|
||||
|
||||
@ -215,7 +259,7 @@ void __stdcall hkOverrideView(CViewSetup* vsView) {
|
||||
{
|
||||
|
||||
if (!localplayer->IsScoped())
|
||||
vsView->fov = g_Options.fov;
|
||||
vsView->fov = g_Options.fov;
|
||||
|
||||
auto ViewModel = reinterpret_cast<C_BaseViewModel*>(iff.g_pEntityList->GetClientEntityFromHandle(localplayer->GetViewModel()));
|
||||
if (ViewModel)
|
||||
@ -227,6 +271,7 @@ void __stdcall hkOverrideView(CViewSetup* vsView) {
|
||||
ViewModel->GetAbsAngles() = eyeAng;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ofunc(vsView);
|
||||
}
|
||||
@ -500,19 +545,44 @@ void FastLadder(C_BasePlayer* localplayer, CUserCmd* cmd)
|
||||
|
||||
}
|
||||
|
||||
bool __stdcall hkCreateMove(float frame_time, CUserCmd* pCmd)
|
||||
|
||||
bool bSendPacket = 1;
|
||||
bool __stdcall hkCreateMove2(float frame_time, CUserCmd* pCmd);
|
||||
|
||||
__declspec(naked) bool __stdcall hkCreateMove(float frame_time, CUserCmd* pCmd)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
mov bSendPacket, bl
|
||||
}
|
||||
|
||||
hkCreateMove2(frame_time, pCmd);
|
||||
|
||||
__asm{
|
||||
mov bl, bSendPacket
|
||||
pop ebp
|
||||
ret 0x08
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool __stdcall hkCreateMove2(float frame_time, CUserCmd* pCmd)
|
||||
{
|
||||
uintptr_t* frame_pointer;
|
||||
__asm mov frame_pointer, ebp;
|
||||
bool& send_packet = *reinterpret_cast<bool*>(*frame_pointer - 0x1C);
|
||||
|
||||
static auto ofunc = ClientModeHook->GetOriginal<bool(__stdcall*)( float, CUserCmd*)>(24);
|
||||
|
||||
short localid = iff.g_pEngineClient->GetLocalPlayer();
|
||||
C_BasePlayer* localplayer = static_cast<C_BasePlayer*>(iff.g_pEntityList->GetClientEntity(localid));
|
||||
|
||||
if (!localplayer) return 0;
|
||||
iff.pLocal = localplayer;
|
||||
|
||||
if (!localplayer) return ofunc(frame_time, pCmd);
|
||||
|
||||
if (g_Options.rcs) localplayer->GetViewPunchAngle() = Vector(0, 0, 0);
|
||||
|
||||
if (!pCmd->command_number) return ofunc(frame_time, pCmd);
|
||||
|
||||
const auto pre_flags = localplayer->GetFlags();
|
||||
|
||||
bool interval = !((pCmd->tick_count + 1) % 10);
|
||||
@ -550,7 +620,7 @@ bool __stdcall hkCreateMove(float frame_time, CUserCmd* pCmd)
|
||||
{
|
||||
auto entityList = iff.g_pEntityList->GetClientEntity(i);
|
||||
if (entityList && _tcsstr(entityList->GetClientClass()->GetName(), "CPlantedC4") != NULL && tick < ((CPlantedC4*)entityList)->GetC4Blow())
|
||||
{
|
||||
{
|
||||
printfdbg("Found PlantedC4 %d (%f %f)\n", i, tick, ((CPlantedC4*)entityList)->GetC4Blow());
|
||||
c4id = i;
|
||||
break;
|
||||
@ -640,25 +710,63 @@ bool __stdcall hkCreateMove(float frame_time, CUserCmd* pCmd)
|
||||
Vector delta = localpos - entpos;
|
||||
float deltaXold = delta[0]; float deltaYold = delta[1];
|
||||
delta[0] = deltaXold * cos(viewAngles[1] * PI / 180) + deltaYold * sin(viewAngles[1] * PI / 180);
|
||||
delta[1] = -deltaXold * sin(viewAngles[1] * PI / 180) + deltaYold * cos(viewAngles[1] * PI / 180);
|
||||
pCmd->forwardmove = -delta[0] * 40;
|
||||
pCmd->sidemove = delta[1] * 40;
|
||||
delta[1] = -deltaXold * sin(viewAngles[1] * PI / 180) + deltaYold * cos(viewAngles[1] * PI / 180);
|
||||
pCmd->forwardmove = std::clamp(-delta[0] * 40, -450.f, 450.f);
|
||||
pCmd->sidemove = std::clamp(delta[1] * 40, -450.f, 450.f);
|
||||
}
|
||||
}
|
||||
|
||||
if (g_Options.rcs) {
|
||||
Vector aimPunchAngles = localplayer->GetAimPunchAngle();
|
||||
Vector currentViewAngles; iff.g_pEngineClient->GetViewAngles(currentViewAngles);
|
||||
Vector newAngles = (currentViewAngles - aimPunchAngles * 2);
|
||||
newAngles.Clamp(); newAngles.Normalize();
|
||||
pCmd->viewangles = newAngles;
|
||||
//localplayer->GetViewPunchAngle() = Vector(0, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
if (g_Options.fakelag)
|
||||
{
|
||||
auto choked = iff.g_pClientState->m_nChokedCommands;
|
||||
|
||||
if (choked < g_Options.fakelag)
|
||||
bSendPacket = 0;
|
||||
else
|
||||
bSendPacket = 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (!iff.g_pClientState->m_nChokedCommands)
|
||||
{
|
||||
static bool flip_movement = false;
|
||||
|
||||
if (pCmd->forwardmove == 0.0f && !(pCmd->buttons & (int)IN_JUMP))
|
||||
{
|
||||
pCmd->forwardmove += flip_movement ? -1.01f : 1.01f;
|
||||
}//nonsense
|
||||
flip_movement = !flip_movement;
|
||||
}
|
||||
*/
|
||||
|
||||
if (g_Options.aimbot)
|
||||
if (g_Options.aimbotautoshoot || iff.g_pInputSystem->IsButtonDown(MOUSE_LEFT))
|
||||
AimBot(pCmd);
|
||||
|
||||
pCmd->viewangles.Clamp();
|
||||
pCmd->viewangles.Normalize();
|
||||
pCmd->forwardmove = std::clamp(pCmd->forwardmove, -450.f, 450.f);
|
||||
pCmd->sidemove = std::clamp(pCmd->sidemove, -450.f, 450.f);
|
||||
pCmd->upmove = std::clamp(pCmd->upmove, -320.f, 320.f);
|
||||
|
||||
//return ofunc(frame_time, pCmd);
|
||||
//return ofunc(frame_time, pCmd);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
typedef const __int64(__cdecl* pDevMsg)(_In_z_ _Printf_format_string_ char const* const _Format, ...);
|
||||
pDevMsg oDevMsg; //(char* a1, int a2, char a3)
|
||||
__int64 __cdecl hkDevMsg(_In_z_ _Printf_format_string_ char const* const _Format, ...)
|
||||
@ -704,7 +812,7 @@ bool __fastcall hkDispatchUserMessage(void* thisptr, void*, int msg_type, int32
|
||||
}
|
||||
|
||||
static auto ofunc = ClientHook->GetOriginal<bool(__thiscall*)(void*, int, int32, int, const void*)>(38);
|
||||
|
||||
|
||||
/* //read chat example
|
||||
if (msg_type == CS_UM_SayText2)
|
||||
{
|
||||
@ -753,3 +861,13 @@ int __fastcall hkGetPlayerMoney(void* this_, void* edx, int ent_index)
|
||||
return ((C_BasePlayer*)player)->GetAccount();
|
||||
}
|
||||
}
|
||||
|
||||
VMTHook* ViewRenderHook = nullptr;
|
||||
|
||||
void __fastcall hkRenderSmokeOverlay(uintptr_t ecx, uintptr_t edx, bool a1)
|
||||
{
|
||||
static auto oRenderSmokeOverlay = ViewRenderHook->GetOriginal<void(__thiscall*)(uintptr_t, bool)>(41);
|
||||
if (!g_Options.wfsmoke)
|
||||
oRenderSmokeOverlay(ecx, a1);
|
||||
else *reinterpret_cast<float*>(std::uintptr_t(iff.g_ViewRender) + 0x588) = 0.0f;
|
||||
}
|
@ -167,6 +167,13 @@ void IF::Init()
|
||||
GameRulesProxy = *(C_GameRulesProxy**)(FindPatternV2("client.dll", "A1 ? ? ? ? 85 C0 0F 84 ? ? ? ? 80 B8 ? ? ? ? ? 74 7A")+1); //C_GameRulesProxy
|
||||
dwRadarBase = FindPatternV2("client.dll", "A1 ? ? ? ? 8B 0C B0 8B 01 FF 50 ? 46 3B 35 ? ? ? ? 7C EA 8B 0D") + 1;
|
||||
g_pMoveHelper = **reinterpret_cast<IMoveHelper***>(FindPatternV2("client.dll", "8B 0D ? ? ? ? 8B 46 08 68") + 2);
|
||||
g_GlowObjectManager = *(CGlowObjectManager**)(FindPatternV2("client.dll", "0F 11 05 ? ? ? ? 83 C8 01") + 3);
|
||||
printfdbg("g_GlowObjectManager %x\n", g_GlowObjectManager);
|
||||
|
||||
OverheadInfo = (void*)(FindPatternV2("client.dll", "E8 ? ? ? ? 3B C6 5E 5F") + 5);
|
||||
pLocal = 0;
|
||||
|
||||
g_pWeaponSystem = *reinterpret_cast<IWeaponSystem**>(FindPatternV2("client.dll", "8B 35 ? ? ? ? FF 10 0F B7 C0") + 0x2);
|
||||
}
|
||||
|
||||
|
||||
@ -277,16 +284,19 @@ void ShowMenu(std::string text)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//if sv_voicecodec = vaudio_celt
|
||||
|
||||
|
||||
bool VoiceRecordStart(const char* pUncompressedFile)
|
||||
{
|
||||
typedef bool(__cdecl* Voice_RecordStartFn)(const char*, const char*, const char*);
|
||||
static Voice_RecordStartFn Voice_RecordStart = Voice_RecordStartFn(FindPatternV2("engine.dll", "55 8B EC 83 EC 0C 83 3D ?? ?? ?? ?? ?? 56 57"));
|
||||
|
||||
//m_FileDuration = GetWavFileDuration(WavSound);
|
||||
//m_FilePlayEndTime = iff.g_pGlobals->curtime + m_FileDuration;
|
||||
//const char* WavSound = "MyCustomPathToMyFile.wav";
|
||||
|
||||
//m_FileDuration = Utils.GetWavFileDuration(WavSound);
|
||||
//m_FilePlayEndTime = I::Globals->curtime + m_FileDuration;
|
||||
|
||||
//iff.g_pCVar->FindVar("sv_voicecodec")->SetValue("vaudio_celt");
|
||||
iff.g_pEngineClient->ExecuteClientCmd("voice_loopback 1");
|
||||
return Voice_RecordStart(pUncompressedFile, nullptr, nullptr);
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
#define INTERFACES
|
||||
#pragma once
|
||||
|
||||
//random crashes while loading config without DEBUG defined
|
||||
#define DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -73,6 +72,8 @@
|
||||
#include "sdk/gamerules.h"
|
||||
#include "sdk/igametypes.h"
|
||||
#include "sdk/gamemovement.h"
|
||||
#include "sdk/glow_outline_effect.h"
|
||||
#include "sdk/cs_weapon_parse.h"
|
||||
|
||||
#include "XorStr.hpp"
|
||||
|
||||
@ -152,7 +153,11 @@ public:
|
||||
DWORD dwRadarBase = NULL;
|
||||
IMoveHelper* g_pMoveHelper = NULL; //CMoveHelperClient
|
||||
IGameMovement* g_pGameMovement = NULL;
|
||||
|
||||
CGlowObjectManager* g_GlowObjectManager = NULL;
|
||||
void* OverheadInfo = NULL;
|
||||
C_BasePlayer* pLocal = NULL;
|
||||
IWeaponSystem* g_pWeaponSystem = NULL;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -238,73 +243,7 @@ struct model_t
|
||||
|
||||
void AngleVectors(const Vector& angles, Vector* forward, Vector* right, Vector* up);
|
||||
|
||||
enum ItemDefinitionIndex
|
||||
{
|
||||
ITEM_NONE = 0,
|
||||
WEAPON_DEAGLE = 1,
|
||||
WEAPON_ELITE = 2,
|
||||
WEAPON_FIVESEVEN = 3,
|
||||
WEAPON_GLOCK = 4,
|
||||
WEAPON_AK47 = 7,
|
||||
WEAPON_AUG = 8,
|
||||
WEAPON_AWP = 9,
|
||||
WEAPON_FAMAS = 10,
|
||||
WEAPON_G3SG1 = 11,
|
||||
WEAPON_GALILAR = 13,
|
||||
WEAPON_M249 = 14,
|
||||
WEAPON_M4A1 = 16,
|
||||
WEAPON_MAC10 = 17,
|
||||
WEAPON_P90 = 19,
|
||||
WEAPON_UMP45 = 24,
|
||||
WEAPON_XM1014 = 25,
|
||||
WEAPON_BIZON = 26,
|
||||
WEAPON_MAG7 = 27,
|
||||
WEAPON_NEGEV = 28,
|
||||
WEAPON_SAWEDOFF = 29,
|
||||
WEAPON_TEC9 = 30,
|
||||
WEAPON_TASER = 31,
|
||||
WEAPON_HKP2000 = 32,
|
||||
WEAPON_MP7 = 33,
|
||||
WEAPON_MP9 = 34,
|
||||
WEAPON_NOVA = 35,
|
||||
WEAPON_P250 = 36,
|
||||
WEAPON_SCAR20 = 38,
|
||||
WEAPON_SG553 = 39,
|
||||
WEAPON_SSG08 = 40,
|
||||
WEAPON_KNIFE_GOLD = 41,
|
||||
WEAPON_KNIFE = 42,
|
||||
WEAPON_FLASHBANG = 43,
|
||||
WEAPON_HEGRENADE = 44,
|
||||
WEAPON_SMOKEGRENADE = 45,
|
||||
WEAPON_MOLOTOV = 46,
|
||||
WEAPON_DECOY = 47,
|
||||
WEAPON_INCGRENADE = 48,
|
||||
WEAPON_C4 = 49,
|
||||
WEAPON_KNIFE_T = 59,
|
||||
WEAPON_M4A1_SILENCER = 60,
|
||||
WEAPON_USP_SILENCER = 61,
|
||||
WEAPON_CZ75A = 63,
|
||||
WEAPON_REVOLVER = 64,
|
||||
WEAPON_KNIFE_BAYONET = 500,
|
||||
WEAPON_KNIFE_FLIP = 505,
|
||||
WEAPON_KNIFE_GUT = 506,
|
||||
WEAPON_KNIFE_KARAMBIT = 507,
|
||||
WEAPON_KNIFE_M9_BAYONET = 508,
|
||||
WEAPON_KNIFE_TACTICAL = 509,
|
||||
WEAPON_KNIFE_FALCHION = 512,
|
||||
WEAPON_KNIFE_SURVIVAL_BOWIE = 514,
|
||||
WEAPON_KNIFE_BUTTERFLY = 515,
|
||||
WEAPON_KNIFE_PUSH = 516,
|
||||
GLOVE_STUDDED_BLOODHOUND = 5027,
|
||||
GLOVE_T_SIDE = 5028,
|
||||
GLOVE_CT_SIDE = 5029,
|
||||
GLOVE_SPORTY = 5030,
|
||||
GLOVE_SLICK = 5031,
|
||||
GLOVE_LEATHER_WRAP = 5032,
|
||||
GLOVE_MOTORCYCLE = 5033,
|
||||
GLOVE_SPECIALIST = 5034,
|
||||
MAX_ITEMDEFINITIONINDEX
|
||||
};
|
||||
|
||||
|
||||
|
||||
static int random(int min, int max) noexcept
|
||||
|
@ -1,5 +1,59 @@
|
||||
#pragma once
|
||||
|
||||
LPDIRECT3DVERTEXBUFFER9 v_buffer = NULL;
|
||||
struct vertex {
|
||||
FLOAT x, y, z,
|
||||
rhw;
|
||||
DWORD color;
|
||||
};
|
||||
|
||||
void DrawCircle(IDirect3DDevice9* p_Device, float x, float y, float rad, float rotate, int resolution, DWORD color)
|
||||
{
|
||||
vector<vertex> circle(resolution + 2);
|
||||
float angle = rotate * PI / 180;
|
||||
|
||||
circle[0].x = x - rad;
|
||||
circle[0].y = y;
|
||||
circle[0].z = 0;
|
||||
circle[0].rhw = 1;
|
||||
circle[0].color = color;
|
||||
|
||||
for (int i = 1; i < resolution + 2; i++)
|
||||
{
|
||||
circle[i].x = (float)(x - rad * cos(PI * ((i - 1) / (resolution / 2.0f))));
|
||||
circle[i].y = (float)(y - rad * sin(PI * ((i - 1) / (resolution / 2.0f))));
|
||||
circle[i].z = 0;
|
||||
circle[i].rhw = 1;
|
||||
circle[i].color = color;
|
||||
}
|
||||
|
||||
// Rotate matrix
|
||||
int _res = resolution + 2;
|
||||
for (int i = 0; i < _res; i++)
|
||||
{
|
||||
circle[i].x = x + cos(angle) * (circle[i].x - x) - sin(angle) * (circle[i].y - y);
|
||||
circle[i].y = y + sin(angle) * (circle[i].x - x) + cos(angle) * (circle[i].y - y);
|
||||
}
|
||||
|
||||
p_Device->CreateVertexBuffer((resolution + 2) * sizeof(vertex), D3DUSAGE_WRITEONLY, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &v_buffer, NULL);
|
||||
|
||||
VOID* pVertices;
|
||||
v_buffer->Lock(0, (resolution + 2) * sizeof(vertex), (void**)&pVertices, 0);
|
||||
memcpy(pVertices, &circle[0], (resolution + 2) * sizeof(vertex));
|
||||
v_buffer->Unlock();
|
||||
|
||||
p_Device->SetTexture(0, NULL);
|
||||
p_Device->SetPixelShader(NULL);
|
||||
p_Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
||||
p_Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
||||
p_Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
||||
|
||||
p_Device->SetStreamSource(0, v_buffer, 0, sizeof(vertex));
|
||||
p_Device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
|
||||
p_Device->DrawPrimitive(D3DPT_LINESTRIP, 0, resolution);
|
||||
if (v_buffer != NULL) v_buffer->Release();
|
||||
}
|
||||
|
||||
IMaterial* CreateMaterial(std::string matname, std::string mat_data = "")
|
||||
{
|
||||
KeyValues* keyValues = new KeyValues(matname.c_str());
|
||||
@ -10,6 +64,32 @@ IMaterial* CreateMaterial(std::string matname, std::string mat_data = "")
|
||||
return newmat;
|
||||
}
|
||||
|
||||
void wfsmoke(bool on = 1) noexcept
|
||||
{
|
||||
constexpr std::array smokeMaterials{
|
||||
"particle/vistasmokev1/vistasmokev1_emods",
|
||||
"particle/vistasmokev1/vistasmokev1_emods_impactdust",
|
||||
"particle/vistasmokev1/vistasmokev1_fire",
|
||||
"particle/vistasmokev1/vistasmokev1_smokegrenade"
|
||||
};
|
||||
|
||||
if (on)
|
||||
{
|
||||
if (!*g_Options.wfsmoke) return;
|
||||
|
||||
for (const auto mat : smokeMaterials) {
|
||||
const auto material = iff.g_pMaterialSystem->FindMaterial(mat, TEXTURE_GROUP_PARTICLE);
|
||||
material->SetMaterialVarFlag(MATERIAL_VAR_WIREFRAME, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (const auto mat : smokeMaterials) {
|
||||
const auto material = iff.g_pMaterialSystem->FindMaterial(mat, TEXTURE_GROUP_PARTICLE);
|
||||
material->SetMaterialVarFlag(MATERIAL_VAR_WIREFRAME, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void colorWorld(bool on = 1) noexcept
|
||||
{
|
||||
@ -82,6 +162,27 @@ void ResetMisc()
|
||||
SetValueUnrestricted("cl_wpn_sway_scale", GetVisibleFloat("cl_wpn_sway_scale"));
|
||||
iff.g_pCVar->FindVar("cl_ragdoll_gravity")->SetValue(600.0f); memcpy(g_Options.ragdollgravity, &f600, 4);
|
||||
SetValueUnrestricted("cl_phys_timescale", 1.0f); memcpy(g_Options.ragdolltime, &f1, 4);
|
||||
|
||||
if (g_Options.overhead)
|
||||
{
|
||||
DWORD oldProtect = 0;
|
||||
VirtualProtect(iff.OverheadInfo, 2, PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
BYTE ovbytes[2] = { 0x3B, 0xC6 };
|
||||
memcpy(iff.OverheadInfo, ovbytes, 2);
|
||||
VirtualProtect(iff.OverheadInfo, 2, oldProtect, NULL);
|
||||
}
|
||||
|
||||
if (g_Options.nochokelimit)
|
||||
{
|
||||
auto clMoveChokeClamp = FindPatternV2("engine.dll", "B8 ? ? ? ? 3B F0 0F 4F F0 89 5D FC") + 1;
|
||||
unsigned long protect = 0;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, PAGE_EXECUTE_READWRITE, &protect);
|
||||
*(std::uint32_t*)clMoveChokeClamp = 15;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, protect, &protect);
|
||||
}
|
||||
|
||||
if (g_Options.wfsmoke)
|
||||
wfsmoke(0);
|
||||
}
|
||||
|
||||
void RefreshThread(int* skinid)
|
||||
@ -326,8 +427,7 @@ long __stdcall hkEndScene(IDirect3DDevice9* pDevice)
|
||||
ImGui::PushFont(ifont);
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
style->WindowPadding = ImVec2(20.f, 20.0f);
|
||||
|
||||
style->WindowPadding = ImVec2(20.f, 20.0f);
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
@ -1112,7 +1212,7 @@ long __stdcall hkEndScene(IDirect3DDevice9* pDevice)
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Wireframe", &g_Options.materials.value->arr[selectedwep].wireframe);
|
||||
ImGui::Checkbox("Flat", &g_Options.materials.value->arr[selectedwep].flat);
|
||||
ImGui::Checkbox("Ignore Z", &g_Options.materials.value->arr[selectedwep].ignorez);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("No draw", &g_Options.materials.value->arr[selectedwep].nodraw);
|
||||
ImGui::ColorEdit4("MyColor##0", (float*)&g_Options.materials.value->arr[selectedwep].coloralpha, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_AlphaBar);
|
||||
@ -1975,22 +2075,153 @@ long __stdcall hkEndScene(IDirect3DDevice9* pDevice)
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
if (ImGui::BeginTabItem("Test"))
|
||||
|
||||
if (ImGui::BeginTabItem("Rage"))
|
||||
{
|
||||
style->ChildBorderSize = 0; style->WindowPadding = ImVec2(20.0f, 5.0f);
|
||||
if (ImGui::BeginChild("ChildTab", ImVec2(665, 350), true, ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysUseWindowPadding)) {
|
||||
style->ChildBorderSize = 1; style->WindowPadding = ImVec2(20.0f, 20.0f);
|
||||
ImGui::Columns(2, nullptr, false);
|
||||
ImGui::Columns(3, nullptr, false);
|
||||
|
||||
//if (ImGui::Button("Voicerecord", ImVec2(70, 22)))
|
||||
// printfdbg("VoiceRecordStart: %d\n", VoiceRecordStart("test.wav"));
|
||||
|
||||
static int selectedglow = 0;
|
||||
|
||||
|
||||
if (ImGui::Checkbox("Overhead info/Radar", g_Options.overhead))
|
||||
{
|
||||
if (g_Options.overhead)
|
||||
{
|
||||
DWORD oldProtect = 0;
|
||||
VirtualProtect(iff.OverheadInfo, 2, PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
BYTE ovbytes[2] = { 0x90, 0x90 };
|
||||
memcpy(iff.OverheadInfo, ovbytes, 2);
|
||||
VirtualProtect(iff.OverheadInfo, 2, oldProtect, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
DWORD oldProtect = 0;
|
||||
VirtualProtect(iff.OverheadInfo, 2, PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
BYTE ovbytes[2] = { 0x3B, 0xC6 };
|
||||
memcpy(iff.OverheadInfo, ovbytes, 2);
|
||||
VirtualProtect(iff.OverheadInfo, 2, oldProtect, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
style->WindowPadding = ImVec2(5.0f, 5.0f);
|
||||
if (ImGui::BeginCombo("Glow", g_Options.glowObjects.value->arr[selectedglow].name))
|
||||
{
|
||||
ImGui::PushFont(ifontmini);
|
||||
style->ItemSpacing = ImVec2(7.0f, 2.0f);
|
||||
for (int n = 0; n < g_Options.glowObjects.value->itemcount; n++)
|
||||
{
|
||||
g_Options.glowObjects.value->arr[n].isSelected = (selectedglow == n);
|
||||
if (ImGui::Selectable(g_Options.glowObjects.value->arr[n].name, g_Options.glowObjects.value->arr[n].isSelected, 0, ImVec2(0, 0), false))
|
||||
selectedglow = n;
|
||||
if (g_Options.glowObjects.value->arr[n].isSelected)
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
|
||||
style->ItemSpacing = ImVec2(7.0f, 15.0f);
|
||||
ImGui::PushFont(ifont);
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
style->WindowPadding = ImVec2(20.f, 20.0f);
|
||||
|
||||
DisableElements(g_Options.glowObjects.value->arr[selectedglow].enabled, 1);
|
||||
|
||||
ImGui::SliderFloat("Thickness", &g_Options.glowObjects.value->arr[selectedglow].alphamax, 0.0f, 1.0f);
|
||||
|
||||
DisableElements(g_Options.glowObjects.value->arr[selectedglow].enabled, 0);
|
||||
|
||||
ImGui::SliderFloat("Flashbang alpha", g_Options.flashalpha, 0.0f, 255.0f);
|
||||
|
||||
ImGui::SliderInt("Fake lag", g_Options.fakelag, 0, 63);
|
||||
|
||||
ImGui::Checkbox("Aimbot", g_Options.aimbot);
|
||||
ImGui::Checkbox("Silent aim", g_Options.silentaim);
|
||||
|
||||
ImGui::NextColumn();
|
||||
|
||||
if (ImGui::Checkbox("No Recoil", g_Options.rcs))
|
||||
{
|
||||
if (g_Options.rcs)
|
||||
SetValueUnrestricted("view_recoil_tracking", 0.0f);
|
||||
else
|
||||
SetValueUnrestricted("view_recoil_tracking", 0.45f);
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Active", &g_Options.glowObjects.value->arr[selectedglow].enabled);
|
||||
ImGui::SameLine();
|
||||
|
||||
DisableElements(g_Options.glowObjects.value->arr[selectedglow].enabled, 1);
|
||||
ImGui::ColorEdit4("Color", (float*)&g_Options.glowObjects.value->arr[selectedglow].color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_AlphaBar);
|
||||
|
||||
style->WindowPadding = ImVec2(5.0f, 5.0f);
|
||||
if (ImGui::BeginCombo("Style", opt.GlowStyles.at(g_Options.glowObjects.value->arr[selectedglow].glowstyle).c_str()))
|
||||
{
|
||||
ImGui::PushFont(ifontmini);
|
||||
style->ItemSpacing = ImVec2(7.0f, 2.0f);
|
||||
for (int n = 0; n < opt.GlowStyles.size(); n++)
|
||||
{
|
||||
bool selected = (g_Options.glowObjects.value->arr[selectedglow].glowstyle == n);
|
||||
if (ImGui::Selectable(opt.GlowStyles.at(n).c_str(), selected, 0, ImVec2(0, 0), false))
|
||||
{
|
||||
g_Options.glowObjects.value->arr[selectedglow].glowstyle = n;
|
||||
}
|
||||
if (selected)
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
|
||||
style->ItemSpacing = ImVec2(7.0f, 15.0f);
|
||||
ImGui::PushFont(ifont);
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
style->WindowPadding = ImVec2(20.f, 20.0f);
|
||||
|
||||
DisableElements(g_Options.glowObjects.value->arr[selectedglow].enabled, 0);
|
||||
|
||||
if (ImGui::Checkbox("Wireframe smoke", g_Options.wfsmoke))
|
||||
{
|
||||
if (g_Options.wfsmoke)
|
||||
wfsmoke(1); else wfsmoke(0);
|
||||
}
|
||||
|
||||
if (ImGui::Checkbox("No choked ticks limit", g_Options.nochokelimit))
|
||||
{
|
||||
if (g_Options.nochokelimit)
|
||||
{
|
||||
auto clMoveChokeClamp = FindPatternV2("engine.dll", "B8 ? ? ? ? 3B F0 0F 4F F0 89 5D FC") + 1;
|
||||
unsigned long protect = 0;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, PAGE_EXECUTE_READWRITE, &protect);
|
||||
*(std::uint32_t*)clMoveChokeClamp = 62;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, protect, &protect);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto clMoveChokeClamp = FindPatternV2("engine.dll", "B8 ? ? ? ? 3B F0 0F 4F F0 89 5D FC") + 1;
|
||||
unsigned long protect = 0;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, PAGE_EXECUTE_READWRITE, &protect);
|
||||
*(std::uint32_t*)clMoveChokeClamp = 15;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, protect, &protect);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ImGui::Checkbox("Ping spike", g_Options.pingspike);
|
||||
|
||||
ImGui::SliderFloat("Aimbot FOV", g_Options.aimbotfov, 0.0f, 360.0f);
|
||||
ImGui::Checkbox("Auto shoot", g_Options.aimbotautoshoot);
|
||||
|
||||
|
||||
ImGui::NextColumn(); //3
|
||||
|
||||
|
||||
ImGui::EndChild();
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ImGui::BeginTabItem("About"))
|
||||
{
|
||||
@ -2191,6 +2422,21 @@ long __stdcall hkEndScene(IDirect3DDevice9* pDevice)
|
||||
bulletdata[i].time += iff.g_pGlobals->curtime - bulletdata[i].time;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_Options.aimbot && g_Options.aimbotfov <= 90)
|
||||
{
|
||||
if (iff.g_pEngineClient->IsInGame() && iff.pLocal && iff.pLocal->GetHealth() > 0) {
|
||||
int width = 0, height = 0;
|
||||
iff.g_pEngineClient->GetScreenSize(width, height);
|
||||
|
||||
float radius = tanf(DEG2RAD(g_Options.aimbotfov) / 2) / tanf(DEG2RAD(g_Options.fov) / 2) * (width / 1.0f);
|
||||
radius = radius * 0.75; //aspect ratio fix
|
||||
|
||||
DrawCircle(pDevice, width / 2.0f, height / 2.0f,
|
||||
radius, 0, 360, D3DCOLOR_ARGB(50, 255, 255, 0));
|
||||
}
|
||||
}
|
||||
|
||||
return oEndScene(pDevice);
|
||||
}
|
||||
|
||||
|
@ -84,6 +84,43 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class Glow
|
||||
{
|
||||
public:
|
||||
Glow() {};
|
||||
Glow(char name1[256])
|
||||
{
|
||||
strcpy(name, name1);
|
||||
}
|
||||
Glow(char name1[256], float3 color1)
|
||||
{
|
||||
strcpy(name, name1);
|
||||
color = color1;
|
||||
}
|
||||
char name[256];
|
||||
bool enabled = false;
|
||||
float3 color = { 1.f, 1.f, 1.f, 1.f };
|
||||
float alphamax = .5f;
|
||||
int glowstyle = 0;
|
||||
bool fullbloomrender = false;
|
||||
bool isSelected = false;
|
||||
};
|
||||
|
||||
class glowobjects
|
||||
{
|
||||
public:
|
||||
glowobjects()
|
||||
{
|
||||
int i = 0;
|
||||
arr[i] = Glow("Enemies", float3(1.f, 0, 0, 1.f)); i++;
|
||||
arr[i] = Glow("Allies", float3(0, 1.f, 0, 1.f)); i++;
|
||||
itemcount = i;
|
||||
}
|
||||
Glow arr[64];
|
||||
int itemcount = 0;
|
||||
};
|
||||
|
||||
|
||||
class weapon
|
||||
{
|
||||
public:
|
||||
@ -271,6 +308,7 @@ public:
|
||||
bool wireframe = 0;
|
||||
bool nodraw = 0;
|
||||
bool flat = 0;
|
||||
bool ignorez = 0;
|
||||
ImVec4 coloralpha = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
bool isSelected = 0;
|
||||
int customtextureselected = -1;
|
||||
@ -564,8 +602,8 @@ inline Vector CalcAngle(register const Vector& src, register const Vector& dst)
|
||||
Vector angles;
|
||||
Vector delta = src - dst;
|
||||
float hyp = sqrt(delta.x * delta.x + delta.y * delta.y);
|
||||
angles.x = atan(delta.z / hyp) * (180.0f / 3.14);
|
||||
angles.y = atanf(delta.y / delta.x) * (180.0f / 3.14) + !((*(DWORD*)&delta.x) >> 31 & 1) * 180.0f;
|
||||
angles.x = atan(delta.z / hyp) * (180.0f / pi_v);
|
||||
angles.y = atanf(delta.y / delta.x) * (180.0f / pi_v) + !((*(DWORD*)&delta.x) >> 31 & 1) * 180.0f;
|
||||
angles.z = 0.0f;
|
||||
return angles;
|
||||
}
|
||||
@ -708,7 +746,24 @@ public:
|
||||
|
||||
OPTION(bool, predict, 0);
|
||||
OPTION(bool, blockbot, 0);
|
||||
OPTION(bool, fastladder, 1);
|
||||
OPTION(bool, fastladder, 0);
|
||||
|
||||
OPTION(bool, rcs, 0);
|
||||
OPTION(glowobjects, glowObjects, glowobjects());
|
||||
OPTION(bool, overhead, 0);
|
||||
|
||||
OPTION(float, flashalpha, 255.0f);
|
||||
OPTION(bool, wfsmoke, 0);
|
||||
OPTION(int, fakelag, 0);
|
||||
|
||||
OPTION(bool, backtrack, 0);
|
||||
OPTION(bool, pingspike, 0);
|
||||
OPTION(bool, nochokelimit, 0);
|
||||
|
||||
OPTION(bool, aimbot, 0);
|
||||
OPTION(bool, silentaim, 0);
|
||||
OPTION(bool, aimbotautoshoot, 0);
|
||||
OPTION(float, aimbotfov, 0.0f);
|
||||
};
|
||||
|
||||
inline Options g_Options;
|
||||
@ -797,6 +852,13 @@ public:
|
||||
"Other"
|
||||
};
|
||||
|
||||
std::vector<std::string> GlowStyles = {
|
||||
"Default",
|
||||
"RimGlow3D",
|
||||
"Edge_Highlight",
|
||||
"Edge_Highlight_Pulse"
|
||||
};
|
||||
|
||||
std::map<std::string, std::vector<std::string>> Map = {
|
||||
{"CEffectsClient", IEffects},
|
||||
{"CTEEffectDispatch", DispatchEffect},
|
||||
|
@ -506,7 +506,7 @@ void __fastcall hkFrameStageNotify(IBaseClientDLL* thisptr, void* edx, ClientFra
|
||||
|
||||
if (g_Options.models.value->arr[team].active_scale)
|
||||
pEntity->GetModelScale() = g_Options.models.value->arr[team].scale;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
@ -146,6 +146,7 @@
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Aimbot.hpp" />
|
||||
<ClInclude Include="Config.hpp" />
|
||||
<ClInclude Include="detours.h" />
|
||||
<ClInclude Include="EventListener.hpp" />
|
||||
@ -224,6 +225,7 @@
|
||||
<ClInclude Include="sdk\cs_achievementdefs.h" />
|
||||
<ClInclude Include="sdk\cs_shareddefs.h" />
|
||||
<ClInclude Include="sdk\cs_view_scene.h" />
|
||||
<ClInclude Include="sdk\cs_weapon_parse.h" />
|
||||
<ClInclude Include="sdk\Cursor.h" />
|
||||
<ClInclude Include="sdk\c_baseanimating.h" />
|
||||
<ClInclude Include="sdk\c_baseanimatingoverlay.h" />
|
||||
@ -285,6 +287,7 @@
|
||||
<ClInclude Include="sdk\game_item_schema.h" />
|
||||
<ClInclude Include="sdk\generichash.h" />
|
||||
<ClInclude Include="sdk\globalvars_base.h" />
|
||||
<ClInclude Include="sdk\glow_outline_effect.h" />
|
||||
<ClInclude Include="sdk\groundlink.h" />
|
||||
<ClInclude Include="sdk\HTML.h" />
|
||||
<ClInclude Include="sdk\htmlmessages.h" />
|
||||
@ -574,6 +577,7 @@
|
||||
<ClInclude Include="XorStr.hpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Aimbot.cpp" />
|
||||
<ClCompile Include="checksum_md5.cpp" />
|
||||
<ClCompile Include="ConVars.cpp" />
|
||||
<ClCompile Include="dllmain.cpp" />
|
||||
|
@ -1302,6 +1302,15 @@
|
||||
<ClInclude Include="resources.h">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="sdk\glow_outline_effect.h">
|
||||
<Filter>Header Files\sdk</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="sdk\cs_weapon_parse.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Aimbot.hpp">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="dllmain.cpp">
|
||||
@ -1358,5 +1367,8 @@
|
||||
<ClCompile Include="checksum_md5.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Aimbot.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -103,9 +103,31 @@ void OnLevelInit()
|
||||
SetValueUnrestricted("mat_drawgray", g_Options.drawgray);
|
||||
SetValueUnrestricted("mat_showlowresimage", g_Options.showlowresimage);
|
||||
|
||||
if (g_Options.rcs)
|
||||
SetValueUnrestricted("view_recoil_tracking", 0.0f);
|
||||
|
||||
if (g_Options.overhead)
|
||||
{
|
||||
DWORD oldProtect = 0;
|
||||
VirtualProtect(iff.OverheadInfo, 2, PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
BYTE ovbytes[2] = { 0x90, 0x90 };
|
||||
memcpy(iff.OverheadInfo, ovbytes, 2);
|
||||
VirtualProtect(iff.OverheadInfo, 2, oldProtect, NULL);
|
||||
}
|
||||
|
||||
if (g_Options.nochokelimit)
|
||||
{
|
||||
auto clMoveChokeClamp = FindPatternV2("engine.dll", "B8 ? ? ? ? 3B F0 0F 4F F0 89 5D FC") + 1;
|
||||
unsigned long protect = 0;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, PAGE_EXECUTE_READWRITE, &protect);
|
||||
*(std::uint32_t*)clMoveChokeClamp = 62;
|
||||
VirtualProtect((void*)clMoveChokeClamp, 4, protect, &protect);
|
||||
}
|
||||
|
||||
colorWorld();
|
||||
|
||||
if (g_Options.wfsmoke)
|
||||
wfsmoke(1);
|
||||
|
||||
}
|
||||
|
||||
@ -198,6 +220,10 @@ DWORD WINAPI HackThread(HMODULE hModule)
|
||||
DMEHook = new VMTHook(iff.g_pMdlRender);
|
||||
DMEHook->SwapPointer(21, reinterpret_cast<void*>(DrawModelExecute));
|
||||
DMEHook->ApplyNewTable();
|
||||
|
||||
ViewRenderHook = new VMTHook(iff.g_ViewRender);
|
||||
ViewRenderHook->SwapPointer(41, reinterpret_cast<void*>(hkRenderSmokeOverlay));
|
||||
ViewRenderHook->ApplyNewTable();
|
||||
|
||||
D3DHook = new VMTHook(iff.g_pD3DDevice9);
|
||||
D3DHook->SwapPointer(42, reinterpret_cast<void*>(hkEndScene));
|
||||
@ -219,8 +245,7 @@ DWORD WINAPI HackThread(HMODULE hModule)
|
||||
SoundHook = new VMTHook(iff.g_pEngineSound);
|
||||
SoundHook->SwapPointer(5, reinterpret_cast<void*>(hkEmitSound1));
|
||||
SoundHook->ApplyNewTable();
|
||||
|
||||
|
||||
|
||||
VGUISurfHook = new VMTHook(iff.g_pVGuiSurface);
|
||||
VGUISurfHook->SwapPointer(67, reinterpret_cast<void*>(hkLockCursor));
|
||||
VGUISurfHook->ApplyNewTable();
|
||||
@ -230,6 +255,8 @@ DWORD WINAPI HackThread(HMODULE hModule)
|
||||
ClientModeHook->SwapPointer(18, reinterpret_cast<void*>(hkOverrideView));
|
||||
ClientModeHook->SwapPointer(24, reinterpret_cast<void*>(hkCreateMove));
|
||||
ClientModeHook->ApplyNewTable();
|
||||
|
||||
printfdbg("CreateMove\n");
|
||||
|
||||
FileSystemHook = new VMTHook(iff.g_pFullFileSystem);
|
||||
FileSystemHook->SwapPointer(101, reinterpret_cast<void*>(hkGetUnverifiedFileHashes));
|
||||
@ -316,9 +343,12 @@ DWORD WINAPI HackThread(HMODULE hModule)
|
||||
string(g_Options.customtextures.value->arr[0].Name),
|
||||
string(g_Options.customtextures.value->arr[0].keyvalue));
|
||||
}
|
||||
|
||||
|
||||
ofstream loadcod("csgo/sound/hitsound_cod.wav", std::ios::binary);
|
||||
|
||||
if (!fs::is_directory("csgo/sound") || !fs::exists("csgo/sound")) { // Check if src folder exists
|
||||
fs::create_directory("csgo/sound"); // create src folder
|
||||
}
|
||||
|
||||
ofstream loadcod("csgo/sound/hitsound_cod.wav", std::ios::binary);
|
||||
if (loadcod) {
|
||||
loadcod.write((char*)&hitsound_cod[0], sizeof(hitsound_cod));
|
||||
loadcod.close();
|
||||
@ -327,8 +357,7 @@ DWORD WINAPI HackThread(HMODULE hModule)
|
||||
if (loadcrit) {
|
||||
loadcrit.write((char*)&hitsound_crit[0], sizeof(hitsound_crit));
|
||||
loadcrit.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void* fn_getplmoney = (void*)FindPatternV2("client.dll", "55 8B EC 56 8B 75 08 83 FE 3F");
|
||||
if (fn_getplmoney)
|
||||
@ -411,10 +440,12 @@ DWORD WINAPI HackThread(HMODULE hModule)
|
||||
|
||||
SetValueUnrestricted("developer", 0);
|
||||
SetValueUnrestricted("sv_show_usermessage", 0);
|
||||
SetValueUnrestricted("view_recoil_tracking", 0.45f);
|
||||
|
||||
ResetMisc();
|
||||
|
||||
DMEHook->RestoreOldTable();
|
||||
DMEHook->RestoreOldTable();
|
||||
ViewRenderHook->RestoreOldTable();
|
||||
D3DHook->RestoreOldTable();
|
||||
ClientHook->RestoreOldTable();
|
||||
GameEventManagerHook->RestoreOldTable();
|
||||
|
Reference in New Issue
Block a user