Raised This Month: $51 Target: $400
 12% 

Closest Client problem.


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
tRololo312312
Senior Member
Join Date: Apr 2015
Old 05-28-2015 , 20:28   Closest Client problem.
Reply With Quote #1

Hello. Im trying to make MedicBot to work on other classes too but i have a problem with it.

My idea for other classes was that afk players follow allies (that are not afk) until enemy becomes visible. After that they ignore allies until no enemies on vision.

Problem is that, when enemy becomes visible for afk player, afk player still follows ally and will not shoot enemy until enemy is closer than that ally.

Code:
Code:
		if(IsPointVisible(vecOrigin_center, vecOrigin_edict) && classme != TFClass_Medic)
		{
			if(GetClientTeam(i) != GetClientTeam(client))
			{
				if (TF2_IsPlayerInCondition(i, TFCond_Cloaked) || TF2_IsPlayerInCondition(i, TFCond_Disguised))
					continue;
				new Float:edict_distance = GetVectorDistance(vecOrigin_center, vecOrigin_edict);
				if((edict_distance < distance) || (distance == -1.0))
				{
					distance = edict_distance;
					closestEdict = i;
				}
			}
			else if(GetClientTeam(i) == GetClientTeam(client))
			{
				if(g_bAfkbot[i] || TF2_IsPlayerInCondition(i, TFCond_Cloaked) || TF2_IsPlayerInCondition(i, TFCond_Disguised))
					continue;
				new Float:edict_distance = GetVectorDistance(vecOrigin_center, vecOrigin_edict);
				if((edict_distance < distance) || (distance == -1.0))
				{
					distance = edict_distance;
					closestEdict = i;
				}
			}
		}
Please help.
tRololo312312 is offline
Miu
Veteran Member
Join Date: Nov 2013
Old 05-28-2015 , 21:43   Re: Closest Client problem.
Reply With Quote #2

PHP Code:
        if(IsPointVisible(vecOrigin_centervecOrigin_edict) && classme != TFClass_Medic)
        {
            if(
GetClientTeam(i) != GetClientTeam(client))
            {
                if (
TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised))
                    continue;
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict);
                if((
edict_distance distance) || (distance == -1.0))
                {
                    
distance edict_distance;
                    
closestEdict i;
                }
            }
            else if(
GetClientTeam(i) == GetClientTeam(client))
            {
                if(
g_bAfkbot[i] || TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised))
                    continue;
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict);
                if(((
edict_distance distance) || (distance == -1.0)) && (!closestEdict || GetClientTeam(closestEdict) == GetClientTeam(client)))
                {
                    
distance edict_distance;
                    
closestEdict i;
                }
            }
        } 
Miu is offline
tRololo312312
Senior Member
Join Date: Apr 2015
Old 05-29-2015 , 01:47   Re: Closest Client problem.
Reply With Quote #3

Still not working. Now its not detecting anyone
tRololo312312 is offline
Miu
Veteran Member
Join Date: Nov 2013
Old 05-29-2015 , 09:32   Re: Closest Client problem.
Reply With Quote #4

well it depends on the default value of closestEdict, if it's -1 you need to change !closestEdict to closestEdict == -1. that should be the right change in logic though, checking if closestEdict is currently either unset or another ally before setting it to an ally.
Miu is offline
tRololo312312
Senior Member
Join Date: Apr 2015
Old 05-29-2015 , 14:52   Re: Closest Client problem.
Reply With Quote #5

Quote:
Originally Posted by Miu View Post
well it depends on the default value of closestEdict, if it's -1 you need to change !closestEdict to closestEdict == -1. that should be the right change in logic though, checking if closestEdict is currently either unset or another ally before setting it to an ally.
Well now it detects players again, but still follows own team member even though Enemy is visible until Enemy is closer than the Team mate.

Here is the whole stock:
PHP Code:
stock Client_GetClosest(Float:vecOrigin_center[3], const client)
{    
    
decl Float:vecOrigin_edict[3];
    new 
Float:distance = -1.0;
    new 
closestEdict = -1;
    for(new 
i=1;i<=MaxClients;i++)
    {
        if (!
IsClientInGame(i) || !IsPlayerAlive(i) || (== client))
            continue;
        
GetClientEyePosition(ivecOrigin_edict);
        new 
TFClassType:classme TF2_GetPlayerClass(client);
        if(
GetClientTeam(i) == GetClientTeam(client) && classme == TFClass_Medic)
        {
            new 
TFClassType:class = TF2_GetPlayerClass(i);
            if(
g_bAfkbot[i] && class == TFClass_Medic || TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised))
                continue;
            if(
IsPointVisible(vecOrigin_centervecOrigin_edict))
            {
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict);
                if((
edict_distance distance) || (distance == -1.0))
                {
                    
distance edict_distance;
                    
closestEdict i;
                }
            }
        }
        else if(
GetClientTeam(i) != GetClientTeam(client) && classme == TFClass_Medic)
        {
            if (
TF_IsUberCharge(client) || TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised))
                continue;
            if(
IsPointVisible(vecOrigin_centervecOrigin_edict))
            {
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict);
                if((
edict_distance distance) || (distance == -1.0))
                {
                    
distance edict_distance;
                    
closestEdict i;
                }
            }
        }

        if(
IsPointVisible(vecOrigin_centervecOrigin_edict) && classme != TFClass_Medic)
        {
            if(
GetClientTeam(i) != GetClientTeam(client))
            {
                if (
TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised))
                    continue;
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict);
                if((
edict_distance distance) || (distance == -1.0))
                {
                    
distance edict_distance;
                    
closestEdict i;
                }
            }
            else if(
GetClientTeam(i) == GetClientTeam(client))
            {
                if(
g_bAfkbot[i] || TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised))
                    continue;
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict);
                if(((
edict_distance distance) || (distance == -1.0)) && (closestEdict == -|| GetClientTeam(closestEdict) == GetClientTeam(client)))
                {
                    
distance edict_distance;
                    
closestEdict i;
                }
            }
        }
    }
    return 
closestEdict;

tRololo312312 is offline
Miu
Veteran Member
Join Date: Nov 2013
Old 05-29-2015 , 15:13   Re: Closest Client problem.
Reply With Quote #6

ah my bad, try this

PHP Code:
        if(IsPointVisible(vecOrigin_centervecOrigin_edict) && classme != TFClass_Medic
        { 
            if(
GetClientTeam(i) != GetClientTeam(client)) 
            { 
                if (
TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised)) 
                    continue; 
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict); 
                if(
closestEdict == -|| edict_distance distance || GetClientTeam(closestEdict) == GetClientTeam(client)) 
                { 
                    
distance edict_distance
                    
closestEdict i
                } 
            } 
            else if(
GetClientTeam(i) == GetClientTeam(client)) 
            { 
                if(
g_bAfkbot[i] || TF2_IsPlayerInCondition(iTFCond_Cloaked) || TF2_IsPlayerInCondition(iTFCond_Disguised)) 
                    continue; 
                new 
Float:edict_distance GetVectorDistance(vecOrigin_centervecOrigin_edict); 
                if(
closestEdict == -|| (edict_distance distance && GetClientTeam(closestEdict) == GetClientTeam(client)))
                { 
                    
distance edict_distance;
                    
closestEdict i;
                } 
            } 
        } 
Miu is offline
tRololo312312
Senior Member
Join Date: Apr 2015
Old 05-29-2015 , 15:23   Re: Closest Client problem.
Reply With Quote #7

It works! Thank you so much for your effort!
tRololo312312 is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:01.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode