Location: PHPKode > projects > Skrupel KI > skrupelki/ki_leicht/schiffe_leicht/jaeger_leicht.php
<?php
/**
 * Autor: Wasserleiche (hide@address.com)
 * 
 * Implementierung des Verhaltes der KI bei Jaegern.
 */
class jaeger_leicht extends jaeger_basis {
	
	/**
	 * Aktiviert gegebenenfalls die Spezialmission Planetenbombardement oder deaktiviert sie wieder. Falls das 
	 * Schiff ueber virale Invasion verfuegt, dann wird stattdessen dieser aktiviert.
	 * arguments: $schiff_id - Die Datenbank-ID des Schiffs, das bombardieren soll.
	 * 			  $bombadiere - true, falls Planetenbombardement aktiviert werden soll.
	 * 						    false, Sonst.
	 */
	function bombadierePlaneten($schiff_id, $bombadiere) {
		$aktive_spezialmission = @mysql_query("SELECT spezialmission FROM skrupel_schiffe WHERE id='$schiff_id'");
		$aktive_spezialmission = @mysql_fetch_array($aktive_spezialmission);
		$aktive_spezialmission = $aktive_spezialmission['spezialmission'];
		if($aktive_spezialmission != 3 && $aktive_spezialmission != 0 && $bombadiere) return;
		$bomben_mission = 0;
		if($bombadiere) $bomben_mission = 3;
		@mysql_query("UPDATE skrupel_schiffe SET spezialmission='$bomben_mission' WHERE id='$schiff_id'");
		if($this->SchiffHatFertigkeit($schiff_id, "viraleinvasion")) {
			$virale_mission = 0;
			if($bombadiere) $virale_mission = 17;
			@mysql_query("UPDATE skrupel_schiffe SET spezialmission='$virale_mission' WHERE id='$schiff_id'");
		}
	}
	
	/**
	 * Checkt, ob das uebergebene SRV-Schiff nahe genug bei einem Feindschiff und weit genug weg von einem 
	 * freundlichen Schiff ist. Falls ja, wird der SRV aktiviert.
	 * arguments: $schiff_id - Die Datenbank-ID des SRV-Schiffs, das vieleicht bald explodiert.
	 * returns: true, falls der SRV aktiviert wurde,
	 * 			false, sonst.
	 */
	function aktiviereSRV($schiff_id) {
		if(count(eigenschaften::$sichtbare_gegner_schiffe) == 0) return false;
		$koords = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$schiff_id'");
		$koords = @mysql_fetch_array($koords);
		$xpos = $koords['kox'];
		$ypos = $koords['koy'];
		$nahes_feind_schiff = ki_basis::ermittleNahesZiel($schiff_id, 
										eigenschaften::$sichtbare_gegner_schiffe, null);
		if($nahes_feind_schiff == null || $nahes_feind_schiff['id'] == null || $nahes_feind_schiff['id'] == 0) 
			return false;
		$zielx = $nahes_feind_schiff['x'];
		$ziely = $nahes_feind_schiff['y'];
		$feind_entfernung = ki_basis::berechneStrecke($xpos, $ypos, $zielx, $ziely);
		if($feind_entfernung > 83) return false;
		$schiff_koords = array();
		foreach(eigenschaften::$schiff_ids as $schiff) {
			$schiff_koord = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$schiff'");
			$schiff_koord = @mysql_fetch_array($schiff_koord);
			$schiff_koords[] = array('x'=>$schiff_koord['kox'], 'y'=>$schiff_koord['koy'], 'id'=>$schiff);
		}
		$nahes_freund_schiff = ki_basis::ermittleNahesZiel($schiff_id, $schiff_koords, null);
		if($nahes_freund_schiff != null && $nahes_freund_schiff['id'] != null 
		&& $nahes_freund_schiff['id'] != 0) {
			$zielx = $nahes_freund_schiff['x'];
			$ziely = $nahes_freund_schiff['y'];
			$freund_entfernung = ki_basis::berechneStrecke($xpos, $ypos, $zielx, $ziely);
			if($freund_entfernung < 83) return false;
		}
		@mysql_query("UPDATE skrupel_schiffe SET spezialmission=9, flug=0 WHERE id='$schiff_id'");
		return true;
	}
	
