Do not assign a PreferredDroneTarget unless the target is .ReadyToShoot (Is a target, has not exploded, is within maxrange and is still in the entities list)
Verify that all assignments of PreferredPrimaryWeaponTarget check for .IsReadyToShoot before assigning
Change EntityCache to use internal implementations for everything that is available and not DIRECTLY what is being asked for... .IsTarget chesks other things but ultimately still returns )directEntity.IsTarget (same for everything else in entitycache)
Adjust the logging in LockTarget to match the changes