From 03836689ff553db650c423139a106589823eb71e Mon Sep 17 00:00:00 2001 From: INeedBots Date: Sat, 31 Oct 2020 14:33:10 -0600 Subject: [PATCH] target cleanup --- main_shared/maps/mp/bots/_bot_internal.gsc | 277 +++++++++------------ 1 file changed, 121 insertions(+), 156 deletions(-) diff --git a/main_shared/maps/mp/bots/_bot_internal.gsc b/main_shared/maps/mp/bots/_bot_internal.gsc index c403d7b..08bc942 100644 --- a/main_shared/maps/mp/bots/_bot_internal.gsc +++ b/main_shared/maps/mp/bots/_bot_internal.gsc @@ -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)