Example #1
0
function Admin_Queue()
{
    global $session;
    global $db_prefix;
    global $GlobalUser;
    // Обработка POST-запросов.
    $player_id = 0;
    if (method() === "POST") {
        if (key_exists("player", $_POST)) {
            // Фильтр по имени игрока
            $query = "SELECT * FROM " . $db_prefix . "users WHERE oname LIKE '" . $_POST['player'] . "%'";
            $result = dbquery($query);
            if (dbrows($result) > 0) {
                $user = dbarray($result);
                $player_id = $user['player_id'];
            }
        }
        if (key_exists("order_end", $_POST) && $GlobalUser['admin'] >= 2) {
            // Завершить задание
            $id = intval($_POST['order_end']);
            $now = time();
            $query = "UPDATE " . $db_prefix . "queue SET end={$now} WHERE task_id={$id}";
            dbquery($query);
        }
        if (key_exists("order_remove", $_POST) && $GlobalUser['admin'] >= 2) {
            // Удалить задание
            RemoveQueue(intval($_POST['order_remove']));
        }
    }
    if ($player_id > 0) {
        $query = "SELECT * FROM " . $db_prefix . "queue WHERE (type <> 'Fleet' AND type <> 'CommanderOff') AND owner_id={$player_id} ORDER BY end ASC, prio DESC";
    } else {
        $query = "SELECT * FROM " . $db_prefix . "queue WHERE (type <> 'Fleet' AND type <> 'CommanderOff') ORDER BY end ASC, prio DESC LIMIT 50";
    }
    $result = dbquery($query);
    $now = time();
    AdminPanel();
    echo "<table>\n";
    echo "<tr><td class=c>Время окончания</td><td class=c>Игрок</td><td class=c>Тип задания</td><td class=c>Описание</td><td class=c>Приоритет</td><td class=c>ID</td><td class=c>Управление</td></tr>\n";
    $anz = $rows = dbrows($result);
    $bxx = 1;
    while ($rows--) {
        $queue = dbarray($result);
        $user = LoadUser($queue['owner_id']);
        $pid = $user['player_id'];
        echo "<tr><th> <table><tr><th><div id='bxx" . $bxx . "' title='" . ($queue['end'] - $now) . "' star='" . $queue['start'] . "'></th>";
        echo "<tr><th>" . date("d.m.Y H:i:s", $queue['end']) . "</th></tr></table></th><th><a href=\"index.php?page=admin&session={$session}&mode=Users&player_id={$pid}\">" . $user['oname'] . "</a></th><th>" . $queue['type'] . "</th><th>" . QueueDesc($queue) . "</th><th>" . $queue['prio'] . "</th><th>" . $queue['task_id'] . "</th>\n";
        ?>
    <th> 
         <form action="index.php?page=admin&session=<?php 
        echo $session;
        ?>
&mode=Queue" method="POST">
    <input type="hidden" name="order_end" value="<?php 
        echo $queue['task_id'];
        ?>
" />
        <input type="submit" value="Завершить" />
     </form>
         <form action="index.php?page=admin&session=<?php 
        echo $session;
        ?>
&mode=Queue" method="POST" style="border: 1px solid red">
    <input type="hidden" name="order_remove" value="<?php 
        echo $queue['task_id'];
        ?>
" />
        <input type="submit" value="Удалить" />
     </form>
    </th>
</tr>
<?php 
        $bxx++;
    }
    echo "<script language=javascript>anz={$anz};t();</script>\n";
    echo "</table>\n";
    $playername = "";
    if ($player_id > 0) {
        $user = LoadUser($player_id);
        $playername = $user['name'];
    }
    ?>

    <br/>
    <form action="index.php?page=admin&session=<?php 
    echo $session;
    ?>
&mode=Queue" method="POST">
    Показать задания игрока : <input size=15 name="player" value="<?php 
    echo $playername;
    ?>
">
    <input type="submit" value="Отправить">
    </form>

<?php 
}
Example #2
0
function Queue_Fleet_End($queue)
{
    global $GlobalUser;
    $fleetmap = array(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215);
    $fleet_obj = LoadFleet($queue['sub_id']);
    if ($fleet_obj['m'] < 0) {
        $fleet_obj['m'] = 0;
    }
    if ($fleet_obj['k'] < 0) {
        $fleet_obj['k'] = 0;
    }
    if ($fleet_obj['d'] < 0) {
        $fleet_obj['d'] = 0;
    }
    if ($fleet_obj == null) {
        return;
    }
    $fleet = array();
    foreach ($fleetmap as $i => $gid) {
        $fleet[$gid] = $fleet_obj["ship{$gid}"];
    }
    // Обновить выработку ресурсов на планетах
    $origin = GetPlanet($fleet_obj['start_planet']);
    $target = GetPlanet($fleet_obj['target_planet']);
    $target = ProdResources($target, $target['lastpeek'], $queue['end']);
    $origin = ProdResources($origin, $origin['lastpeek'], $queue['end']);
    switch ($fleet_obj['mission']) {
        case 1:
            AttackArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 101:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 2:
            AttackArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 102:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 3:
            TransportArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 103:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 4:
            DeployArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 104:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 5:
            HoldingArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 205:
            HoldingHold($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 105:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 6:
            SpyArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 106:
            SpyReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 7:
            ColonizationArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 107:
            ColonizationReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 8:
            RecycleArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 108:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 9:
            DestroyArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 109:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 15:
            ExpeditionArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 215:
            ExpeditionHold($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 115:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 20:
            RocketAttackArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 21:
            AttackArrive($queue, $fleet_obj, $fleet, $origin, $target);
            break;
        case 121:
            CommonReturn($queue, $fleet_obj, $fleet, $origin, $target);
            break;
            //default: Error ( "Неизвестное задание для флота: " . $fleet_obj['mission'] ); break;
    }
    if ($fleet_obj['union_id'] && $fleet_obj['mission'] < 100) {
        $union_id = $fleet_obj['union_id'];
        $result = EnumUnionFleets($union_id);
        $rows = dbrows($result);
        while ($rows--) {
            $fleet_obj = dbarray($result);
            $queue = GetFleetQueue($fleet_obj['fleet_id']);
            DeleteFleet($fleet_obj['fleet_id']);
            // удалить флот
            RemoveQueue($queue['task_id']);
            // удалить задание
        }
        RemoveUnion($union_id);
        // удалить союз
    } else {
        DeleteFleet($fleet_obj['fleet_id']);
        // удалить флот
        RemoveQueue($queue['task_id']);
        // удалить задание
    }
    $player_id = $fleet_obj['owner_id'];
    if ($GlobalUser['player_id'] == $player_id) {
        InvalidateUserCache();
        $GlobalUser = LoadUser($player_id);
        // обновить данные текущего пользователя
    }
}
Example #3
0
function Queue_Coupon_End($queue)
{
    global $db_prefix;
    $now = $queue['end'];
    $ip = $_SERVER['REMOTE_ADDR'];
    // Выбрать пользователей согласно критериям.
    $inactive_days = $queue['obj_id'] >> 16 & 0xffff;
    $ingame_days = $queue['obj_id'] & 0xffff;
    $query = "SELECT * FROM " . $db_prefix . "users WHERE regdate < " . ($now - $ingame_days * 24 * 60 * 60) . " AND lastclick >= " . ($now - $inactive_days * 24 * 60 * 60);
    $result = dbquery($query);
    while ($user = dbarray($result)) {
        $code = AddCoupon($queue['sub_id']);
        SendCoupon($user, $code);
    }
    // Продлить или завершить задание.
    $seconds = $queue['level'] * 24 * 60 * 60;
    if ($seconds > 0) {
        ProlongQueue($queue['task_id'], $seconds);
    } else {
        RemoveQueue($queue['task_id']);
    }
}
Example #4
0
function Queue_Debug_End($queue)
{
    RemoveQueue($queue['task_id']);
}
Example #5
0
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']);
                    // удалить задание
                }
            }
        }
    }
}
Example #6
0
function ExecuteBlock($queue, $block, $childs)
{
    global $db_prefix, $BotID, $BotNow;
    $BotNow = $queue['end'];
    $BotID = $queue['owner_id'];
    $strat_id = $queue['sub_id'];
    #    Debug ( "Bot trace : " . $block['category'] . "(".$block['key']."): " . $block['text'] );
    switch ($block['category']) {
        case "Start":
            $block_id = $childs[0]['to'];
            AddBotQueue($BotID, $strat_id, $block_id, $BotNow, 0);
            RemoveQueue($queue['task_id']);
            break;
        case "End":
            RemoveQueue($queue['task_id']);
            // Просто удалить блок, тем самым в очереди не остается ни одного задания AI исполняемой стратегии
            break;
        case "Label":
            // Начать выполнение новой цепочки
            // Выбрать из всех потомков тот, который выходит снизу блока (fromPort="B")
            $block_id = $childs[0]['to'];
            foreach ($childs as $i => $child) {
                if ($child['fromPort'] === "B") {
                    $block_id = $child['to'];
                    break;
                }
            }
            AddBotQueue($BotID, $strat_id, $block_id, $BotNow, 0);
            RemoveQueue($queue['task_id']);
            break;
        case "Branch":
            // Переход на другую метку с указанным текстом.
            $query = "SELECT * FROM " . $db_prefix . "botstrat WHERE id = {$strat_id} LIMIT 1";
            $result = dbquery($query);
            if ($result) {
                $row = dbarray($result);
                $strat = json_decode($row['source'], true);
                $done = false;
                foreach ($strat['nodeDataArray'] as $i => $arr) {
                    if ($arr['text'] === $block['text'] && $arr['category'] === "Label") {
                        AddBotQueue($BotID, $strat_id, $arr['key'], $BotNow, 0);
                        $done = true;
                        break;
                    }
                }
                if (!$done) {
                    Debug("Не удалось найти метку перехода \"" . $block['text'] . "\"");
                }
            } else {
                Debug("Не удалось загрузить текущую стратегию при обработке перехода.");
            }
            RemoveQueue($queue['task_id']);
            break;
        case "Cond":
            // Проверка условия
            $result = eval("return ( " . $block['text'] . " );");
            $block_id = $block_no = 0xdeadbeef;
            $prefix = "";
            foreach ($childs as $i => $child) {
                if (strtolower($child['text']) === "no") {
                    if ($result == false) {
                        #                        Debug ($block['text'] . " : ".$prefix."NO");
                        $block_id = $child['to'];
                        break;
                    } else {
                        $block_no = $child['to'];
                    }
                }
                if (strtolower($child['text']) === "yes" && $result == true) {
                    #                    Debug ($block['text'] . " : YES");
                    $block_id = $child['to'];
                    break;
                }
                if (preg_match('/([0-9]{1,2}|100)%/', $child['text'], $matches) && $result == true) {
                    // случайный переход
                    $prc = str_replace("%", "", $matches[0]);
                    $roll = mt_rand(1, 100);
                    if ($roll <= $prc) {
                        #                        Debug ($block['text'] . " : PROBABLY($roll/$prc) YES");
                        $block_id = $child['to'];
                        break;
                    } else {
                        if ($block_no == 0xdeadbeef) {
                            $prefix = "PROBABLY({$roll}/{$prc}) ";
                            $result = false;
                        } else {
                            #                            Debug ($block['text'] . " : PROBABLY($roll/$prc) NO");
                            $block_id = $block_no;
                            break;
                        }
                    }
                }
                // случайный переход
            }
            if ($block_id != 0xdeadbeef) {
                AddBotQueue($BotID, $strat_id, $block_id, $BotNow, 0);
            } else {
                Debug("Не удалось выбрать условный переход.");
            }
            RemoveQueue($queue['task_id']);
            break;
        default:
            // Обычный блок (квадрат), выход один.
            $sleep = eval($block['text'] . ";");
            if ($sleep == NULL) {
                $sleep = 0;
            }
            $block_id = $childs[0]['to'];
            AddBotQueue($BotID, $strat_id, $block_id, $BotNow, $sleep);
            RemoveQueue($queue['task_id']);
            break;
    }
}
function Admin_Coupons()
{
    global $session;
    global $db_prefix;
    global $GlobalUser;
    global $AdminMessage, $AdminError;
    // Обработка POST-запроса.
    if (method() === "POST" && $GlobalUser['admin'] >= 2) {
        $action = $_GET['action'];
        if ($action === "add_one") {
            $code = AddCoupon(intval($_POST['dm']));
            if ($code == NULL) {
                $AdminError = "<font color=red>Ошибка добавления купона!</font>";
            } else {
                $AdminMessage = "<font color=lime>Купон добавлен : {$code}</font>";
            }
        }
        if ($action === "add_date") {
            $ddmm = explode('.', $_POST['ddmm']);
            $hhmm = explode(':', $_POST['hhmm']);
            $now = time();
            $end = mktime($hhmm[0], $hhmm[1], 0, $ddmm[1], $ddmm[0]);
            $inactive_days = intval($_POST['inactive_days']);
            $ingame_days = intval($_POST['ingame_days']);
            $darkmatter = intval($_POST['darkmatter']);
            $periodic = intval($_POST['periodic']);
            $queue = array(null, 99999, "Coupon", $darkmatter, $inactive_days << 16 | $ingame_days, $periodic, $now, $end, 520);
            AddDBRow($queue, "queue");
        }
    }
    // Обработка GET-запроса.
    if (method() === "GET" && $GlobalUser['admin'] >= 2) {
        $action = $_GET['action'];
        if ($action === "remove_one") {
            DeleteCoupon($_GET['item_id']);
        }
        if ($action === "remove_date") {
            RemoveQueue($_GET['item_id']);
        }
    }
    ?>

<?php 
    echo AdminPanel();
    ?>

<?php 
    // Вывести список купонов.
    $count = 15;
    // количество купонов на страницу
    $from = intval($_GET['from']);
    $total = TotalCoupons();
    $result = EnumCoupons($from, $count);
    $rows = MDBRows($result);
    ?>
   <table border="0" cellpadding="2" cellspacing="1">
    <tr height="20">
     <td class="c">Код</td>
     <td class="c">Тёмная материя</td>
     <td class="c">Активирован</td>
     <td class="c">Вселенная</td>
     <td class="c">Имя игрока</td>
     <td class="c">Действие</td>
    </tr>
<?php 
    while ($rows--) {
        $entry = MDBArray($result);
        echo "        <tr height=\"20\">\n";
        echo "     <th>" . $entry['code'] . "</th>\n";
        echo "     <th>" . nicenum($entry['amount']) . "</th>\n";
        echo "     <th>" . ($entry['used'] ? "<font color=red>Да</font>" : "<font color=lime>Нет</font>") . "</th>\n";
        echo "     <th>" . ($entry['used'] ? $entry['user_uni'] : '-') . "</th>\n";
        echo "     <th>" . $entry['user_name'] . "</th>\n";
        echo "     <th><a href=\"index.php?page=admin&session={$session}&mode=Coupons&action=remove_one&item_id=" . $entry['id'] . "\">Удалить</a></th>\n";
        echo "    </tr>\n";
    }
    ?>
       <tr>
   <th colspan="6">
<?php 
    $url = "index.php?page=admin&session={$session}&mode=Coupons&from";
    if ($from >= $count) {
        echo "     <a href=\"" . $url . "=" . ($from - $count) . "\"><< Предыдущие {$count}</a>&nbsp;&nbsp;&nbsp;&nbsp;\n";
    }
    if ($from < $total && $from + $count < $total) {
        echo "        <a href=\"" . $url . "=" . ($from + $count) . "\">Следующие {$count} >></a>\n";
    }
    ?>
      </th>
   </tr>
   </table>


<table>
<tr><td class="c">Добавить один купон</td></tr>
<tr><td>
<form action="index.php?page=admin&session=<?php 
    echo $session;
    ?>
&mode=Coupons&action=add_one" method="POST">
Темная материя <input type="text" size="10" name="dm"> <input type="submit">
</form>
</td></tr>
</table>

<?php 
    // Вывести активные задания начисления купонов.
    $query = "SELECT * FROM " . $db_prefix . "queue WHERE type = 'Coupon' ORDER BY end ASC";
    $result = dbquery($query);
    while ($queue = dbarray($result)) {
        print_r($queue);
        echo "<br>";
    }
    ?>

<form action="index.php?page=admin&session=<?php 
    echo $session;
    ?>
&mode=Coupons&action=add_date" method="POST">
<table>
<tr><td class="c"colspan=2>Купоны по праздникам</td></tr>
<tr><td>День в формате ДД.ММ <input type="text" size="10" name="ddmm"></td><td>Время в формате ЧЧ:ММ <input type="text" size="10" name="hhmm" value="10:00"></td></tr>
<tr><td>Темной материи на купон</td><td><input type="text" size="10" name="darkmatter" value="100000"> </td></tr>
<tr><td>Отправлять игрокам неактивным не менее</td><td><input type="text" size="10" name="inactive_days" value="7"> дней</td></tr>
<tr><td>Игроки должны играть не менее</td><td><input type="text" size="10" name="ingame_days" value="365"> дней</td></tr>
<tr><td>Периодичность дней (0-без периодичности)</td><td><input type="text" size="10" name="periodic" value="365"> </td></tr>
<tr><td colspan=2><input type="submit"></td></tr>
</table>
</form>


<?php 
}