Location: PHPKode > projects > Skrupel KI > skrupelki/ki_basis/schiffe_basis/geleitschutz_basis.php
<?php
/**
 * Autor: Wasserleiche (hide@address.com)
 * 
 * Abstrakte Oberklasse fuer Geleitschutz-Verhalten im allgemeinen.
 */
abstract class geleitschutz_basis extends schiffe_basis {
	
	/**
	 * Abstrakte Funktion fuer das Verwalten von Geleitschutze.
	 */
	abstract function verwalteGeleitschutz();
	
	/**
	 * Prueft, ob das uebergebene Schiff einem anderen Schiff Begleitschutz gibt.
	 * arguments: $schiff_id - Die Datenbank-ID des Schiffs, dessen Begleitschutz ueberprueft werden soll.
	 * returns: true, falls das Schiff einem anderen Schiff Begleitschutz gibt.
	 * 			false, sonst.
	 */
	function gibtBegleitschutz($schiff_id) {
		$schiff_infos = @mysql_query("SELECT flug, zielid FROM skrupel_schiffe WHERE id='$schiff_id'");
		$schiff_infos = @mysql_fetch_array($schiff_infos);
		return ($schiff_infos['flug'] == 4 && $schiff_infos['zielid'] != 0);
	}
	
	/**
	 * Ermittelt alle Schiff-IDs, die dem uebergebenen Schiff Begleitschutz geben.
	 * arguments: $schiff_id - Die Datenbank-ID des Schiffs, dessen Begleit-Schiffe ermittelt werden sollen.
	 * returns: Alle Begleit-Schiffe als Array aus Datenbank-IDs.
	 */
	function ermittleBegleitSchiffe($schiff_id) {
		$comp_id = eigenschaften::$comp_id;
		$spiel_id = eigenschaften::$spiel_id;
		$schiffe_db = @mysql_query("SELECT id FROM skrupel_schiffe WHERE (spiel='$spiel_id') AND (flug=4) 
				AND (besitzer='$comp_id') AND (zielid='$schiff_id')");
		$begleit_schiffe = array();
		while($schiff = @mysql_fetch_array($schiffe_db)) {
			$begleit_schiffe[] = $schiff['id'];
		}
		return $begleit_schiffe;
	}
	
	/**
	 * Prueft, ob das uebergebene Schiff dem anderen uebergebenen Schiff Begleitschutz geben kann (bzw. ob es 
	 * Sinn machen wuerde).
	 * arguments: $schiff_gibt - Die Datenbank-ID des Schiffs, das dem anderen Schiff Begleitschutz geben soll.
	 * 			  $schiff_bekommt - Die Datenbank-ID des Schiffs, das Begleitschutz erhalten soll.
	 * returns: true, falls Begleitschutz sinnvoll ist.
	 * 			false, sonst.
	 */
	function kannBegleitschutzGeben($schiff_gibt, $schiff_bekommt) {
		$schiff_infos = @mysql_query("SELECT techlevel FROM skrupel_schiffe WHERE id='$schiff_bekommt'");
		$schiff_infos = @mysql_fetch_array($schiff_infos);
		$tech_level = $schiff_infos['techlevel'];
		$max_unterstuetzung = $this->ermittleMaxWaffenAnzahl($schiff_bekommt);
		$begleiter_anzahl = count($this->ermittleBegleitSchiffe($schiff_bekommt));
		if($begleiter_anzahl >= $max_unterstuetzung) return false;
		$schiff_infos = @mysql_query("SELECT techlevel FROM skrupel_schiffe WHERE id='$schiff_gibt'");
		$schiff_infos = @mysql_fetch_array($schiff_infos);
		$tech_level_begleit = $schiff_infos['techlevel'];
		$max_unterstuetzung_begleit = $this->ermittleMaxWaffenAnzahl($schiff_gibt);
		return ($tech_level_begleit >= $tech_level - 2 && $max_unterstuetzung_begleit >= 
				$max_unterstuetzung / 2);
	}
	
	/**
	 * Ermittelt das staerkste Schiff von den uebergebenen Schiff-IDs und gibt dies zurueck. Die Kriterien sind 
	 * die maximale Anzahl an Waffen sowie der Tech-Level und die Masse.
	 * arguments: $schiff_ids - Ein Array aus Datenbank-IDs von Schiffen.
	 * returns: Die Datenbank-ID des staerksten Schiffs aus dem Array.
	 */
	function ermittleStaerkstesSchiff($schiff_ids) {
		$max_waffen = 0;
		$max_techlevel = 0;
		$max_masse = 0;
		$staerkstes_schiff = null;
		foreach($schiff_ids as $schiff_id) {
			$schiff_infos = @mysql_query("SELECT techlevel, masse, lemin FROM skrupel_schiffe WHERE 
				id='$schiff_id'");
			$schiff_infos = @mysql_fetch_array($schiff_infos);
			$techlevel = $schiff_infos['techlevel'];
			$masse = $schiff_infos['masse'];
			$lemin = $schiff_infos['lemin'];
			if($lemin <= eigenschaften::$geleitschutz_infos->min_lemin_geleit_geben) continue;
			$waffen = $this->ermittleMaxWaffenAnzahl($schiff_id);
			if($waffen > $max_waffen || ($waffen == $max_waffen && $techlevel > $max_techlevel) 
			|| ($waffen == $max_waffen && $techlevel == $max_techlevel && $masse > $max_masse)) {
				$max_waffen = $waffen;
				$max_techlevel = $techlevel;
				$max_masse = $masse;
				$staerkstes_schiff = $schiff_id;
			}
		}
		return $staerkstes_schiff;
	}
	
	/**
	 * Aktiviert den Begleitschutz des uebergebenen Schiffs fuer das andere uebergebene Schiff.
	 * arguments: $schiff_gibt - Die Datenbank-ID des Schiffs, das dem anderen Schiff Begleitschutz geben soll.
	 * 			  $schiff_bekommt - Die Datenbank-ID des Schiffs, das Begleitschutz erhalten soll.
	 */
	function begleite($schiff_gibt, $schiff_bekommt) {
		$koords = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$schiff_bekommt'");
		$koords = @mysql_fetch_array($koords);
		$x = $koords['kox'];
		$y = $koords['koy'];
		$warp = $this->ermittleMaximumWarp($schiff_gibt);
		@mysql_query("UPDATE skrupel_schiffe SET flug=4, warp='$warp', zielx='$x', ziely='$y', 
			zielid='$schiff_bekommt' WHERE id='$schiff_gibt'");
	}
	
	/**
	 * Ermittelt alle Schiff-IDs, die dem uebergebenen Schiff Begleitschutz geben, und welche noch nicht 
	 * an der Position des uebergebenen Schiffs sind.
	 * arguments: $schiff_id - Die Datenbank-ID des Schiffs, dessen Begleit-Schiffe ermittelt werden sollen.
	 * returns: Alle kommenden Begleit-Schiffe als Array aus Datenbank-IDs.
	 */
	function ermittleKommendeBegleitSchiffe($schiff_id) {
		$koords = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$schiff_id'");
		$koords = @mysql_fetch_array($koords);
		$x_pos = $koords['kox'];
		$y_pos = $koords['koy'];
		$min_lemin = eigenschaften::$geleitschutz_infos->min_lemin_warten;
		$schiffe_db = @mysql_query("SELECT id FROM skrupel_schiffe WHERE (flug=4) AND (zielid='$schiff_id') 
			AND (NOT ((kox='$x_pos') AND (koy='$y_pos'))) AND (lemin>'$min_lemin')");
		$begleit_schiffe = array();
		while($schiff = @mysql_fetch_array($schiffe_db)) {
			$begleit_schiffe[] = $schiff['id'];
		}
		return $begleit_schiffe;
	}
}
?>
Return current item: Skrupel KI