コード例 #1
0
function get_fleet_items($id, $sql_foreign_key)
{
    global $uid;
    global $map_info;
    $sth = mysql_query("SELECT * FROM fleet_info WHERE " . $sql_foreign_key . "=" . $id . " order by uid");
    if (!$sth || !mysql_num_rows($sth)) {
        return false;
    }
    $i = 0;
    $ships = array();
    while ($fleets = mysql_fetch_assoc($sth)) {
        $ships[$i] = array();
        $its_fleet = new fleet($fleets["fid"]);
        $its_fid = $fleets["fid"];
        // get fleets userdata
        // ALLIANZ
        $sth2 = mysql_query("select u.name, u.imperium, a.name as alliance_name, a.color, a.symbol, a.milminister from users u left outer join alliance a on a.id=u.alliance where u.id=" . $fleets["uid"]);
        if (!$sth2 || !mysql_num_rows($sth2)) {
            return 0;
        }
        $fleets_user_info = mysql_fetch_array($sth2);
        if ($fleets_user_info["alliance_name"]) {
            $return_array[$i]["allianceName"] = htmlspecialchars($fleets_user_info["alliance_name"]);
            $return_array[$i]["allianceColor"] = $fleets_user_info["color"];
            if ($fleets_user_info["symbol"]) {
                $return_array[$i]["allianceSymbol"] = $fleets_user_info["symbol"];
            } else {
                $return_array[$i]["allianceSymbol"] = 0;
            }
        } else {
            $return_array[$i]["allianceName"] = 0;
            $return_array[$i]["allianceColor"] = 0;
            $return_array[$i]["allianceSymbol"] = 0;
        }
        // all items same data
        $return_array[$i]["picture"] = get_fleet_pic($its_fid);
        $return_array[$i]["topic"] = htmlspecialchars($fleets["name"]);
        $return_array[$i]["description"] = htmlspecialchars($fleets["name"]);
        $return_array[$i]["oid"] = $fleets["fid"];
        $return_array[$i]["sid"] = $fleets["sid"];
        $return_array[$i]["pid"] = $fleets["pid"];
        $return_array[$i]["tsid"] = $fleets["tsid"];
        $return_array[$i]["tpid"] = $fleets["tpid"];
        $return_array[$i]["relationClass"] = get_uids_relation($uid, $fleets["uid"], 1);
        $return_array[$i]["footer"] = false;
        $is_commanded_by_mod = $its_fleet->milminister == 1 && $fleets_user_info["milminister"] == $uid;
        if ($uid == $its_fleet->uid || $is_commanded_by_mod) {
            $its_mission = get_mission_by_mission_id($fleets["mission"]);
            $its_target = get_fleets_target($its_fid);
            // full fleet item, own or borrowed units
            $return_array[$i]["itemType"] = "FULL_FLEET_ITEM";
            $return_array[$i]["type"] = "fleet";
            // sounds
            // okay, suboptimal weil gleiche funkiion schon bei get_fleet_pic aufgerufen wird :S, bin jetzt aba faul
            $strongest_ship = get_strongest_ship_by_fid($its_fid);
            // ggf noch sounds von admirälen einfügen
            $sound_array = get_sound_by_prod_id($strongest_ship);
            $return_array[$i]["soundReport"] = $sound_array["report"];
            $return_array[$i]["soundConfirm"] = $sound_array["confirm"];
            // Target
            if ($its_target["planet"]["tid"] || $its_target["system"]["tid"]) {
                // ETA berechnen
                $return_array[$i]["eta"] = get_true_ETA_by_fid($its_fid);
                if ($its_target["planet"]["tid"]) {
                    $return_array[$i]["target"] = get_planetname($its_target["planet"]["tid"]);
                } else {
                    $return_array[$i]["target"] = get_systemname($its_target["system"]["tid"]);
                }
            }
            // Mission
            $return_array[$i]["missionSymbol"] = $its_mission[2];
            $return_array[$i]["missionName"] = $its_mission[0];
            $return_array[$i]["mission"] = $fleets["mission"];
            // Tactics
            $return_array[$i]["tactic"] = $fleets["tactic"];
            $return_array[$i]["tacticSymbol"] = 0;
            $return_array[$i]["tacticName"] = get_tactic_by_tacticflag($fleets["tactic"]);
            // Reloading?
            $return_array[$i]["reloadSymbol"] = get_reload($its_fid);
            // Infantry aboard?
            $return_array[$i]["infantrySymbol"] = get_infantrycount_by_fid($its_fid);
            // Minister of Defence
            $return_array[$i]["modSymbol"] = $fleets["milminister"];
            // FLEET CONTROL
            //manage fleet
            if (!$is_commanded_by_mod) {
                $return_array[$i]["fleet_control"] .= "<SR_FLEET_CONTROL type=\"SR_SIMPLE_ACTION\" face=\"control_button_manage_fleet.svgz\" controlName=\"manage fleet\" description=\"manage fleet\"/>";
            }
            $planet_uid = get_uid_by_pid($its_fleet->pid);
            // transfer infantry
            if ($its_fleet->get_total_transporter_capacity() > 0 && ($planet_uid == $its_fleet->uid || is_allied($planet_uid, $its_fleet->uid)) || has_infantry_on_planet($its_fleet->pid, $its_fleet->uid)) {
                $return_array[$i]["fleet_control"] .= "<SR_FLEET_CONTROL type=\"SR_SIMPLE_ACTION\" face=\"control_button_inf_transfer.svgz\" controlName=\"transfer infantry\" description=\"transfer infantry\"/>";
            }
        } else {
            // bäh, mir fällt kein anständiges query ein
            $light = 0;
            $medium = 0;
            $heavy = 0;
            $sth3 = mysql_query("select sum(count), typ as shipcount from fleet join production using(prod_id) where fid='" . $its_fid . "' group by typ");
            if (!$sth3 || !mysql_num_rows($sth3)) {
                return 0;
            }
            while (list($shipcount, $typ) = mysql_fetch_row($sth3)) {
                switch ($typ) {
                    case "L":
                        $light = $shipcount;
                        break;
                    case "M":
                        $medium = $shipcount;
                        break;
                    case "H":
                        $heavy = $shipcount;
                        break;
                }
            }
            $return_array[$i]["footer"] = $heavy . " " . $medium . " " . $light;
            $return_array[$i]["type"] = "fleet";
            $return_array[$i]["text1"] = htmlspecialchars($fleets_user_info["name"]);
            $return_array[$i]["text2"] = htmlspecialchars($fleets_user_info["imperium"]);
            if ($return_array[$i]["relationClass"] == "colorAllied") {
                $return_array[$i]["itemType"] = "ADVANCED_FLEET_ITEM";
                $return_array[$i]["fleet_control"] .= "<SR_FLEET_CONTROL type=\"SR_SIMPLE_ACTION\" face=\"control_button_examine_fleet.svgz\" controlName=\"examine fleet\" description=\"view fleet details\"/>";
            } else {
                $return_array[$i]["itemType"] = "FLEET_ITEM";
                // fleet control buttons, keine Attribute sondern childs, nur nach den Attributen im $return_array auflisten!
                // special actions
                $special_actions = get_special_fleet_actions($its_fid, "fleet");
                if (is_array($special_actions)) {
                    for ($j = 0; $j < sizeof($special_actions); $j++) {
                        $return_array[$i]["fleet_control"] .= "<SR_FLEET_CONTROL type=\"SR_SPECIAL_ACTION\" face=\"" . $special_actions[$j]["picture"] . "\" controlName=\"" . $special_actions[$j]["name"] . "\" description=\"" . $special_actions[$j]["description"] . "\" controlId=\"" . $special_actions[$j]["action_id"] . "\"";
                        $return_array[$i]["fleet_control"] .= " metal=\"" . $special_actions[$j]["metal"] . "\" energy=\"" . $special_actions[$j]["energy"] . "\" mopgas=\"" . $special_actions[$j]["mopgas"] . "\" erkunum=\"" . $special_actions[$j]["erkunum"] . "\" gortium=\"" . $special_actions[$j]["gortium"] . "\" susebloom=\"" . $special_actions[$j]["susebloom"] . "\"/>";
                    }
                }
                // fleet control EXAMINE FLEET falls die flotte sich in unmittelbarer Nähe zu dem user und seinen alliierten befindet
                if (fleet_is_examinable($its_fid, $its_fleet->sid) == "true") {
                    $return_array[$i]["fleet_control"] .= "<SR_FLEET_CONTROL type=\"SR_SIMPLE_ACTION\" face=\"control_button_examine_fleet.svgz\" controlName=\"examine fleet\" description=\"view fleet details\"/>";
                    if (has_noscan_ships_and_constructions($its_fid)) {
                        $return_array[$i]["picture"] = "animationRauschen";
                        $return_array[$i]["footer"] = "0 0 0";
                    }
                } else {
                    // wenn in scanrange, aber nicht wirklih sichbar, picture zu p_unknown.jpg ändern
                    $return_array[$i]["picture"] = PIC_ROOT . "p_unknown.png";
                    if (has_noscan_ships_and_constructions($its_fid)) {
                        $return_array[$i]["footer"] = "0 0 0";
                    }
                }
            }
        }
        if ($uid == $its_fleet->uid || $map_info->is_allied($its_fleet->uid) || fleet_is_examinable($its_fid)) {
            // mop: alle schiffsnamen
            $prod_ids = array_keys($its_fleet->ships);
            $sth2 = mysql_query("select prod_id,name,typ from production where prod_id in (" . implode(",", $prod_ids) . ")");
            while (list($prod_id, $name, $typ) = mysql_fetch_row($sth2)) {
                $ship_data = $its_fleet->ships[$prod_id];
                $ship_data[] = $name;
                $ship_data[] = $typ;
                $ships[$i][$prod_id] = $ship_data;
                // mop: enthält dann array aus count und reload
            }
        }
        $i++;
    }
    return array($return_array, $ships);
}
コード例 #2
0
function move_fleet($mission)
{
    global $uid;
    $fid = $_GET["fid"];
    $targetId = $_GET["targetId"];
    $targetType = $_GET["targetType"];
    // planet || system
    $fleet = new fleet($fid);
    // validation
    if ($uid != $fleet->uid) {
        if ($fleet->milminister == 1) {
            $sth = mysql_query("select a.milminister from users u left join alliance a on u.alliance = a.id where u.id = " . $uid);
            if (!$sth) {
                show_svg_message("ERR::GET MoD");
                return false;
            }
            list($its_mod) = mysql_fetch_row($sth);
            if ($its_mod != $uid) {
                show_svg_message("You can not command that fleet");
                return false;
            }
        } else {
            show_svg_message("You can not command that fleet");
            return false;
        }
    }
    if ($targetType == "system") {
        $destination_system = $targetId;
        $destination_planet = 0;
        $destination_name = get_systemname($targetId);
    } else {
        $sth = mysql_query("select sid, name, uid from planets where id = '{$targetId}'");
        if (!$sth || !mysql_num_rows($sth)) {
            return 0;
        }
        $dest_data = mysql_fetch_row($sth);
        $destination_system = $dest_data[0];
        $destination_name = $dest_data[1];
        $destination_planet = $targetId;
        $destination_planet_uid = $dest_data[2];
    }
    $max_warp = get_max_warp($uid);
    $route = move_to($fleet->sid, $destination_system, $max_warp);
    if (is_array($route)) {
        $fleet_mode = "defensive";
        // gucken ob der zielplanet ein feindlicher ist
        if ($destination_planet != 0 && $destination_planet_uid != 0) {
            if (get_uids_relation($uid, $destination_planet_uid) == "enemy") {
                $fleet_mode = "aggressive";
            }
        }
        set_mission($fid, $mission, $destination_system, $destination_planet);
        $its_mission = get_mission_by_mission_id($mission, $fleet_mode);
        set_route($route, $fid);
        $true_eta = get_true_ETA_by_fid($fid);
        $request .= "<SR_REQUEST oid=\"" . $fid . "\" type=\"FLEET_ROUTE\">";
        $request .= "<SR_ROUTE_INFO eta=\"" . $true_eta . "\" targetName=\"" . $destination_name . "\" sid=\"" . $fleet->sid . "\" mission=\"" . $mission . "\" missionName=\"" . $its_mission[0] . "\" missionSymbol=\"" . $its_mission[2] . "\" />";
        // general info
        if ($fleet->sid == $destination_system) {
            if ($destination_planet == 0 || $fleet->pid == 0) {
                if ($destination_planet == 0) {
                    $target_planet = $fleet->pid;
                    $target_system = $destination_system;
                } else {
                    $target_planet = $destination_planet;
                    $target_system = $fleet->sid;
                }
                $request .= "<SR_ROUTE_SYSTEM_TO_PLANET jumpNumber=\"0\" pid=\"" . $target_planet . "\" sid=\"" . $target_system . "\"/>";
            } else {
                $request .= "<SR_ROUTE_PLANET_TO_PLANET jumpNumber=\"0\" pid1=\"" . $fleet->pid . "\" pid2=\"" . $destination_planet . "\" sid=\"" . $fleet->sid . "\"/>";
            }
        } else {
            // wenn die flotte nicht schon überm stern hängt, muss sie erst dahin fliegen um das system zu verlassen
            $a = 0;
            if ($fleet->pid != 0) {
                $request .= "<SR_ROUTE_SYSTEM_TO_PLANET jumpNumber=\"" . $a++ . "\" pid=\"" . $fleet->pid . "\" sid=\"" . $fleet->sid . "\"/>";
            }
            for ($i = 0; $i < sizeof($route); $i++) {
                $request .= "<SR_ROUTE_SYSTEM jumpNumber=\"" . ($i + $a) . "\" sid=\"" . $route[$i] . "\"/>";
            }
            // wenn die flotte nicht zum einem anderen stern fliegt, sondern zu einem planeten, kommt noch ein inter-planetärer flug hinzu
            if ($destination_planet != 0) {
                $request .= "<SR_ROUTE_SYSTEM_TO_PLANET jumpNumber=\"" . ++$i . "\" pid=\"" . $destination_planet . "\" sid=\"" . $destination_system . "\"/>";
            }
        }
        $request .= "</SR_REQUEST>";
        echo $request;
        return true;
    } else {
        show_svg_message("Sir! Our fleet '" . get_fleet_name($_GET["fid"]) . "' can't carry out your command. The targets destination has an insuperable gap that exceeds our warp technolgy of " . $max_warp . " parsec.");
        return false;
    }
}