/** 
  * ctor
  * 
  * @return 
  */
 function battle()
 {
     try {
         $reporter = new battlereporter();
     } catch (Exception $e) {
         throw $e;
     }
     $battles = $this->get_battles();
     if (!is_array($battles)) {
         echo "AAAAAAAAARRRRRRGH KAMPF KAPUTT!";
         return false;
     }
     foreach ($battles as $battle) {
         list($sid, $pid) = $battle;
         try {
             $battlefield = new battlefield($sid, $pid);
             $battlefield->execute_battle();
             if (BATTLE_DESTROY) {
                 $battlefield->capture_units();
                 $battlefield->flee_units();
                 $battlefield->destroy_units();
                 // mop: lieber mehrmals ausführen....nicht, dass wir da nen segfault zwischendurch bekommen und dann die schiffe da bleiben
                 delete_empty_fleets();
                 $sth1 = mysql_query("delete from inf_transports where count<=0");
                 $sth1 = mysql_query("delete from infantery where count<=0");
                 if ($pid) {
                     $owner = get_uid_by_pid($pid);
                     // Mop: derjenigen mit den meisten einheiten erobert den planeten
                     // => idealsituation : der mit der prolligsten armee
                     $sth1 = mysql_query("select i.uid,sum(i.count) as total_count from infantery i left join infantery i2 on i.pid=i2.pid and i2.uid=" . $owner . " where i.pid=" . $pid . " and i.uid!=" . $owner . " and i2.uid is null group by i.uid order by total_count desc limit 1");
                     if (!$sth1) {
                         echo "invade kaputt =>" . $pid . "\n";
                     }
                     if (mysql_num_rows($sth1) != 0) {
                         list($new_owner) = mysql_fetch_row($sth1);
                         $sth1 = mysql_query("update planets set uid=" . $new_owner . " where id=" . $pid);
                         if (!$sth1) {
                             echo "invade kaputt 2 => " . $pid . " " . $new_owner . "\n";
                         }
                         $battlefield->set_invasion($new_owner);
                     }
                 }
             }
             $reporter->set_field($battlefield);
             $reporter->generate_reports();
         } catch (Exception $e) {
             echo $e->getMessage() . "\n";
         }
     }
 }
