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"); }
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 -->
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); }
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('\\"', """, bb($_POST['reason'])); $reason = str_replace('\'', "’", $reason); $reason = str_replace('\\`', "‘", $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 }
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; }
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; }
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; }
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); }
function AddDebugEvent($when) { $now = time(); $queue = array(null, 99999, "Debug", 0, 0, 0, $now, $when, 9999); $id = AddDBRow($queue, "queue"); }
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); }
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'); } }
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> \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 }