📄 automove.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 + -