Example #1
0
function AddNote($player_id, $subj, $text, $prio)
{
    global $db_prefix, $loca_lang;
    $user = LoadUser($player_id);
    $loca_lang = $user['lang'];
    loca_add("notes", $user['lang']);
    // Проверить параметры.
    if ($subj === "") {
        $subj = loca("NOTE_NO_SUBJ");
    }
    if ($text === "") {
        $text = loca("NOTE_NO_TEXT");
    }
    $text = mb_substr($text, 0, 5000, "UTF-8");
    $subj = mb_substr($subj, 0, 30, "UTF-8");
    if ($prio < 0) {
        $prio = 0;
    }
    if ($prio > 2) {
        $prio = 2;
    }
    // Записать заметку в БД.
    $note = array(null, $player_id, $subj, $text, mb_strlen($text, "UTF-8"), $prio, time());
    AddDBRow($note, "notes");
}
Example #2
0
function SendMessage($player_id, $from, $subj, $text, $pm, $when = 0)
{
    global $db_prefix;
    if ($when == 0) {
        $when = time();
    }
    // Обработать параметры.
    if ($pm == 0) {
        $text = mb_substr($text, 0, 2000, "UTF-8");
        //$text = bb ($text);
    }
    // Получить количество сообщений для пользователя.
    $query = "SELECT * FROM " . $db_prefix . "messages WHERE owner_id = {$player_id}";
    $result = dbquery($query);
    if (dbrows($result) >= 127) {
        DeleteOldestMessage($player_id);
    }
    // Добавить сообщение.
    $msg = array(null, $player_id, $pm, $from, $subj, $text, 0, $when);
    $id = AddDBRow($msg, "messages");
    return $id;
}
function Admin_Botedit()
{
    global $session;
    global $db_prefix;
    global $GlobalUser, $GlobalUni;
    // Обработка GET-запроса.
    if (method() === "GET") {
        if ($_GET['action'] === "preview") {
            // Предпросмотр
            $id = intval($_GET['strat']);
            $query = "SELECT * FROM " . $db_prefix . "botstrat WHERE id = {$id} LIMIT 1";
            $result = dbquery($query);
            $row = dbarray($result);
            ob_clean();
            ?>

<html>

 <head>
  <link rel='stylesheet' type='text/css' href='css/default.css' />
  <link rel='stylesheet' type='text/css' href='css/formate.css' />
  <script language="JavaScript">var session="<?php 
            echo $session;
            ?>
";</script>
  <meta http-equiv='content-type' content='text/html; charset=UTF-8' />
<link rel='stylesheet' type='text/css' href='css/combox.css'>
<link rel='stylesheet' type='text/css' href='<?php 
            echo UserSkin();
            ?>
formate.css' />
<title><?php 
            echo $row['name'];
            ?>
</title>
  <script src='js/utilities.js' type='text/javascript'></script>
  <script language='JavaScript'>
  </script>
</head>

<body>

<script type="text/javascript" src="js/tw-sack.js"></script>
<script type="text/javascript" src="js/go.js"></script>
<script type="text/javascript" src="js/go-game.js"></script>

<div id="sample">
  <div style="width:100%; white-space:nowrap; display:none;">
    <span style="display: inline-block; vertical-align: top; padding: 5px; width:100px">
      <div id="myPalette" style="background-color: #344566; border: solid 1px black; height: 500px"></div>
    </span>
    <span style="display: inline-block; vertical-align: top; padding: 5px; width:88%">
      <div id="myDiagram" style="background-color: #344566; border: solid 1px black; height: 500px"></div>
    </span>
  </div>

<input type="text" size="50" id="strategyName" style="display:none;">
<select id="strategyId" style="display:none;">
<option value="<?php 
            echo $row['id'];
            ?>
" selected><?php 
            echo $row['id'];
            ?>
</option>
</select>

  <textarea id="mySavedModel" style="width:100%;height:300px; display:none;">
<?php 
            echo $row['source'];
            ?>
  </textarea>
</div>

<img src="" id="preview_img">

<script type="text/javascript">
    init ();
</script>

</body>

</html>

<?php 
            die;
        }
    }
    // Обработка POST-запроса.
    if (method() === "POST") {
        if ($_POST['action'] === "load") {
            // Загрузить
            $id = intval($_POST['strat']);
            $query = "SELECT * FROM " . $db_prefix . "botstrat WHERE id = {$id} LIMIT 1";
            $result = dbquery($query);
            $row = dbarray($result);
            ob_clean();
            setcookie("uni" . $GlobalUni['num'] . "_" . $GlobalUser['name'] . "_strategy", $id, 9999);
            die($row['source']);
        } else {
            if ($_POST['action'] === "save") {
                // Сохранить
                $id = intval($_POST['strat']);
                // Сохранить текущий исходник в бекап
                $query = "SELECT * FROM " . $db_prefix . "botstrat WHERE id = {$id} LIMIT 1";
                $result = dbquery($query);
                $row = dbarray($result);
                $query = "UPDATE " . $db_prefix . "botstrat SET source = '" . $row['source'] . "' WHERE id = 1;";
                dbquery($query);
                $source = urldecode($_POST['source']);
                $source = addslashes($source);
                $query = "UPDATE " . $db_prefix . "botstrat SET source = '" . $source . "' WHERE id = {$id};";
                dbquery($query);
                ob_clean();
                die;
            } else {
                if ($_POST['action'] === "new") {
                    // Новая стратегия
                    $name = $_POST['name'];
                    $name = addslashes($name);
                    $source = "{ \"class\": \"go.GraphLinksModel\",\r\n                         \"linkFromPortIdProperty\": \"fromPort\",\r\n                         \"linkToPortIdProperty\": \"toPort\",\r\n                         \"nodeDataArray\": [ ],\r\n                         \"linkDataArray\": [ ]}";
                    $strat = array('', $name, $source);
                    AddDBRow($strat, 'botstrat');
                    ob_clean();
                    die;
                } else {
                    if ($_POST['action'] === "rename") {
                        // Переименовать
                        $id = intval($_POST['strat']);
                        $name = $_POST['name'];
                        $name = addslashes($name);
                        $query = "UPDATE " . $db_prefix . "botstrat SET name = '" . $name . "' WHERE id = {$id};";
                        dbquery($query);
                        ob_clean();
                        $query = "SELECT * FROM " . $db_prefix . "botstrat ORDER BY id ASC";
                        $result = dbquery($query);
                        echo "<option value=\"0\">-- Выберите стратегию --</option>\n";
                        while ($row = dbarray($result)) {
                            echo "<option value=\"" . $row['id'] . "\"  ";
                            if ($row['id'] == $id) {
                                echo "selected";
                            }
                            echo ">" . stripslashes($row['name']) . "</option>\n";
                        }
                        die;
                    } else {
                        ob_clean();
                        die;
                    }
                }
            }
        }
    }
    ?>

<script type="text/javascript" src="js/tw-sack.js"></script>
<script type="text/javascript" src="js/go.js"></script>
<script type="text/javascript" src="js/go-game.js"></script>

<?php 
    echo AdminPanel();
    ?>

<div id="sample">
  <div style="width:100%; white-space:nowrap;">
    <span style="display: inline-block; vertical-align: top; padding: 5px; width:100px">
      <div id="myPalette" style="background-color: #344566; border: solid 1px black; height: 500px"></div>
    </span>
    <span style="display: inline-block; vertical-align: top; padding: 5px; width:88%">
      <div id="myDiagram" style="background-color: #344566; border: solid 1px black; height: 500px"></div>
    </span>
  </div>

<span style="float:left;">
 <input type="text" size="50" id="strategyName">
 <button onclick="newstrat()">Новая</button>
 <button onclick="rename()">Переименовать</button>
 <button onclick="showimg()">Показать</button>
</span>

<span style="float:right;">
  <button onclick="save()">Сохранить</button>
<select id="strategyId">
<option value="0">-- Выберите стратегию --</option>
<?php 
    $query = "SELECT * FROM " . $db_prefix . "botstrat ORDER BY id ASC";
    $result = dbquery($query);
    while ($row = dbarray($result)) {
        echo "<option value=\"" . $row['id'] . "\">" . stripslashes($row['name']) . "</option>\n";
    }
    ?>
</select>
  <button onclick="load()">Загрузить</button>
</span>
  <textarea id="mySavedModel" style="width:100%;height:300px; display:none;">
{ "class": "go.GraphLinksModel",
  "linkFromPortIdProperty": "fromPort",
  "linkToPortIdProperty": "toPort",
  "nodeDataArray": [ ],
  "linkDataArray": [ ]}
  </textarea>
</div>

<script type="text/javascript">
init ();
</script>

<img src="" id="preview_img" style="display:none;">

<?php 
}
            $query = "UPDATE " . $db_prefix . "template SET name='" . $name . "', date={$now}";
            foreach ($temp_map as $i => $gid) {
                $query .= ", ship{$gid} ='" . intval($_POST['ship'][$gid]) . "' ";
            }
            $query .= " WHERE id = {$id}";
            dbquery($query);
        }
    } else {
        // Добавить
        // Ограничить количество.
        $query = "SELECT * FROM " . $db_prefix . "template WHERE owner_id = " . $GlobalUser['player_id'];
        $result = dbquery($query);
        $rows = dbrows($result);
        if ($rows < $MAX) {
            $temp = array(null, $GlobalUser['player_id'], $name, $now, intval($_POST['ship'][202]), intval($_POST['ship'][203]), intval($_POST['ship'][204]), intval($_POST['ship'][205]), intval($_POST['ship'][206]), intval($_POST['ship'][207]), intval($_POST['ship'][208]), intval($_POST['ship'][209]), intval($_POST['ship'][210]), intval($_POST['ship'][211]), 0, intval($_POST['ship'][213]), intval($_POST['ship'][214]), intval($_POST['ship'][215]));
            AddDBRow($temp, 'template');
        }
    }
}
if (method() === "GET" && $_GET['mode'] === "delete") {
    // Удалить
    $id = intval($_GET['id']);
    $query = "SELECT * FROM " . $db_prefix . "template WHERE id = {$id} AND owner_id = " . $GlobalUser['player_id'] . " LIMIT 1";
    $result = dbquery($query);
    if (dbrows($result) > 0) {
        $query = "DELETE FROM " . $db_prefix . "template WHERE id = {$id}";
        dbquery($query);
    }
}
?>
<!-- CONTENT AREA -->
Example #5
0
function BanUserAttacks($player_id, $seconds)
{
    global $db_prefix;
    $query = "DELETE FROM " . $db_prefix . "queue WHERE type = 'AllowAttacks' AND owner_id = {$player_id}";
    dbquery($query);
    $now = time();
    $when = $now + $seconds;
    $queue = array(null, $player_id, "AllowAttacks", 0, 0, 0, $now, $when, 0);
    $id = AddDBRow($queue, "queue");
    $query = "UPDATE " . $db_prefix . "users SET noattack = 1, noattack_until = {$when} WHERE player_id = {$player_id}";
    dbquery($query);
}
Example #6
0
function Admin_Bans()
{
    global $session;
    global $db_prefix;
    global $GlobalUser;
    // Обработка POST-запроса.
    if (method() === "POST" && $GlobalUser['admin'] >= 1) {
        if ($_GET['action'] === 'search') {
            // Результаты поиска
            switch (intval($_POST['searchby'])) {
                case 0:
                    // Забаненных с РО
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE banned = 1 AND vacation = 1";
                    break;
                case 1:
                    // Забаненных без РО
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE banned = 1 AND vacation = 0";
                    break;
                case 2:
                    // Блокировка атак
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE noattack = 1";
                    break;
                case 3:
                    // Зарегистрированных недавно (дней)
                    $when = time() - intval($_POST['text']) * 24 * 60 * 60;
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE regdate >= {$when}";
                    break;
                case 4:
                    // Имя пользователя (примерное)
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE oname LIKE '" . $_POST['text'] . "%' ";
                    break;
                case 5:
                    // Тег альянса
                    $query = "SELECT ally_id FROM " . $db_prefix . "ally WHERE tag LIKE '%" . $_POST['text'] . "%' ";
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE ally_id = ANY ({$query}) ";
                    break;
                case 6:
                    // Одинаковый адрес email
                    $query = "SELECT * FROM " . $db_prefix . "users WHERE email = LIKE '%" . $_POST['text'] . "%' OR pemail = LIKE '%" . $_POST['text'] . "%' ";
                    break;
                case 7:
                    // Одинаковый IP
                    $query = "SELECT * FROM " . $db_prefix . "users AS t1 INNER JOIN ( \r\nSELECT ip_addr,COUNT(*) FROM " . $db_prefix . "users GROUP BY ip_addr HAVING COUNT(*)>1) as t2 \r\nON t1.ip_addr = t2.ip_addr ORDER BY t1.ip_addr ASC, t1.name ASC";
                    break;
                default:
                    $query = '';
            }
            $result = dbquery($query);
            $rows0 = $rows = dbrows($result);
            echo AdminPanel();
            ?>

<script>

function SetClearCheckbox (status)
{
    var theForm = document.getElementById('banform');
    for (i=0,n=theForm.elements.length;i<n;i++)
    {
        if (theForm.elements[i].className.indexOf('ids') !=-1) {
            theForm.elements[i].checked = status;
        }
    }
}

</script>

<!-- Результаты поиска -->
<table>
<form id="banform" action="index.php?page=admin&session=<?php 
            echo $session;
            ?>
&mode=Bans&action=ban" method="POST" >

<tr> <td class=c> <input type="checkbox" onclick="SetClearCheckbox(this.checked);"> ID</td> <td class=c>Имя</td> <td class=c>Главная планета</td> <td class=c>Постоянный адрес</td> <td class=c>Временный адрес</td> <td class=c>IP адрес</td> <td class=c>Дата регистрации</td> </td>
<?php 
            if ($rows == 0) {
                echo "<tr><td colspan=7>Ничего не найдено. <a href=\"index.php?page=admin&session={$session}&mode=Bans\">Назад</a></td></tr>";
            }
            while ($rows--) {
                $user = dbarray($result);
                $hp = GetPlanet($user['hplanetid']);
                ?>
<tr> <th><input type="checkbox" name="id[<?php 
                echo $user['player_id'];
                ?>
]" class="ids"/><?php 
                echo $user['player_id'];
                ?>
</th> 
        <th><a><?php 
                echo AdminUserName($user);
                ?>
</a></th> 
        <th><?php 
                echo AdminPlanetCoord($hp);
                ?>
 <?php 
                echo AdminPlanetName($hp);
                ?>
</th> 
        <th><a><?php 
                echo $user['pemail'];
                ?>
</a></th> 
        <th><a><?php 
                echo $user['email'];
                ?>
</a></th> 
        <th><?php 
                echo $user['ip_addr'];
                ?>
</th> 
        <th><?php 
                echo date("m-d-Y H:i:s", $user['regdate']);
                ?>
</th> </tr>
<?php 
            }
            // while
            if ($rows0 > 0) {
                ?>
<tr><td class=c colspan=7>Действия</td></tr>
<tr> 
    <td colspan=6>
        <input type="radio" name="banmode" value="0"> <font color=firebrick><b>Бан без РО</b></font>
         <input type="radio" name="banmode" value="1" checked > <font color=red><b>Бан с РО</b></font> 
         <input type="radio" name="banmode" value="2"> <font color=yellow><b>Блок атак</b></font>
         <input type="radio" name="banmode" value="3"> <font color=lime><b>Разбанить</b></font>
         <input type="radio" name="banmode" value="4"> <font color=lime><b>Разрешить атаки</b></font>
    </td>
    <td><input name="days" type="text" size="5"> дней  <input name="hours" type="text" size="3"> часов</td> 

</tr>
<tr><th colspan=6> Причина: <textarea cols=40 rows=4 name="reason"><?php 
                echo "[url=mailto:" . $GlobalUser['pemail'] . "]контакт[/url]";
                ?>
</textarea></th><th><input type="submit" value="Отправить"></th></tr>
</form>
</table>
<?php 
            }
            die;
        }
        if ($_GET['action'] === 'ban') {
            // Забанить / разбанить
            $now = time();
            $reason = str_replace('\\"', "&quot;", bb($_POST['reason']));
            $reason = str_replace('\'', "&rsquo;", $reason);
            $reason = str_replace('\\`', "&lsquo;", $reason);
            $seconds = intval($_POST['days']) * 24 * 60 * 60 + intval($_POST['hours']) * 60 * 60;
            foreach ($_POST['id'] as $player_id => $checked) {
                $user = LoadUser($player_id);
                switch (intval($_POST['banmode'])) {
                    case 0:
                        // Добавить пользователя на столб позора
                        $entry = array(null, $GlobalUser['oname'], $user['oname'], $GlobalUser['player_id'], $user['player_id'], $now, $now + $seconds, $reason);
                        AddDBRow($entry, "pranger");
                        BanUser($player_id, $seconds, 0);
                        break;
                    case 1:
                        // Добавить пользователя на столб позора
                        $entry = array(null, $GlobalUser['oname'], $user['oname'], $GlobalUser['player_id'], $user['player_id'], $now, $now + $seconds, $reason);
                        AddDBRow($entry, "pranger");
                        BanUser($player_id, $seconds, 1);
                        break;
                    case 2:
                        // Добавить пользователя на столб позора
                        $entry = array(null, $GlobalUser['oname'], $user['oname'], $GlobalUser['player_id'], $user['player_id'], $now, $now + $seconds, $reason);
                        AddDBRow($entry, "pranger");
                        BanUserAttacks($player_id, $seconds);
                        break;
                    case 3:
                        UnbanUser($player_id);
                        break;
                    case 4:
                        UnbanUserAttacks($player_id);
                        break;
                }
            }
            // for
        }
    }
    ?>

