When using this function in OnPlayerRunCmd it makes the server fps drop to 10 in some maps, what could be the cause of it?
Also these functions are SDKCalls:
- LookupBone -> CBaseAnimating::LookupBone
- GetBonePosition -> CBaseAnimating::GetBonePosition
- BotIsVisible -> CCSBot::IsVisible
PHP Code:
float[] SelectBestTargetPos(int client, int &iBestEnemy)
{
float fMyPos[3];
GetClientAbsOrigin(client, fMyPos);
float fTargetPos[3];
float fClosestDistance = 999999999999999.0;
int iActiveWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
int iDefIndex;
if (iActiveWeapon != -1)
{
iDefIndex = GetEntProp(iActiveWeapon, Prop_Send, "m_iItemDefinitionIndex");
}
for (int i = 1; i <= MaxClients; i++)
{
if (i == client)
continue;
if (!IsClientInGame(i))
continue;
if (!IsPlayerAlive(i))
continue;
if (GetEntProp(i, Prop_Send, "m_bGunGameImmunity"))
continue;
if (GetClientTeam(i) == GetClientTeam(client))
continue;
if (!IsTargetInSightRange(client, i))
continue;
int iBone = LookupBone(i, "head_0");
if (iBone < 0)
continue;
float fHead[3], fBad[3];
GetBonePosition(i, iBone, fHead, fBad);
fHead[2] += 2.0;
if (BotIsVisible(client, fHead, false, -1))
{
g_bIsHeadVisible[client] = true;
}
else
{
bool bVisibleOther = false;
//Head wasn't visible, check other bones.
for (int b = 0; b <= sizeof(g_szBoneNames) - 1; b++)
{
iBone = LookupBone(i, g_szBoneNames[b]);
if (iBone < 0)
continue;
GetBonePosition(i, iBone, fHead, fBad);
if (BotIsVisible(client, fHead, false, -1))
{
g_bIsHeadVisible[client] = false;
bVisibleOther = true;
break;
}
}
if (!bVisibleOther)
continue;
}
float fEnemyPos[3];
GetClientAbsOrigin(i, fEnemyPos);
float fDistance = GetVectorDistance(fEnemyPos, fMyPos, true);
if (fDistance < fClosestDistance)
{
fClosestDistance = fDistance;
fTargetPos = fHead;
iBestEnemy = i;
if (iDefIndex == 9 || iDefIndex == 11 || iDefIndex == 38 || iDefIndex == 40)
{
g_bCanAttack[client] = true;
}
else
{
CreateTimer(0.18, Timer_Attack, GetClientUserId(client));
}
}
}
return fTargetPos;
}
__________________