[Add] New hard to kill ai who's primary objective is to survive.
This commit is contained in:
		
							parent
							
								
									a580cdeed3
								
							
						
					
					
						commit
						9dfd83abef
					
				
							
								
								
									
										90
									
								
								scripts/ai/scout.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								scripts/ai/scout.lua
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					include("ai/include/basic.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Some vars.
 | 
				
			||||||
 | 
					planet_dist = 1000  -- Distance to keep from planets.
 | 
				
			||||||
 | 
					enemy_dist  = 700   -- Distance to keep from enemies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Required control rate.
 | 
				
			||||||
 | 
					control_rate = 2
 | 
				
			||||||
 | 
					-- Required "control" function.
 | 
				
			||||||
 | 
					function control()
 | 
				
			||||||
 | 
					  task = ai.taskname()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if task == "none" or task == "idle" then
 | 
				
			||||||
 | 
					    enemy = ai.getenemy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- There is an enemy.
 | 
				
			||||||
 | 
					    if enemy ~= 0 then
 | 
				
			||||||
 | 
					      -- Make hostile to the enemy (mainly for player).
 | 
				
			||||||
 | 
					      if ai.dist(enemy) < enemy_dist then
 | 
				
			||||||
 | 
					        ai.pushtask(0, "runaway", enemy)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      -- No enemy.
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      -- Nothing to do so check if we are too far from the planet.
 | 
				
			||||||
 | 
					      -- (If there is one).
 | 
				
			||||||
 | 
					      planet = ai.rndplanet()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if planet ~= nil then
 | 
				
			||||||
 | 
					        if ai.dist(planet) > planet_dist then
 | 
				
			||||||
 | 
					          ai.pushtask(0, "approach", planet)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- Go idle if no task.
 | 
				
			||||||
 | 
					    if task == "none" then
 | 
				
			||||||
 | 
					      ai.pushtask(0, "idle")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- Check if we are near enough.
 | 
				
			||||||
 | 
					  elseif task == "approach" then
 | 
				
			||||||
 | 
					    planet = ai.target()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ai.dist(planet) < planet_dist then
 | 
				
			||||||
 | 
					      ai.poptask()
 | 
				
			||||||
 | 
					      ai.pushtask(0, "idle")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    -- Check if we need to run more.
 | 
				
			||||||
 | 
					  elseif task == "runaway" then
 | 
				
			||||||
 | 
					    enemy = ai.targetid()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ai.dist(enemy) > enemy_dist then
 | 
				
			||||||
 | 
					      ai.poptask()
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Required "attacked" function.
 | 
				
			||||||
 | 
					function attacked(attaker)
 | 
				
			||||||
 | 
					  task = ai.taskname()
 | 
				
			||||||
 | 
					  if task ~= "runaway" then
 | 
				
			||||||
 | 
					    ai.pushtask(0, "runaway", attacker)
 | 
				
			||||||
 | 
					  elseif task == "runaway" then
 | 
				
			||||||
 | 
					    if ai.targetid() ~= attacker then
 | 
				
			||||||
 | 
					      ai.pushtask(0, "runaway", attacker)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Required "create" function.
 | 
				
			||||||
 | 
					function create() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Effectively does nothing.
 | 
				
			||||||
 | 
					function idle()
 | 
				
			||||||
 | 
					  if ai.isstopped() == false then
 | 
				
			||||||
 | 
					    ai.brake()
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Approaches the target.
 | 
				
			||||||
 | 
					function approach()
 | 
				
			||||||
 | 
					  target = ai.target()
 | 
				
			||||||
 | 
					  dir = ai.face(target)
 | 
				
			||||||
 | 
					  ai.accel()
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user