aimbot на delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by redert, 11 Mar 2013.

  1. redert

    redert New Member

    Joined:
    22 Jan 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, хотелось бы узнать как происходит определение игрока противоположной команды на экране.
    Нашёл отрывок кода
    Code:
    var
      vec, scr: vec3_t;
      Team, PlayerTeam: Integer;
      Distance: Single;
      ScreenVector: vec3_s;
    
    
    begin
    
    // Получем координаты игрока
    // Изменяем позицию, иначе будет только по яйцам стрелять.
    
      vec.x := pEnt.Origin.x + Aimbot_PosX;
      vec.y := pEnt.Origin.y + Aimbot_PosY;
      vec.z := pEnt.Origin.z + Aimbot_PosZ;
    
    // Получаем координаты центра экрана
    
      scr.y := oEngfuncs.GetWindowCenterY;
      scr.x := oEngfuncs.GetWindowCenterX;
    
    // Получаем дистанцию от центра экрана до игроков
    
      Distance := CalcDistance(@scr, @vec);
    
    // Получаем команду игроков
    
      Team := pPlayerInfo.Info[pEnt.Index].Team;
      PlayerTeam := pPlayerInfo.Info[pLocal.Index].Team;
      if not (Team in [0..3]) then Exit;
      if not (PlayerTeam in [0..3]) then Exit;
    
    // если у нас Active то проверяем дистанцию (ФОВ)
    
      if Aimbot_Activ = True then
      if Distance < Aimbot_Fov then
    
    // если дистанция меньше фова, то проверяем команду игрока
    // если ваша команда не равна команде другого игрока, то стреляем
    
      if Team <> PlayerTeam then
      SetCursorPos(Round(vec.x),Round(vec.y + vec.z));
    
    end;
    
    
    Но в нём нету определения игроков вражеской тимы. Как вообще происходит это определение? Понимаю конечно что на делфях подобное редко пишется но всё же.
     
  2. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Ответ найдешь здесь ->
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    дельфю незнаю и зависит от реализации, перехватывается функцию пользовательских сообщений (pfnUserMsgHook) и делаются редиректы на обработчики, один из которых TeamInfo
    Code:
    // HUD_Redraw Client Function
    void HUD_Redraw ( float x, int y )
    {
    //...some stuff
    	Aimbot.FindTarget();
    //...some stuff
    }
    
    void CAimbot::FindTarget( void )
    {
    	if (!me.alive) return;	
    
    	SetTarget(-1);
    
    	for (int ax=0;ax<MAX_VPLAYERS;ax++)
    	{
    		if  ( vPlayers[ax].isUpdatedAddEnt() && vPlayers[ax].canAim && vPlayers[ax].isAlive()) // No Dead People
    		{
    			if( !HasTarget() )											{ SetTarget(ax); continue; }
    			if( vPlayers[ax].fovangle <   vPlayers[iTarget].fovangle )	{ SetTarget(ax);	  	   }		
    		} 
    	}
    }
    
    inline void SetTarget( int iIndex ){ iTarget = iIndex; }
    
    void CAimbot::calcFovangleAndVisibility(int ax)
    { 
    	PlayerInfo& r = vPlayers[ax];
    	r.fovangle    = calcFovAngle(me.pmEyePos, me.viewAngles, r.origin() );
    	
    	if(r.updateType() == 0 || r.updateType() == 2 || !r.isAlive()) { r.visible = false; return; }
    
    	float fov = 0; //1=10 , 2=30 , 3=90 , 4=360
    	if (cvar.fov == 1) fov = 10;
    	else if (cvar.fov == 2) fov = 30;
    	else if (cvar.fov == 3) fov = 90;
    	else if (cvar.fov == 4) fov = 360;
    
    	r.visible = TargetRegion(ax);
    	
    	if(0) {}
    	else if (!CheckTeam(ax))					{ r.canAim = 0; }
    	else if (IsShielded(ax))					{ r.canAim = 0; }
    	else if (r.fovangle>fov)					{ r.canAim = 0; }	
    	else if (bSoonvisible(ax))					{ r.canAim = 1; }
    	else if (cvar.autowall)
    	{
    		int damage = GetDamageVec(ax, true);
    		if (damage)
    		{
    			r.canAim = 2;
    		}
    		else
    		{
    			damage = GetDamageVec(ax, false);
    			if (damage)
    				r.canAim = 1;
    			else
    				r.canAim = 0;
    		}
    	}
    	else										{ r.canAim = r.visible; }
    }
    
    bool CAimbot::CheckTeam(int ax)
    {
    	if (me.team != vPlayers[ax].team) return true;
    	return false;
    }
    
    //==================================================================================
    static int TeamInfo (const char *pszName, int iSize, void *pbuf)
    {
    	BEGIN_READ(pbuf,iSize);
    	int px = READ_BYTE();
    	char * teamtext = READ_STRING();
    	const char * STR_TERROR = "TERRORIST"; 
        const char * STR_CT = "CT"; 
        const char * STR_UNASSIGNED = "UNASSIGNED"; 
        const char * STR_SPECTATOR = "SPECTATOR"; 
        if  (!strcmpi (teamtext, STR_TERROR)) vPlayers[px].team = 1; 
        else if  (!strcmpi (teamtext, STR_CT)) vPlayers[px].team = 2; 
        else if  (!strcmpi (teamtext, STR_UNASSIGNED)) vPlayers[px].team = 0; 
        else if  (!strcmpi (teamtext, STR_SPECTATOR)) vPlayers[px].team = 0; 
        else { 
            vPlayers[px].team = -1; 
        } 
    
    	if(px == gEngfuncs.GetLocalPlayer()->index)
    	{
    		if  (!strcmpi (teamtext, STR_TERROR)) me.team = 1; 
    		else if  (!strcmpi (teamtext, STR_CT)) me.team = 2; 
    		else if  (!strcmpi (teamtext, STR_UNASSIGNED)) me.team = 0; 
    		else if  (!strcmpi (teamtext, STR_SPECTATOR)) me.team = 0; 
    		else { 
    			me.team = -1; 
    		} 
    	}
    	return (*TeamInfoOrg)(pszName, iSize, pbuf);
    }
    
    
    
     
    #3 sn0w, 13 Mar 2013
    Last edited: 13 Mar 2013