<!-- Форма поиска -->

<?php 
    echo AdminPanel();
    ?>

<table>
<form action="index.php?page=admin&session=<?php 
    echo $session;
    ?>
&mode=Bans&action=search" method="POST" >

<tr><td class="c" colspan=2>Найти пользователей</td></tr>
<tr>
    <td>
            <select name="searchby">
                <option value="0">Забаненных с РО</option>
                <option value="1">Забаненных без РО</option>
                <option value="2">Блокировка атак</option>
                <option value="3">Зарегистрированных недавно (дней)</option>
                <option value="4">Имя пользователя (примерное)</option>
                <option value="5">Тег альянса</option>
                <option value="6">Одинаковый адрес email</option>
                <option value="7">Одинаковый IP</option>
            </select>
    </td>
    <td> <input type="text" name="text" size=20></td>
</tr>
<tr><td class="c" colspan=2> <input type="submit" value="Отправить" /></td></tr>

</form>
</table>

<?php 
}
Example #7
0
function CreateUnion($fleet_id, $name)
{
    global $db_prefix;
    $fleet_obj = LoadFleet($fleet_id);
    // Проверить есть ли уже союз?
    if ($fleet_obj['union_id'] != 0) {
        return $fleet_obj['union_id'];
    }
    // Союзы можно создавать только для убывающих атак.
    if ($fleet_obj['mission'] != 1) {
        return 0;
    }
    $target_planet = GetPlanet($fleet_obj['target_planet']);
    $target_player = $target_planet['owner_id'];
    // Нельзя создать союз против себя самого
    if ($target_player == $fleet_obj['owner_id']) {
        return 0;
    }
    // Добавить союз.
    $union = array(null, $fleet_id, $target_player, $name, $fleet_obj['owner_id']);
    $union_id = AddDBRow($union, 'union');
    // Добавить флот в союз и изменить тип Атаки.
    $query = "UPDATE " . $db_prefix . "fleet SET union_id = {$union_id}, mission = 21 WHERE fleet_id = {$fleet_id}";
    dbquery($query);
    return $union_id;
}
Example #8
0
function CreateOuterSpace($g, $s, $p)
{
    global $db_prefix;
    // Если там уже есть объект, вернуть его ID.
    $query = "SELECT * FROM " . $db_prefix . "planets WHERE g={$g} AND s={$s} AND p={$p} AND type = 20000;";
    $result = dbquery($query);
    if (dbrows($result) == 0) {
        $planet = array(null, "Бесконечные дали", 20000, $g, $s, $p, 99999, 0, 0, 0, 0, time(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        $id = AddDBRow($planet, 'planets');
    } else {
        $planet = dbarray($result);
        $id = $planet['planet_id'];
    }
    return $id;
}
Example #9
0
function AddBuddy($from, $to, $text)
{
    global $db_prefix;
    $text = mb_substr($text, 0, 5000, "UTF-8");
    // Огранчить длину строк
    if ($text === "") {
        $text = "пусто";
    }
    // Проверить заявки, ожидающие подтверждения.
    $query = "SELECT * FROM " . $db_prefix . "buddy WHERE ((request_from = {$from} AND request_to = {$to}) OR (request_from = {$to} AND request_to = {$from})) AND accepted = 0";
    $result = dbquery($query);
    if (dbrows($result)) {
        return 0;
    }
    // Пользователи уже друзья?
    if (IsBuddy($from, $to)) {
        return 0;
    }
    // Добавить запрос.
    $buddy = array(null, $from, $to, $text, 0);
    $id = AddDBRow($buddy, "buddy");
    return $id;
}
Example #10
0
function UserLog($owner_id, $type, $text, $when = 0)
{
    global $db_prefix;
    if ($when == 0) {
        $when = time();
    }
    $log = array(null, $owner_id, $when, $type, $text);
    AddDBRow($log, 'userlogs');
    $ago = $when - 2 * 7 * 24 * 60 * 60;
    $query = "DELETE FROM " . $db_prefix . "userlogs WHERE date < {$ago};";
    dbquery($query);
}
Example #11
0
function AddDebugEvent($when)
{
    $now = time();
    $queue = array(null, 99999, "Debug", 0, 0, 0, $now, $when, 9999);
    $id = AddDBRow($queue, "queue");
}
Example #12
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;
}
function SimBattle($a, $d, $rf, $fid, $did, $debug, &$battle_result, &$aloss, &$dloss)
{
    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);
    $unitab = LoadUniverse();
    if ($debug) {
        print_r($a);
        echo "<br>";
        print_r($d);
        echo "<br><hr>";
    }
    // *** Сгенерировать исходные данные
    $source .= "Rapidfire = {$rf}\n";
    $source .= "FID = {$fid}\n";
    $source .= "DID = {$did}\n";
    $anum = count($a);
    $dnum = count($d);
    $source .= "Attackers = {$anum}\n";
    $source .= "Defenders = {$dnum}\n";
    for ($n = 0; $n < $anum; $n++) {
        $source .= "Attacker{$n} = (<Attacker{$n}> " . mt_rand(1, 10000) . " " . $a[$n]['g'] . " " . $a[$n]['s'] . " " . $a[$n]['p'] . " ";
        $source .= $a[$n]['r109'] . " " . $a[$n]['r110'] . " " . $a[$n]['r111'] . " ";
        foreach ($fleetmap as $i => $gid) {
            $source .= $a[$n]['fleet'][$gid] . " ";
        }
        $source .= ")\n";
    }
    for ($n = 0; $n < $dnum; $n++) {
        $source .= "Defender{$n} = (<Defender{$n}> " . mt_rand(1, 10000) . " " . $d[$n]['g'] . " " . $d[$n]['s'] . " " . $d[$n]['p'] . " ";
        $source .= $d[$n]['r109'] . " " . $d[$n]['r110'] . " " . $d[$n]['r111'] . " ";
        foreach ($fleetmap as $i => $gid) {
            $source .= $d[$n]['fleet'][$gid] . " ";
        }
        foreach ($defmap as $i => $gid) {
            $source .= $d[$n]['defense'][$gid] . " ";
        }
        $source .= ")\n";
    }
    if ($debug) {
        echo $source . "<hr>";
    }
    $battle = array($battle_id, $source, '', '', time());
    $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 ($debug) {
        print_r($battle);
        echo "<hr>";
        print_r($res);
        echo "<hr>";
    }
    // Удалить уже ненужные боевые данные.
    $query = "DELETE FROM " . $db_prefix . "battledata WHERE battle_id = {$battle_id}";
    dbquery($query);
    // Восстановить оборону
    $repaired = RepairDefense($d, $res, $unitab['defrepair'], $unitab['defrepair_delta'], false);
    // Рассчитать общие потери
    $aloss = $dloss = 0;
    $loss = CalcLosses($a, $d, $res, $repaired);
    $a = $loss['a'];
    $d = $loss['d'];
    $aloss = $loss['aloss'];
    $dloss = $loss['dloss'];
    // Создать луну
    $mooncreated = false;
    $moonchance = min(floor(($res['dm'] + $res['dk']) / 100000), 20);
    if (mt_rand(1, 100) <= $moonchance) {
        $mooncreated = true;
    }
    if ($res['result'] === "awon") {
        $battle_result = 0;
    } else {
        if ($res['result'] === "dwon") {
            $battle_result = 1;
        } else {
            $battle_result = 2;
        }
    }
    // Сгенерировать боевой доклад.
    loca_add("battlereport", $GlobalUni['lang']);
    loca_add("technames", $GlobalUni['lang']);
    return BattleReport($res, time(), $aloss, $dloss, 1, 2, 3, $moonchance, $mooncreated, $repaired);
}
Example #14
0
function SetVar($owner_id, $var, $value)
{
    global $db_prefix;
    $query = "SELECT * FROM " . $db_prefix . "botvars WHERE var = '" . $var . "' AND owner_id = {$owner_id} LIMIT 1;";
    $result = dbquery($query);
    if (dbrows($result) > 0) {
        $query = "UPDATE " . $db_prefix . "botvars SET value = '" . $value . "' WHERE var = '" . $var . "' AND owner_id = {$owner_id};";
        dbquery($query);
    } else {
        $var = array('', $owner_id, $var, $value);
        AddDBRow($var, 'botvars');
    }
}
Example #15
0
function InvalidSessionPage()
{
    global $GlobalUser;
    $unitab = LoadUniverse();
    $uni = $unitab['num'];
    $error = array(null, $GlobalUser['player_id'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], $_SERVER['REQUEST_URI'], 'Сессия недействительна.', time());
    $id = AddDBRow($error, 'errors');
    echo "<html> <head>\n";
    echo "  <link rel='stylesheet' type='text/css' href='css/default.css' />\n";
    echo "  <link rel='stylesheet' type='text/css' href='css/formate.css' />\n";
    echo "  <meta http-equiv='content-type' content='text/html; charset=UTF-8' />\n";
    echo "  <title>Вселенная {$uni} ОГейм</title>\n";
    echo " </head>\n";
    echo " <body>\n";
    echo "  <center><font size='3'><b>    <br /><br />\n";
    echo "    <font color='#FF0000'>Произошла ошибка</font>\n";
    echo "    <br /><br />\n";
    echo "    Сессия недействительна.<br/><br/>Это может быть вызвано несколькими причинами: \n";
    echo "<br>- Вы несколько раз зашли в один и тот же аккаунт; \n";
    echo "<br>- Ваш ай-пи адрес изменился с момента последнего входа; \n";
    echo "<br>- Вы пользуетесь интернетом через AOL или прокси. Отключите проверку ай-пи в меню \"Настройки\" в Вашем аккаунте.    \n";
    echo "    <br /><br />\n";
    echo "    Error-ID: " . $id . "  </b></font></center> </body></html>\n";
}
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 
}