function Exp_ResourcesFound($queue, $fleet_obj, $fleet, $origin, $target)
{
    $small = array(loca("EXP_RESFOUND_SMALL_1"), loca("EXP_RESFOUND_SMALL_2"), loca("EXP_RESFOUND_SMALL_3"), loca("EXP_RESFOUND_SMALL_4"));
    $medium = array(loca("EXP_RESFOUND_MED_1"), loca("EXP_RESFOUND_MED_2"), loca("EXP_RESFOUND_MED_3"));
    $large = array(loca("EXP_RESFOUND_LARGE_1"), loca("EXP_RESFOUND_LARGE_2"));
    $footer = array(loca("EXP_RESFOUND_LOGBOOK_1"), loca("EXP_RESFOUND_LOGBOOK_2"), loca("EXP_RESFOUND_LOGBOOK_3"), loca("EXP_RESFOUND_LOGBOOK_4"));
    $resname = array(loca("METAL"), loca("CRYSTAL"), loca("DEUTERIUM"));
    // Рассчитать тип найденного ресурса
    $type = mt_rand(0, 2);
    // Рассчитать тип месторождения
    $chance = mt_rand(0, 99);
    if ($chance >= 99) {
        // крупное
        $roll = mt_rand(51, 100) * 2;
        $n = mt_rand(0, count($large) - 1);
        $msg = $large[$n];
    } else {
        if ($chance >= 90) {
            // среднее
            $roll = mt_rand(26, 50) * 2;
            $n = mt_rand(0, count($medium) - 1);
            $msg = $medium[$n];
        } else {
            // маленькое
            $roll = mt_rand(5, 25) * 2;
            $n = mt_rand(0, count($small) - 1);
            $msg = $small[$n];
        }
    }
    if ($type == 1) {
        $roll /= 2;
    } else {
        if ($type == 2) {
            $roll /= 3;
        }
    }
    // Рассчитать количество найденного ресурса
    $points = min(max(200, ExpPoints($fleet)), ExpUpperLimit());
    $cargo = max(0, FleetCargoSummary($fleet) - ($fleet_obj['m'] + $fleet_obj['k'] + $fleet_obj['d']));
    $amount = $roll * $points;
    // Количество найденных ресурсов уменьшается до общей грузоподъемности флота
    if ($cargo < $amount) {
        $amount = $cargo;
        $no_cargo = true;
    } else {
        $no_cargo = false;
    }
    $msg .= va(loca("EXP_FOUND"), nicenum($amount), $resname[$type]);
    if ($no_cargo) {
        $n = mt_rand(0, count($footer) - 1);
        $msg .= "<br><br>" . $footer[$n];
    }
    $m = $k = $d = 0;
    if ($type == 0) {
        $m = $amount;
    } else {
        if ($type == 1) {
            $k = $amount;
        } else {
            if ($type == 2) {
                $d = $amount;
            }
        }
    }
    // Вернуть флот.
    // В качестве времени полёта используется время удержания.
    DispatchFleet($fleet, $origin, $target, 115, $fleet_obj['deploy_time'], $fleet_obj['m'] + $m, $fleet_obj['k'] + $k, $fleet_obj['d'] + $d, 0, $queue['end']);
    return $msg;
}
Beispiel #2
0
function RecycleArrive($queue, $fleet_obj, $fleet, $origin, $target)
{
    if ($fleet[209] == 0) {
        Error("Попытка сбора ПО без переработчиков");
    }
    if ($target['type'] != 10000) {
        Error("Перерабатывать можно только поля обломков!");
    }
    $sum_cargo = FleetCargoSummary($fleet) - ($fleet_obj['m'] + $fleet_obj['k'] + $fleet_obj['d']);
    $recycler_cargo = FleetCargo(209) * $fleet[209];
    $cargo = min($recycler_cargo, $sum_cargo);
    $harvest = HarvestDebris($target['planet_id'], $cargo, $queue['end']);
    $dm = $harvest['m'];
    $dk = $harvest['k'];
    $subj = "\n<span class=\"espionagereport\">Разведданные</span>\n";
    $report = "Переработчики в количестве " . nicenum($fleet[209]) . " штук обладают общей грузоподъёмностью в " . nicenum($cargo) . ". " . "Поле обломков содержит " . nicenum($target['m']) . " металла и " . nicenum($target['k']) . " кристалла. " . "Добыто " . nicenum($dm) . " металла и " . nicenum($dk) . " кристалла.";
    // Вернуть флот.
    DispatchFleet($fleet, $origin, $target, 108, $fleet_obj['flight_time'], $fleet_obj['m'] + $dm, $fleet_obj['k'] + $dk, $fleet_obj['d'], $fleet_obj['fuel'] / 2, $queue['end']);
    SendMessage($fleet_obj['owner_id'], "Флот ", $subj, $report, 5, $queue['end']);
}
function WritebackBattleResults($a, $d, $res, $repaired, $cm, $ck, $cd, $sum_cargo)
{
    $fleetmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
    $defmap = array(401, 402, 403, 404, 405, 406, 407, 408);
    global $db_prefix;
    // Бой с раундами.
    $rounds = count($res['rounds']);
    if ($rounds > 0) {
        $last = $res['rounds'][$rounds - 1];
        foreach ($last['attackers'] as $i => $attacker) {
            $fleet_obj = LoadFleet($attacker['id']);
            $queue = GetFleetQueue($fleet_obj['fleet_id']);
            $origin = GetPlanet($fleet_obj['start_planet']);
            $target = GetPlanet($fleet_obj['target_planet']);
            $ships = 0;
            foreach ($fleetmap as $ii => $gid) {
                $ships += $attacker[$gid];
            }
            if ($sum_cargo == 0) {
                $cargo = 0;
            } else {
                $cargo = (FleetCargoSummary($attacker) - ($fleet_obj['m'] + $fleet_obj['k'] + $fleet_obj['d']) - $fleet_obj['fuel']) / $sum_cargo;
            }
            if ($ships > 0) {
                if ($fleet_obj['mission'] == 9 && $res['result'] === "awon") {
                    $result = GravitonAttack($fleet_obj, $attacker, $queue['end']);
                } else {
                    $result = 0;
                }
                if ($result < 2) {
                    DispatchFleet($attacker, $origin, $target, $fleet_obj['mission'] + 100, $fleet_obj['flight_time'], $fleet_obj['m'] + $cm * $cargo, $fleet_obj['k'] + $ck * $cargo, $fleet_obj['d'] + $cd * $cargo, $fleet_obj['fuel'] / 2, $queue['end']);
                }
            }
        }
        foreach ($last['defenders'] as $i => $defender) {
            if ($i == 0) {
                AdjustResources($cm, $ck, $cd, $defender['id'], '-');
                $objects = array();
                foreach ($fleetmap as $ii => $gid) {
                    $objects["f{$gid}"] = $defender[$gid] ? $defender[$gid] : 0;
                }
                foreach ($defmap as $ii => $gid) {
                    $objects["d{$gid}"] = $repaired[$gid] ? $repaired[$gid] : 0;
                    $objects["d{$gid}"] += $defender[$gid];
                }
                SetPlanetFleetDefense($defender['id'], $objects);
            } else {
                $ships = 0;
                foreach ($fleetmap as $ii => $gid) {
                    $ships += $defender[$gid];
                }
                if ($ships > 0) {
                    SetFleet($defender['id'], $defender);
                } else {
                    $queue = GetFleetQueue($defender['id']);
                    DeleteFleet($defender['id']);
                    // удалить флот
                    RemoveQueue($queue['task_id']);
                    // удалить задание
                }
            }
        }
    } else {
        foreach ($a as $i => $attacker) {
            $fleet_obj = LoadFleet($attacker['id']);
            $queue = GetFleetQueue($fleet_obj['fleet_id']);
            $origin = GetPlanet($fleet_obj['start_planet']);
            $target = GetPlanet($fleet_obj['target_planet']);
            $ships = 0;
            foreach ($fleetmap as $ii => $gid) {
                $ships += $attacker['fleet'][$gid];
            }
            if ($sum_cargo == 0) {
                $cargo = 0;
            } else {
                $cargo = (FleetCargoSummary($attacker['fleet']) - ($fleet_obj['m'] + $fleet_obj['k'] + $fleet_obj['d']) - $fleet_obj['fuel']) / $sum_cargo;
            }
            if ($ships > 0) {
                if ($fleet_obj['mission'] == 9 && $res['result'] === "awon") {
                    $result = GravitonAttack($fleet_obj, $attacker['fleet'], $queue['end']);
                } else {
                    $result = 0;
                }
                if ($result < 2) {
                    DispatchFleet($attacker['fleet'], $origin, $target, $fleet_obj['mission'] + 100, $fleet_obj['flight_time'], $fleet_obj['m'] + $cm * $cargo, $fleet_obj['k'] + $ck * $cargo, $fleet_obj['d'] + $cd * $cargo, $fleet_obj['fuel'] / 2, $queue['end']);
                }
            }
        }
        foreach ($d as $i => $defender) {
            if ($i == 0) {
                AdjustResources($cm, $ck, $cd, $defender['id'], '-');
                $objects = array();
                foreach ($fleetmap as $ii => $gid) {
                    $objects["f{$gid}"] = $defender[$gid] ? $defender[$gid] : 0;
                }
                foreach ($defmap as $ii => $gid) {
                    $objects["d{$gid}"] = $repaired[$gid] ? $repaired[$gid] : 0;
                    $objects["d{$gid}"] += $defender[$gid];
                }
                SetPlanetFleetDefense($defender['id'], $objects);
            } else {
                $ships = 0;
                foreach ($fleetmap as $ii => $gid) {
                    $ships += $defender[$gid];
                }
                if ($ships > 0) {
                    SetFleet($defender['id'], $defender);
                } else {
                    $queue = GetFleetQueue($defender['id']);
                    DeleteFleet($defender['id']);
                    // удалить флот
                    RemoveQueue($queue['task_id']);
                    // удалить задание
                }
            }
        }
    }
}