mirror of
https://github.com/ineedbots/iw3_bot_warfare.git
synced 2025-04-23 02:35:43 +00:00
target cleanup
This commit is contained in:
parent
2896e40c04
commit
03836689ff
@ -462,6 +462,48 @@ reload_thread()
|
||||
self thread reload();
|
||||
}
|
||||
|
||||
createTargetObj(ent, theTime)
|
||||
{
|
||||
obj = spawnStruct();
|
||||
obj.entity = ent;
|
||||
obj.last_seen_pos = (0, 0, 0);
|
||||
obj.dist = 0;
|
||||
obj.time = theTime;
|
||||
obj.trace_time = 0;
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time_time = 0;
|
||||
obj.rand = randomInt(100);
|
||||
obj.didlook = false;
|
||||
obj.isplay = isPlayer(ent);
|
||||
obj.offset = undefined;
|
||||
obj.bone = undefined;
|
||||
obj.aim_offset = undefined;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
updateAimOffset(obj)
|
||||
{
|
||||
}
|
||||
|
||||
targetObjUpdateTraced(obj, daDist, ent, theTime)
|
||||
{
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time += 50;
|
||||
obj.dist = daDist;
|
||||
obj.last_seen_pos = ent.origin;
|
||||
obj.trace_time_time = theTime;
|
||||
|
||||
updateAimOffset(obj);
|
||||
}
|
||||
|
||||
targetObjUpdateNoTrace(obj)
|
||||
{
|
||||
obj.no_trace_time += 50;
|
||||
obj.trace_time = 0;
|
||||
obj.didlook = false;
|
||||
}
|
||||
|
||||
/*
|
||||
The main target thread, will update the bot's main target. Will auto target enemy players and handle script targets.
|
||||
*/
|
||||
@ -495,192 +537,115 @@ target()
|
||||
hasTarget = false;
|
||||
}
|
||||
|
||||
if(isDefined(self.bot.script_target))
|
||||
playercount = level.players.size;
|
||||
for(i = -1; i < playercount; i++)
|
||||
{
|
||||
ent = self.bot.script_target;
|
||||
key = ent getEntityNumber()+"";
|
||||
daDist = distanceSquared(self.origin, ent.origin);
|
||||
obj = self.bot.targets[key];
|
||||
isObjDef = isDefined(obj);
|
||||
entOrigin = ent.origin;
|
||||
if (isDefined(self.bot.script_target_offset))
|
||||
entOrigin += self.bot.script_target_offset;
|
||||
|
||||
for(;;)
|
||||
if (i == -1)
|
||||
{
|
||||
if(!isDefined(self.bot.script_target))
|
||||
continue;
|
||||
|
||||
ent = self.bot.script_target;
|
||||
key = ent getEntityNumber()+"";
|
||||
daDist = distanceSquared(self.origin, ent.origin);
|
||||
obj = self.bot.targets[key];
|
||||
isObjDef = isDefined(obj);
|
||||
entOrigin = ent.origin;
|
||||
if (isDefined(self.bot.script_target_offset))
|
||||
entOrigin += self.bot.script_target_offset;
|
||||
|
||||
if(SmokeTrace(myEye, entOrigin, level.smokeRadius) && bulletTracePassed(myEye, entOrigin, false, ent))
|
||||
{
|
||||
if(!isObjDef)
|
||||
{
|
||||
obj = spawnStruct();
|
||||
obj.entity = ent;
|
||||
obj.last_seen_pos = (0, 0, 0);
|
||||
obj.dist = 0;
|
||||
obj.time = theTime;
|
||||
obj.trace_time = 0;
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time_time = 0;
|
||||
obj.rand = randomInt(100);
|
||||
obj.didlook = false;
|
||||
obj.isplay = isPlayer(ent);
|
||||
obj = createTargetObj(ent, theTime);
|
||||
obj.offset = self.bot.script_target_offset;
|
||||
obj.bone = undefined;
|
||||
obj.aim_offset = undefined;
|
||||
|
||||
self.bot.targets[key] = obj;
|
||||
}
|
||||
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time += 50;
|
||||
obj.dist = daDist;
|
||||
obj.last_seen_pos = ent.origin;
|
||||
obj.trace_time_time = theTime;
|
||||
targetObjUpdateTraced(obj, daDist, ent, theTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!isObjDef)
|
||||
break;
|
||||
continue;
|
||||
|
||||
obj.no_trace_time += 50;
|
||||
obj.trace_time = 0;
|
||||
obj.didlook = false;
|
||||
targetObjUpdateNoTrace(obj);
|
||||
|
||||
if(obj.no_trace_time > rememberTime)
|
||||
{
|
||||
self.bot.targets[key] = undefined;
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(theTime - obj.time < initReactTime)
|
||||
break;
|
||||
|
||||
timeDiff = theTime - obj.trace_time_time;
|
||||
if(timeDiff < bestTime)
|
||||
{
|
||||
bestTargets = [];
|
||||
bestTime = timeDiff;
|
||||
}
|
||||
|
||||
if(timeDiff == bestTime)
|
||||
bestTargets[key] = obj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(isDefined(self.bot.target_this_frame))
|
||||
{
|
||||
player = self.bot.target_this_frame;
|
||||
|
||||
key = player getEntityNumber()+"";
|
||||
obj = self.bot.targets[key];
|
||||
daDist = distanceSquared(self.origin, player.origin);
|
||||
|
||||
if(!isDefined(obj))
|
||||
{
|
||||
obj = spawnStruct();
|
||||
obj.entity = player;
|
||||
obj.last_seen_pos = (0, 0, 0);
|
||||
obj.dist = 0;
|
||||
obj.time = theTime;
|
||||
obj.trace_time = 0;
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time_time = 0;
|
||||
obj.rand = randomInt(100);
|
||||
obj.didlook = false;
|
||||
obj.isplay = isPlayer(player);
|
||||
obj.offset = undefined;
|
||||
obj.bone = undefined;
|
||||
obj.aim_offset = undefined;
|
||||
|
||||
self.bot.targets[key] = obj;
|
||||
}
|
||||
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time += 50;
|
||||
obj.dist = daDist;
|
||||
obj.last_seen_pos = player.origin;
|
||||
obj.trace_time_time = theTime;
|
||||
|
||||
self.bot.target_this_frame = undefined;
|
||||
}
|
||||
|
||||
playercount = level.players.size;
|
||||
for(i = 0; i < playercount; i++)
|
||||
{
|
||||
player = level.players[i];
|
||||
|
||||
if(!isDefined(player.bot_model_fix))
|
||||
continue;
|
||||
if(player == self)
|
||||
continue;
|
||||
|
||||
key = player getEntityNumber()+"";
|
||||
obj = self.bot.targets[key];
|
||||
daDist = distanceSquared(self.origin, player.origin);
|
||||
isObjDef = isDefined(obj);
|
||||
if((level.teamBased && self.team == player.team) || player.sessionstate != "playing" || !isAlive(player) || daDist > distsq)
|
||||
{
|
||||
if(isObjDef)
|
||||
self.bot.targets[key] = undefined;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
targetHead = player getTagOrigin( "j_head" );
|
||||
targetAnkleLeft = player getTagOrigin( "j_ankle_le" );
|
||||
targetAnkleRight = player getTagOrigin( "j_ankle_ri" );
|
||||
|
||||
if((distanceSquared(BulletTrace(myEye, targetHead, false, self)["position"], targetHead) < 0.05 ||
|
||||
distanceSquared(BulletTrace(myEye, targetAnkleLeft, false, self)["position"], targetAnkleLeft) < 0.05 ||
|
||||
distanceSquared(BulletTrace(myEye, targetAnkleRight, false, self)["position"], targetAnkleRight) < 0.05)
|
||||
|
||||
&& (SmokeTrace(myEye, player.origin, level.smokeRadius) ||
|
||||
daDist < level.bots_maxKnifeDistance*4)
|
||||
|
||||
&& (getConeDot(player.origin, self.origin, myAngles) >= myFov ||
|
||||
(isObjDef && obj.trace_time)))
|
||||
{
|
||||
if(!isObjDef)
|
||||
{
|
||||
obj = spawnStruct();
|
||||
obj.entity = player;
|
||||
obj.last_seen_pos = (0, 0, 0);
|
||||
obj.dist = 0;
|
||||
obj.time = theTime;
|
||||
obj.trace_time = 0;
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time_time = 0;
|
||||
obj.rand = randomInt(100);
|
||||
obj.didlook = false;
|
||||
obj.isplay = isPlayer(player);
|
||||
obj.offset = undefined;
|
||||
obj.bone = undefined;
|
||||
obj.aim_offset = undefined;
|
||||
|
||||
self.bot.targets[key] = obj;
|
||||
}
|
||||
|
||||
obj.no_trace_time = 0;
|
||||
obj.trace_time += 50;
|
||||
obj.dist = daDist;
|
||||
obj.last_seen_pos = player.origin;
|
||||
obj.trace_time_time = theTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!isObjDef)
|
||||
player = level.players[i];
|
||||
|
||||
if(!isDefined(player.bot_model_fix))
|
||||
continue;
|
||||
if(player == self)
|
||||
continue;
|
||||
|
||||
obj.no_trace_time += 50;
|
||||
obj.trace_time = 0;
|
||||
obj.didlook = false;
|
||||
|
||||
if(obj.no_trace_time > rememberTime)
|
||||
key = player getEntityNumber()+"";
|
||||
obj = self.bot.targets[key];
|
||||
daDist = distanceSquared(self.origin, player.origin);
|
||||
isObjDef = isDefined(obj);
|
||||
if((level.teamBased && self.team == player.team) || player.sessionstate != "playing" || !isAlive(player) || daDist > distsq)
|
||||
{
|
||||
self.bot.targets[key] = undefined;
|
||||
if(isObjDef)
|
||||
self.bot.targets[key] = undefined;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
targetHead = player getTagOrigin( "j_head" );
|
||||
targetAnkleLeft = player getTagOrigin( "j_ankle_le" );
|
||||
targetAnkleRight = player getTagOrigin( "j_ankle_ri" );
|
||||
|
||||
canTargetPlayer = ((distanceSquared(BulletTrace(myEye, targetHead, false, self)["position"], targetHead) < 0.05 ||
|
||||
distanceSquared(BulletTrace(myEye, targetAnkleLeft, false, self)["position"], targetAnkleLeft) < 0.05 ||
|
||||
distanceSquared(BulletTrace(myEye, targetAnkleRight, false, self)["position"], targetAnkleRight) < 0.05)
|
||||
|
||||
&& (SmokeTrace(myEye, player.origin, level.smokeRadius) ||
|
||||
daDist < level.bots_maxKnifeDistance*4)
|
||||
|
||||
&& (getConeDot(player.origin, self.origin, myAngles) >= myFov ||
|
||||
(isObjDef && obj.trace_time)));
|
||||
|
||||
if (isDefined(self.bot.target_this_frame) && self.bot.target_this_frame == player)
|
||||
{
|
||||
self.bot.target_this_frame = undefined;
|
||||
|
||||
canTargetPlayer = true;
|
||||
}
|
||||
|
||||
if(canTargetPlayer)
|
||||
{
|
||||
if(!isObjDef)
|
||||
{
|
||||
obj = createTargetObj(player, theTime);
|
||||
|
||||
self.bot.targets[key] = obj;
|
||||
}
|
||||
|
||||
targetObjUpdateTraced(obj, daDist, player, theTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!isObjDef)
|
||||
continue;
|
||||
|
||||
targetObjUpdateNoTrace(obj);
|
||||
|
||||
if(obj.no_trace_time > rememberTime)
|
||||
{
|
||||
self.bot.targets[key] = undefined;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(theTime - obj.time < initReactTime)
|
||||
|
Loading…
x
Reference in New Issue
Block a user