Ok. here we go again another tutstickle by Ap0calipZ... and guess what? its another esp :P i would like to especially thank redghost because he posted his r3db0t aimbot tut which is when i learnt about PM_Traceline, thx couldnt have done it w/o u
i was surprised to see that knw one has posted this tut so i thought id take the liberty of posting it myself
im gonna try not to just give u the code copy and paste even though its easier for the both of us, as we know people dont learn that way. so this is really gonna be a tutorial on what PM_Traceline does
in short, as redghost (i think it was him) put well
"it draws an imaginary line between you and the other players... just like you and your 'imaginary' friends"
right class, let us then use this concept along with are esp... lets choose box since i regard it as the "standard" esp, im not going to go over how to do the esp u can look at other tutorials for that... or if u knw how to do it good for you!
but basically what you want to do is in your esp drawing function (or make a new one but copy what uve done from standard box esp across) you want to declare a few things and thats...
Code:
int teamme = 0; // the team you are on
int teamot = 0; // the team other players are on
bool visible; // the flag set to true when the player is visible
the way i use the int's personally is 0 = dnt have a clue / not set yet... 1 = Team 1 (Terrorists)... 2 = Team 2 (Counter-Terrorists)
it was ages since ive written this esp and im noticing ways ive could have made it easier / faster but hopefully this tut will inspire you and u will learn (bored yet?)
well because im feeling generous and uve read what ive sed so far im giving you a c+p function to find out the team your on:
Code:
int GetMyTeam()
{
cl_entity_t *pLocal = pEngfuncs->GetLocalPlayer();
hud_player_info_t pinfo;
for(int i = 0; i < 33; i++)
{
cl_entity_s *ent = pEngfuncs->GetEntityByIndex(i);
pEngfuncs->pfnGetPlayerInfo(i, &pinfo);
if(i == pLocal->index)
{
if( strstr( pinfo.model, "arctic" ) || strstr( pinfo.model, "guerilla" ) || strstr( pinfo.model, "leet" ) || strstr( pinfo.model, "terror" ) )
{
return 1;
}
else if( strstr( pinfo.model, "gign" ) || strstr( pinfo.model, "gsg9" ) || strstr( pinfo.model, "sas" ) || strstr( pinfo.model, "urban" ) || strstr( pinfo.model, "vip" ))
{
return 2;
}
}
}
}
when i did this i called it within the esp function after ive declared everything... i dnt knw y but wen i didnt try it as a seperate function it made HL crash or did weird things i cant remeber exactly (and no im not a n00b i didnt put after the loop continue part)
anyway... when your looping through the entities you want to do sumthing like this
Code:
pmtrace_t *vis = pEngfuncs->PM_TraceLine(pLocal->origin, ent->origin, 0, 2, -1); // omgoogles
then further down where you got your model detection you also want to set those variables
teamot =1; if the looped ent is terrorist and 2 if its CT
you should not be looping through the local player as you should continued passed it if the it was the local player
then after team check u want to see if the enemy is visible and how visible they are (well how visible there origin is) this is done like this
Code:
if(vis->fraction >= 0.7f)
{
visible = true;
}
else if(vis->fraction < 0.7f)
{
visible = false;
}
fraction is how visible the origin is... if its 0.0f its not visible at all.. if its 1.0f its completely visible i think 0.7 is a good value for CS but well u can experiment with it... then u set the visibility flag to true if it is visible and false if its not (as shown above)
then finally the drawing part and because im a lazy arse and cant be explaining it exactly im just gna give you the code it aint that hard to understand anyway. ive left comments
Code:
if(teamot!=teamme) // if they arent on the same team as us
{
if(visible) // and there visible
{
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] - 10, 20,2,0,255,0,200);
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] - 10, 2,20,0,255,0,200);
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] + 10, 20,2,0,255,0,200);
pEngfuncs->pfnFillRGBA(drawhere[0] + 10, drawhere[1] - 10, 2,20,0,255,0,200);
// draw them in a green box, THEY R TEH VISIBLE!!1jesus
}
else if(!visible) // or if there not visible
{
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] - 10, 20,2,espr,espg,espb,200);
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] - 10, 2,20,espr,espg,espb,200);
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] + 10, 20,2,espr,espg,espb,200);
pEngfuncs->pfnFillRGBA(drawhere[0] + 10, drawhere[1] - 10, 2,20,espr,espg,espb,200);
// draw them in their normal team esp colour
}
}
else if(teamot==teamme) // if they are on our team
{
if(visible || !visible) // it doesnt matter if they are visible or not
{
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] - 10, 20,2,espr,espg,espb,200);
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] - 10, 2,20,espr,espg,espb,200);
pEngfuncs->pfnFillRGBA(drawhere[0] - 10, drawhere[1] + 10, 20,2,espr,espg,espb,200);
pEngfuncs->pfnFillRGBA(drawhere[0] + 10, drawhere[1] - 10, 2,20,espr,espg,espb,200);
// draw them in their normal team esp colour
}
}
This tutorial maybe linked to but not posted anywhere else (omgoose i changed it slightly)