Exemplo n.º 1
0
                                                    $k = $res['k'];
                                                    $d = $res['d'];
                                                    $e = $res['e'];
                                                    $points = ($m + $k + $d) * $amount1;
                                                    AdjustStats($aktplanet['owner_id'], $points, 0, 0, '-');
                                                }
                                                $amount2 = min($aktplanet['d503'], intval($_POST['ab503']));
                                                if ($amount2 > 0) {
                                                    $aktplanet['d503'] -= $amount2;
                                                    $res = ShipyardPrice(503);
                                                    $m = $res['m'];
                                                    $k = $res['k'];
                                                    $d = $res['d'];
                                                    $e = $res['e'];
                                                    $points = ($m + $k + $d) * $amount2;
                                                    AdjustStats($aktplanet['owner_id'], $points, 0, 0, '-');
                                                }
                                                if ($amount1 + $amount2 > 0) {
                                                    SetPlanetDefense($aktplanet['planet_id'], $aktplanet);
                                                    RecalcRanks();
                                                }
                                            }
                                            ?>
    </th> 
   </tr> 
</table> 
Ваше хранилище может вмещать <?php 
                                            echo $rak_space / 2;
                                            ?>
 межпланетных ракет или <?php 
                                            echo $rak_space;
Exemplo n.º 2
0
function ColonizationArrive($queue, $fleet_obj, $fleet, $origin, $target)
{
    global $db_prefix;
    $text = "\nФлот достигает заданных координат\n" . "<a href=\"javascript:showGalaxy(" . $target['g'] . "," . $target['s'] . "," . $target['p'] . ")\">[" . $target['g'] . ":" . $target['s'] . ":" . $target['p'] . "]</a>\n";
    if (!HasPlanet($target['g'], $target['s'], $target['p'])) {
        // если количество планет империи больше максимума, то не основывать новую колонию.
        $query = "SELECT * FROM " . $db_prefix . "planets WHERE owner_id = '" . $fleet_obj['owner_id'] . "' AND (type > 0 AND type < 10000);";
        $result = dbquery($query);
        $num_planets = dbrows($result);
        if ($num_planets >= 9) {
            $text .= ", и устанавливает, что эта планета пригодна для колонизации. Вскоре после начала освоения планеты поступает сообщение о беспорядках на главной планете, так как империя становится слишком большой и люди возвращаются обратно.\n";
            // Добавить покинутую колонию.
            $id = CreateAbandonedColony($target['g'], $target['s'], $target['p'], $queue['end']);
        } else {
            $text .= ", находит там новую планету и сразу же начинает её освоение.\n";
            // Создать новую колонию.
            $id = CreatePlanet($target['g'], $target['s'], $target['p'], $fleet_obj['owner_id'], 1, 0, 0, $queue['end']);
            Debug("Игроком " . $origin['owner_id'] . " колонизирована планета {$id} [" . $target['g'] . ":" . $target['s'] . ":" . $target['p'] . "]");
            // Отнять от флота 1 колонизатор
            if ($fleet[208] > 0) {
                $fleet[208]--;
                $met = $kris = $deut = $energy = 0;
                $cost = ShipyardPrice(208);
                AdjustStats($origin['owner_id'], $cost['m'] + $cost['k'] + $cost['d'], 1, 0, '-');
                RecalcRanks();
            }
        }
        // Вернуть флот, если что-то осталось.
        $fleetmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
        $num_ships = 0;
        foreach ($fleetmap as $i => $gid) {
            $num_ships += $fleet[$gid];
        }
        if ($num_ships > 0) {
            if ($target['type'] == 10002) {
                DestroyPlanet($target['planet_id']);
            }
            $target = GetPlanet($id);
            DispatchFleet($fleet, $origin, $target, 107, $fleet_obj['flight_time'], $fleet_obj['m'], $fleet_obj['k'], $fleet_obj['d'], $fleet_obj['fuel'] / 2, $queue['end']);
        } else {
            if ($target['type'] == 10002) {
                DestroyPlanet($target['planet_id']);
            }
        }
    } else {
        $text .= ", но не находит там пригодной для колонизации планеты. В подавленном состоянии поселенцы возвращаются обратно.\n";
        // Вернуть флот.
        DispatchFleet($fleet, $origin, $target, 107, $fleet_obj['flight_time'], $fleet_obj['m'], $fleet_obj['k'], $fleet_obj['d'], $fleet_obj['fuel'] / 2, $queue['end']);
    }
    SendMessage($fleet_obj['owner_id'], "Поселенцы", "Доклад поселенцев", $text, 5, $queue['end']);
}
Exemplo n.º 3
0
function Queue_Research_End($queue)
{
    global $db_prefix, $GlobalUser;
    $id = $queue['obj_id'];
    $lvl = $queue['level'];
    $planet_id = $queue['sub_id'];
    $player_id = $queue['owner_id'];
    // Рассчитать производство планеты с момента последнего обновления.
    $planet = GetPlanet($planet_id);
    $planet = ProdResources($planet, $planet['lastpeek'], $queue['end']);
    // Обновить уровень исследования в базе данных.
    $query = "UPDATE " . $db_prefix . "users SET " . ('r' . $id) . " = {$lvl} WHERE player_id = {$player_id}";
    dbquery($query);
    RemoveQueue($queue['task_id']);
    // Добавить очки.
    $res = ResearchPrice($id, $lvl);
    $m = $res['m'];
    $k = $res['k'];
    $d = $res['d'];
    $e = $res['e'];
    $points = $m + $k + $d;
    AdjustStats($queue['owner_id'], $points, 0, 1, '+');
    RecalcRanks();
    Debug("Исследование " . loca("NAME_{$id}") . " уровня {$lvl} для пользователя {$player_id} завершено.");
    if ($GlobalUser['player_id'] == $player_id) {
        InvalidateUserCache();
        $GlobalUser = LoadUser($player_id);
        // обновить данные текущего пользователя
    }
}
Exemplo n.º 4
0
function Exp_FleetFound($queue, $fleet_obj, $fleet, $origin, $target)
{
    global $UnitParam;
    $fleetmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
    $small = array(loca("EXP_FLEET_SMALL_1"), loca("EXP_FLEET_SMALL_2"), loca("EXP_FLEET_SMALL_3"), loca("EXP_FLEET_SMALL_4"));
    $medium = array(loca("EXP_FLEET_MED_1"), loca("EXP_FLEET_MED_2"));
    $large = array(loca("EXP_FLEET_LARGE_1"), loca("EXP_FLEET_LARGE_2"));
    $footer = array(loca("EXP_FLEET_LOGBOOK_1"), loca("EXP_FLEET_LOGBOOK_2"), loca("EXP_FLEET_LOGBOOK_3"));
    $points = $fpoints = 0;
    $found = array();
    // Рассчитать количество найденного флота
    $chance = mt_rand(0, 99);
    if ($chance >= 99) {
        // крупный
        $roll = mt_rand(101, 200);
        $n = mt_rand(0, count($large) - 1);
        $msg = $large[$n];
    } else {
        if ($chance >= 90) {
            // средний
            $roll = mt_rand(51, 100);
            $n = mt_rand(0, count($medium) - 1);
            $msg = $medium[$n];
        } else {
            // маленький
            $roll = mt_rand(2, 50);
            $n = mt_rand(0, count($small) - 1);
            $msg = $small[$n];
        }
    }
    // Рассчитать структуру найденного флота.
    $epoints = min(ExpPoints($fleet), ExpUpperLimit());
    $structure = max(7000, floor($roll * $epoints / 2));
    $no_structure = false;
    // Возможные типы найденных кораблей
    if ($fleet[210] > 0) {
        $found = array(210, 202);
    }
    // шпик
    if ($fleet[202] > 0) {
        $found = array(210, 202, 203);
    }
    // мт
    if ($fleet[204] > 0) {
        $found = array(210, 202, 204, 203);
    }
    // ли
    if ($fleet[203] > 0) {
        $found = array(210, 202, 204, 203, 205);
    }
    // бт
    if ($fleet[205] > 0) {
        $found = array(210, 202, 204, 203, 205, 206);
    }
    // ти
    if ($fleet[206] > 0) {
        $found = array(210, 202, 204, 203, 205, 206, 207);
    }
    // крейсер
    if ($fleet[207] > 0) {
        $found = array(210, 202, 204, 203, 205, 206, 207, 215);
    }
    // линкор
    if ($fleet[215] > 0) {
        $found = array(210, 202, 204, 203, 205, 206, 207, 215, 211);
    }
    // линейка
    if ($fleet[211] > 0) {
        $found = array(210, 202, 204, 203, 205, 206, 207, 215, 211, 213);
    }
    // бомбер
    if ($fleet[213] > 0) {
        $found = array(210, 202, 204, 203, 205, 206, 207, 215, 211, 213);
    }
    // уник
    // Составить список найденных типов кораблей, каждый тип корабля может быть найден с равной вероятностью.
    $found_ids = array();
    if (count($found) > 0) {
        shuffle($found);
        $chance = floor(1 / count($found) * 100);
        foreach ($found as $i => $id) {
            $roll = mt_rand(0, 99);
            if ($roll < $chance) {
                $found_ids[] = $id;
            }
        }
    }
    // Соcтавить список найденного флота.
    $found_fleet = array();
    foreach ($found_ids as $i => $id) {
        $max = floor($structure / $UnitParam[$id][0]);
        if ($max > 0) {
            $amount = mt_rand(1, $max);
        } else {
            $amount = 0;
        }
        if ($amount == 0) {
            $no_structure = true;
            break;
        }
        // не хватило структуры для остального флота
        $found_fleet[$id] = $amount;
        $structure -= $amount * $UnitParam[$id][0];
    }
    // Вывести список найденного флота и посчитать его стоимость.
    if (count($found_fleet) > 0) {
        $msg .= loca("EXP_FLEET_FOUND");
        foreach ($found_fleet as $id => $amount) {
            $res = ShipyardPrice($id);
            $m = $res['m'];
            $k = $res['k'];
            $d = $res['d'];
            $e = $res['e'];
            $points += ($m + $k + $d) * $amount;
            $fpoints += $amount;
            $msg .= "<br>" . loca("NAME_{$id}") . " " . nicenum($amount);
            $fleet[$id] += $amount;
            // Добавить корабли к экспедиционному флоту
        }
    }
    // Зачислить очки, если найден хотя бы один корабль
    if ($fpoints > 0) {
        AdjustStats($fleet_obj['owner_id'], $points, $fpoints, 0, '+');
        RecalcRanks();
    }
    if ($no_structure) {
        $n = mt_rand(0, count($footer) - 1);
        $msg .= "<br><br>" . $footer[$n];
    }
    // Вернуть флот.
    // В качестве времени полёта используется время удержания.
    DispatchFleet($fleet, $origin, $target, 115, $fleet_obj['deploy_time'], $fleet_obj['m'], $fleet_obj['k'], $fleet_obj['d'], 0, $queue['end']);
    return $msg;
}
Exemplo n.º 5
0
function ExpeditionBattle($fleet_id, $pirates, $level, $when)
{
    global $db_prefix;
    global $GlobalUni;
    $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);
    $a_result = array(0 => "combatreport_ididattack_iwon", 1 => "combatreport_ididattack_ilost", 2 => "combatreport_ididattack_draw");
    global $db_host, $db_user, $db_pass, $db_name, $db_prefix;
    $a = array();
    $d = array();
    $unitab = LoadUniverse();
    $fid = $unitab['fid'];
    $did = $unitab['did'];
    $rf = $unitab['rapid'];
    // *** Союзные атаки не должны вступать битву. Игнорировать их.
    $f = LoadFleet($fleet_id);
    // *** Сгенерировать исходные данные
    // Список атакующих
    $anum = 0;
    $a[0] = LoadUser($f['owner_id']);
    $a[0]['fleet'] = array();
    foreach ($fleetmap as $i => $gid) {
        $a[0]['fleet'][$gid] = abs($f["ship{$gid}"]);
    }
    $start_planet = GetPlanet($f['start_planet']);
    $a[0]['g'] = $start_planet['g'];
    $a[0]['s'] = $start_planet['s'];
    $a[0]['p'] = $start_planet['p'];
    $a[0]['id'] = $fleet_id;
    $a[0]['points'] = $a[0]['fpoints'] = 0;
    $anum++;
    // Список обороняющихся
    $dnum = 0;
    $d[0] = LoadUser(99999);
    if ($pirates) {
        $d[0]['oname'] = "Piraten";
        $d[0]['r109'] = max(0, $a[0]['r109'] - 3);
        $d[0]['r110'] = max(0, $a[0]['r110'] - 3);
        $d[0]['r111'] = max(0, $a[0]['r111'] - 3);
    } else {
        $d[0]['oname'] = "Aliens";
        $d[0]['r109'] = $a[0]['r109'] + 3;
        $d[0]['r110'] = $a[0]['r110'] + 3;
        $d[0]['r111'] = $a[0]['r111'] + 3;
    }
    $d[0]['fleet'] = array();
    $d[0]['defense'] = array();
    foreach ($fleetmap as $i => $gid) {
        // Определить состав флота пиратов / чужих
        if ($pirates) {
            // Пиратский флот, Округление состава флота вниз.
            // Нормальный - 30% +/- 3% от количества кораблей вашего флота + 5 ЛИ
            // Сильный - 50% +/- 5% от количества кораблей вашего флота + 3 Крейсера
            // Оч. Сильный - 80% +/- 8% от количества кораблей вашего флота + 2 Линка
            if ($a[0]['fleet'][$gid] > 0) {
                if ($level == 0) {
                    $ratio = mt_rand(27, 33) / 100;
                } else {
                    if ($level == 1) {
                        $ratio = mt_rand(45, 55) / 100;
                    } else {
                        if ($level == 2) {
                            $ratio = mt_rand(72, 88) / 100;
                        }
                    }
                }
                $d[0]['fleet'][$gid] = floor($a[0]['fleet'][$gid] * $ratio);
            } else {
                $d[0]['fleet'][$gid] = 0;
            }
        } else {
            // Флот Чужих, Округление состава флота вверх.
            // Нормальный - 40% +/- 4% от количества кораблей вашего флота + 5 ТИ
            // Сильный - 60% +/- 6% от количества кораблей вашего флота + 3 Линейки
            // Оч. Сильный - 90% +/- 9% от количества кораблей вашего флота + 2 Уника
            if ($a[0]['fleet'][$gid] > 0) {
                if ($level == 0) {
                    $ratio = mt_rand(36, 44) / 100;
                } else {
                    if ($level == 1) {
                        $ratio = mt_rand(54, 66) / 100;
                    } else {
                        if ($level == 2) {
                            $ratio = mt_rand(81, 99) / 100;
                        }
                    }
                }
                $d[0]['fleet'][$gid] = ceil($a[0]['fleet'][$gid] * $ratio);
            } else {
                $d[0]['fleet'][$gid] = 0;
            }
        }
    }
    if ($pirates) {
        if ($level == 0) {
            $d[0]['fleet'][204] += 5;
        } else {
            if ($level == 1) {
                $d[0]['fleet'][206] += 3;
            } else {
                if ($level == 2) {
                    $d[0]['fleet'][207] += 2;
                }
            }
        }
    } else {
        if ($level == 0) {
            $d[0]['fleet'][205] += 5;
        } else {
            if ($level == 1) {
                $d[0]['fleet'][215] += 3;
            } else {
                if ($level == 2) {
                    $d[0]['fleet'][213] += 2;
                }
            }
        }
    }
    foreach ($defmap as $i => $gid) {
        $d[0]['defense'][$gid] = 0;
    }
    $target_planet = GetPlanet($f['target_planet']);
    $d[0]['g'] = $target_planet['g'];
    $d[0]['s'] = $target_planet['s'];
    $d[0]['p'] = $target_planet['p'];
    $d[0]['id'] = $target_planet['planet_id'];
    $d[0]['points'] = $d[0]['fpoints'] = 0;
    $dnum++;
    $source .= "Rapidfire = {$rf}\n";
    $source .= "FID = {$fid}\n";
    $source .= "DID = {$did}\n";
    $source .= "Attackers = " . $anum . "\n";
    $source .= "Defenders = " . $dnum . "\n";
    foreach ($a as $num => $attacker) {
        $source .= "Attacker" . $num . " = (<" . $attacker['oname'] . "> ";
        $source .= $attacker['id'] . " ";
        $source .= $attacker['g'] . " " . $attacker['s'] . " " . $attacker['p'] . " ";
        $source .= $attacker['r109'] . " " . $attacker['r110'] . " " . $attacker['r111'] . " ";
        foreach ($fleetmap as $i => $gid) {
            $source .= $attacker['fleet'][$gid] . " ";
        }
        $source .= ")\n";
    }
    foreach ($d as $num => $defender) {
        $source .= "Defender" . $num . " = (<" . $defender['oname'] . "> ";
        $source .= $defender['id'] . " ";
        $source .= $defender['g'] . " " . $defender['s'] . " " . $defender['p'] . " ";
        $source .= $defender['r109'] . " " . $defender['r110'] . " " . $defender['r111'] . " ";
        foreach ($fleetmap as $i => $gid) {
            $source .= $defender['fleet'][$gid] . " ";
        }
        foreach ($defmap as $i => $gid) {
            $source .= $defender['defense'][$gid] . " ";
        }
        $source .= ")\n";
    }
    $battle = array(null, $source, "", "", $when);
    $battle_id = AddDBRow($battle, "battledata");
    $bf = fopen("battledata/battle_" . $battle_id . ".txt", "w");
    fwrite($bf, $source);
    fclose($bf);
    // *** Передать данные боевому движку
    $arg = "\"battle_id={$battle_id}\"";
    system($unitab['battle_engine'] . " {$arg}");
    // *** Обработать выходные данные
    $battleres = file_get_contents("battleresult/battle_" . $battle_id . ".txt");
    $res = unserialize($battleres);
    // Определить исход битвы.
    if ($res['result'] === "awon") {
        $battle_result = 0;
    } else {
        if ($res['result'] === "dwon") {
            $battle_result = 1;
        } else {
            $battle_result = 2;
        }
    }
    // Рассчитать общие потери (учитывать дейтерий и восстановленную оборону)
    $aloss = $dloss = 0;
    $loss = CalcLosses($a, $d, $res, array());
    $a = $loss['a'];
    $d = $loss['d'];
    $aloss = $loss['aloss'];
    $dloss = $loss['dloss'];
    // Сгенерировать боевой доклад.
    loca_add("battlereport", $GlobalUni['lang']);
    loca_add("technames", $GlobalUni['lang']);
    $text = ShortBattleReport($res, $when);
    // Разослать сообщения
    $mailbox = array();
    // Если флот уничтожен за 1 или 2 раунда - не показывать лог боя для атакующих.
    if (count($res['rounds']) <= 2 && $battle_result == 1) {
        $text = "Контакт с флотом потерян. <br> Это означает, что его уничтожили первым же залпом <!--A:{$aloss},W:{$dloss}-->";
    }
    foreach ($a as $i => $user) {
        if ($mailbox[$user['player_id']] == true) {
            continue;
        }
        $bericht = SendMessage($user['player_id'], "Командование флотом", "Боевой доклад", $text, 6, $when);
        MarkMessage($user['player_id'], $bericht);
        $subj = "<a href=\"#\" onclick=\"fenster(\\'index.php?page=bericht&session={PUBLIC_SESSION}&bericht={$bericht}\\', \\'Bericht_Kampf\\');\" ><span class=\"" . $a_result[$battle_result] . "\">Боевой доклад [" . $target_planet['g'] . ":" . $target_planet['s'] . ":" . $target_planet['p'] . "] (V:" . nicenum($dloss) . ",A:" . nicenum($aloss) . ")</span></a>";
        SendMessage($user['player_id'], "Командование флотом", $subj, "", 2, $when);
        $mailbox[$user['player_id']] = true;
    }
    // Обновить лог боевого доклада
    $subj = "<a href=\"#\" onclick=\"fenster(\\'index.php?page=admin&session={PUBLIC_SESSION}&mode=BattleReport&bericht={$battle_id}\\', \\'Bericht_Kampf\\');\" ><span class=\"" . $a_result[$battle_result] . "\">Боевой доклад [" . $target_planet['g'] . ":" . $target_planet['s'] . ":" . $target_planet['p'] . "] (V:" . nicenum($dloss) . ",A:" . nicenum($aloss) . ")</span></a>";
    $query = "UPDATE " . $db_prefix . "battledata SET title = '" . $subj . "', report = '" . $text . "' WHERE battle_id = {$battle_id};";
    dbquery($query);
    // Почистить старые боевые доклады
    $ago = $when - 2 * 7 * 24 * 60 * 60;
    $query = "DELETE FROM " . $db_prefix . "battledata WHERE date < {$ago};";
    dbquery($query);
    // Модифицировать флот
    WritebackBattleResultsExpedition($a, $d, $res);
    // Изменить статистику игроков
    foreach ($a as $i => $user) {
        AdjustStats($user['player_id'], $user['points'], $user['fpoints'], 0, '-');
    }
    RecalcRanks();
    // Чистим промежуточные данные боевого движка
    unlink("battledata/battle_" . $battle_id . ".txt");
    unlink("battleresult/battle_" . $battle_id . ".txt");
    return $battle_result;
}