⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 automove.cpp

📁 CS作弊器源代码,用易语言编写...简单适用,适合新人!~~~~
💻 CPP
字号:
// 
// Online Game Cheats Client.dll hook
// Copyright (c) system   2001-2002
// Copyright (c) bunny771 2001-2002
// 
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// 
// NOTE:
// GNU license doesn't cover Engine directory.
// Content of Engine directory is copyrighted (c) 1999, 2000, by Valve LLC
// and it is licensed under Valve's proprietary license (see original HL SDK).
 
#include "windows.h"
#include "client.h"
#include "engine/wrect.h"
#include "cl_dll.h"
#include "cdll_int.h"
#include "util_vector.h"
#include "cl_entity.h"
#include "automove.h"

#ifndef M_PI
#define M_PI		3.14159265358979323846	// matches value in gcc v2 math.h
#endif

void VectorAngles( const float *forward, float *angles );

//========================================================================================
AutoMove automove;

//  e.g. follow [fbi]
//
#define Dbg_Echo(a) 

//========================================================================================
void AutoMove::playeradd(int index, float* origin)
{
	if(!player_reported)
	{
		player_reported = true;
		min_fovangle  = vPlayers[index].fovangle;
        player_pos[0] = origin[0];
        player_pos[1] = origin[1];
		return;
	}

	if(vPlayers[index].fovangle<min_fovangle)
	{
		min_fovangle  = vPlayers[index].fovangle;
        player_pos[0] = origin[0];
        player_pos[1] = origin[1];
	}
}


//========================================================================================
void AutoMove::report_PVS_player (int index, struct cl_entity_s* ent)
{
	switch(cvar.am_followmode)
	{
	case 0:
		return;
	case 1:
		break;
	case 2:
		if(vPlayers[index].team != me.team ) return;
		break;
	case 3:
		if(vPlayers[index].team == me.team ) return;
		break;
	case 4:
		if( !*followname || !strstr(vPlayers[index].entinfo.name,followname)) return;
		break;
	}

	playeradd(index,ent->origin);
}

//========================================================================================
void AutoMove::report_grenade(struct cl_entity_s* nade)
{
	switch(cvar.am_nade_dodge)
	{
	case 0: return;
	case 1: add(nade->origin,cvar.am_nade_mindist,1000000); grenade_reported=true; return;
	case 2:
		if( vPlayers[nade->curstate.owner].team != me.team )
		{
			add(nade->origin,cvar.am_nade_mindist,1000000);
			grenade_reported=true;
		}
		return;
	}
}


//========================================================================================
void AutoMove::add(float* origin, float min, float max )
{
	// nade->me.pmEyePos
	float addvec[2];
	addvec[0] = me.pmEyePos[0] - origin[0];
	addvec[1] = me.pmEyePos[1] - origin[1];

	// normalize
	float dist = (float)sqrt(addvec[0]*addvec[0]+addvec[1]*addvec[1]);
	if(dist>min && dist<max) return; // nothing to do

	if(!active)
	{
		active=true;
		dodgeDir[0]=dodgeDir[1]=0;
	}
	
	if(!dist) return;
	addvec[0] /= dist;
	addvec[1] /= dist;

	if(dist<min)
	{
		dodgeDir[0] += addvec[0]; // move away
		dodgeDir[1] += addvec[1];
	}
	else
	{
		dodgeDir[0] -= addvec[0]; // move towards
		dodgeDir[1] -= addvec[1];
	}
}

//========================================================================================
void AutoMove::CreateMove(float* forwardmove, float* sidemove)
{
	if(player_reported) { add(player_pos,cvar.am_player_mindist,cvar.am_player_maxdist); player_reported = false; }

	if(!active){ return; }

	dodgeDir[2] = 0;
	float dodgeAngles[3];
	VectorAngles(dodgeDir,dodgeAngles);

	// get yaw diff
	float angle = dodgeAngles[1] - me.viewAngles[1];

	// 0...360
	while(angle<0)   { angle+=360; }
	while(angle>360) { angle-=360; }

	float forw = (float)cos(angle*(M_PI/180.0))*250.0f;
	float side = (float)-sin(angle*(M_PI/180.0))*250.0f;

	if(grenade_reported)
	{
		*forwardmove += forw;
		*sidemove    += side;
	}
	else
	{
		if( *forwardmove>-10 && *forwardmove<10 && *sidemove>-10 && *sidemove<10)
		{
			*forwardmove = forw;
			*sidemove    = side;
		}
	}

	grenade_reported= false;
	active = false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -