diff --git a/maps/bots/_bot_debug.gsc b/maps/bots/_bot_debug.gsc index 5f2f90d..eda57c8 100644 --- a/maps/bots/_bot_debug.gsc +++ b/maps/bots/_bot_debug.gsc @@ -213,7 +213,7 @@ debug() myEye = self gettagorigin( "j_head" ); myAngles = self getplayerangles(); - for ( i = 0; i < level.waypointcount; i++ ) + for ( i = level.waypoints.size - 1; i >= 0; i-- ) { if ( closest == -1 || closer( self.origin, level.waypoints[ i ].origin, level.waypoints[ closest ].origin ) ) { diff --git a/maps/bots/_bot_internal.gsc b/maps/bots/_bot_internal.gsc index 2df1a77..02f6bf6 100644 --- a/maps/bots/_bot_internal.gsc +++ b/maps/bots/_bot_internal.gsc @@ -904,6 +904,28 @@ canAds( dist, curweap ) return true; } +/* + Returns true if myEye can see the bone of self +*/ +checkTraceForBone( myEye, bone ) +{ + if ( !self targetIsDog() && self targetIsGibbed() ) + { + bone = "j_spinelower"; + } + + boneLoc = self gettagorigin( bone ); + + if ( !isdefined( boneLoc ) ) + { + return false; + } + + trace = bullettrace( myEye, boneLoc, false, undefined ); + + return ( sighttracepassed( myEye, boneLoc, false, undefined ) && ( trace[ "fraction" ] >= 1.0 || trace[ "surfacetype" ] == "glass" ) ); +} + /* The main target thread, will update the bot's main target. Will auto target enemy players and handle script targets. */ @@ -997,40 +1019,9 @@ target_loop() daDist = distancesquared( self.origin, enemy.origin ); isObjDef = isdefined( obj ); - targetHead = undefined; - targetAnkleLeft = undefined; - targetAnkleRight = undefined; - - if ( enemy targetIsDog() ) - { - targetHead = enemy gettagorigin( "j_head" ); - targetAnkleLeft = enemy gettagorigin( "j_ankle_le" ); - targetAnkleRight = enemy gettagorigin( "j_ankle_ri" ); - } - else if ( !enemy targetIsGibbed() ) - { - targetHead = enemy gettagorigin( "j_head" ); - targetAnkleLeft = enemy gettagorigin( "j_ankle_le" ); - targetAnkleRight = enemy gettagorigin( "j_ankle_ri" ); - } - else - { - targetHead = enemy gettagorigin( "j_spinelower" ); - targetAnkleLeft = enemy gettagorigin( "j_spinelower" ); - targetAnkleRight = enemy gettagorigin( "j_spinelower" ); - } - - traceHead = bullettrace( myEye, targetHead, false, enemy ); - traceAnkleLeft = bullettrace( myEye, targetAnkleLeft, false, enemy ); - traceAnkleRight = bullettrace( myEye, targetAnkleRight, false, enemy ); - - canTargetEnemy = ( ( sighttracepassed( myEye, targetHead, false, enemy ) || - sighttracepassed( myEye, targetAnkleLeft, false, enemy ) || - sighttracepassed( myEye, targetAnkleRight, false, enemy ) ) - - && ( ( traceHead[ "fraction" ] >= 1.0 || traceHead[ "surfacetype" ] == "glass" ) || - ( traceAnkleLeft[ "fraction" ] >= 1.0 || traceAnkleLeft[ "surfacetype" ] == "glass" ) || - ( traceAnkleRight[ "fraction" ] >= 1.0 || traceAnkleRight[ "surfacetype" ] == "glass" ) ) + canTargetEnemy = ( ( enemy checkTraceForBone( myEye, "j_head" ) || + enemy checkTraceForBone( myEye, "j_ankle_le" ) || + enemy checkTraceForBone( myEye, "j_ankle_ri" ) ) && ( getConeDot( enemy.origin, self.origin, myAngles ) >= myFov || ( isObjDef && obj.trace_time ) ) diff --git a/maps/bots/_bot_utility.gsc b/maps/bots/_bot_utility.gsc index fd73f62..5d86d7f 100644 --- a/maps/bots/_bot_utility.gsc +++ b/maps/bots/_bot_utility.gsc @@ -1236,7 +1236,6 @@ load_waypoints() level.bot_ignore_links = bot_ignore_links; level.waypoints = getallnodes(); - level.waypointcount = level.waypoints.size; level.waypointsinplayablearea = []; level.waypointsinplayablearea = get_nodes_in_playable_area();