This commit is contained in:
Igor Barkov [iwork] 2018-12-27 16:46:00 +02:00
parent b5299b8afd
commit 8d34a55435
1 changed files with 69 additions and 50 deletions

View File

@ -38,7 +38,7 @@ function createbot($bot, $login = "")
$botname = $rec['login'];
db::c()->query('INSERT INTO `bots` (`name`, `prototype`, `hp`) VALUES ("?s", "?s", "?s")', $botname, $bot, $rec['maxhp']);
$nid = db::c()->getLastInsertId();
return array("id" => $nid, "login" => $botname);
return ["id" => $nid, "login" => $botname];
} else {
return false;
}
@ -56,8 +56,8 @@ $userslots = ['sergi', 'kulon', 'perchi', 'weap', 'bron', 'r1', 'r2', 'r3', 'hel
function getuserdata($id = 0)
{
if (!$id) $id = isset($_SESSION['uid']) ? $_SESSION['uid'] : NULL; // Хорошее решение проверок, кстати.
if (!$id) return array();
if (!$id) $id = isset($_SESSION['uid']) ? $_SESSION['uid'] : null; // Хорошее решение проверок, кстати.
if (!$id) return [];
$rec = db::c()->query('SELECT `hp`, `maxhp`, `fullhptime`, `battle` FROM `users` WHERE `id` = "?s"', $id)->fetch_assoc();
if ($rec['hp'] < $rec['maxhp'] && time() > $rec['fullhptime'] && !$rec['battle'] && ($rec['hp'] > 0)) {
// regenhp($rec, 0);
@ -72,7 +72,7 @@ if (!isset($user)) {
$user = getuserdata();
}
$var_map = array(
$var_map = [
'cell_1' => 'Березовая роща', 'cell_2' => 'Березовая просека', 'cell_3' => 'Тёмный угол', 'cell_4' => 'Мрачная опушка',
'cell_5' => 'Тёмное урочище', 'cell_6' => 'Бурелом', 'cell_7' => 'Старая ива', 'cell_8' => 'Разнолесье',
'cell_9' => 'Сосновая тропа', 'cell_10' => 'Забытая дорога', 'cell_11' => 'Новая дорога', 'cell_12' => 'Мщаник',
@ -80,7 +80,7 @@ $var_map = array(
'cell_17' => 'Тихоход', 'cell_18' => 'Сосновый гай', 'cell_19' => 'Смешаный лес', 'cell_20' => 'Темная поляна',
'cell_21' => 'Осенний угол', 'cell_22' => 'Грибное место', 'cell_23' => 'Опушка', 'cell_24' => 'Рыжий лес',
'cell_25' => 'Полесье'
);
];
function get_out($u)
{
@ -89,7 +89,7 @@ function get_out($u)
mysql_query('UPDATE `inventory` SET `owner` = "' . $pers['id'] . '" WHERE `owner` = "' . ($pers['id'] + _BOTSEPARATOR_) . '"');
###
$row = mysql_query('SELECT * FROM `effects` WHERE `owner` = "' . ($pers['id'] + _BOTSEPARATOR_) . '"');
$travm = array(11, 12, 13, 14);
$travm = [11, 12, 13, 14];
while ($efs = mysql_fetch_array($row)) {
if (in_array($efs['type'], $travm)) {
$pers['sila'] -= $efs['sila'];
@ -130,7 +130,7 @@ function takeshopitem($item, $table = "shop", $present = '', $onlyonetrip = '',
if ($rec1['koll']) {
mysql_query("UPDATE `inventory` SET `koll` = (`koll`+$koll), `massa` = (`massa`+" . ($rec1['massa'] * $koll) . "), `cost` = (`cost`+" . $rec1['cost'] . ") WHERE `owner` = '$uid' AND `prototype` = '$item' LIMIT 1");
if (mysql_affected_rows() > 0) return array("img" => $rec1['img'], "name" => $rec1['name']);
if (mysql_affected_rows() > 0) return ["img" => $rec1['img'], "name" => $rec1['name']];
$rec1['koll'] = $koll;
$rec1['massa'] *= $koll;
}
@ -138,7 +138,7 @@ function takeshopitem($item, $table = "shop", $present = '', $onlyonetrip = '',
if ($rec1['onlyone']) {
$i = mysql_fetch_row(mysql_query("SELECT `id` FROM `inventory` WHERE `owner` = '$uid' AND `prototype` = '$item'"));
if ($i) {
return array("error" => "У вас слишком много таких вещей.");
return ["error" => "У вас слишком много таких вещей."];
}
}
@ -170,11 +170,11 @@ function takeshopitem($item, $table = "shop", $present = '', $onlyonetrip = '',
}
mysql_query("INSERT INTO `inventory` SET " . ($present ? "`present` = '$present'," : "") . ($rec1['podzem'] ? "`podzem` = '$rec1[podzem]'," : "") . " `owner` = '$uid', `otdel` = $rec1[razdel] , `prototype` = '$item' " . ($onlyonetrip ? ", `foronetrip` = 1" : "") . ($goden ? ", `dategoden` = '" . ($goden * 60 * 60 * 24 + time()) . "'" : "") . " $sql");
return array("img" => $rec1['img'], "name" => $rec1['name'], "id" => mysql_insert_id());
return ["img" => $rec1['img'], "name" => $rec1['name'], "id" => mysql_insert_id()];
}
$abils_array = array('attack', 'sleep', 'sleepf');
$ab_user = array('sleep15', 'sleep30', 'closebattle', 'heal20', 'heal35', 'heal50', 'travmoff', 'attack', 'bloodattack', 'death', 'comment', 'openbattle', 'reamdeath', 'clone', 'unclone');
$abils_array = ['attack', 'sleep', 'sleepf'];
$ab_user = ['sleep15', 'sleep30', 'closebattle', 'heal20', 'heal35', 'heal50', 'travmoff', 'attack', 'bloodattack', 'death', 'comment', 'openbattle', 'reamdeath', 'clone', 'unclone'];
define('_BOTSEPARATOR_', 10000000);
@ -532,19 +532,19 @@ $rooms = [
];
//эффективность магии
$elem_align = array(
"a" => array("a" => "1", "e" => "0", "f" => "0.5", "w" => "0.5"),
"e" => array("a" => "0", "e" => "1", "f" => "0.5", "w" => "0.5"),
"f" => array("a" => "0.5", "e" => "0.5", "f" => "1", "w" => "0"),
"w" => array("a" => "0.5", "e" => "0.5", "f" => "0", "w" => "1"),
);
$elem_align = [
"a" => ["a" => "1", "e" => "0", "f" => "0.5", "w" => "0.5"],
"e" => ["a" => "0", "e" => "1", "f" => "0.5", "w" => "0.5"],
"f" => ["a" => "0.5", "e" => "0.5", "f" => "1", "w" => "0"],
"w" => ["a" => "0.5", "e" => "0.5", "f" => "0", "w" => "1"],
];
$elem_bonus = array(
"a" => array("a" => "1", "e" => "0.75", "f" => "1.25", "w" => "1"),
"e" => array("a" => "1.25", "e" => "1", "f" => "1", "w" => "0.75"),
"f" => array("a" => "0.75", "e" => "1", "f" => "1", "w" => "1.25"),
"w" => array("a" => "1", "e" => "1.25", "f" => "0.75", "w" => "1"),
);
$elem_bonus = [
"a" => ["a" => "1", "e" => "0.75", "f" => "1.25", "w" => "1"],
"e" => ["a" => "1.25", "e" => "1", "f" => "1", "w" => "0.75"],
"f" => ["a" => "0.75", "e" => "1", "f" => "1", "w" => "1.25"],
"w" => ["a" => "1", "e" => "1.25", "f" => "0.75", "w" => "1"],
];
header("Cache-Control: no-cache");
@ -708,9 +708,9 @@ function setHP($hp, $maxhp)
*/
function setHP2($hp, $maxhp)
{
$bar = round($hp/$maxhp*100);
$bar = round($hp / $maxhp * 100);
$output = <<<HTML
<div style="width: 75%; height: 16px; background: silver; overflow: hidden; border-radius: 3px;">
<div style="width: 100%; height: 16px; background: silver; overflow: hidden; border-radius: 3px;">
<div style="height: 16px; background: limegreen; border-radius: 3px; width: $bar%;"></div>
</div>
<div style="width: 100%; height: 16px; font-size: 14px; text-align: center; margin-top: -16px;">
@ -908,21 +908,29 @@ function timetoheals($user)
return $fulltime;
}
/**
* Функция отображения персонажа для других персонажей везде и для себя в бою.
*
* @param $id
* @param int $pas
* @param int $battle
* @param int $me
* @param bool $main
*
* @return string
*/
function showinf_pers($id, $pas = 0, $battle = 0, $me = 0, $main = false) //FIXME 37 запросов! ТРИДЦАТЬ СЕМЬ! Чтобы отобразить предметы на персонаже.
{
global $rooms;
$r = '';
if ($id > _BOTSEPARATOR_) { //FIXME Оно как бы и работает, но два тяжёлющих запроса в самые крупные базы, чтобы подменить два значения...
// $bots = mysql_fetch_array(mysql_query('SELECT * FROM `bots` WHERE `id` = "' . (int)$id . '" LIMIT 1'));
// $id = $bots['prototype'];
// $user = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id` = '{$id}' LIMIT 1"));
// $user = db::c()->query('SELECT * FROM `users` WHERE `id` = (SELECT `prototype` FROM `bots` WHERE `bots`.`id` = ?i)', $id)->fetch_assoc();
// $user['login'] = $bots['name'];
// $user['hp'] = $bots['hp'];
die('Неустранимая ошибка в showinf_pers(), обратитесь к разработчику.');
$user = db::c()->query('SELECT * FROM `users` WHERE `id` = ?i', $id)->fetch_assoc();
if ($id > _BOTSEPARATOR_) {
// Если ID большой, берём бота из базы ботов, подставляем имя и здоровье из прототипа в юзерах.
$bots = db::c()->query('SELECT `name`, `hp` FROM `bots` WHERE `id` = ?i', $id)->fetch_assoc();
$user = db::c()->query('SELECT * FROM `users` WHERE `id` = (SELECT `prototype` FROM `bots` WHERE `bots`.`id` = ?i)', $id)->fetch_assoc();
$user['login'] = $bots['name'];
$user['hp'] = $bots['hp'];
} else {
// $user = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id` = '{$id}' LIMIT 1"));
$user = db::c()->query('SELECT * FROM `users` WHERE `id` = ?i', $id)->fetch_assoc();
$invis = $user['invis'];
}
@ -954,7 +962,7 @@ function showinf_pers($id, $pas = 0, $battle = 0, $me = 0, $main = false) //FIXM
}
$r .= '<center>';
$r .= "<a href=\"javascript: top.AddToPrivate('$user[login]', top.CtrlPress)\" target=\"refreshed\"><img src=\"/i/lock.gif\" width=\"20\" height=\"15\" /></a>" . ($user['align'] > 0 ? "<img src=\"/i/align_" . $user['align'] . ".gif\" />" : "") . ($user['klan'] != '' ? '<img title="' . ClanImage($user['klan']) . '" src="i/klan/' . ClanImage($user['klan']) . '.gif" />' : "") . "<b>$user[login]</b> [";
$r .= ($user['align'] > 0 ? "<img src=\"/i/align_" . $user['align'] . ".gif\" />" : "") . ($user['klan'] != '' ? '<img title="' . ClanImage($user['klan']) . '" src="i/klan/' . ClanImage($user['klan']) . '.gif" />' : "") . "<b>$user[login]</b> [";
$r .= $user['level'];
$r .= "]<a href=\"inf.php?$user[id]\" target=\"_blank\"><img src=\"/i/inf.gif\" width=\"12\" height=\"11\" /></a>";
@ -1253,6 +1261,7 @@ function showinf_pers($id, $pas = 0, $battle = 0, $me = 0, $main = false) //FIXM
/**
* Смотрим на себя в главном окне игры.
*
* @param int $pas
*/
function showpersout($pas = 0) //FIXME Сделать по человечески!
@ -1593,6 +1602,7 @@ function showpersout($pas = 0) //FIXME Сделать по человеческ
* @param $vars
* @param $vls
* @param $uid
*
* @return bool
*/
function addActions($time, $vars, $vls, $uid)
@ -1647,10 +1657,11 @@ function showitem2()
/**
* По ходу, главная функция отображения предметов.
*
* @param array $row - массив значений, передаваймый из запроса к таблице inventory
* @param int $type - тип предмета. Где бы их всех взять?
* @param bool $returned
* @param bool $infOnly
* @param array $row - массив значений, передаваймый из запроса к таблице inventory
* @param int $type - тип предмета. Где бы их всех взять?
* @param bool $returned
* @param bool $infOnly
*
* @return string
*/
@ -1898,7 +1909,7 @@ function showitem($row, $type = null, $returned = false, $infOnly = false)
}
} else $returnHTML .= "<br><b style='color: maroon'>Свойства предмета не идентифицированы!</b>";
$osob = array(22, 23);
$osob = [22, 23];
if (in_array($row['type'], $osob)) {
$returnHTML .= 'Особенности:<br />';
if ($row['type'] == 22) {
@ -2477,7 +2488,7 @@ function usemagic($id)
if ($user['battle'] > 0)
$bat = mysql_fetch_array(mysql_query("SELECT * FROM `battle` WHERE `id`='{$user['battle']}';"));
if ($bat['magic'] == '')
$all_magic = array();
$all_magic = [];
else
$all_magic = unserialize($bat['magic']);
$all_magic[$user['id']] += $charge;
@ -2519,6 +2530,7 @@ function addchp($text, $who, $room = 0)
/**
* @param $msg
*
* @throws \Krugozor\Database\Mysql\Exception
* Отправка системного сообщения в чат.
*/
@ -2540,9 +2552,9 @@ function settravma($id, $type, $time = 86400, $kill = false)
if ((($user['align'] == 2 && mt_rand(1, 100) > 20) && !$kill) || ($user['level'] == 0)) {
return false;
} else {
$travmalist = array("разбитый нос", "сотрясение первой степени", "потрепанные уши", "прикушенный язык", "перелом переносицы", "растяжение ноги", "растяжение руки", "подбитый глаз", "синяк под глазом", "кровоточащее рассечение", "отбитая <пятая точка>", "заклинившая челюсть", "выбитый зуб <мудрости>", "косоглазие");
$travmalist2 = array("отбитые почки", "вывих <вырезано цензурой>", "сотрясение второй степени", "оторванное ухо", "вывих руки", "оторванные уши", "поврежденный позвоночник", "отбитые почки", "поврежденный копчик", "разрыв сухожилия", "перелом ребра", "перелом двух ребер", "вывих ноги", "сломанная челюсть");
$travmalist3 = array("пробитый череп", "разрыв селезенки", "смещение позвонков", "открытый перелом руки", "открытый перелом <вырезано цензурой>", "излом носоглотки", "непонятные, но множественные травмы", "сильное внутреннее кровотечение", "раздробленная коленная чашечка", "перелом шеи", "смещение позвонков", "открытый перелом ключицы", "перелом позвоночника", "вывих позвоночника", "сотрясение третьей степени");
$travmalist = ["разбитый нос", "сотрясение первой степени", "потрепанные уши", "прикушенный язык", "перелом переносицы", "растяжение ноги", "растяжение руки", "подбитый глаз", "синяк под глазом", "кровоточащее рассечение", "отбитая <пятая точка>", "заклинившая челюсть", "выбитый зуб <мудрости>", "косоглазие"];
$travmalist2 = ["отбитые почки", "вывих <вырезано цензурой>", "сотрясение второй степени", "оторванное ухо", "вывих руки", "оторванные уши", "поврежденный позвоночник", "отбитые почки", "поврежденный копчик", "разрыв сухожилия", "перелом ребра", "перелом двух ребер", "вывих ноги", "сломанная челюсть"];
$travmalist3 = ["пробитый череп", "разрыв селезенки", "смещение позвонков", "открытый перелом руки", "открытый перелом <вырезано цензурой>", "излом носоглотки", "непонятные, но множественные травмы", "сильное внутреннее кровотечение", "раздробленная коленная чашечка", "перелом шеи", "смещение позвонков", "открытый перелом ключицы", "перелом позвоночника", "вывих позвоночника", "сотрясение третьей степени"];
$owntravma = mysql_fetch_array(mysql_query("SELECT `type`, `id`, `sila`, `lovk`, `inta`, `hp` FROM `effects` WHERE `owner` = " . $id . " AND (`type` = 11 OR `type` = 12 OR `type` = 13) ORDER BY `type` DESC LIMIT 1"));
if ($type != 0 && $type != 100) {
$owntravma['type'] = $type;
@ -2757,10 +2769,10 @@ function get_meshok()
*/
function getItemsMassaInfo()
{
$i_row = db::c()->query('SELECT SUM(`massa`) AS `massa`, SUM(`gmeshok`) AS `massa_bonus` FROM `inventory` WHERE `setsale` = 0 AND `owner` = ?i',$_SESSION['uid'])->fetch_assoc();
$i_row = db::c()->query('SELECT SUM(`massa`) AS `massa`, SUM(`gmeshok`) AS `massa_bonus` FROM `inventory` WHERE `setsale` = 0 AND `owner` = ?i', $_SESSION['uid'])->fetch_assoc();
$u_row = db::c()->query('SELECT `sila` FROM `users` WHERE `id` = ?i', $_SESSION['uid'])->fetch_assoc();
if ($i_row['massa'] > $u_row['sila'] * 4 + $i_row['massa_bonus'])
return "<span style='color:maroon;'>" . $i_row['massa'] . "</span>/" . ($u_row['sila'] * 4 + $i_row['massa_bonus']);
return "<span style='color:maroon;'>" . $i_row['massa'] . "</span>/" . ($u_row['sila'] * 4 + $i_row['massa_bonus']);
else return $i_row['massa'] . "/" . ($u_row['sila'] * 4 + $i_row['massa_bonus']);
}
@ -2777,6 +2789,10 @@ function addlog($id, $log)
function star_sign($month, $day)
{
if (empty($month) or empty($day)) {
$month = (int)sprintf("%02d", mt_rand(1,12));
$day = (int)sprintf("%02d", mt_rand(1,29));
}
$signs = ["10", "11", "12", "01", "02", "03", "04", "05", "06", "07", "08", "09"];
$signsstart = [01 => 21, 02 => 20, 03 => 20, 04 => 20, 05 => 20, 06 => 20, 07 => 21, 08 => 22, 09 => 23, 10 => 23, 11 => 23, 12 => 23];
return $day < $signsstart[$month + 1] ? $signs[$month - 1] : $signs[$month % 12];
@ -2882,8 +2898,9 @@ function SolveExp($at_id, $def_id, $damage)
* Функция записи в личное дело.
*
* @param string $message - текст записи.
* @param int $user_id - ID пользователя которому добавляется запись.
* @param int $type - тип записи: (1)обычная, (2)модераторская.
* @param int $user_id - ID пользователя которому добавляется запись.
* @param int $type - тип записи: (1)обычная, (2)модераторская.
*
* @return bool
*/
function addToDelo($message, $user_id = 0, $type = 1)
@ -2895,8 +2912,10 @@ function addToDelo($message, $user_id = 0, $type = 1)
/**
* Апаем стат или мастерство на единицу.
* @param $name - техническое имя параметра, как в базе.
*
* @param $name - техническое имя параметра, как в базе.
* @param null $param - выбор что повышать.
*
* @return void
*/
function addOnePoint($name, $param = null)