Exemple #1
0
function RecalcStats($player_id)
{
    global $db_prefix;
    $m = $k = $d = $e = 0;
    $points = $fpoints = $rpoints = 0;
    // Планеты/луны + стоящие флоты
    $query = "SELECT * FROM " . $db_prefix . "planets WHERE owner_id = '" . $player_id . "'";
    $result = dbquery($query);
    $rows = dbrows($result);
    while ($rows--) {
        $planet = dbarray($result);
        if ($planet['type'] >= 10000) {
            continue;
        }
        // считать только планеты и луны.
        $pp = PlanetPrice($planet);
        $points += $pp['points'];
        $fpoints += $pp['fpoints'];
    }
    // Исследования
    $resmap = array(106, 108, 109, 110, 111, 113, 114, 115, 117, 118, 120, 121, 122, 123, 124, 199);
    $user = LoadUser($player_id);
    if ($user != null) {
        foreach ($resmap as $i => $gid) {
            $level = $user["r{$gid}"];
            $rpoints += $level;
            if ($level > 0) {
                for ($lv = 1; $lv <= $level; $lv++) {
                    $res = ResearchPrice($gid, $lv);
                    $m = $res['m'];
                    $k = $res['k'];
                    $d = $res['d'];
                    $e = $res['e'];
                    $points += $m + $k + $d;
                }
            }
        }
    }
    // Летящие флоты
    $fleetmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
    $result = EnumOwnFleetQueue($player_id, 1);
    $rows = dbrows($result);
    while ($rows--) {
        $queue = dbarray($result);
        $fleet = LoadFleet($queue['sub_id']);
        foreach ($fleetmap as $i => $gid) {
            // Флот
            $level = $fleet["ship{$gid}"];
            if ($level > 0) {
                $res = ShipyardPrice($gid);
                $m = $res['m'];
                $k = $res['k'];
                $d = $res['d'];
                $e = $res['e'];
                $points += ($m + $k + $d) * $level;
                $fpoints += $level;
            }
        }
        if ($fleet['ipm_amount'] > 0) {
            // МПР
            $res = ShipyardPrice(503);
            $m = $res['m'];
            $k = $res['k'];
            $d = $res['d'];
            $e = $res['e'];
            $points += ($m + $k + $d) * $fleet['ipm_amount'];
        }
    }
    $query = "UPDATE " . $db_prefix . "users SET ";
    $query .= "score1={$points}, score2={$fpoints}, score3={$rpoints} WHERE player_id = {$player_id} AND (banned <> 1 OR admin > 0);";
    dbquery($query);
}
Exemple #2
0
                                          if (key_exists('aktion', $_POST)) {
                                              $amount1 = min($aktplanet['d502'], intval($_POST['ab502']));
                                              if ($amount1 > 0) {
                                                  $aktplanet['d502'] -= $amount1;
                                                  $res = ShipyardPrice(502);
                                                  $m = $res['m'];
                                                  $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> 
Exemple #3
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']);
}
 echo "<tr>    \t\t\t";
 if ($GlobalUser['useskin']) {
     echo "                <td class=l>\n";
     echo "    \t\t\t<a href=index.php?page=infos&session={$session}&gid={$id}>\n";
     echo "    \t\t\t<img border='0' src=\"" . UserSkin() . "gebaeude/{$id}.gif\" align='top' width='120' height='120'>\n";
     echo "    \t\t\t</a>\n";
     echo "    \t\t\t</td>\n";
     echo "        <td class=l >";
 } else {
     echo "        <td class=l colspan=2>";
 }
 echo "<a href=index.php?page=infos&session={$session}&gid={$id}>" . loca("NAME_{$id}") . "</a>";
 if ($aktplanet['d' . $id]) {
     echo "</a> (в наличии " . $aktplanet['d' . $id] . ")";
 }
 $res = ShipyardPrice($id);
 $m = $res['m'];
 $k = $res['k'];
 $d = $res['d'];
 $e = $res['e'];
 echo "<br>" . loca("SHORT_{$id}") . "<br>Стоимость:";
 if ($m) {
     echo " Металл: <b>" . nicenum($m) . "</b>";
 }
 if ($k) {
     echo " Кристалл: <b>" . nicenum($k) . "</b>";
 }
 if ($d) {
     echo " Дейтерий: <b>" . nicenum($d) . "</b>";
 }
 if ($e) {
Exemple #5
0
function FleetPrice($fleet_obj)
{
    $fleetmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
    $m = $k = $d = $e = 0;
    $points = $fpoints = 0;
    $price = array();
    foreach ($fleetmap as $i => $gid) {
        // Флот
        $level = $fleet_obj["ship{$gid}"];
        if ($level > 0) {
            $res = ShipyardPrice($gid);
            $m = $res['m'];
            $k = $res['k'];
            $d = $res['d'];
            $e = $res['e'];
            $points += ($m + $k + $d) * $level;
            $fpoints += $level;
        }
    }
    $price['points'] = $points;
    $price['fpoints'] = $fpoints;
    return $price;
}
 foreach ($plist as $j => $planet) {
     $sum += $planet["d{$def}"];
 }
 if ($sum == 0) {
     continue;
 }
 echo "        <tr height=\"20\">\n";
 echo "            <th width=\"75\">\n";
 echo "                <a href=\"index.php?page=infos&session={$session}&gid={$def}&planettype={$planettype}\">\n\n";
 echo "                    " . loca("NAME_{$def}") . "                </a>\n";
 echo "            </th>\n\n";
 foreach ($plist as $j => $planet) {
     $amount = $planet["d{$def}"];
     echo "            <th width=\"75\" >\n";
     if ($amount > 0) {
         $cost = ShipyardPrice($def);
         $m = $cost['m'];
         $k = $cost['k'];
         $d = $cost['d'];
         $e = $cost['e'];
         $meet = IsEnoughResources($planet, $m, $k, $d, $e);
         $color = $meet ? "lime" : "red";
         echo "                <a href=\"index.php?page=buildings&session={$session}&cp=" . $planet['planet_id'] . "&mode=Verteidigung&planettype={$planettype}\">\n";
         echo "                    <font color =\"{$color}\">\n";
         echo "                        " . nicenum($amount) . "                  </font>\n";
         echo "                </a>    \n";
     } else {
         echo "                <font color=\"white\">-</font>\n";
     }
 }
 echo "            <th width=\"75\">" . nicenum($sum) . "</th>\n\n";
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;
}
Exemple #8
0
function Queue_Shipyard_End($queue, $when = 0)
{
    global $db_prefix, $GlobalUser;
    if ($when == 0) {
        $now = time();
    } else {
        $now = $when;
    }
    $gid = $queue['obj_id'];
    $planet_id = $queue['sub_id'];
    $planet = GetPlanet($planet_id);
    $player_id = $planet['owner_id'];
    // Старые значения
    $s = $queue['start'];
    $e = $queue['end'];
    $n = $queue['level'];
    $one = $e - $s;
    // Новые значения
    $done = min($n, floor(($now - $s) / $one));
    $news = $s + $done * $one;
    $newe = $e + $done * $one;
    // Добавить флот на планете
    if ($gid > 400) {
        $query = "UPDATE " . $db_prefix . "planets SET d{$gid} = d{$gid} + {$done} WHERE planet_id = {$planet_id}";
    } else {
        $query = "UPDATE " . $db_prefix . "planets SET f{$gid} = f{$gid} + {$done} WHERE planet_id = {$planet_id}";
    }
    dbquery($query);
    // Добавить очки.
    $res = ShipyardPrice($gid);
    $m = $res['m'];
    $k = $res['k'];
    $d = $res['d'];
    $enrg = $res['e'];
    $points = ($m + $k + $d) * $done;
    if ($gid < 400) {
        $fpoints = $done;
    } else {
        $fpoints = 0;
    }
    AdjustStats($queue['owner_id'], $points, $fpoints, 0, '+');
    // Обновить задание или удалить его, если всё построено.
    if ($done < $n) {
        $query = "UPDATE " . $db_prefix . "queue SET start = {$news}, end = {$newe}, level = level - {$done} WHERE task_id = " . $queue['task_id'];
        dbquery($query);
        //Debug ( "На верфи [".$planet['g'].":".$planet['s'].":".$planet['p']."] ".$planet['name']." построено ".loca("NAME_$gid")." ($done), осталось достроить (".($n-$done).")" );
        if ($one > 60) {
            RecalcRanks();
        }
    } else {
        //Debug ( "На верфи [".$planet['g'].":".$planet['s'].":".$planet['p']."] ".$planet['name']." завершена постройка ".loca("NAME_$gid")." ($done)" );
        RemoveQueue($queue['task_id']);
        RecalcRanks();
    }
    if ($GlobalUser['player_id'] == $player_id) {
        InvalidateUserCache();
        $GlobalUser = LoadUser($player_id);
        // обновить данные текущего пользователя
    }
}
function CalcLosses($a, $d, $res, $repaired)
{
    $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);
    $amap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
    $dmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 401, 402, 403, 404, 405, 406, 407, 408);
    $aprice = $dprice = 0;
    // Стоимость юнитов до боя.
    foreach ($a as $i => $attacker) {
        foreach ($fleetmap as $n => $gid) {
            $amount = $attacker['fleet'][$gid];
            if ($amount > 0) {
                $cost = ShipyardPrice($gid);
                $aprice += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                $a[$i]['points'] += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                $a[$i]['fpoints'] += $amount;
            }
        }
    }
    foreach ($d as $i => $defender) {
        foreach ($fleetmap as $n => $gid) {
            $amount = $defender['fleet'][$gid];
            if ($amount > 0) {
                $cost = ShipyardPrice($gid);
                $dprice += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                $d[$i]['points'] += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                $d[$i]['fpoints'] += $amount;
            }
        }
        foreach ($defmap as $n => $gid) {
            $amount = $defender['defense'][$gid];
            if ($amount > 0) {
                $cost = ShipyardPrice($gid);
                $dprice += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                $d[$i]['points'] += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
            }
        }
    }
    // Стоимость юнитов в последнем раунде.
    $rounds = count($res['rounds']);
    if ($rounds > 0) {
        $last = $res['rounds'][$rounds - 1];
        $alast = $dlast = 0;
        foreach ($last['attackers'] as $i => $attacker) {
            foreach ($amap as $n => $gid) {
                $amount = $attacker[$gid];
                if ($amount > 0) {
                    $cost = ShipyardPrice($gid);
                    $alast += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                    $a[$i]['points'] -= ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                    $a[$i]['fpoints'] -= $amount;
                }
            }
        }
        foreach ($last['defenders'] as $i => $defender) {
            foreach ($dmap as $n => $gid) {
                if ($gid > 400 && $i == 0) {
                    $amount = $defender[$gid] + $repaired[$gid];
                } else {
                    $amount = $defender[$gid];
                }
                if ($amount > 0) {
                    $cost = ShipyardPrice($gid);
                    $dlast += ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                    $d[$i]['points'] -= ($cost['m'] + $cost['k'] + $cost['d']) * $amount;
                    if ($gid < 400) {
                        $d[$i]['fpoints'] -= $amount;
                    }
                }
            }
        }
        $aloss = $aprice - $alast;
        $dloss = $dprice - $dlast;
    } else {
        foreach ($a as $i => $attacker) {
            $a[$i]['points'] = $a[$i]['fpoints'] = 0;
        }
        foreach ($d as $i => $defender) {
            $d[$i]['points'] = $d[$i]['fpoints'] = 0;
        }
        $aloss = $dloss = 0;
    }
    return array('a' => $a, 'd' => $d, 'aloss' => $aloss, 'dloss' => $dloss);
}