	/**
	 * Prueft, ob es fuer den Jaeger sinnvoll ist, weiter Geleitschutz zu geben. Hier wird nur ueberprueft, ob 
	 * der Jaeger ueberhaupt Geleitschutz bietet.
	 * arguments: $jaeger_id - Die Datenbank-ID des Jaegers, dessen Geleitschutz ueberprueft werden soll.
	 * returns: true, falls der Jaeger weiter Geleitschutz geben soll.
	 * 			false, sonst.
	 */
	function gibtWeiterGeleitschutz($jaeger_id) {
		$schiff_flug = @mysql_query("SELECT flug FROM skrupel_schiffe WHERE id='$jaeger_id'");
		$schiff_flug = @mysql_fetch_array($schiff_flug);
		return ($schiff_flug['flug'] == 4);
	}
	
	/**
	 * Prueft, ob es Sinn macht, den Destabilisator des uebergebenen Jaegers zu aktivieren und aktiviert ihn 
	 * gegebenenfalls. Dies passiert nur, wenn das Schiff an einem Planeten ist und dieser Planet einem 
	 * gegnerischen Spieler gehoert. Ausserdem muessen genuegend Kolonisten auf dem Planeten sein.
	 * Es wird nicht ueberprueft, ob der Jaeger wirklich ueber einen Destabilisator verfuegt!
	 * arguments: $jaeger_id - Die Datebank-ID des Jaegers, dessen Destabilisator aktiviert werden soll.
	 * returns: true, falls der Destabilisator aktiviert wurde.
	 * 			false, sonst.
	 */
	function aktiviereDestabilisator($jaeger_id) {
		$schiff_daten = @mysql_query("SELECT kox, koy, status, fertigkeiten FROM skrupel_schiffe 
			WHERE id='$jaeger_id'");
		$schiff_daten = @mysql_fetch_array($schiff_daten);
		$schiff_status = $schiff_daten['status'];
		if($schiff_status != 2) return false;
		$fertigkeiten = $schiff_daten['fertigkeiten'];
		if(substr($fertigkeiten,50,2)+0 < eigenschaften::$jaeger_infos->min_destabilisator_prozent) return false;
		$x_pos = $schiff_daten['kox'];
		$y_pos = $schiff_daten['koy'];
		$spiel_id = eigenschaften::$spiel_id;
		$planeten_infos = @mysql_query("SELECT id, besitzer, kolonisten FROM skrupel_planeten 
			WHERE (x_pos='$x_pos') AND (y_pos='$y_pos') AND (spiel='$spiel_id')");
		$planeten_infos = @mysql_fetch_array($planeten_infos);
		$planeten_id = $planeten_infos['id'];
		$besitzer = $planeten_infos['besitzer'];
		$this->tankeLemin($jaeger_id, $planeten_infos['id']);
		$kolonisten = $planeten_infos['kolonisten'];
		if(in_array($besitzer, eigenschaften::$gegner_ids) 
		&& $kolonisten >= eigenschaften::$jaeger_infos->min_kolonisten_destabilisator) {
			@mysql_query("UPDATE skrupel_schiffe SET spezialmission=20 WHERE id='$jaeger_id'");
			return true;
		}
		return false;
	}
	
	/**
	 * Prueft, ob der Jaeger ein Minenfeld raeumen sollte. Falls ja, wird ein Kurs auf ein nahes Minenfeld 
	 * gesetzt oder die Spezialmission Minenfeld raeumen wird aktiviert, falls das Schiff schon am Minenfeld ist.
	 * arguments: $jaeger_id - Die Datenbank-ID des Jaegers, dass ein Minenfeld raeumen soll.
	 * returns: true, falls der Jaeger zu einem Minenfeld fliegt oder es raeumt.
	 * 			false, sonst.
	 */
	function MinenfeldRaeumen($jaeger_id) {
		if(!ki_basis::ModulAktiv("minenfelder")) return false;
		$schiff_daten = @mysql_query("SELECT kox, koy, hanger_anzahl, status FROM skrupel_schiffe 
			WHERE id='$jaeger_id'");
		$schiff_daten = @mysql_fetch_array($schiff_daten);
		$x_pos = $schiff_daten['kox'];
		$y_pos = $schiff_daten['koy'];
		$hangars = $schiff_daten['hanger_anzahl'];
		$schiff_status = $schiff_daten['status'];
		if($hangars != 0) {
			$minenfelder = ki_basis::ermittleFeindlicheMinenfelder();
			if(count($minenfelder) != 0) {
				$nahes_minenfeld = ki_basis::ermittleNahesZiel($jaeger_id, $minenfelder, null);
				$entfernung_minenfeld = ceil(ki_basis::berechneStrecke($x_pos, $y_pos, $nahes_minenfeld['x'], 
																  $nahes_minenfeld['y']));
				if($nahes_minenfeld != null && $entfernung_minenfeld 
				<= eigenschaften::$schiffe_infos->max_abstand_minenfeld_raeumen) {
					$nahes_feindschiff = ki_basis::ermittleNahesZiel($jaeger_id, 
															eigenschaften::$sichtbare_gegner_schiffe, null);
					$entfernung_schiff = ki_basis::berechneStrecke($x_pos, $y_pos, $nahes_feindschiff['x'], 
																   $nahes_feindschiff['y']);
					if($nahes_feindschiff == null || $entfernung_schiff 
					>= eigenschaften::$schiffe_infos->min_abstand_minenfeld_raeumen_feindschiff) {
						if($entfernung_minenfeld <= 95) {
							if($schiff_status == 2) {
								$warp = $this->ermittleMaximumWarp($jaeger_id);
								$this->fliegeSchiff($jaeger_id, $x_pos, $y_pos+10, $warp, null);
								return true;
							}
							@mysql_query("UPDATE skrupel_schiffe SET flug=0, spezialmission='25' 
								WHERE id='$jaeger_id'");
							return true;
						} elseif($this->fliegeZuMinenfeldRand($jaeger_id, $nahes_minenfeld['id'])) return true;
					}
				}
			}
		}
		return false;
	}
	
	/**
	 * Ermittelt das naechste Ziel fuer den uebergebenen Jaeger und setzt gegebenenfalls Kurs auf das Ziel. 
	 * Ausserdem wird Planetenbombadement aktiviert (bei Flug auf gegnerischen Planeten) bzw. deaktiviert 
	 * (bei Flug auf gegnerisches Schiff).
	 * arguments: $jaeger_id - Die Datenbank-ID des Jaegers, das ein neues Ziel bekommen soll.
	 */
	function fliegeJaeger($jaeger_id) {
		if($this->MinenfeldRaeumen($jaeger_id)) return null;
		$warp = $this->ermittleMaximumWarp($jaeger_id);
		$schiff_pos = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$jaeger_id'");
		$schiff_pos = @mysql_fetch_array($schiff_pos);
		$x_start = $schiff_pos['kox'];
		$y_start = $schiff_pos['koy'];
		$gegner_ziel = null;
		//Zuerst werden alle Feindschiffe ueberprueft, die einen Planeten oder ein Schiff der KI angreifen.
		if(count(eigenschaften::$gegner_angriffe) > 0) {
			$gegner_ziel = ki_basis::ermittleNahesZiel($jaeger_id, eigenschaften::$gegner_angriffe, 
													   eigenschaften::$bekannte_wurmloch_daten);
		}
		if($gegner_ziel != null && $gegner_ziel['id'] != null && $gegner_ziel['id'] != 0) {
			$this->bombadierePlaneten($jaeger_id, false);
			$x_ziel = $gegner_ziel['x'];
			$y_ziel = $gegner_ziel['y'];
			$ziel_id = $gegner_ziel['id'];
			$entfernung = floor(ki_basis::berechneStrecke($x_start, $y_start, $x_ziel, $y_ziel));
			//Es wird nur angegriffen, falls die Reichweite zum angreifenden Schiff nicht zu gross ist.
			if($entfernung <= eigenschaften::$jaeger_infos->max_jaeger_reichweite_angriff && $entfernung != 0) {
				$this->fliegeSchiff($jaeger_id, $x_ziel, $y_ziel, $warp, $ziel_id);
				return;
			}
		}
		$gegner_ziel = null;
		//Jetzt werden alle bekannten schon gesehenen Planeten der Gegner ueberprueft.
		if(count(eigenschaften::$gegner_planeten_daten) > 0) {
			$gegner_ziel = ki_basis::ermittleNahesZiel($jaeger_id, eigenschaften::$gegner_planeten_daten, 
				 eigenschaften::$bekannte_wurmloch_daten);
		}
		if($gegner_ziel != null && $gegner_ziel['id'] != null && $gegner_ziel['id'] != 0) {
			$this->bombadierePlaneten($jaeger_id, true);
			$x_ziel = $gegner_ziel['x'];
			$y_ziel = $gegner_ziel['y'];
			$ziel_id = $gegner_ziel['id'];
			$entfernung = floor(ki_basis::berechneStrecke($x_start, $y_start, $x_ziel, $y_ziel));
			//Es wird nur angegriffen, falls die Reichweite zum Feindplaneten nicht zu gross ist.
			if($entfernung <= eigenschaften::$jaeger_infos->max_jaeger_reichweite_planeten && $entfernung != 0) {
				$this->fliegeSchiff($jaeger_id, $x_ziel, $y_ziel, $warp, $ziel_id);
				return;
			}
		}
		$gegner_ziel = null;
		//Nun werden alle anderen sichtbaren Feindschiffe ueberprueft.
		if(count(eigenschaften::$sichtbare_gegner_schiffe) > 0) {
			$gegner_ziel = ki_basis::ermittleNahesZiel($jaeger_id, eigenschaften::$sichtbare_gegner_schiffe, 
							eigenschaften::$bekannte_wurmloch_daten);
		}
		if($gegner_ziel != null && $gegner_ziel['id'] != null && $gegner_ziel['id'] != 0) {
			$this->bombadierePlaneten($jaeger_id, false);
			$x_ziel = $gegner_ziel['x'];
			$y_ziel = $gegner_ziel['y'];
			$ziel_id = $gegner_ziel['id'];
			$entfernung = floor(ki_basis::berechneStrecke($x_start, $y_start, $x_ziel, $y_ziel));
			//Es wird nur angegriffen, falls die Reichweite zum Feindschiff nicht zu gross ist.
			if($entfernung <= eigenschaften::$jaeger_infos->max_jaeger_reichweite_schiffe && $entfernung != 0) {
				$this->fliegeSchiff($jaeger_id, $x_ziel, $y_ziel, $warp, $ziel_id);
				return;
			}
		}
		$gegner_ziel = null;
		//Da keine passenden Ziele gefunden wurden, wird nun ein Erkundungsziel gesetzt.
		$gegner_ziel = $this->erkunde($jaeger_id);
		$this->fliegeSchiff($jaeger_id, $gegner_ziel['x'], $gegner_ziel['y'], $warp, $gegner_ziel['id']);
	}
	
	/**
	 * Analysiert die Situation aller Jaeger des KI-Spielers und reagiert gegebenenfalls.
	 */
	function verwalteJaeger() {
		$spiel_id = eigenschaften::$spiel_id;
		foreach(eigenschaften::$jaeger_ids as $jaeger_id) {
			if($this->istAktivesSpezialSchiff($jaeger_id)) continue;
			$this->setzeAggressivitaet($jaeger_id, 9);
			$this->setzeTaktik($jaeger_id, 1);
			if($this->SchiffHatFertigkeit($jaeger_id, "destabilisator") 
			&& $this->aktiviereDestabilisator($jaeger_id)) continue;
			if(count(geleitschutz_basis::ermittleKommendeBegleitSchiffe($jaeger_id)) != 0) {
				@mysql_query("UPDATE skrupel_schiffe SET flug=0, zielid=0, zielx=0, ziely=0 
					WHERE id='$jaeger_id'");
				continue;
			}
			$schiff_daten = @mysql_query("SELECT kox, koy, status, zielid, flug, lemin, spezialmission, schaden, 
				projektile, hanger_anzahl, crew, crewmax FROM skrupel_schiffe WHERE id='$jaeger_id'");
			$schiff_daten = @mysql_fetch_array($schiff_daten);
			//Der naechste unbewohnte Planet wird gescannt und ins Schiffs-Logbuch eingetragen, falls er sich 
			//fuer die Kolonisierung nicht lohnt.
			$this->scanneUmgebung($jaeger_id);
			//Hat der Jaeger einen Subraumverzerrer und macht es gerade Sinn, diesen zu aktivieren, so wird 
			//nichts weiter gemacht.
			if($this->SchiffHatFertigkeit($jaeger_id, "srv") && $this->aktiviereSRV($jaeger_id)) continue;
			//Falls der Jaeger einen Tarnfeldgenerator hat, wird dieser (falls es gerade Sinn macht) aktiviert.
			if($this->SchiffHatFertigkeit($jaeger_id, "tarnung")) $this->aktiviereTarnung($jaeger_id);
			$warp = $this->ermittleMaximumWarp($jaeger_id);
			$x_pos = $schiff_daten['kox'];
			$y_pos = $schiff_daten['koy'];
			$schiff_status = $schiff_daten['status'];
			$ziel_id = $schiff_daten['zielid'];
			$schiff_flug = $schiff_daten['flug'];
			if($schiff_flug == 4) $this->setzeAggressivitaet($jaeger_id, 8);
			$schiff_lemin = $schiff_daten['lemin'];
			$spezialmission = $schiff_daten['spezialmission'];
			$schaden = $schiff_daten['schaden'];
			$projektile = $schiff_daten['projektile'];
			$hangars = $schiff_daten['hanger_anzahl'];
			$crew = $schiff_daten['crew'];
			$crew_max = $schiff_daten['crewmax'];
			//Falls der Jaeger Schaden erlitten hat, aktiviert er die Schiffreparatur und fliegt zur 
			//naechsten Sternenbasis.
			if($schaden >= eigenschaften::$jaeger_infos->max_jaeger_schaden 
			&& !$this->SchiffHatFertigkeit($jaeger_id, "srv")) {
				//Falls feindliche Schiffe nicht zu nahe sind und das Schiff Projektile an Bord hat, wird ein 
				//Minenfeld gelegt, bevor das Schiff einen Reparatur-Flug macht.
				if(ki_basis::ModulAktiv("minenfelder") && $schiff_status != 2 
				&& $projektile > eigenschaften::$jaeger_infos->min_projektile_minen_legen) {
					$nahes_feindschiff = ki_basis::ermittleNahesZiel($jaeger_id, 
								eigenschaften::$sichtbare_gegner_schiffe, null);
					$gegner_entfernung = floor(ki_basis::berechneStrecke($x_pos, $y_pos, 
										$nahes_feindschiff['x'], $nahes_feindschiff['y']));
					if($nahes_feindschiff == null || $nahes_feindschiff['id'] == null 
					|| $nahes_feindschiff['id'] == 0 || ($gegner_entfernung != 0 && $gegner_entfernung 
					> eigenschaften::$jaeger_infos->min_feind_abstand_minen_legen && $gegner_entfernung 
					< eigenschaften::$jaeger_infos->max_feind_abstand_minen_legen)) {
						$extra = "0:0:".$projektile;
						@mysql_query("UPDATE skrupel_schiffe SET spezialmission=24, routing_schritt=0, 
							routing_koord='', extra='$extra', zielx=0, ziely=0, zielid=0, flug=0 
							WHERE id='$jaeger_id'");
						continue;
					}
				}
				if($schiff_status == 2) {
					$planeten_infos = @mysql_query("SELECT id FROM skrupel_planeten 
						WHERE (x_pos='$x_pos') AND (y_pos='$y_pos') AND (spiel='$spiel_id')");
					$planeten_infos = @mysql_fetch_array($planeten_infos);
					$this->tankeLemin($jaeger_id, $planeten_infos['id']);
				}
				if($this->SchiffHatFertigkeit($jaeger_id, "lloyd")) {
					@mysql_query("UPDATE skrupel_schiffe SET spezialmission=16 WHERE id='$jaeger_id'");
					continue;
				}
				if($schiff_status != 2) {
					$this->zuWichtigenPlaneten($jaeger_id);
					continue;
				}
			}
			if($this->reagiereAufWurmloch($jaeger_id)) continue;
			//Ist der Jaeger nah genug an einem feindlichen Minenfeld und verfuegt der Jaeger ueber Hangars, so 
			//wird versucht das Minenfeld zu raeumen.
			if($this->MinenfeldRaeumen($jaeger_id)) continue;
			//Hier wird geprueft, ob das Schiff durch ein Objekt fliegen muesste, um sein Ziel zu erreichen.
			//Falls ja, wird sogleich ein Ausweich-Kurs gesetzt.
			if($this->mussObjektUmfliegen($jaeger_id)) continue;
			//Wird die untere Schranke oder die untere Prozent-Marke fuer Lemin unterschritten, fliegt 
			//das Schiff zum naechsten Planeten, um aufzutanken.
			$strecken_lemin = $this->ermittleStreckenVerbrauch($jaeger_id);
			if($schiff_lemin < (eigenschaften::$jaeger_infos->min_jaeger_lemin_prozent * $strecken_lemin / 100) 
			&& $schiff_status != 2) {
				$this->fliegeTanken($jaeger_id);
				@mysql_query("UPDATE skrupel_schiffe SET routing_schritt=0, routing_koord='' 
					WHERE id='$jaeger_id'");
				continue;
			}
			if($schiff_status == 2) {
				//Baut alle moeglichen Projektile.
				$this->baueProjektile($jaeger_id);
				$planeten_infos = @mysql_query("SELECT id, besitzer, sternenbasis, kolonisten 
					FROM skrupel_planeten WHERE (x_pos='$x_pos') AND (y_pos='$y_pos') AND (spiel='$spiel_id')");
				$planeten_infos = @mysql_fetch_array($planeten_infos);
				$planeten_id = $planeten_infos['id'];
				$besitzer = $planeten_infos['besitzer'];
				$sternenbasis = $planeten_infos['sternenbasis'];
				$kolonisten = $planeten_infos['kolonisten'];
				//Hat das Schiff einen Tarnfeldgenerator, so wird eine gewisse Menge an Rennurbin geladen.
				if($this->SchiffHatFertigkeit($jaeger_id, "tarnung")) {
					$this->ladeResourceAufSchiff($jaeger_id, $planeten_id, "min2", 
								eigenschaften::$schiffe_infos->max_ren_tarnung_start);
				}
				//Falls ein beschaedigter Jaeger bei einer Sternenbasis ist, bleibt er fuer die Reparatur
				//im Orbit.
				if($sternenbasis == 2 && $besitzer == eigenschaften::$comp_id) {
					if($crew < $crew_max) {
						$neue_crew = $crew_max - $crew;
						$extra = "0:".$neue_crew.":0";
						@mysql_query("UPDATE skrupel_schiffe SET spezialmission=23, extra='$extra' 
							WHERE id='$jaeger_id'");
						continue;
					} elseif($schaden != 0) {
						@mysql_query("UPDATE skrupel_schiffe SET spezialmission=14 WHERE id='$jaeger_id'");
						continue;
					}
				}
				//Es wird geprueft, ob sich der Planet fuer die Kolonisierung nicht lohnt.
				ki_basis::PlanetLohntSich($planeten_id);
				//Falls der Jaeger nicht an einem gegnerischen Planeten ist, wird weiter geflogen.
				if(($schiff_flug == 0 || $schiff_flug == 4) && $besitzer != 0 
				&& $besitzer != eigenschaften::$comp_id && $kolonisten >= 1000) {
					$this->bombadierePlaneten($jaeger_id, true);
					continue;
				} else $this->fliegeJaeger($jaeger_id);
				//Hat das Schiff aus welch Gruenden auch immer kein Ziel, so wird eins bestimmt.
				$flug_daten = @mysql_query("SELECT zielx, ziely, kox, koy FROM skrupel_schiffe 
					WHERE id='$jaeger_id'");
				$flug_daten = @mysql_fetch_array($flug_daten);
				if(($flug_daten['zielx'] == 0 && $flug_daten['ziely'] == 0) 
				|| ($flug_daten['zielx'] == $flug_daten['kox'] && $flug_daten['ziely'] == $flug_daten['koy'])) 
					$this->fliegeJaeger($jaeger_id);
				if($schiff_lemin == 0 && $sternenbasis == 2) 
					$this->tankeLeminStart($jaeger_id, $planeten_id);
				else $this->tankeLemin($jaeger_id, $planeten_id);
				continue;
			}
			//Falls das Schiff Begleitschutz gibt, wird nur die Aggressivitaet etwas herabgesetzt, damit das 
			//zu begleitende Schiff zu erst angegriffen wird.
			if($this->gibtWeiterGeleitschutz($jaeger_id)) {
				$this->setzeAggressivitaet($jaeger_id, 8);
				continue;
			}
			//Es wird ueberprueft, ob das gegnerische Schiff, das angeflogen wird, noch sichtbar ist und 
			//ueberhaupt noch existiert. Falls nicht, wird ein neuer Kurs berechnet.
			if($schiff_flug == 3) {
				$sicht = "sicht_".eigenschaften::$comp_id;
				$ziel_daten = @mysql_query("SELECT $sicht FROM skrupel_schiffe WHERE (id='$ziel_id')");
				$ziel_daten = @mysql_fetch_array($ziel_daten);
				$ziel_sichtbar = $ziel_daten[$sicht];
				if($ziel_sichtbar == null || $ziel_sichtbar == 0) {
					$this->fliegeJaeger($jaeger_id);
					continue;
				}
			}
			//Ist ein sichtbares Schiff in Reichweite, wird es sofort angegriffen.
			if(count(eigenschaften::$sichtbare_gegner_schiffe) > 0) {
				$nahes_schiff = ki_basis::ermittleNahesZiel($jaeger_id, eigenschaften::$sichtbare_gegner_schiffe, 
								  eigenschaften::$bekannte_wurmloch_daten);
				$entfernung = floor(ki_basis::berechneStrecke($x_pos, $y_pos, $nahes_schiff['x'], 
															  $nahes_schiff['y']));
				if($entfernung <= eigenschaften::$jaeger_infos->max_jaeger_reichweite_schiffe 
				&& $entfernung != 0 && $nahes_schiff['id'] != 0) {
					$this->bombadierePlaneten($jaeger_id, false);
					$this->fliegeSchiff($jaeger_id, $nahes_schiff['x'], $nahes_schiff['y'], $warp, 
										$nahes_schiff['id']);
					continue;
				}
			}
			//Hat das Schiff aus welch Gruenden auch immer kein Ziel, so wird eins bestimmt.
			$flug_daten = @mysql_query("SELECT zielx, ziely, kox, koy FROM skrupel_schiffe 
				WHERE id='$jaeger_id'");
			$flug_daten = @mysql_fetch_array($flug_daten);
			if(($flug_daten['zielx'] == 0 && $flug_daten['ziely'] == 0) 
			|| ($flug_daten['zielx'] == $flug_daten['kox'] && $flug_daten['ziely'] == $flug_daten['koy'])) 
				$this->fliegeJaeger($jaeger_id);
		}
	}
}
?>
Return current item: Skrupel KI