function check()
{
    global $uid;
    global $fleet;
    global $capacity;
    $fid = $_GET["fid"];
    $pid = $_GET["pid"];
    // 1. check ob die flotte eigene bzw. einem zugeordnete flotte ist
    if (!($fleet->uid == $uid || $fleet->milminister == 1 && $uid == get_milminister(get_alliance($uid)))) {
        show_svg_message("Darn, thats not your fleet!");
        return false;
    }
    // 2.check ob die flotte transporter hat
    if (!$capacity) {
        show_svg_message("Doh! This fleet can't hold any groundforces");
        return false;
    }
    // 3. check ob flotte im orbit des planeten ist
    if ($fleet->pid != $pid) {
        show_svg_message("There's no beaming! :P");
        return false;
    }
    // 4. check ob user infantry auf dem planeten hat
    $sth = mysql_query("SELECT 1 FROM infantery i,production p WHERE i.pid=" . $fleet->pid . " and i.prod_id=p.prod_id and p.name!='Militia' and i.uid=" . $uid);
    if (!$sth || mysql_num_rows($sth) == 0) {
        // 4.5 check ob der Planet zu der flotte gehört
        if (!is_allied($fleet->uid, get_uid_by_pid($pid))) {
            show_svg_message("Kidnapping forces ain't looking like a good idea to me!");
            return false;
        }
    }
    return true;
}
 /** 
  * 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";
         }
     }
 }
function combat_get_conqueror($pid)
{
    $retval = false;
    if ($pid > 0) {
        $puid = get_uid_by_pid($pid);
        $paid = get_aid_by_uid($puid);
        if (!$paid) {
            return false;
        }
    } elseif ($pid == 0 || !$pid) {
        return false;
    } else {
        $puid = -1;
        $paid = -1;
    }
    if ($paid > 0) {
        $enemies = get_enemy_aids($puid);
    } else {
        $enemies[] = -2;
    }
    if (sizeof($enemies) > 0) {
        $query = $GLOBALS["db"]->query("SELECT uid, SUM((susebloom+mopgas+erkunum+energy+metal+gortium)*count) \n  AS inf_power FROM combat INNER JOIN production USING (prod_id) WHERE position='P' AND aid \n  IN (" . implode(",", $enemies) . ") AND killed_by IS NULL GROUP BY uid \n  HAVING inf_power>0 ORDER BY inf_power DESC LIMIT 1") or die($GLOBALS["db"]->error);
        if ($query->num_rows > 0) {
            list($bestenemy, $bla) = $query->fetch_row();
        }
    }
    $query = $GLOBALS["db"]->query("SELECT SUM(count) AS CountSum FROM combat WHERE position='P' AND\naid={$paid} AND size<>'H'") or die($GLOBALS["db"]->error);
    list($result) = $query->fetch_row();
    if ($result == 0) {
        // Uh-Oh, keine Verteidiger mehr! Angreifer denn?
        if ($bestenemy) {
            $retval = $bestenemy;
        }
    } else {
        // Es sind noch Verteidiger da, waren denn auch Angreifer da?
        if ($bestenemy) {
            $retval = -100;
        }
    }
    return $retval;
}
function production()
{
    // Orbital Start
    $sth = mysql_query("select * from o_production where time=1 and pos=1");
    if (!$sth) {
        echo "Database failure!\n";
        return 0;
    }
    while ($orbital = mysql_fetch_array($sth)) {
        $sth1 = mysql_query("insert into constructions (pid,prod_id,type) values ('" . $orbital["planet_id"] . "','" . $orbital["prod_id"] . "',1)");
        if (!$sth1) {
            echo "Database failure!";
        }
        $sth1 = mysql_query("select uid from planets where id=" . $orbital["planet_id"]);
        if (!$sth1) {
            echo "Datasbe failure!";
        }
        list($uid) = mysql_fetch_row($sth1);
        $sth1 = mysql_query("select name from production where prod_id=" . $orbital["prod_id"]);
        if (!$sth1) {
            echo "Database failure!";
        }
        $blub = mysql_fetch_array($sth1);
        $planetname = get_planetname($orbital["planet_id"]);
        ticker($uid, "*lproduction.php?act=build&pid=" . $orbital["planet_id"] . "*" . $planetname . ": " . $blub["name"] . " in orbit constructed.", "w");
        $sth1 = mysql_query("delete from o_production where planet_id='" . $orbital["planet_id"] . "' and prod_id='" . $orbital["prod_id"] . "'");
        if (!$sth1) {
            echo "Database failure!";
            return 0;
        }
        $sth1 = mysql_query("select typ from production where prod_id=" . $orbital["prod_id"] . " and typ='R'");
        if (mysql_num_rows($sth1) > 0) {
            $sth1 = mysql_query("select uid from planets where id=" . $orbital["planet_id"]);
            list($uid) = mysql_fetch_array($sth1);
            $sth1 = mysql_query("delete from tradestations where uid={$uid}");
            $sth1 = mysql_query("insert into tradestations (metal,energy,mopgas,erkunum,gortium,susebloom,uid,pid) values ('0','0','0','0','0','0','{$uid}','" . $orbital["planet_id"] . "')");
        }
        $sth1 = mysql_query("select prod_id from production where prod_id='" . $orbital["prod_id"] . "' and special='S'");
        if (!$sth1) {
            echo "Database failure!";
        }
        if (mysql_num_rows($sth1) > 0) {
            $sth1 = mysql_query("select sid from planets where id=" . $orbital["planet_id"]);
            if (!$sth1) {
                echo "Database failure!";
            }
            $sid = mysql_fetch_row($sth1);
            $sth1 = mysql_query("select * from jumpgatevalues where prod_id=" . $orbital["prod_id"]);
            if (!$sth1) {
                echo "Databaser failure!";
            }
            if (mysql_num_rows($sth1) > 0) {
                $password = crypt(md5(uniqid(mt_rand())));
                $sth1 = mysql_query("insert into jumpgates (prod_id,password,sid,pid) values ('" . $orbital["prod_id"] . "','" . $password . "','" . $sid[0] . "','" . $orbital["planet_id"] . "')");
                if (!$sth1) {
                    echo "Dtasabser failuert!";
                }
                $sth1 = mysql_query("select uid from planets where id=" . $orbital["planet_id"]);
                if (!$sth1) {
                    echo "Dtasber faileu8r!";
                }
                $uid = mysql_fetch_row($sth1);
                mail_to_uid($uid[0], "Password for your jumpgate in system " . $sid[0], $password);
            }
        }
    }
    $sth = mysql_query("update o_production set time=time-'1' where time>1 and pos=1");
    if (!$sth) {
        echo "Database failure!";
        return 0;
    }
    $sth = mysql_query("select distinct p1.planet_id from o_production as p1 left join o_production as p2 on p2.pos=1 and p2.planet_id=p1.planet_id where p1.pos!=1 and p2.pos is NULL");
    if (!$sth) {
        echo "Database failure!";
    }
    while ($pids = mysql_fetch_row($sth)) {
        $next_prod_id = next_in_queue(0, $pids[0]);
        if ($next_prod_id) {
            $uid = get_uid_by_pid($pids[0]);
            if (has_ressources($uid, $next_prod_id)) {
                $sth1 = mysql_query("update o_production set pos=1 where planet_id=" . $pids[0] . " and prod_id={$next_prod_id}");
                $sth1 = mysql_query("select metal,energy,mopgas,erkunum,gortium,susebloom from production where prod_id={$next_prod_id}");
                list($metal, $energy, $mopgas, $erkunum, $gortium, $susebloom) = mysql_fetch_row($sth1);
                $sth1 = mysql_query("update ressources set metal=metal-{$metal},energy=energy-{$energy},mopgas=mopgas-{$mopgas},erkunum=erkunum-{$erkunum},gortium=gortium-{$gortium},susebloom=susebloom-{$susebloom} where uid={$uid}");
            }
        }
    }
    // Orbital Ende
    // Planet production
    $sth = mysql_query("select * from p_production where time=1 and pos=1");
    if (!$sth) {
        echo "Database failure!\n";
        return 0;
    }
    while ($buildings = mysql_fetch_array($sth)) {
        $sth1 = mysql_query("select uid,name from planets where id=" . $buildings["planet_id"]);
        if (!$sth1) {
            echo "Database failure!";
        }
        $uid = mysql_fetch_array($sth1);
        if ($uid["name"] == "Unnamed") {
            $uid["name"] = get_planetname($buildings["planet_id"]);
        }
        $sth1 = mysql_query("select name from production where prod_id=" . $buildings["prod_id"]);
        // Schilde einbauen
        list($value, $shield) = dselect("CONV(SUBSTRING(special FROM 2),10,10), shield", "shipvalues", "special LIKE 'H%' AND prod_id=" . $buildings["prod_id"]);
        if ($value) {
            $janne = mysql_query("REPLACE INTO planetary_shields (pid, prod_id, value, max_value, regeneration, \n        regeneration_bonus) VALUES (" . $buildings["planet_id"] . ", " . $buildings["prod_id"] . ", {$shield}, {$shield},\n          {$value}, 0)");
        }
        if (!$sth1) {
            echo "Database failure!";
        }
        $blub = mysql_fetch_array($sth1);
        ticker($uid["uid"], "*lproduction.php?act=build&pid=" . $buildings["planet_id"] . "*" . $uid["name"] . ": " . $blub["name"] . " constructed.", "w");
        $sth1 = mysql_query("insert into constructions (pid,prod_id,type) values ('" . $buildings["planet_id"] . "','" . $buildings["prod_id"] . "',0)");
        if (!$sth1) {
            echo "Database failure! (CREATING BUILDING ON PLANET)";
        }
        $sth1 = mysql_query("delete from p_production where planet_id='" . $buildings["planet_id"] . "' and prod_id='" . $buildings["prod_id"] . "'");
        if (!$sth1) {
            echo "Database failure! (DELETING PLANETAR PRODUCTION)";
        }
    }
    $sth = mysql_query("update p_production set time=time-'1' where time>1 and pos=1");
    if (!$sth) {
        echo "Database failure!";
        return 0;
    }
    $sth = mysql_query("select distinct p1.planet_id from p_production as p1 left join p_production as p2 on p2.pos=1 and p2.planet_id=p1.planet_id where p1.pos!=1 and p2.pos is NULL");
    if (!$sth) {
        echo "Database failure!";
    }
    while ($pids = mysql_fetch_row($sth)) {
        $next_prod_id = next_in_queue(1, $pids[0]);
        if ($next_prod_id) {
            $uid = get_uid_by_pid($pids[0]);
            if (has_ressources($uid, $next_prod_id)) {
                $sth1 = mysql_query("update p_production set pos=1 where planet_id=" . $pids[0] . " and prod_id={$next_prod_id}");
                $sth1 = mysql_query("select metal,energy,mopgas,erkunum,gortium,susebloom from production where prod_id={$next_prod_id}");
                list($metal, $energy, $mopgas, $erkunum, $gortium, $susebloom) = mysql_fetch_row($sth1);
                $sth1 = mysql_query("update ressources set metal=metal-{$metal},energy=energy-{$energy},mopgas=mopgas-{$mopgas},erkunum=erkunum-{$erkunum},gortium=gortium-{$gortium},susebloom=susebloom-{$susebloom} where uid={$uid}");
            }
        }
    }
    // Planetar Ende
    // Fleet Production Start
    $uids = array();
    $sth = mysql_query("select s.planet_id,s.prod_id,s.count,s.time,s.priority,\nr.uid,r.metal as rmetal,r.energy as renergy,r.mopgas as rmopgas,r.erkunum as rerkunum,r.gortium as rgortium,r.susebloom as rsusebloom,\npl.id,p.metal,p.energy,p.mopgas,p.erkunum,p.gortium,p.susebloom,\nsum(ps.tonnage) as slots,\nsv.tonnage,\np.com_time\nfrom s_production s,planets pl,production p,ressources r,production_slots ps,constructions c,shipvalues sv where s.planet_id=pl.id\nand s.prod_id=p.prod_id\nand p.prod_id=sv.prod_id\nand ps.prod_id=c.prod_id\nand c.pid=pl.id\nand r.uid=pl.uid\ngroup by s.planet_id,s.prod_id,s.time\norder by pl.uid,s.priority DESC,s.time DESC");
    if (!$sth) {
        echo "ERR::GET S_PRODUCTION";
    } else {
        while ($data = mysql_fetch_assoc($sth)) {
            if (!$uids[$data["uid"]]) {
                $uids[$data["uid"]] = array("production_slots" => $data["slots"], "ressources" => array("metal" => $data["rmetal"], "energy" => $data["renergy"], "mopgas" => $data["rmopgas"], "erkunum" => $data["rerkunum"], "gortium" => $data["rgortium"], "susebloom" => $data["rsusebloom"]));
            }
            // mop: maximale anzahl der produzierbaren schiffe ermitteln (durch slots limitiert)
            $prod_count = floor($uids[$data["uid"]]["production_slots"] / $data["tonnage"]);
            $real_count = min($data["count"], $prod_count);
            if ($real_count > 0) {
                // mop: jetzt koenen uns nur noch die ressourcen aufhalten
                foreach (array("metal", "energy", "mopgas", "erkunum", "gortium", "susebloom") as $res) {
                    if ($data[$res]) {
                        $real_count = min($real_count, floor($uids[$data["uid"]]["ressources"][$res] / ceil($data[$res] / $data["com_time"])));
                    }
                }
                if ($real_count > 0) {
                    // mop: alle schiffe produzierbar?
                    if ($real_count == $data["count"]) {
                        // mop: alles easy
                        $sth1 = mysql_query("update s_production s,ressources r set s.time=s.time+1,\n                r.metal=r.metal-" . ceil($real_count * $data["metal"] / $data["com_time"]) . ",\n                r.energy=r.energy-" . ceil($real_count * $data["energy"] / $data["com_time"]) . ",\n                r.mopgas=r.mopgas-" . ceil($real_count * $data["mopgas"] / $data["com_time"]) . ",\n                r.erkunum=r.erkunum-" . ceil($real_count * $data["erkunum"] / $data["com_time"]) . ",\n                r.gortium=r.gortium-" . ceil($real_count * $data["gortium"] / $data["com_time"]) . ",\n                r.susebloom=r.susebloom-" . ceil($real_count * $data["susebloom"] / $data["com_time"]) . "\n                where s.prod_id=" . $data["prod_id"] . " and s.time=" . $data["time"] . " and s.planet_id=" . $data["planet_id"] . " and r.uid=" . $data["uid"]);
                        if (!$sth1) {
                            echo "ERR::UPDATE S_PROD 1";
                        }
                    } else {
                        // mop: stress...aufsplitten
                        $sth1 = mysql_query("insert into s_production set prod_id=" . $data["prod_id"] . ",planet_id=" . $data["planet_id"] . ",count=" . $real_count . ",time=" . ($data["time"] + 1) . ",priority=" . $data["priority"] . " on duplicate key update count=count+" . $real_count . ",priority=" . $data["priority"]);
                        if (!$sth1) {
                            echo "ERR::INSERT SPLIT S_PROD";
                        }
                        // mop: update des rests und der ressourcen
                        $sth1 = mysql_query("update s_production s,ressources r set s.count=s.count-" . $real_count . ",\n                r.metal=r.metal-" . ceil($real_count * $data["metal"] / $data["com_time"]) . ",\n                r.energy=r.energy-" . ceil($real_count * $data["energy"] / $data["com_time"]) . ",\n                r.mopgas=r.mopgas-" . ceil($real_count * $data["mopgas"] / $data["com_time"]) . ",\n                r.erkunum=r.erkunum-" . ceil($real_count * $data["erkunum"] / $data["com_time"]) . ",\n                r.gortium=r.gortium-" . ceil($real_count * $data["gortium"] / $data["com_time"]) . ",\n                r.susebloom=r.susebloom-" . ceil($real_count * $data["susebloom"] / $data["com_time"]) . "\n                where s.prod_id=" . $data["prod_id"] . " and s.time=" . $data["time"] . " and s.planet_id=" . $data["planet_id"] . " and r.uid=" . $data["uid"]);
                        if (!$sth1) {
                            echo "ERR::UPDATE REST S_PROD";
                        }
                    }
                    $uids[$data["uid"]]["production_slots"] -= $real_count * $data["tonnage"];
                    foreach (array("metal", "energy", "mopgas", "erkunum", "gortium", "susebloom") as $res) {
                        $uids[$data["uid"]]["ressources"][$res] -= ceil($real_count * $data[$res] / $data["com_time"]);
                    }
                }
            }
        }
    }
    // mop: rundungsfehler fuer die dinger, die jetzt fertig werden ausgleichen
    $fragments = array();
    foreach (array("metal", "energy", "mopgas", "erkunum", "gortium", "susebloom") as $res) {
        $fragments[] = "r." . $res . "=r." . $res . "+ceil(p." . $res . "*s.count/p.com_time)*p.com_time-p." . $res . "*s.count";
    }
    $sth = mysql_query("update s_production s,production p,planets pl,ressources r set " . implode($fragments, ",") . " where r.uid=pl.uid and pl.id=s.planet_id and s.prod_id=p.prod_id and p.com_time-s.time=0");
    if (!$sth) {
        echo "ERR::CORRECT CEILINGS\n";
    }
    $sth = mysql_query("select * from s_production sp,production p where p.com_time-sp.time=0 and sp.prod_id=p.prod_id");
    if (!$sth) {
        echo "Database failure!\n";
        return 0;
    }
    while ($ships = mysql_fetch_assoc($sth)) {
        $sth1 = mysql_query("select uid,name from planets where id=" . $ships["planet_id"]);
        if (!$sth1) {
            echo "Datasbe failure!";
        }
        $uid = mysql_fetch_assoc($sth1);
        ticker($uid["uid"], "*lproduction.php?pid=" . $ships["planet_id"] . "*" . $uid["name"] . ": " . $ships["count"] . " " . $ships["name"] . "(s) produced.", "w");
        $sth1 = mysql_query("select sid from planets where id=" . $ships["planet_id"]);
        if (!$sth1) {
            echo "Dtabase failuer!";
        }
        $system = mysql_fetch_array($sth1);
        $fids = get_fids_by_pid($ships["planet_id"], $uid["uid"]);
        // Keine Flotte auf dem Planet?
        if (!$fids) {
            $new_fleet = new fleet();
            $new_fleet->add_ships_arr(array($ships["prod_id"] => array($ships["count"], 0)));
            $new_fleet->uid = $uid["uid"];
            $new_fleet->pid = $ships["planet_id"];
            $new_fleet->sid = $system["sid"];
            $new_fleet->create_fleet();
        } else {
            $prod_id_in_fid = false;
            for ($i = 0; $i <= sizeof($fids) - 1; $i++) {
                $fleet = new fleet($fids[$i]);
                if ($fleet->ships[$ships["prod_id"]]) {
                    $prod_id_in_fid =& $fleet;
                    // Das is ne referenz :) Irgendwann musste ich die einfach mal benutzen:)
                    break;
                }
            }
            if ($prod_id_in_fid) {
                $prod_id_in_fid->ships[$ships["prod_id"]][0] += $ships["count"];
                $prod_id_in_fid->update_prod_id($ships["prod_id"]);
            } else {
                $fleet->add_ships_arr(array($ships["prod_id"] => array($ships["count"], 0)));
                if (!$fleet->update_prod_id($ships["prod_id"])) {
                    echo "Error assigning new prod id to fleet " . $fleet->fid . "\n";
                }
            }
        }
        $sth1 = mysql_query("delete from s_production where planet_id='" . $ships["planet_id"] . "' and prod_id='" . $ships["prod_id"] . "' and count='" . $ships["count"] . "' and time=" . $ships["time"]);
        if (!$sth1) {
            echo "Dtaabase failuer!";
        }
    }
    // Fleet Ende
    // Infantery Production Start
    $sth = mysql_query("select * from i_production where time=1");
    if (!$sth) {
        echo "Database failure!\n";
        return 0;
    }
    while ($soldiers = mysql_fetch_array($sth)) {
        $sth1 = mysql_query("select uid,name from planets where id=" . $soldiers["planet_id"]);
        if (!$sth1) {
            echo "Datasbe failure!";
        }
        $uid = mysql_fetch_array($sth1);
        $sth1 = mysql_query("select name from production where prod_id=" . $soldiers["prod_id"]);
        if (!$sth1) {
            echo "Database failure!";
        }
        $blub = mysql_fetch_array($sth1);
        ticker($uid["uid"], "*lproduction.php?pid=" . $soldiers["planet_id"] . "*" . $uid["name"] . ": " . $soldiers["count"] . " " . $blub["name"] . "(s) produced.", "w");
        $sth1 = mysql_query("select prod_id from infantery where prod_id=" . $soldiers["prod_id"] . " and pid=" . $soldiers["planet_id"]);
        if (!$sth1) {
            echo "Dazsu failu!";
        }
        if (mysql_num_rows($sth1) == 0) {
            $sth1 = mysql_query("insert into infantery (prod_id,pid,count,uid) values ('" . $soldiers["prod_id"] . "','" . $soldiers["planet_id"] . "','" . $soldiers["count"] . "','" . $uid[0] . "')");
            if (!$sth1) {
                echo "Database failuerfleet!";
            }
        } else {
            $sth1 = mysql_query("update infantery set count=count+" . $soldiers["count"] . " where pid='" . $soldiers["planet_id"] . "' and prod_id='" . $soldiers["prod_id"] . "' and uid='" . $uid["uid"] . "' limit 1");
            if (!$sth1) {
                echo "Database failure!";
            }
        }
        $sth1 = mysql_query("delete from i_production where planet_id='" . $soldiers["planet_id"] . "' and prod_id='" . $soldiers["prod_id"] . "' and count='" . $soldiers["count"] . "' and time=1");
        if (!$sth1) {
            echo "Dtaabase failuer!";
        }
    }
    $sth = mysql_query("select * from infbattle" . $soldier["planet_id"]);
    if ($sth) {
        $sth = mysql_query("insert into infbattle" . $soldier["planet_id"] . " (prod_id,count,initiative,side) values ('" . $soldier["prod_id"] . "','" . $soldier["count"] . "','0','0')");
    }
    $sth = mysql_query("update i_production set time=time-'1' where time>1");
    if (!$sth) {
        echo "Database failure!";
        //      return 0;
    }
    // Infantery Ende
}
function get_planetProduction($pid)
{
    global $uid;
    $puid = get_uid_by_pid($pid);
    $p_relation = get_uids_relation($uid, $puid);
    if ($p_relation == "same" || $p_relation == "allie") {
        $production_tag = create_production_tag($pid);
    }
    echo "<SR_REQUEST type=\"planet_info_prod\" pid=\"" . $pid . "\">";
    echo $production_tag;
    echo "</SR_REQUEST>";
}
function get_max_scanrange_by_sid($sid, $user_id = 0)
{
    global $uid;
    if (!$user_id) {
        $user_id = $uid;
    }
    $sth = mysql_query("select id from planets where sid='{$sid}' and uid != 0");
    if (!$sth || !mysql_num_rows($sth)) {
        return 0;
    }
    while ($its_planets = mysql_fetch_array($sth)) {
        $its_user = get_uid_by_pid($its_planets["id"]);
        if ($its_user == $user_id || is_allied($its_user, $user_id)) {
            $scanrange[] = get_max_scan_range_by_pid($its_planets["id"]);
        }
    }
    if (is_array($scanrange)) {
        rsort($scanrange);
        $max_scanrange = $scanrange[0];
    } else {
        $max_scanrange = 0;
    }
    return $max_scanrange;
}
function draw_jumpgate($sid)
{
    global $map_info;
    $jumpgate_pid = get_pid_of_jumpgate($sid);
    if ($jumpgate_pid) {
        echo "<g onclick=\"clickOnJumpGate(evt)\" id=\"j" . $sid . "\">\n";
        echo "<g transform=\"translate(10 -30)\">\n";
        echo "<g>\n";
        echo "<use xlink:href=\"#sJumpgate\" id=\"j" . $sid . "UseElement\" x=\"0\" y=\"0\"/>\n";
        if ($uid == get_uid_by_pid($jumpgate_pid) || is_allied($uid, get_uid_by_pid($jumpgate_pid))) {
            echo "<noPass />";
            $jumpgate_prod_id = get_jumpgate_by_pid($jumpgate_pid);
            $current_tonnage = get_jumpgate_used_tonnage($jumpgate_pid);
            if ($current_tonnage != 0) {
                $max_tonnage = get_jumpgate_max_tonnage($jumpgate_prod_id);
                $tonnage_percent = 0.3 * ($current_tonnage * 100) / $max_tonnage;
                // 0.3 weil die anzeige exakt 30 pixel groß ist
                echo "<clipPath id=\"cJumpgate" . $sid . "\">";
                echo "<rect x=\"34\" y=\"" . $tonnage_percent . "\" width=\"4\" height=\"" . (30 - $tonnage_percent) . "\"/>";
                echo "</clipPath>";
                echo "<rect x=\"35\" y=\"0\" width=\"2\" height=\"" . $tonnage_percent . "\" style=\"stroke:blue;stroke-width:0.2pt;fill:black;\"/>";
                echo "<rect clip-path=\"url(#cJumpgate" . $sid . ")\" clip-rule=\"nonzero\" x=\"35\" y=\"0\" fill=\"url(#gLRedGreen)\" width=\"2\" height=\"30\" style=\"stroke:blue;stroke-width:0.2pt;\"/>";
            } else {
                echo "<rect x=\"35\" y=\"0\" fill=\"url(#gLRedGreen)\" width=\"2\" height=\"30\" style=\"stroke:blue;stroke-width:0.2pt;\"/>";
            }
        }
        if ($map_info->has_map_anims()) {
            echo "<animateTransform attributeType=\"XML\" attributeName=\"transform\" type=\"rotate\" values=\"360;0\" dur=\"" . ($j + 2) * 100 . "\" repeatCount=\"indefinite\"/>";
        }
        echo "</g>";
        echo "</g>";
        if ($map_info->has_map_anims()) {
            echo "<animateTransform attributeType=\"XML\" attributeName=\"transform\" type=\"rotate\" values=\"0;360\" dur=\"" . ($j + 2) * 100 . "\" repeatCount=\"indefinite\"/>";
        }
        echo "</g>\n";
    }
}
 function shipbattle($simulation = false, $aarray = null, $darray = null)
 {
     // einfach nur ne simulation?
     if ($simulation) {
         $this->prepare_simulation($aarray, $darray);
     } else {
         // Ersma alle flotten raussuchen, die mit anderen flotten, die einem nich gehören auf einem fleck hocken
         $sth = mysql_query("select f1.fid,f1.pid,f1.sid,f1.uid,f1.mission from fleet_info f1,fleet_info f2 where f1.uid!=f2.uid and f1.pid=f2.pid and f1.sid=f2.sid group by f1.fid order by f1.pid,f1.sid");
         if (!$sth) {
             echo "Database failure!";
         }
         while ($poss_battle = mysql_fetch_array($sth)) {
             // neue pid und sid?
             if ($poss_battle["pid"] != $last_pid && $poss_battle["sid"] != $last_sid) {
                 if (!isset($i)) {
                     $i = 0;
                 } else {
                     $i++;
                 }
                 // neuen container erzeugen
                 $poss_battle_locations[$i] = new possible_battle_container();
                 $poss_battle_locations[$i]->sid = $poss_battle["sid"];
                 $poss_battle_locations[$i]->pid = $poss_battle["pid"];
                 $last_pid = $poss_battle["pid"];
                 $last_sid = $poss_battle["sid"];
             }
             $poss_battle_locations[$i]->fleets[$poss_battle["uid"]][] = array("fid" => $poss_battle["fid"], "mission" => $poss_battle["mission"]);
         }
         // so jetzt die uids pro location vergleichen und schauen ob nen kampf zustande kommt und die battlelocations indizes sichern
         for ($i = 0; $i < sizeof($poss_battle_locations); $i++) {
             $battle_location[$i] = new possible_battle_container();
             $battle_location[$i]->pid = $poss_battle_locations[$i]->pid;
             $battle_location[$i]->sid = $poss_battle_locations[$i]->sid;
             $nachzuegler = array();
             $uids = array_keys($poss_battle_locations[$i]->fleets);
             $uids = array_flip($uids);
             $owner = get_uid_by_pid($poss_battle_locations[$i]->pid);
             $owner_alliance = get_alliance($owner);
             while (list($uid, $dummy) = each($poss_battle_locations[$i]->fleets)) {
                 $uids_temp = $uids;
                 unset($uids_temp[$uid]);
                 reset($uids_temp);
                 while (list($second_uid, $dummy) = each($uids_temp)) {
                     $alliance = get_alliance($uid);
                     $sec_alliance = get_alliance($second_uid);
                     if (is_enemy($alliance, $sec_alliance)) {
                         $battle_location[$i]->fleets[$uid] = $poss_battle_locations[$i]->fleets[$uid];
                         $battle_location[$i]->fleets[$second_uid] = $poss_battle_locations[$i]->fleets[$second_uid];
                         unset($poss_battle_locations[$i]->fleets[$second_uid]);
                         echo "BLA\n";
                     } elseif (is_allied($alliance, $sec_alliance) || is_friendly($alliance, $sec_alliance)) {
                         $nachzuegler[] = $poss_battle_locations[$i]->fleet[$second_uid];
                         unset($poss_battle_locations[$i]->fleets[$second_uid]);
                     } elseif (is_enemy($alliance, $owner_alliance)) {
                         for ($j = 0; $j < sizeof($poss_battle_locations[$i]->fleets[$uid]); $j++) {
                             if ($poss_battle_locations[$i]->fleets[$uid][$j]["mission"] == 3 || $poss_battle_locations[$i]->fleets[$uid][$j]["mission"] == 5) {
                                 // invading oder bombarding? ziemlicher gayer hack :S
                                 $battle_location[$i]->fleets[$uid] = $poss_battle_locations[$i]->fleets[$uid];
                             }
                         }
                     } else {
                         // neutrale müssen nochmal gesondert betrachtet werden deswegen kein unset
                     }
                 }
             }
             // mop: wenn es ne freund/feind situation irgendwie gibt, dann müssen die nachzuegler mit rein
             if (is_array($battle_location[$i]->fleets)) {
                 for ($j = 0; $j < sizeof($nachzuegler); $j++) {
                     $battle_location[$i]->fleets = array_merge($battle_location[$i]->fleets, $nachzuegler[$j]);
                 }
                 echo "BLA2\n";
             }
         }
         echo "BLA3\n";
         var_dump($battle_location);
         // jetzt haben wir die battlelocations...nun wirds interessant...wir müssen die ganze hundescheisse jetzt nach defenders und
         // attackers umdröseln
         for ($i = 0; $i < sizeof($battle_location); $i++) {
             echo "=> {$i}\n";
             $this->a_uids = array();
             $this->d_uids = array();
             $this->attackers = array();
             $this->defenders = array();
             $this->report = new battlereport();
             $this->report->pid = $battle_location[$i]->pid;
             $this->report->sid = $battle_location[$i]->sid;
             if (is_array($battle_location[$i]->fleets)) {
                 echo "JO\n";
                 // dann muss es da auch irgendwas zum kampftrollen geben
                 if ($battle_location[$i]->pid == 0) {
                     echo "JO=>2\n";
                     if ($intercepting = $battle_location[$i]->find_intercepting_uid()) {
                         $this->d_uids[] = $intercepting;
                         for ($j = 0; $j < sizeof($battle_location[$i]->fleets[$intercepting]); $j++) {
                             $battlefleet = new battlefleet($battle_location[$i]->fleets[$intercepting][$j]["fid"], 0);
                             $this->report->add_fleet($battlefleet);
                             $this->defenders[] = $battlefleet;
                         }
                         $d_alliance = get_alliance($intercepting);
                         // verteidigende allianz sichern
                         reset($battle_location[$i]->fleets);
                         while (list($uid, $fleet) = each($battle_location[$i]->fleets)) {
                             if ($uid != $this->d_uids[0]) {
                                 if (is_enemy($d_alliance, get_alliance($uid))) {
                                     if (!in_array($uid, $this->a_uids)) {
                                         $this->a_uids[] = $uid;
                                         for ($j = 0; $j < sizeof($fleet); $j++) {
                                             $battlefleet = new battlefleet($fleet[$j]["fid"], 1);
                                             $this->report->add_fleet($battlefleet);
                                             $this->attackers[] = $battlefleet;
                                         }
                                     }
                                 } elseif (is_friendly($d_alliance, get_alliance($uid)) || is_allied($d_alliance, get_alliance($uid))) {
                                     if (!in_array($uid, $this->d_uids)) {
                                         $this->d_uids[] = $uid;
                                         for ($j = 0; $j < sizeof($fleet); $j++) {
                                             $battlefleet = new battlefleet($fleet[$j]["fid"], 0);
                                             $this->report->add_fleet($battlefleet);
                                             $this->defenders[] = $battlefleet;
                                         }
                                     }
                                 } else {
                                     echo "Neutral Player detected :S\n";
                                 }
                             }
                         }
                     } else {
                         // :S
                     }
                 } else {
                     echo "JO2\n";
                     $owner = get_uid_by_pid($battle_location[$i]->pid);
                     $planet_active = false;
                     if (in_array($owner, array_keys($battle_location[$i]->fleets))) {
                         $this->d_uids[] = $owner;
                     } else {
                         $owner = array_rand($battle_location[$i]->fleets);
                         $this->d_uids[] = $owner;
                         echo "Owner ist => " . $owner . "\n";
                     }
                     for ($j = 0; $j < sizeof($battle_location[$i]->fleets[$owner]); $j++) {
                         $battlefleet = new battlefleet($battle_location[$i]->fleets[$owner][$j]["fid"], 0);
                         $this->report->add_fleet($battlefleet);
                         $this->defenders[] = $battlefleet;
                     }
                     $d_alliance = get_alliance($owner);
                     // verteidigende allianz sichern
                     reset($battle_location[$i]->fleets);
                     while (list($uid, $fleet) = each($battle_location[$i]->fleets)) {
                         if ($uid != $this->d_uids[0]) {
                             if (is_enemy($d_alliance, get_alliance($uid))) {
                                 if (!in_array($uid, $this->a_uids)) {
                                     $this->a_uids[] = $uid;
                                     for ($j = 0; $j < sizeof($fleet); $j++) {
                                         $battlefleet = new battlefleet($fleet[$j]["fid"], 1);
                                         if ($battlefleet->mission == 3) {
                                             $planet_active = true;
                                             $planet_attack_type = 0;
                                         } elseif ($battlefleet->mission == 5) {
                                             $planet_active = true;
                                             $planet_attack_type = 1;
                                         }
                                         $this->report->add_fleet($battlefleet);
                                         $this->attackers[] = $battlefleet;
                                     }
                                 }
                             } elseif (is_friendly($d_alliance, get_alliance($uid)) || is_allied($d_alliance, get_alliance($uid))) {
                                 if (!in_array($uid, $this->d_uids)) {
                                     $this->d_uids[] = $uid;
                                     for ($j = 0; $j < sizeof($fleet); $j++) {
                                         $battlefleet = new battlefleet($fleet[$j]["fid"], 0);
                                         $this->report->add_fleet($battlefleet);
                                         $this->defenders[] = $battlefleet;
                                     }
                                 }
                             } else {
                                 echo "Neutral Player detected :S\n";
                             }
                         }
                     }
                 }
                 if ($planet_active) {
                     // d_uids wurde schon vorher hinzugfügt
                     $battleplanet = new battleplanet($battle_location[0]->pid, $planet_attack_type);
                     $this->report->add_planet($battleplanet);
                     $this->defenders[] = $battleplanet;
                 }
             }
             if (sizeof($this->a_uids) > 0 && sizeof($this->d_uids) > 0) {
                 $this->attackers_count = sizeof($this->attackers);
                 $this->defenders_count = sizeof($this->defenders);
                 $this->prepare_battle();
                 $this->do_battle();
                 $this->destroy_ships();
                 $this->report->do_report();
             }
         }
     }
 }
function change_fprio($pid, $prod_id, $time, $change)
{
    global $uid;
    if (get_uid_by_pid($pid) != $uid) {
        show_error("TADA!!!!");
        return false;
    }
    switch ($change) {
        case 1:
        case -1:
            $sth = mysql_query("update s_production set priority=if(priority+" . $change . ">2 or priority+" . $change . "<0,priority,priority+" . $change . ") where planet_id=" . $pid . " and prod_id=" . $prod_id . " and time=" . $time);
            if (!$sth) {
                show_error("ERR::SET PRIO");
            }
    }
}
function draw_special_symbols($x, $y, $specials, $sid)
{
    global $uid;
    global $map_info;
    $abstand_x = -40;
    $abstand_y = -25;
    for ($i = 0; $i < sizeof($specials); $i++) {
        if (isset($specials[$i])) {
            $its_uid = get_uid_by_pid($specials[$i][pid]);
            if ($uid == $its_uid || $map_info->is_allied($its_uid)) {
                $allied_special[] = $specials[$i][special];
            } else {
                if ($map_info->is_friendly($its_uid)) {
                    $friendly_special[] = $specials[$i][special];
                } elseif ($map_info->is_enemy($its_uid)) {
                    $enemy_special[] = $specials[$i][special];
                } else {
                    $neutral_special[] = $specials[$i][special];
                }
            }
        }
    }
    if (is_array($allied_special)) {
        $allied_special = array_unique($allied_special);
        for ($i = 0; $i < sizeof($allied_special); $i++) {
            $its_specials = each($allied_special);
            $special_symbols .= "<use xlink:href=\"#sStarSpecialSymbol_" . $its_specials[1] . "\" x=\"" . ($x + $abstand_x - $i * 25) . "\" y=\"" . ($y + $abstand_y) . "\"  class=\"colorOwnDiscreet\"/>";
        }
        $abstand_y += -25;
    }
    if (is_array($friendly_special)) {
        $friendly_special = array_unique($friendly_special);
        for ($i = 0; $i < sizeof($friendly_special); $i++) {
            $its_specials = each($friendly_special);
            $special_symbols .= "<use xlink:href=\"#sStarSpecialSymbol_" . $its_specials[1] . "\" x=\"" . ($x + $abstand_x - $i * 25) . "\" y=\"" . ($y + $abstand_y) . "\"  class=\"colorFriendDiscreet\"/>";
        }
        $abstand_y += -25;
    }
    if (is_array($enemy_special)) {
        $enemy_special = array_unique($enemy_special);
        for ($i = 0; $i < sizeof($enemy_special); $i++) {
            $its_specials = each($enemy_special);
            $special_symbols .= "<use xlink:href=\"#sStarSpecialSymbol_" . $its_specials[1] . "\" x=\"" . ($x + $abstand_x - $i * 25) . "\" y=\"" . ($y + $abstand_y) . "\"  class=\"colorEnemyDiscreet\"/>";
        }
        $abstand_y += -25;
    }
    if (is_array($neutral_special)) {
        $neutral_special = array_unique($neutral_special);
        for ($i = 0; $i < sizeof($neutral_special); $i++) {
            $its_specials = each($neutral_special);
            $special_symbols .= "<use xlink:href=\"#sStarSpecialSymbol_" . $its_specials[1] . "\" x=\"" . ($x + $abstand_x - $i * 25) . "\" y=\"" . ($y + $abstand_y) . "\" class=\"colorNeutralDiscreet\"/>";
        }
        $abstand_y += -25;
    }
    return $special_symbols;
}
Beispiel #11
0
function get_true_ETA_by_fid($fid)
{
    global $uid;
    $fleets_target = get_fleets_target($fid);
    // kein ziel
    if ($fleets_target["system"]["tid"] == 0 && $fleets_target["planet"]["tid"] == 0) {
        return 0;
    }
    // ziel = standort
    if ($fleets_target["system"]["tid"] == $fleets_target["system"]["id"] && $fleets_target["planet"]["tid"] == $fleets_target["planet"]["id"]) {
        return 0;
    }
    // innerhalb eines systems
    if ($fleets_target["system"]["tid"] == $fleets_target["system"]["id"] && $fleets_target["planet"]["tid"] != $fleets_planets["planet"]["id"]) {
        return 1;
    } else {
        // Alleierte raussuchen
        $allies = get_allied_ids($uid);
        if (is_array($allies)) {
            array_push($allies, $uid);
        } else {
            $allies[0] = $uid;
        }
        // route besorgen
        $sth = mysql_query("select route from routes where fid={$fid}");
        if (!$sth || !mysql_num_rows($sth)) {
            return false;
        }
        list($route) = mysql_fetch_row($sth);
        $route = unserialize($route);
        // Anzahl sprünge ermitteln
        $jumps = sizeof($route);
        $refueling_stations_count = 0;
        // refueling stations ermitteln
        $refueling_stations = get_prodid_by_special("F");
        // nach refuelingstations auf dem weg suchen
        for ($i = 0; $i < $jumps - 1; $i++) {
            $current_system_planets = get_planets_by_sid($route[$i]);
            // Filtern nach alleierten und eigenen Planeten
            for ($j = 0; $j < sizeof($current_system_planets); $j++) {
                if (in_array(get_uid_by_pid($current_system_planets[$j]), $allies)) {
                    // construction list des planeten heraussuchen
                    $planet_constructions = get_construction_list($current_system_planets[$j]);
                    // gucken ob refuelingstation auf planet gebaut
                    for ($k = 0; $k < sizeof($refueling_stations); $k++) {
                        if (in_array($refueling_stations[$k], $planet_constructions)) {
                            // refueling statoin gefunden
                            $k = sizeof($refueling_stations);
                            $j = sizeof($current_system_planets);
                            $refueling_stations_count++;
                        }
                    }
                }
            }
        }
        // derzeitigen refuel status der flotte ermitteln
        $current_refuel_time = get_reload($fid);
        if ($current_refuel_time == 0) {
            $current_refuel_time = 1;
        }
        $jumps--;
        $max_refuel_time = get_max_reload($fid);
        if ($jumps < 0) {
            $jumps = 0;
        }
        $eta = $current_refuel_time + $jumps * $max_refuel_time - $refueling_stations_count;
        // jetzt noch den weg vom planeten zum system und entgegengesetzt einberechnen
        if ($fleets_target["planet"]["id"] && $current_refuel_time < 2) {
            $eta++;
        }
        if ($fleets_target["planet"]["tid"] != 0) {
            $eta++;
        }
        // lol, nen hack :S
        if ($eta < 1) {
            $eta = 1;
        }
        // weil alles was 0 ist der eigene standort ist und schon am anfang abgefangen wird
    }
    return $eta;
}