you can search google, there are pretty amazing stuff out there.
my perssonal favorite is Evolutanry Ai, which meens :
lets say you have any type of an Ai object like an Enemy or an Ally,
the Evo Ai , random his movement according to collision , but not only his movement , once the Ai line of sight has cought up with an Ally or You (player) , it shoot, the Evo Ai makes it so that spechific Ai will do this current simulation of Moving on the Current Map searching for you or any opposite team member about 1000 times , it save the best statistic like Time,Where is the best spot to shoot, how many bullets was used and whatever you decide to be a priority in its goals.
at the end after alot of simulations , you get States and Events that based on Randomness rather then user created or programmer created routes or paths, however this method is not simple to implent but the results are far better then any ai system you will find.
if were talking about a more simpler to implent then this is what you need:
Collision Based - Places where it cannot move into
Cover Based - Places where it can "Think" about its next Event or State but also a place to take "Cover" in a real time shooting
Juctions - this is a bit diffrent then Collision or Cover , a Junction can be Randomned making the Ai move in any direction the junction is based on or Link Junctions (smoothen up CPU usage) where the Junction sends the Ai to the next Junction , this 2 can be randomned , the Ai will keep moving unless it "Feels or Sees" something if it did "Saw" you the player he can move and take cover so actually its Event State changes from Junction Link to Shoot or to Cover and Shoot or whatever you want to call it.
if you dont want to use this , you can go even simplier
there is a free plugin made by (dont remmber his name) about PathFinding , search it on the forum , i think it should be at page 2 or 3 , i used it a while a go and its pretty good and smooth.
path finding - it will let you Ai move from place to place while considering where it can move and where it can't , so you can simple attach the PF(path finding) to the Enemy Ai and make him moves toward you by XYZ decrese, so if you are at 100,0,500 and the enemy is at 0,0,300 , using PF it will find the best way to get to you.
all of this maybe overwhelming at first , but trust me its nothing once you get the hang of it , you will find your own solutions for these problems , i do suggest that you will start with PathFinding as its the simpliest way where you jsut need to declare where to move , and unless the ai Sees the Player it will move and will try to find you.
if (EnemySight != PlayerObject) // coninue moving
else
// Stop moving change state to shoot or take cover
if you have any questions pls.