예제 #2
0
function covertops()
{
    $sth = mysql_query("select * from covertops as c,covertopsmissions as cm where c.time=1 and c.cid=cm.id");
    if (!$sth) {
        echo "Dtaabaser failure!";
    }
    while ($covertops = mysql_fetch_array($sth)) {
        $success = false;
        $sth1 = mysql_query("select sum(c.value) from covertopsupgrades as c,constructions as b,planets as p where p.id=b.pid and b.prod_id=c.prod_id and p.uid=" . $covertops["uid"]);
        if (!$sth1) {
            echo "Dast FDS!";
        }
        $f_co_upgrades = mysql_fetch_row($sth1);
        $sth1 = mysql_query("select count(id) from planets where uid=" . $covertops["uid"]);
        if (!$sth1) {
            echo "Datasbe failure!";
        }
        $f_planets = mysql_fetch_row($sth1);
        $f_rate = $f_co_upgrades[0] / $f_planets[0];
        //      echo("Friendly Rate: ".$f_rate."\n");
        if ($covertops["targettype"] == "I") {
            $imperium = $covertops["target"];
        } else {
            $sth1 = mysql_query("select uid from planets where id=" . $covertops["target"]);
            if (!$sth1) {
                echo "Datasbe failuer!";
            }
            $uid = mysql_fetch_array($sth1);
            $imperium = $uid["uid"];
        }
        $sth1 = mysql_query("select sum(population)/10000 from planets where uid=" . $imperium);
        if (!$sth1) {
            echo "Datasber faileur!";
        }
        $spies = mysql_fetch_row($sth1);
        $sth1 = mysql_query("select sum(count) from covertops where uid=" . $imperium);
        if (!$sth1) {
            echo "Database failuer!";
        }
        $used_spies = mysql_fetch_row($sth1);
        if ($used_spies[0] == NULL) {
            $rate = 100;
        } else {
            $rate = ($spies[0] - $used_spies[0]) / $spies[0] * 100;
        }
        //      echo("Grundrate: $rate\n");
        $sth1 = mysql_query("select sum(c.value) from covertopsupgrades as c,constructions as b,planets as p where p.id=b.pid and b.prod_id=c.prod_id and p.uid={$imperium}");
        if (!$sth1) {
            echo "Dtasabr failuer!";
        }
        $co_upgrades = mysql_fetch_row($sth1);
        $sth1 = mysql_query("select count(id) from planets where uid={$imperium}");
        if (!$sth1) {
            echo "Datasbe failure!";
        }
        $planets = mysql_fetch_row($sth1);
        $rate = $rate + $co_upgrades[0] / $planets[0];
        //      echo("Rate mit Upgrades: $rate\n");
        if ($rate <= 0) {
            $success = true;
        } else {
            mt_srand((double) microtime() * 1000000);
            $random = mt_rand(0, $rate - $f_rate);
            //  echo("Berechnung: Rate->$rate Frindly Rate->$f_rate Zufall->$random Chance->".$covertops["chance"]."\n");
            if ($random <= $covertops["chance"]) {
                $success = true;
            }
        }
        //      if ($success)
        //  echo("Success!\n");
        // DEBUG!
        //      $success=true;
        if ($success) {
            switch ($covertops["missiontype"]) {
                case "S":
                    define("MAX_STEAL", 25);
                    $sth1 = mysql_query("select f.prod_id,f.fid,f.count,p.typ, p.name, f.reload from fleet as f,production as p left join fleet_info as fi on fi.fid=f.fid where fi.uid={$imperium} and fi.mission=0 and fi.tpid=0 and fi.tsid=0 and fi.pid!=0 and f.prod_id=p.prod_id order by rand() limit 1");
                    if (!$sth1) {
                        echo "Datsbe faileur!";
                    }
                    if (mysql_num_rows($sth1) > 0) {
                        $fleet = mysql_fetch_array($sth1);
                        $sth2 = mysql_query("select p.id,p.sid from planets as p,users as u where p.id=u.homeworld and u.id=" . $covertops["uid"]);
                        if (!$sth2) {
                            echo "Dtabaser faileur!";
                        }
                        $home = mysql_fetch_array($sth2);
                        switch ($fleet["typ"]) {
                            case "L":
                                $multiplikator = 1;
                                break;
                            case "M":
                                $multiplikator = 5;
                                break;
                            case "H":
                                $multiplikator = 10;
                                break;
                        }
                        if ($multiplikator * $fleet["count"] > MAX_STEAL) {
                            $fleet["count"] = floor(MAX_STEAL / $multiplikator);
                        }
                        $new_fleet = new fleet();
                        $new_fleet->add_ships_arr(array($fleet["prod_id"] => array($fleet["count"], $fleet["reload"])));
                        $new_fleet->uid = $covertops["uid"];
                        $new_fleet->pid = $home["id"];
                        $new_fleet->sid = $home["sid"];
                        $new_fleet->create_fleet();
                        $sth2 = mysql_query("update fleet set count=count-" . $fleet["count"] . " where fid=" . $fleet["fid"] . " and prod_id=" . $fleet["prod_id"]);
                        delete_empty_fleets();
                        ticker($covertops["uid"], "You have stolen " . $fleet["count"] . " " . $fleet["name"], "s");
                        ticker($imperium, $fleet["count"] . " " . $fleet["name"] . " vanished from your radar!", "s");
                    } else {
                        ticker($covertops["uid"], "Your spies didn't find any ships. The target imperium doesn't have any!", "s");
                    }
                    break;
                case "B":
                    $sth1 = mysql_query("select b.prod_id,b.pid,pl.name,p.name as pname from planets as pl,production as p,constructions as b where b.prod_id=p.prod_id and b.pid=pl.id and pl.uid={$imperium} order by rand()");
                    if (!$sth1) {
                        echo "Database failoer!";
                    }
                    if (mysql_num_rows($sth1) > 0) {
                        $building = mysql_fetch_array($sth1);
                        $sth1 = mysql_query("delete from constructions where prod_id=" . $building["prod_id"] . " and pid=" . $building["pid"]);
                        if (!$sth1) {
                            echo "DDFatabf failur!";
                        }
                        if ($building["name"] == "Unnamed") {
                            $building["name"] = get_planetname("pid");
                        }
                        ticker($covertops["uid"], "Your spies destroyed the " . $building["pname"] . " on planet " . $building["name"] . "!", "s");
                        ticker($imperium, "The " . $building["pname"] . " on planet " . $building["name"] . " was destroyed misteriously!", "s");
                    }
                    break;
                case "F":
                    $sth1 = mysql_query("select f.prod_id,f.fid from fleet as f,fleet_info as fi where fi.uid={$imperium} and fi.fid=f.fid");
                    if (!$sth1) {
                        echo "Datsbe faileur!";
                    }
                    if (mysql_num_rows($sth1) > 0) {
                        if (mysql_num_rows($sth1) == 1) {
                            $random = 0;
                        } else {
                            mt_srand((double) microtime() * 1000000);
                            $random = mt_rand(0, mysql_num_rows($sth1) - 1);
                        }
                        for ($i = 0; $i <= $random; $i++) {
                            $fleet = mysql_fetch_array($sth1);
                        }
                        $sth2 = mysql_query("delete from fleet where fid=" . $fleet["fid"] . " and prod_id=" . $fleet["prod_id"]);
                        delete_empty_fleets();
                        ticker($covertops["uid"], "You spies destroyed some ships!", "s");
                        ticker($imperium, "Enemy spies destroyed some of your ships!", "s");
                    } else {
                        ticker($covertops["uid"], "Your spies didn't find any ships. The target imperium doesn't have any!", "s");
                    }
                    break;
                case "N":
                    $sth1 = mysql_query("select * from ticker where uid={$imperium}");
                    if (!$sth1) {
                        echo "Database failure!";
                    }
                    while ($ticker = mysql_fetch_array($sth1)) {
                        if ($end = strrpos($ticker["text"], "*")) {
                            $text = substr($ticker["text"], $end + 1);
                        } else {
                            $text = $ticker["text"];
                        }
                        $mail = $mail . "\n" . $text;
                    }
                    if (mysql_num_rows($sth1) == 0) {
                        $mail = "This Imperium doesn't have any news at the moment!";
                    }
                    $sth1 = mysql_query("select imperium from users where id=" . $imperium);
                    if (!$sth1) {
                        echo "Datsabe failure!";
                    }
                    $imp_name = mysql_fetch_array($sth1);
                    mail_to_uid($covertops["uid"], "News of " . $imp_name["imperium"], $mail);
                    ticker($covertops["uid"], "Your spies have successfully hacked a news network. Check Mails.", "s");
                    break;
                case "M":
                    $mail = "";
                    $sth1 = mysql_query("select fi.*,f.prod_id,f.count,f.reload,p.name,s.x,s.y  from fleet as f,production as p,systems as s left join fleet_info as fi on fi.fid=f.fid and fi.uid={$imperium} where p.prod_id=f.prod_id and s.id=fi.sid order by fid");
                    if (mysql_num_rows($sth1) == 0) {
                        $mail = "Target imperium doesn't have any fleets";
                    } else {
                        while ($part_fleet = mysql_fetch_array($sth1)) {
                            if ($part_fleet["fid"] != $fid_old) {
                                $fid_old = $part_fleet["fid"];
                                $counter++;
                            }
                            $fleet[$counter][] = $part_fleet;
                        }
                        $counter = 1;
                        for ($i = 1; $i <= sizeof($fleet); $i++) {
                            $mail = $mail . "Fleet " . $counter++ . "<br>";
                            $mail = $mail . "<table>";
                            $head_array = "";
                            $text_arr = "";
                            $prod_arr = "";
                            for ($j = 0; $j < sizeof($fleet[$i]); $j++) {
                                $head_array[$j] = $fleet[$i][$j]["name"];
                                $text_arr[$j] = $fleet[$i][$j]["count"];
                            }
                            switch ($fleet[$i][0]["mission"]) {
                                case "0":
                                    $mission_text["a"] = "Defending";
                                    $mission_text["b"] = "defend";
                                    break;
                                case "1":
                                    $mission_text["a"] = "Attacking";
                                    $mission_text["b"] = "attack";
                                    break;
                                case "4":
                                    $mission_text["a"] = "";
                                    $mission_text["b"] = "colonize";
                                    break;
                            }
                            if ($fleet[$i][0]["pid"] != 0 and $fleet[$i][0]["tsid"] == 0 and $fleet[$i][0]["tpid"] == 0) {
                                $planetname = get_planetname($fleet[$i][0]["pid"]);
                                $mission = $mission_text["a"] . " planet " . $planetname;
                            }
                            if ($fleet[$i][0]["pid"] == 0 and $fleet[$i][0]["tsid"] == 0 and $fleet[$i][0]["tpid"] == 0) {
                                $systemname = get_systemname($fleet[$i][0]["sid"]);
                                $mission = $mission_text["a"] . " system " . $systemname;
                            }
                            if ($fleet[$i][0]["tsid"] != 0 and $fleet[$i][0]["tpid"] == 0) {
                                $systemname = get_systemname($fleet[$i][0]["tsid"]);
                                $mission = "On its way to " . $mission_text["b"] . " system " . $systemname;
                            }
                            if ($fleet[$i][0]["tsid"] != 0 and $fleet[$i][0]["tpid"] != 0) {
                                $planetname = get_planetname($fleet[$i][0]["tpid"]);
                                $mission = "On its way to " . $mission_text["b"] . " planet " . $planetname;
                            }
                            $text_arr[] = $mission;
                            $head_array[] = "Mission";
                            reset($head_array);
                            $mail = $mail . "<tr>";
                            while (list($key, $dummy) = each($head_array)) {
                                //echo($dummy."\n");
                                $mail = $mail . "<th>{$dummy}</th>";
                            }
                            $mail = $mail . "</tr>";
                            reset($text_arr);
                            $mail = $mail . "<tr>";
                            while (list($key, $dummy) = each($text_arr)) {
                                echo $key . " - " . $dummy . "\n";
                                $mail = $mail . "<td>{$dummy}</td>";
                            }
                            $mail = $mail . "</tr>";
                            $mail = $mail . "</table>";
                        }
                    }
                    $sth1 = mysql_query("select imperium from users where id=" . $imperium);
                    if (!$sth1) {
                        echo "Datsabe failure!";
                    }
                    $imp_name = mysql_fetch_array($sth1);
                    mail_to_uid($covertops["uid"], "Military overview of " . $imp_name["imperium"], $mail);
                    ticker($covertops["uid"], "Your spies have successfully hacked a military network. Check Mails.", "s");
                    break;
                case "I":
                    $mail = "";
                    $sth1 = mysql_query("select c.target,cm.descr,cm.targettype from covertops as c,covertopsmissions as cm where uid={$imperium} and cm.id=c.cid");
                    if (!$sth1) {
                        echo "Databasdf faileru!";
                    }
                    while ($missions = mysql_fetch_array($sth1)) {
                        if ($missions["targettype"] == "I") {
                            $sth2 = mysql_query("select imperium from users where id=" . $missions["target"]);
                            if (!$sth2) {
                                echo "Datasbae failuer!";
                            }
                            $imp_tname = mysql_fetch_array($sth2);
                            $target = "Imperium " . $imp_tname["imperium"];
                        } else {
                            $planetname = get_planetname($missions["target"]);
                            $target = "Planet " . $planetname;
                        }
                        $mail = $mail . "\n" . $missions["descr"] . " Target :" . $target;
                    }
                    $sth1 = mysql_query("select imperium from users where id=" . $imperium);
                    if (!$sth1) {
                        echo "Datsabe failure!";
                    }
                    $imp_name = mysql_fetch_array($sth1);
                    mail_to_uid($covertops["uid"], "CovertOps overview of " . $imp_name["imperium"], $mail);
                    break;
                case "C":
                    $sth1 = mysql_query("select population from planets where id=" . $covertops["target"]);
                    if (!$sth1) {
                        echo "Datasb faileur!";
                    }
                    $pop = mysql_fetch_array($sth1);
                    if ($pop["population"] > 10000000) {
                        mt_srand((double) microtime() * 1000000);
                        $killed = mt_rand(5000000, 8000000);
                    } else {
                        mt_srand((double) microtime() * 1000000);
                        $killed = round($pop["population"] * (mt_rand(30, 80) / 100));
                    }
                    $planetname = get_planetname($covertops["target"]);
                    $sth1 = mysql_query("update planets set population=population-{$killed} where id=" . $covertops["target"]);
                    if (!$sth1) {
                        echo "udFH failuewr!";
                    }
                    ticker($covertops["uid"], "Your spies launched a nuclear assault on Planet " . $planetname . " {$killed} were killed!", "s");
                    $sth1 = mysql_query("select uid from planets where id=" . $covertops["target"]);
                    if (!$sth1) {
                        echo "Database dfasi!";
                    }
                    $uid_target = mysql_fetch_array($sth1);
                    ticker($uid_target["uid"], "Enemy spies launched a deadly nuclear attack agaonst Planet " . $planetname . " {$killed} were killed!", "s");
                    break;
                case "V":
                    $sth1 = mysql_query("select population from planets where id=" . $covertops["target"]);
                    if (!$sth1) {
                        echo "Datasb faileur!";
                    }
                    $pop = mysql_fetch_array($sth1);
                    mt_srand((double) microtime() * 1000000);
                    $killed = round($pop["population"] * (mt_rand(30, 80) / 100));
                    $planetname = get_planetname($covertops["target"]);
                    $sth1 = mysql_query("update planets set population=population-{$killed} where id=" . $covertops["target"]);
                    if (!$sth1) {
                        echo "udFH failuewr!";
                    }
                    ticker($covertops["uid"], "Your spies deployed a deadly virus on Planet " . $planetname . " {$killed} were killed!", "s");
                    $sth1 = mysql_query("select uid from planets where id=" . $covertops["target"]);
                    if (!$sth1) {
                        echo "Database dfasi!";
                    }
                    $uid_target = mysql_fetch_array($sth1);
                    ticker($uid_target["uid"], "Enemy spies deployed a deadly virus on Planet " . $planetname . " {$killed} were killed!", "s");
                    break;
                case "A":
                    $sth1 = mysql_query("select imperium from users where id={$imperium}");
                    if (!$sth1) {
                        echo "Databsae faileru!";
                    }
                    $imp_name = mysql_fetch_array($sth1);
                    $sth1 = mysql_query("select id,name,value from admirals where uid={$imperium} order by rand()");
                    if (!$sth1) {
                        echo "Dtzasa faielru!";
                    }
                    if (mysql_num_rows($sth1) == 0) {
                        ticker($covertops["uid"], "Your spies didn't find an admiral of Imperium " . $imp_name["imperium"] . "!", "s");
                        return 0;
                    }
                    $admiral = mysql_fetch_array($sth1);
                    $sth1 = mysql_query("delete from admirals where id=" . $admiral["id"]);
                    if (!$sth1) {
                        echo "Dzasakhbd faileur!";
                    }
                    ticker($covertops["uid"], "Your spies killed Admiral " . $admiral["name"] . " of Imperium " . $imp_name["imperium"] . "!", "s");
                    ticker($imperium, "Admiral " . $admiral["name"] . " was assasinated!", "w");
                    break;
                case "T":
                    $sth1 = mysql_query("select imperium from users where id={$imperium}");
                    if (!$sth1) {
                        echo "Databsae faileru!";
                    }
                    $imp_name = mysql_fetch_array($sth1);
                    $sth1 = mysql_query("select sid from tradestations where uid={$imperium}");
                    if (!$sth1) {
                        echo "Dtasgha faij!";
                    }
                    if (mysql_num_rows($sth1) == 0) {
                        ticker($covertops["uid"], $imp_name["imperium"] . " doesn't have a tradestation. Mission aborted.", "w");
                    }
                    list($stationid) = mysql_fetch_row($sth1);
                    $sth1 = mysql_query("update tradestations set fail_chance=fail_chance+(rand()*10+1) where sid={$stationid}");
                    if (!$sth1) {
                        echo "Datsbae fauO!";
                    }
                    ticker($covertops["uid"], "Your spies have successfully sabotaged " . $imp_name["imperium"] . "'s tradestation", "w");
                    break;
            }
        } else {
            mt_srand((double) microtime() * 10000000);
            $random = mt_rand(0, 100);
            if ($random <= 50) {
                if ($random <= 20) {
                    $sth1 = mysql_query("select name,imperium from users where id=" . $covertops["uid"]);
                    if (!$sth1) {
                        echo "Dtas afa!";
                    }
                    $att_name = mysql_fetch_array($sth1);
                    ticker($imperium, "Your spies intercepted some enemy spies. Their leader is " . $att_name["name"] . " (" . $att_name["imperium"] . ")!", "s");
                } else {
                    ticker($imperium, "Your spies intercepted some enemy spies!", "s");
                }
            }
        }
    }
    $sth = mysql_query("delete from covertops where time<=1");
    if (!$sth) {
        echo "Dtabas faislru!";
    }
    $sth = mysql_query("update covertops set time=time-'1'");
    if (!$sth) {
        echo "Dtasbwer failure!";
    }
}
function create($request)
{
    global $uid;
    $doc = domxml_new_doc("1.0");
    $rootElem = $doc->create_element("SR_REQUEST");
    $create_arr = parse_fleetlist($request);
    $new_inf = array();
    $i = 0;
    $fleets = array();
    $new_fleet = new fleet();
    $new_elem = $doc->create_element("SR_FLEET");
    foreach ($create_arr as $fid => $data) {
        $fleet_elem = $doc->create_element("SR_FLEET");
        $fleet_elem->set_attribute("fid", $fid);
        $fleets[$i] = new fleet($fid);
        if ($i == 0) {
            $new_fleet->pid = $fleets[$i]->pid;
            $new_fleet->sid = $fleets[$i]->sid;
            $new_fleet->mission = $fleets[$i]->mission;
            $new_fleet->tpid = $fleets[$i]->tpid;
            $new_fleet->tsid = $fleets[$i]->tpid;
            $new_fleet->milminister = $fleets[$i]->milminister;
            $new_fleet->uid = $fleets[$i]->uid;
            $pid = $fleets[$i]->pid;
            $sid = $fleets[$i]->sid;
        }
        if ($fleets[$i]->pid != $pid || $fleets[$i]->sid != $sid || $fleets[$i]->uid != $uid) {
            return false;
        }
        $infantery = get_fleet_infantery($fid);
        $tmp_new_inf = transfer_ships($fleets[$i], $new_fleet, $doc, $fleet_elem, $new_elem, $infantery, $data);
        foreach ($tmp_new_inf as $prod_id => $count) {
            $new_inf[$prod_id] += $count;
        }
        $rootElem->append_child($fleet_elem);
        $i++;
    }
    if (!$new_fleet->create_fleet()) {
        echo "Please select some ships";
        return false;
    }
    $new_elem->set_attribute("fid", $new_fleet->fid);
    //$rootElem->append_child($new_elem);
    for ($i = 0; $i < sizeof($fleets); $i++) {
        $fleets[$i]->update_all_prod_ids();
    }
    add_infantery($new_fleet->fid, $new_inf);
    delete_empty_fleets();
    $sth = mysql_query("delete from inf_transports where count=0");
    if (!$sth) {
        return 0;
    }
    $doc->append_child($rootElem);
    // mop: route muss dupliziert werden, sonst ist alles kaputt
    $sth = mysql_query("replace into routes (fid,route) select " . $new_fleet->fid . ",route from routes where fid=" . $fleets[0]->fid);
    if (!$sth) {
        return false;
    }
    echo $doc->dump_mem();
}
 /** 
  * führe den transfer durch 
  * 
  * @return 
  */
 function execute()
 {
     $new_inf = array();
     foreach ($this->source_data as $fid => $data) {
         // mop: quellflotte is nicht da, wo die zielflotte ist...schiffe beamen geht nicht ;)
         if ($this->source_fleets[$fid]->pid != $this->target_fleet->pid || $this->source_fleets[$fid]->sid != $this->target_fleet->sid) {
             continue;
         }
         // mop: die inf holen
         $infantery = $this->get_fleet_infantery($fid);
         $tmp_new_inf = $this->transfer_ships($fid, $data, $infantery);
         foreach ($tmp_new_inf as $prod_id => $count) {
             $new_inf[$prod_id] += $count;
         }
     }
     // mop: alle flotten updaten
     $this->target_fleet->update_all_prod_ids();
     $this->add_infantery($this->target_fleet->fid, $new_inf);
     foreach ($this->source_fleets as $fid => $fleet) {
         $this->source_fleets[$fid]->update_all_prod_ids();
     }
     delete_empty_fleets();
     $sth = mysql_query("delete from inf_transports where count=0");
     if (!$sth) {
         return 0;
     }
 }