All pastes #573380 Raw Edit

asdfasdfasdf

public text v1 · immutable
·published 2007-06-18 03:56 UTC
rendered paste body
#define WIN32_LEAN_AND_MEAN
#pragma warning (disable:4786)
#include <windows.h>
#include <stdlib.h>
#include <math.h>
#undef NDEBUG
#include <assert.h>
#include <memory.h>
#include <map>
#include <vector>
#include <fstream>
#include "engine/wrect.h"
#include "engine/cl_dll.h"
#include "engine/cdll_int.h"
#include "engine/util_vector.h"
#include "engine/cl_entity.h"
#include "common/com_model.h"
#include "common/event_api.h"
#include "engine/pmtrace.h" 
#include "engine/pm_defs.h"
#include "aimbot.h"
#include "cvar.h"
#include "client.h"
#include "interpreter.h"
#include "trace.h"
#include "attack.h"
#include "defs.h"
#include "playeritems.h"
#include "perfectwall.h"
#define BOUND_VALUE(var,min,max) if((var)>(max)){(var)=(max);};if((var)<(min)){(var)=(min);}
using namespace std;
Poopbot gAimbot;
#define gAimbot
extern float mainViewOrigin[3],mainViewAngles[3];
void VectorAngles(const float *forward, float *angles)
{
	if (!forward[1] == 0 && !forward[0] == 0)
	{
		angles[0] = atan2(forward[2], sqrt(forward[0] * forward[0] + forward[1] * forward[1])) * (57.2957f);
		angles[1] = atan2(forward[1], forward[0]) * (57.2957f);
		angles[2] = 0;
	}
}
static void PredictTarget(int index,float *pred) { VectorCopy(vPlayers[index].getEnt()->origin,pred);}
bool PathFree(float* from,float* to)
{
	pmtrace_t tr;
	gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
	gEngfuncs.pEventAPI->EV_PlayerTrace( from, to, PM_GLASS_IGNORE, me.ent->index, &tr );
	return (tr.fraction == 1.0);
}
void Poopbot::CalcFovangleAndVisibility(int ax)
{
	int damage;
	float targetspot[3];
	PlayerInfo& r = vPlayers[ax];
	if (!GetAimingTeam(ax))
	{
		r.visible = 0;
		r.damage = 0;
		r.damagespot[0] = 0;
		r.damagespot[1] = 0;
		r.damagespot[2] = 0;
	}
	else
	{
		damage = GetDamageVec(ax, targetspot, true);
		if (damage)
		{
			r.visible = 2;
		}
		else
		{
			damage = GetDamageVec(ax, targetspot, false);
			if (damage)
				r.visible = 1;
			else
				r.visible = 0;
		}
		r.damage = damage;
		r.damagespot[0] = targetspot[0];
		r.damagespot[1] = targetspot[1];
		r.damagespot[2] = targetspot[2];
	}
}
void Poopbot::FindTarget()
{
	target=-1; for(int ax=0;ax<vPlayers.size();ax++)
	if(vPlayers[ax].getPVS() && GetPlayerVisX(ax) && GetAimingTeam(ax)) { if(target == -1) { target = ax; continue; }
	{
		if(vPlayers[ax].visible && !vPlayers[target].visible){target = ax; break;}
		if(vPlayers[ax].distance < vPlayers[target].distance){target = ax; break;}}
	} 
}
aimvec* Poopbot::TargetRegion(int ax)
{
	vec3_t vecEnd, up, right, forward, EntViewOrg,PredOrg, playerAngles;
	PredictTarget(ax,PredOrg);
	vector<aimvec>::iterator si, end;
	if (vPlayers[ax].getEnt()->curstate.usehull == 0)
	{
		si = AimVecsS.begin(); end = AimVecsS.end();
	} else {
		si = AimVecsD.begin(); end = AimVecsD.end();
	}
	if (vPlayers[ax].getEnt()->curstate.gaitsequence == 6)
	{
      si = AimVecsJ.begin(); end = AimVecsJ.end();
	}
	playerAngles[0]=0;
	playerAngles[1]=vPlayers[ax].getEnt()->angles[1];
	playerAngles[2]=0;
    gEngfuncs.pfnAngleVectors (playerAngles, forward, right, up);
	forward[2] = -forward[2];

for (;si!=end;++si)
{

vPlayers[ax].vVecSpot = gEngfuncs.GetEntityByIndex(ax)->origin + forward * si->f + up * si->h + right * si->r;
if(PathFree(me.pmEyePos,vPlayers[ax].vVecSpot)) return &(*si);

else

if(cvar.autohead)
{
vPlayers[ax].vVecSpot  = gEngfuncs.GetEntityByIndex(ax)->origin + (up * (si->h * cvar.ah_h)) + (forward * (si->f * cvar.ah_f)) + (right * (si->r * cvar.ah_r));
if(PathFree(me.pmEyePos,vPlayers[ax].vVecSpot )) return &(*si);

else

vPlayers[ax].vVecSpot  = gEngfuncs.GetEntityByIndex(ax)->origin + (up * (si->h * cvar.ah_h )) + (forward * (si->f * (cvar.ah_f * -1))) + (right * (si->r * (cvar.ah_r * -1)));
if(PathFree(me.pmEyePos,vPlayers[ax].vVecSpot )) return &(*si);

else

vPlayers[ax].vVecSpot  = gEngfuncs.GetEntityByIndex(ax)->origin + (up * (si->h * cvar.ah_h/2)) + (forward * (si->f * cvar.ah_f/2)) + (right * (si->r * cvar.ah_r/2));
if(PathFree(me.pmEyePos,vPlayers[ax].vVecSpot )) return &(*si);

else

vPlayers[ax].vVecSpot  = gEngfuncs.GetEntityByIndex(ax)->origin + (up * (si->h * cvar.ah_h/2)) + (forward * (si->f * (cvar.ah_f/2 * -1))) + (right * (si->r * (cvar.ah_r/2 * -1)));
if(PathFree(me.pmEyePos,vPlayers[ax].vVecSpot )) return &(*si);
}
}
	return NULL;
}
int Poopbot::GetDamageVec(int ax, float *targetspot, bool onlyvis)
{
	int hitdamage, penetration = WALL_PEN0, bullettype, damage;
	vec3_t vecEnd, up, right, forward, EntViewOrg, PlayerOrigin, playerAngles;
	float distance, wallpierce, defaultvec[3] = {0,0,0};
	vector<aimvec>::iterator si, end;
	PredictTarget(ax,PlayerOrigin);
	if (vPlayers[ax].getEnt()->curstate.usehull == 0)
	{
		if (AimVecsS.size() > 0)
		{
			si = AimVecsS.begin();
			end = AimVecsS.end();
			defaultvec[0] = AimVecsS[0].h;
			defaultvec[1] = AimVecsS[0].f;
			defaultvec[2] = AimVecsS[0].r;
		}
	}
	else
	{
		if (AimVecsD.size() > 0)
		{
			si = AimVecsD.begin();
			end = AimVecsD.end();
			defaultvec[0] = AimVecsD[0].h;
			defaultvec[1] = AimVecsD[0].f;
			defaultvec[2] = AimVecsD[0].r;
		}
	}
	if (vPlayers[ax].getEnt()->curstate.gaitsequence == 6)
	{
		if (AimVecsJ.size() > 0)
		{
			si = AimVecsJ.begin();
			end = AimVecsJ.end();

			defaultvec[0] = AimVecsJ[0].h;
			defaultvec[1] = AimVecsJ[0].f;
			defaultvec[2] = AimVecsJ[0].r;
		}
	}
	playerAngles[0]=0;
	playerAngles[1]=vPlayers[ax].getEnt()->angles[1];
	playerAngles[2]=0;
    gEngfuncs.pfnAngleVectors(playerAngles, forward, right, up);
	forward[2] = -forward[2];
	if (!onlyvis && cvar.autowall)
	penetration = playerItems.CurPenetration();
	bullettype = playerItems.CurBulletType();
	damage = playerItems.CurDamage();
	distance = playerItems.CurDistance();
	wallpierce = playerItems.CurWallPierce();
	for (;si!=end;++si)
	{
		targetspot[0] = PlayerOrigin[0] + up[0] * si->h + forward[0] * si->f + right[0] * si->r;
		targetspot[1] = PlayerOrigin[1] + up[1] * si->h + forward[1] * si->f + right[1] * si->r;
		targetspot[2] = PlayerOrigin[2] + up[2] * si->h + forward[2] * si->f + right[2] * si->r;
		hitdamage = CanPenetrate(me.pmEyePos, targetspot, distance, penetration, bullettype, damage, wallpierce);
		if (hitdamage > 0) return hitdamage;
	}
	targetspot[0] = PlayerOrigin[0] + up[0] * defaultvec[0] + forward[0] * defaultvec[1] + right[0] * defaultvec[2];
	targetspot[1] = PlayerOrigin[1] + up[1] * defaultvec[0] + forward[1] * defaultvec[1] + right[1] * defaultvec[2];
	targetspot[2] = PlayerOrigin[2] + up[2] * defaultvec[0] + forward[2] * defaultvec[1] + right[2] * defaultvec[2];
	return CanPenetrate(me.pmEyePos, targetspot, distance, penetration, bullettype, damage, wallpierce);
}
void Poopbot::CalcTargetSpot(float *out)
{
	vec3_t vecEnd, up, right, forward, EntViewOrg, playerAngles;
	cl_entity_s* ent = vPlayers[target].getEnt();
	PredictTarget(target,out);
	playerAngles[0]=0;
	playerAngles[1]=ent->angles[1];
	playerAngles[2]=0;
	gEngfuncs.pfnAngleVectors (playerAngles, forward, right, up);
	aimvec* si = TargetRegion(target);
	float h=0,r=0,f=0;
	if (si)
	{
		f = si->f;
		h = si->h;
		r = si->r;
	}
	else 
	{
		if (ent->curstate.usehull==0)
		{
			if (AimVecsS.size() > 0)
			{
				f = AimVecsS[0].f;
				h = AimVecsS[0].h;
				r = AimVecsS[0].r;
			}
		}
		else
		{
			if (AimVecsD.size() > 0)
			{
				f = AimVecsD[0].f;
				h = AimVecsD[0].h;
				r = AimVecsD[0].r;
			}
		}
	if (ent->curstate.gaitsequence==6 && AimVecsJ.size()>0) 
      { 
         f = AimVecsJ[0].f; 
         h = AimVecsJ[0].h; 
         r = AimVecsJ[0].r; 
      } 
   }
	out[0] = out[0] + forward[0]*f + up[0]*h + right[0]*r;
	out[1] = out[1] + forward[1]*f + up[1]*h + right[1]*r;
	out[2] = out[2] + forward[2]*f + up[2]*h + right[2]*r;
}
void Poopbot::CalcVec_MeToTarget(float *view)
{
	float EntViewOrg[3];
	CalcTargetSpot(EntViewOrg);
	VectorCopy(EntViewOrg,aim_spot);
	view[0] = EntViewOrg[0] - me.pmEyePos[0];
	view[1] = EntViewOrg[1] - me.pmEyePos[1];
	view[2] = EntViewOrg[2] - me.pmEyePos[2];
}
void Poopbot::CalcViewAngles()
{
	float vec_to_target[3];
	vec_to_target[0] = vPlayers[target].damagespot[0] - me.pmEyePos[0];
	vec_to_target[1] = vPlayers[target].damagespot[1] - me.pmEyePos[1];
	vec_to_target[2] = vPlayers[target].damagespot[2] - me.pmEyePos[2];
	VectorAngles(vec_to_target,aim_viewangles);
	aim_viewangles[0] *= -1;
	if (aim_viewangles[0]>180) 
		aim_viewangles[0]-=360;
	if (aim_viewangles[1]>180) 
		aim_viewangles[1]-=360;
}