<?php
/**
* Autor: Wasserleiche (hide@address.com)
*
* Klasse fuer die Verwaltung von Schiffen mit speziellen Faehigkeiten.
*/
class spezialschiffe_leicht extends schiffe_basis {
/**
* Diese Implementierung aktiviert fuer alle Schiff mit Subpartikelcluster die Spezialmission
* (Resourcen werden dabei automatisch aufs Schiff gebeamt).
*/
function verwalteClusterSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
foreach(eigenschaften::$cluster_ids as $cluster_id) {
$planeten_info = @mysql_query("SELECT p.lemin, p.min1, p.min2, p.min3, p.id FROM skrupel_planeten p,
skrupel_schiffe s WHERE (s.id='$cluster_id') AND (s.kox=p.x_pos) AND (s.koy=p.y_pos)
AND (s.spiel='$spiel_id')");
$planeten_info = @mysql_fetch_array($planeten_info);
$lemin = $planeten_info['lemin'];
$min1 = $planeten_info['min1'];
$min2 = $planeten_info['min2'];
$min3 = $planeten_info['min3'];
if($lemin < eigenschaften::$spezialschiffe_infos->min_lemin_cluster_off
&& $min1 > 113 && $min2 > 113 && $min3 > 113) {
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=0 WHERE id='$cluster_id'");
$this->leereFrachtRaum($cluster_id, $planeten_info['id']);
}
else @mysql_query("UPDATE skrupel_schiffe SET spezialmission=27 WHERE id='$cluster_id'");
}
}
/**
* Diese Implementierung aktiviert fuer alle Schiff mit Quarkreorganisator die Spezialmission
* (Resourcen werden dabei automatisch aufs Schiff gebeamt).
*/
function verwalteQuarkSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
foreach(eigenschaften::$quark_ids as $quark_id) {
$planeten_info = @mysql_query("SELECT p.lemin, p.id FROM skrupel_planeten p, skrupel_schiffe s
WHERE (s.id='$quark_id') AND (s.kox=p.x_pos) AND (s.koy=p.y_pos)
AND (s.spiel='$spiel_id')");
$planeten_info = @mysql_fetch_array($planeten_info);
$lemin = $planeten_info['lemin'];
if($lemin > eigenschaften::$spezialschiffe_infos->max_lemin_quark_on) {
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=0 WHERE id='$quark_id'");
$this->leereFrachtRaum($quark_id, $planeten_info['id']);
}
else @mysql_query("UPDATE skrupel_schiffe SET spezialmission=26 WHERE id='$quark_id'");
}
}
/**
* Verwaltet alle Schiffe mit Cybernrittnikk.
*/
function verwalteCyberSchiffe() {
foreach(eigenschaften::$cyber_ids as $cyber_id) {
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=28 WHERE id='$cyber_id'");
}
}
/**
* Verwaltet alle Schiffe mit Terraformer. Je nach Eingabe werden alle warmen oder alle kalten Terraformer
* betrachtet. Warme Terraformer suchen sich den Planeten mit der niedrigesten Temperatur, der im Besitz
* der KI ist. Kalte Terraformer suchen sich entsprechend den waermsten.
* arguments: $kalt_warm - Bei true werden alle warmen Terraformer verwaltet, bei false alle kalten.
*/
function verwalteTerraSchiffe($warm) {
$optimale_temp = ki_basis::ermittleOptimaleTemp();
if($optimale_temp == 0 || (count(eigenschaften::$terra_warm_ids) == 0 && $warm)
|| (count(eigenschaften::$terra_kalt_ids) == 0 && !$warm)) return;
$terra_id = null;
$terra_id_alt = null;
$terra_ids = null;
$neuer_planet = null;
$spiel_id = eigenschaften::$spiel_id;
$comp_id = eigenschaften::$comp_id;
if($warm) {
$terra_id = $this->ermittleTerraWarmID(); $terra_id = $terra_id['id'];
$terra_id_alt = $this->ermittleTerraKaltID(); $terra_id_alt = $terra_id_alt['id'];
$terra_ids = eigenschaften::$terra_warm_ids;
$neuer_planet = @mysql_query("SELECT p.x_pos, p.y_pos, p.id, p.temp FROM skrupel_planeten p
WHERE p.besitzer='$comp_id' AND p.spiel='$spiel_id'
AND (NOT EXISTS (SELECT * FROM skrupel_schiffe s WHERE (s.klasseid='$terra_id'
OR s.klasseid='$terra_id_alt') AND ((s.kox=p.x_pos AND s.koy=p.y_pos) OR (s.zielx=p.x_pos
AND s.ziely=p.y_pos)) AND s.besitzer='$comp_id' AND s.spiel='$spiel_id')) ORDER BY p.temp ASC");
} else {
$terra_id = $this->ermittleTerraKaltID(); $terra_id = $terra_id['id'];
$terra_id_alt = $this->ermittleTerraWarmID(); $terra_id_alt = $terra_id_alt['id'];
$terra_ids = eigenschaften::$terra_kalt_ids;
$neuer_planet = @mysql_query("SELECT p.x_pos, p.y_pos, p.id, p.temp FROM skrupel_planeten p
WHERE p.besitzer='$comp_id' AND p.spiel='$spiel_id'
AND (NOT EXISTS (SELECT * FROM skrupel_schiffe s WHERE (s.klasseid='$terra_id'
OR s.klasseid='$terra_id_alt') AND ((s.kox=p.x_pos AND s.koy=p.y_pos) OR (s.zielx=p.x_pos
AND s.ziely=p.y_pos)) AND s.besitzer='$comp_id' AND s.spiel='$spiel_id')) ORDER BY p.temp DESC");
}
if($terra_id == null || $terra_ids == null) return;
foreach($terra_ids as $terraschiff_id) {
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=0 WHERE id='$terraschiff_id'");
$terra_daten = @mysql_query("SELECT kox, koy, status FROM skrupel_schiffe
WHERE id='$terraschiff_id'");
$terra_daten = @mysql_fetch_array($terra_daten);
$x_pos = $terra_daten['kox'];
$y_pos = $terra_daten['koy'];
$status = $terra_daten['status'];
if($status == 2) {
$planeten_daten = @mysql_query("SELECT temp, id FROM skrupel_planeten WHERE x_pos='$x_pos'
AND y_pos='$y_pos' AND spiel='$spiel_id' AND besitzer='$comp_id'");
$planeten_daten = @mysql_fetch_array($planeten_daten);
$planeten_temp = $planeten_daten['temp'] - 35;
$planeten_id = $planeten_daten['id'];
$this->tankeLeminStart($terraschiff_id, $planeten_id);
$temp_bedingung = false;
if($warm) $temp_bedingung = $planeten_temp >= $optimale_temp;
else $temp_bedingung = $planeten_temp <= $optimale_temp;
if($temp_bedingung) {
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=0 WHERE id='$terraschiff_id'");
$neuer_planet = @mysql_fetch_array($neuer_planet);
if($neuer_planet == null || $neuer_planet[2] == null || $neuer_planet[2] == 0) continue;
$neue_temp = $neuer_planet['temp'] - 35;
$temp_bedingung = false;
if($warm) $temp_bedingung = $neue_temp >= $optimale_temp;
else $temp_bedingung = $neue_temp <= $optimale_temp;
if($temp_bedingung) continue;
$warp = $this->ermittleMaximumWarp($terraschiff_id);
$this->fliegeSchiff($terraschiff_id, $neuer_planet['x_pos'], $neuer_planet['y_pos'],
$warp, $neuer_planet['id']);
} else @mysql_query("UPDATE skrupel_schiffe SET spezialmission=5 WHERE id='$terraschiff_id'");
}
}
}
/**
* Aktualisiert die Tabelle skrupel_ki_spezialschiffe mit allen noch nicht eingetragenen
* viralen Invasion-Schiffen.
*/
function updateViraleInvasionSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$spezial_schiffe_datenbank = @mysql_query("SELECT s.id FROM skrupel_schiffe s,
skrupel_ki_spezialschiffe sp WHERE (s.id=sp.schiff_id) AND (s.spiel='$spiel_id')
AND (sp.spezial_mission=1)");
$spezial_schiffe = array();
while($virale_id = @mysql_fetch_array($spezial_schiffe_datenbank)) {
$spezial_schiffe[] = $virale_id['id'];
}
foreach(eigenschaften::$virale_ids as $virale_id) {
if(!(in_array($virale_id, $spezial_schiffe))) {
$next_id = ki_basis::ermittleNaechsteID("skrupel_ki_spezialschiffe");
@mysql_query("INSERT INTO skrupel_ki_spezialschiffe (id, schiff_id, spezial_mission, aktiv)
VALUES ('$next_id', '$virale_id', '1', '1')");
}
}
}
/**
* Ermittelt alle nicht-aktiven Schiffe mit viraler Invasion, weist diese den Jaegern zu und
* gibt sie als Array zurueck.
* returns: Die X- und Y-Koordinaten sowie die Datenbank-IDs aller nicht-aktiven Schiffe
* mit viraler Invasion.
*/
function ermittleNichtAktiveViraleInvasionSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$comp_id = eigenschaften::$comp_id;
$nichtaktive_virale_Schiffe = @mysql_query("SELECT s.id, s.kox, s.koy FROM skrupel_schiffe s,
skrupel_ki_spezialschiffe sp WHERE (s.id=sp.schiff_id) AND (s.spiel='$spiel_id')
AND (sp.spezial_mission=1) AND (sp.aktiv=0) AND (s.besitzer='$comp_id')");
$schiffe_infos = array();
while($virales_schiff = @mysql_fetch_array($nichtaktive_virale_Schiffe)) {
eigenschaften::$jaeger_ids[] = $virales_schiff['id'];
$schiffe_infos[] = array('x'=>$virales_schiff['kox'], 'y'=>$virales_schiff['koy'],
'id'=>$virales_schiff['id']);
}
return $schiffe_infos;
}
/**
* Ermittelt alle aktiven Schiffe mit viraler Invasion und gibt diese als Array zurueck.
* returns: Die Datenbank-IDs aller viralen Invasion-Schiffe, die aktiv sind.
*/
function ermittleAktiveViraleInvasionSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$comp_id = eigenschaften::$comp_id;
$aktive_virale_Schiffe = @mysql_query("SELECT s.id FROM skrupel_schiffe s,
skrupel_ki_spezialschiffe sp WHERE (s.id=sp.schiff_id) AND (s.spiel='$spiel_id')
AND (sp.spezial_mission=1) AND (sp.aktiv=1) AND (s.besitzer='$comp_id')");
$aktive_schiffe = array();
while($virale_id = @mysql_fetch_array($aktive_virale_Schiffe)) {
$aktive_schiffe[] = $virale_id['id'];
}
return $aktive_schiffe;
}
/**
* Schaltet das virale Invasion-Schiff ab und fuegt das Schiff zu den Jaegern hinzu.
* arguments: $virale_id - Die Datenbank-ID des Schiffs, dass abgeschaltet werden soll.
*/
function schalteViraleInvasionSchiffAb($virale_id) {
$this->deaktiviereSpezialschiff($virale_id, 0);
eigenschaften::$jaeger_ids[] = $virale_id;
@mysql_query("UPDATE skrupel_schiffe SET spezialmisson=0 WHERE id='$virale_id'");
}
/**
* Waehlt den naechst-gelegenden Planet aus den uebergebenen Planeten aus und setzt einen Kurs auf
* diesen. Ausserdem werden dessen Koordinaten aus dem uebergebenen Planeten-Array entfernt und
* dieses neue Array zurueckgegeben.
* arguments: $virale_id - Die Datenbank-ID des Schiffs, das einen Kurs zu einem der uebergebenen
* Planeten bekommen soll.
* $planeten_daten - Array mit den Datenbank-IDs Koordinaten von Planeten mit unerwuenschten
* Spezies.
* returns: Das Planeten-Array ohne die Koordinaten, die das Schiff anfliegt.
* Dasselbe Array, falls kein Kurs gesetzt wurde.
*/
function fliegeViraleInvasionSchiff($virale_id, $planeten_daten) {
$schiff_daten = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$virale_id'");
$schiff_daten = @mysql_fetch_array($schiff_daten);
$x_pos = $schiff_daten['kox'];
$y_pos = $schiff_daten['koy'];
$nahes_ziel = ki_basis::ermittleNahesZiel($virale_id, $planeten_daten, null);
if($nahes_ziel == null || $nahes_ziel['id'] == null || $nahes_ziel['id'] == 0) {
$this->schalteViraleInvasionSchiffAb($virale_id);
return $planeten_daten;
}
$warp = $this->ermittleMaximumWarp($virale_id);
$this->fliegeSchiff($virale_id, $nahes_ziel['x'], $nahes_ziel['y'], $warp, $nahes_ziel['id']);
$index = 0;
for(; $index < count($planeten_daten); $index++) {
if($planeten_daten[$index]['x'] == $nahes_ziel['x']
&& $planeten_daten[$index]['y'] == $nahes_ziel['y']) break;
}
unset($planeten_daten[$index]);
return array_values($planeten_daten);
}
/**
* Verwaltet alle Schiffe mit viraler Invasion.
*/
function verwalteViraleInvasionSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$comp_id = eigenschaften::$comp_id;
$this->updateViraleInvasionSchiffe();
$ziel_planeten = schiffe_basis::ermittlePlanetenFuerViraleInvasionSchiffe();
$planeten_daten = array();
//Hier werden alle Koordinaten fuer die Ziel-Planeten ermittelt, damit der naheste Planet
//ermittelt werden kann.
if($ziel_planeten != null) {
foreach($ziel_planeten as $planeten_id) {
$daten = @mysql_query("SELECT x_pos, y_pos, id FROM skrupel_planeten WHERE id='$planeten_id'");
$daten = @mysql_fetch_array($daten);
$planeten_daten[] = array('x'=>$daten['x_pos'], 'y'=>$daten['y_pos'], 'id'=>$daten['id']);
}
}
$nicht_aktive_schiffe = $this->ermittleNichtAktiveViraleInvasionSchiffe();
$aktive_virale_ids = $this->ermittleAktiveViraleInvasionSchiffe();
//Falls keine viralen Schiffe aktiv sind, es aber Bedarf fuer eines gibt, wird das naechst-gelegene
//virale Schiffe ermittelt und reaktiviert.
if(count($aktive_virale_ids) == 0 && count($ziel_planeten) > 0) {
foreach($planeten_daten as $koord) {
$kleinste_strecke = 99999;
$beste_schiff_koords = null;
foreach($nicht_aktive_schiffe as $schiff) {
$strecke = floor(ki_basis::berechneStrecke($koord['x'], $koord['y'],
$schiff['x'], $schiff['y']));
if($kleinste_strecke > $strecke) {
$beste_schiff_koords = $schiff;
$kleinste_strecke = $strecke;
}
$schiff_id = $beste_schiff_koords['id'];
@mysql_query("UPDATE skrupel_ki_spezialschiffe SET aktiv=1 WHERE schiff_id='$schiff_id'");
$aktive_virale_ids[] = $schiff_id;
}
}
}
foreach($aktive_virale_ids as $virale_id) {
//Falls alle Ziel-Planeten schon von anderen viralen Invasion-Schiffen angeflogen werden,
//wird die virale Invasion von diesem Schiff deaktiviert.
if($ziel_planeten == null || count($planeten_daten) == 0) {
$this->schalteViraleInvasionSchiffAb($virale_id);
continue;
}
$schiff_daten = @mysql_query("SELECT status, lemin, leminmax, kox, koy FROM skrupel_schiffe
WHERE id='$virale_id'");
$schiff_daten = @mysql_fetch_array($schiff_daten);
$status = $schiff_daten['status'];
$lemin_schiff = $schiff_daten['lemin'];
$lemin_max = $schiff_daten['leminmax'];
$x_pos = $schiff_daten['kox'];
$y_pos = $schiff_daten['koy'];
$this->scanneUmgebung($virale_id);
if($status == 2) {
$planeten_daten = @mysql_query("SELECT id, native_kol, sternenbasis FROM skrupel_planeten
WHERE (spiel='$spiel_id') AND (x_pos='$x_pos') AND (y_pos='$y_pos')");
$planeten_daten = @mysql_fetch_array($planeten_daten);
$planeten_id = $planeten_daten['id'];
$planeten_native = $planeten_daten['native_kol'];
$sternenbasis = $planeten_daten['sternenbasis'];
if(in_array($planeten_id, schiffe_basis::ermittlePlanetenFuerViraleInvasionSchiffe())) {
if($planeten_native >= eigenschaften::$spezialschiffe_infos->min_native_invasion)
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=18 WHERE id='$virale_id'");
else {
@mysql_query("UPDATE skrupel_schiffe SET spezialmission=0 WHERE id='$virale_id'");
@mysql_query("DELETE FROM skrupel_ki_planeten WHERE (planeten_id='$planeten_id')
AND (comp_id='$comp_id')");
$planeten_daten = $this->fliegeViraleInvasionSchiff($virale_id, $planeten_daten);
//Lemin wird obligatorisch getankt.
$this->tankeLemin($virale_id, $planeten_id);
}
continue;
}
$planeten_daten = $this->fliegeViraleInvasionSchiff($virale_id, $planeten_daten);
//Lemin wird obligatorisch getankt.
if($lemin_schiff == 0 && $sternenbasis == 2)
$this->tankeLeminStart($virale_id, $planeten_id);
else $this->tankeLemin($virale_id, $planeten_id);//Lemin wird obligatorisch getankt.
if($lemin_schiff == 0 && $sternenbasis == 2)
$this->tankeLeminStart($virale_id, $planeten_id);
else $this->tankeLemin($virale_id, $planeten_id);
continue;
}
$strecken_lemin = $this->ermittleStreckenVerbrauch($virale_id);
if($lemin_schiff < (eigenschaften::$jaeger_infos->min_jaeger_lemin_prozent * $strecken_lemin / 100)
&& $status != 2) {
$this->fliegeTanken($virale_id);
@mysql_query("UPDATE skrupel_schiffe SET routing_schritt=0, routing_koord=''
WHERE id='$virale_id'");
continue;
}
$ziel_koords = @mysql_query("SELECT zielx, ziely FROM skrupel_schiffe WHERE id='$virale_id'");
$ziel_koords = @mysql_fetch_array($ziel_koords);
if($ziel_koords['zielx'] == 0 && $ziel_koords['ziely'] == 0)
$planeten_daten = $this->fliegeViraleInvasionSchiff($virale_id, $planeten_daten);
}
}
/**
* Aktualisiert die Tabelle skrupel_ki_spezialschiffe mit allen noch nicht eingetragenen
* Taster-Schiffen.
*/
function updateTasterSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$comp_id = eigenschaften::$comp_id;
$spezial_schiffe_datenbank = @mysql_query("SELECT k.schiff_id FROM skrupel_schiffe s,
skrupel_ki_spezialschiffe k WHERE (s.id=k.schiff_id) AND (s.spiel='$spiel_id')
AND (k.spezial_mission=2) AND (s.besitzer='$comp_id')");
$spezial_schiffe = array();
while($spezial_schiff = @mysql_fetch_array($spezial_schiffe_datenbank)) {
$spezial_schiffe[] = $spezial_schiff['schiff_id'];
}
foreach(eigenschaften::$taster_ids as $taster_id) {
if(!(in_array($taster_id, $spezial_schiffe))) {
$next_id = ki_basis::ermittleNaechsteID("skrupel_ki_spezialschiffe");
@mysql_query("INSERT INTO skrupel_ki_spezialschiffe (id, schiff_id, spezial_mission, aktiv)
VALUES ('$next_id', '$taster_id', '2', '1')");
}
}
}
/**
* Bestimmt das Taster-Schiff aus den uebergebenen Schiffen (Array mit ID, X- und Y-Koordinaten), das die
* kuerzeste Entfernung zu einem wichtigen Planten hat, entfernt dies aus dem uebergebenen Array und
* deaktiviert das Taster-Schiff.
* arguments: $aktive_schiffe - Ein Array mit Datenbank-IDs, X- und Y-Koordinaten von Taster-Schiffen.
*/
function ermittleNaechstesTasterSchiff($taster_schiffe) {
$kleinste_strecke = 99999;
$bestes_schiff = null;
foreach(eigenschaften::$wichtige_planeten_ids as $planeten_id) {
$planeten_infos = @mysql_query("SELECT x_pos, y_pos FROM skrupel_planeten WHERE id='$planeten_id'");
$planeten_infos = @mysql_fetch_array($planeten_infos);
$x_pos = $planeten_infos['x_pos'];
$y_pos = $planeten_infos['y_pos'];
foreach($taster_schiffe as $schiff) {
$strecke = floor(ki_basis::berechneStrecke($x_pos, $y_pos, $schiff['x'], $schiff['y']));
if($kleinste_strecke > $strecke) {
$bestes_schiff = $schiff;
$kleinste_strecke = $strecke;
}
}
}
$this->deaktiviereSpezialschiff($bestes_schiff['id'], 0);
}
/**
* Ermittelt alle aktiven Schiffe mit Strukturtaster und gibt diese als Array zurueck.
* returns: Die Datenbank-IDs aller Taster-Schiffe, die aktiv sind.
*/
function ermittleAktiveTasterSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$comp_id = eigenschaften::$comp_id;
$aktive_taster_Schiffe = @mysql_query("SELECT s.id, s.kox, s.koy FROM skrupel_schiffe s,
skrupel_ki_spezialschiffe k WHERE (s.id=k.schiff_id) AND (s.spiel='$spiel_id')
AND (k.spezial_mission=2) AND (k.aktiv=1) AND (s.besitzer='$comp_id')");
$aktive_schiffe = array();
while($taster_infos = @mysql_fetch_array($aktive_taster_Schiffe)) {
$aktive_schiffe[] = array('x'=>$taster_infos['kox'], 'y'=>$taster_infos['koy'],
'id'=>$taster_infos['id']);
}
$aktive_anzahl = count($aktive_schiffe);
$zaehler = 0;
if(count(eigenschaften::$schiff_ids) == 0) return null;
while($aktive_anzahl / count(eigenschaften::$schiff_ids) * 100
> eigenschaften::$spezialschiffe_infos->max_aktive_taster_prozent) {
if($zaehler == count($aktive_schiffe)) break;
$this->ermittleNaechstesTasterSchiff($aktive_schiffe);
$zaehler++;
$aktive_anzahl--;
}
$aktive_taster_Schiffe = @mysql_query("SELECT s.id FROM skrupel_schiffe s,
skrupel_ki_spezialschiffe k WHERE (s.id=k.schiff_id) AND (s.spiel='$spiel_id')
AND (k.spezial_mission=2) AND (k.aktiv=1) AND (s.besitzer='$comp_id')");
$aktive_schiffe = array();
while($taster_infos = @mysql_fetch_array($aktive_taster_Schiffe)) {
$aktive_schiffe[] = $taster_infos['id'];
}
return $aktive_schiffe;
}
/**
* Setzt einen Kurs fuer das uebergebene Taster-Schiff. Zuerst werden sichtbare feindliche Schiffe
* angesteuert. Sind keine Feind-Schiffe in Sicht, so wird ein Erkundungskurs gewaehlt.
* arguments: $taster_id - Die Datenbank-ID des Taster-Schiffes, das einen Kurs bekommen soll.
*/
function fliegeTasterSchiff($taster_id) {
$warp = $this->ermittleMaximumWarp($taster_id);
$schiff_pos = @mysql_query("SELECT kox, koy FROM skrupel_schiffe WHERE id='$subraum_id'");
$schiff_pos = @mysql_fetch_array($schiff_pos);
$x_start = $schiff_pos['kox'];
$y_start = $schiff_pos['koy'];
$gegner_ziel = null;
//Zuerst werden alle anderen sichtbaren Feindschiffe ueberprueft.
if(count(eigenschaften::$sichtbare_gegner_schiffe) > 0) {
$gegner_ziel = ki_basis::ermittleNahesZiel($taster_id, eigenschaften::$sichtbare_gegner_schiffe,
eigenschaften::$bekannte_wurmloch_daten);
}
if($gegner_ziel != null && $gegner_ziel['id'] != null && $gegner_ziel['id'] != 0) {
$this->fliegeSchiff($taster_id, $gegner_ziel['x'], $gegner_ziel['y'], $warp, $gegner_ziel['id']);
return;
}
$gegner_ziel = null;
//Da keine passenden Ziele gefunden wurden, wird nun ein Erkundungsziel gesetzt.
$gegner_ziel = $this->erkunde($taster_id);
$this->fliegeSchiff($taster_id, $gegner_ziel['x'], $gegner_ziel['y'], $warp, $gegner_ziel['id']);
}
/**
* Verwaltet alle Schiffe mit Strukturtaster.
*/
function verwalteTasterSchiffe() {
$spiel_id = eigenschaften::$spiel_id;
$this->updateTasterSchiffe();
$aktive_taster_ids = $this->ermittleAktiveTasterSchiffe();
if($aktive_taster_ids == null) return;
foreach($aktive_taster_ids as $taster_id) {
$this->setzeAggressivitaet($taster_id, 9);
$this->setzeTaktik($taster_id, 1);
@mysql_query("UPDATE skrupel_schiffe SET routing_status=0, routing_id='' WHERE id='$taster_id'");
$taster_infos = @mysql_query("SELECT kox, koy, lemin, status FROM skrupel_schiffe
WHERE id='$taster_id'");
$taster_infos = @mysql_fetch_array($taster_infos);
$warp = $this->ermittleMaximumWarp($taster_id);
$x_pos = $taster_infos['kox'];
$y_pos = $taster_infos['koy'];
$schiff_lemin = $taster_infos['lemin'];
$schiff_status = $taster_infos['status'];
$this->scanneUmgebung($taster_id);
if($this->reagiereAufWurmloch($taster_id)) continue;
if($schiff_status == 2) {
$planeten_infos = @mysql_query("SELECT id, besitzer, sternenbasis FROM skrupel_planeten
WHERE (spiel='$spiel_id') AND (x_pos='$x_pos') AND (y_pos='$y_pos')");
$planeten_infos = @mysql_fetch_array($planeten_infos);
$planeten_id = $planeten_infos['id'];
$planeten_besitzer = $planeten_infos['besitzer'];
$sternenbasis = $planeten_infos['sternenbasis'];
if($planeten_besitzer == eigenschaften::$comp_id)
$this->leereFrachtRaum($taster_id, $planeten_id);
$this->fliegeTasterSchiff($taster_id);
if($schiff_lemin == 0 && $sternenbasis == 2)
$this->tankeLeminStart($taster_id, $planeten_id);
else $this->tankeLemin($taster_id, $planeten_id);
continue;
}
$strecken_lemin = $this->ermittleStreckenVerbrauch($taster_id);
if($schiff_lemin < (eigenschaften::$jaeger_infos->min_jaeger_lemin_prozent * $strecken_lemin / 100)
&& $schiff_status != 2) {
$this->fliegeTanken($taster_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='$taster_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->fliegeTasterSchiff($taster_id);
}
}
/**
* Verwaltet die Spezialschiffe der KI.
*/
function verwalteSpezialSchiffe() {
$this->verwalteClusterSchiffe();
$this->verwalteQuarkSchiffe();
$this->verwalteCyberSchiffe();
$this->verwalteTasterSchiffe();
$this->verwalteTerraSchiffe(true);
$this->verwalteTerraSchiffe(false);
$this->verwalteViraleInvasionSchiffe();
}
}
?>