Compare commits

...

4 Commits

8 changed files with 32 additions and 129 deletions

View File

@ -7,6 +7,7 @@ class InventoryItem extends Item
{
private $present;
private $owner_id;
private $db;
private const TOO_MANY_ITEMS_IN_SLOTS = 'Критическая ошибка: Переполнение слота!';
private const UNKNOWN_ITEM_TYPE = 'Неизвестный тип предмета!';
private const REQUIREMENTS_NOT_MET = 'Персонаж не соответствует требованиям!';
@ -20,6 +21,7 @@ class InventoryItem extends Item
{
parent::__construct($row);
$this->owner_id = $row->owner_id;
$this->db = DBPDO::INIT();
}
public function printInfo()
@ -127,4 +129,15 @@ IMG;
return isset($error) ? $error : true;
}
/**
* @param $itemId
*
* @return bool
*/
public static function destroyItem($itemId): bool
{
$db = new DBPDO();
return $db->execute('delete from inventory where dressed_slot = 0 and owner_id = ? and item_id = ?', [$_SESSION['uid'], $itemId]);
}
}

View File

@ -52,7 +52,7 @@ class CureInjury extends Magic
} else {
$this->target = new User($this->target);
}
$this->login = $this->target->login;
$this->login = $this->target->getLogin();
return ($this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isNotInBattle($caster));
}
}

View File

@ -224,5 +224,9 @@ INFO;
}
return $r;
}
public function showStarSign(): ?string
{
return parent::showStarSign();
}
}

View File

@ -468,21 +468,6 @@ function ref_drop()
}
}
/**
* Уничтожить предмет, принадлежащий игроку, вызывающего функцию.
* @param $id - ID предмета игрока.
* @throws \Krugozor\Database\Mysql\Exception
*/
function destructitem($id)
{
global $user;
$item = db::c()->query('SELECT 1 FROM inventory WHERE owner_id = ?i AND item_id = ?i', $user->getId(), $id);
if ($item->getNumRows()) {
db::c()->query('DELETE FROM `inventory` WHERE `id` = ?i', $id);
}
}
// использовать магию
function usemagic($id, $target)
{
@ -543,7 +528,7 @@ function usemagic($id, $target)
}
if ($bat) {
if ($row['maxdur'] <= ($row['duration'] + 1)) {
destructitem($row['id']);
\Battles\InventoryItem::destroyItem($row['id']);
} else {
if (!$row['magic']) {
db::c()->query('UPDATE `inventory` SET `includemagicdex` =`includemagicdex` - ?i WHERE id = ?i', $bat, $row['id']);
@ -667,47 +652,6 @@ function addlog($id, $log)
unset($id, $log);
}
function star_sign($date)
{
/*
* 1 aries
* 2 taurus
* 3 gemini
* 4 cancer
* 5 leo
* 6 virgo
* 7 libra
* 8 scorpio
* 9 sagittarios
* 10 capricorn
* 11 aquarius
* 12 pisches
*/
$zodiac[356] = "10";
$zodiac[326] = "09";
$zodiac[296] = "08";
$zodiac[266] = "07";
$zodiac[235] = "06";
$zodiac[203] = "05";
$zodiac[172] = "04";
$zodiac[140] = "03";
$zodiac[111] = "02";
$zodiac[78] = "01";
$zodiac[51] = "12";
$zodiac[20] = "11";
$zodiac[0] = "10";
$dayOfYear = date("z", strtotime($date));
$isLeapYear = date("L", strtotime($date)); //Высокосный?
if ($isLeapYear && $dayOfYear > 59) {
--$dayOfYear;
}
foreach ($zodiac as $day => $sign) {
if ($dayOfYear > $day) {
break;
}
}
return $sign;
}
function SolveExp($at_id, $def_id, $damage)
{
@ -803,55 +747,3 @@ function SolveExp($at_id, $def_id, $damage)
return round((($baseexp[$def['level']]) * ($def_cost[0] / (($at_cost[0] + $def_cost[0]) / 2)) * ($damage / $def['maxhp']) * $expmf * $mfit * $mfbot * $mfbot2) / 3);
}
/**
* Апаем стат или мастерство на единицу.
*
* @param $name - техническое имя параметра, как в базе.
* @param null $param - выбор что повышать.
*
* @return void
*/
function addOnePoint($name, $param = null)
{
$allowed_stats = ['sila', 'lovk', 'inta', 'vinos', 'intel', 'mudra'];
$allowed_mastery = ['noj', 'mec', 'dubina', 'topor', 'mfire', 'mwater', 'mair', 'mearth', 'mlight', 'mgray', 'mdark'];
$naming = [
'sila' => 'Сила',
'lovk' => 'Ловкость',
'inta' => 'Интуиция',
'vinos' => 'Выносливость',
'intel' => 'Интеллект',
'mudra' => 'Мудрость',
'noj' => 'Владение кинжалами',
'mec' => 'Владение мечами',
'dubina' => 'Владение дубинами',
'topor' => 'Владение топорами',
'mfire' => 'Магия огня',
'mwater' => 'Магия воды',
'mair' => 'Магия воздуха',
'mearth' => 'Магия земли',
'mlight' => 'Магия света',
'mgray' => 'Магия серости',
'mdark' => 'Магия тьмы',
];
if ($param == 'stat' && in_array($name, $allowed_stats)) {
db::c()->query('UPDATE `users` SET ?f = ?f + 1, `stats` = `stats` - 1 WHERE `id` = ?i', $name, $name, $_SESSION['uid']);
echo "<span style='color:darkgreen'>Параметр {$naming[$name]} увеличен на 1 ед.</span>";
} elseif ($param == 'mastery' && in_array($name, $allowed_mastery)) {
$mastery_level = db::c()->query('SELECT ?f FROM `users` WHERE `id` = ?i', $name, $_SESSION['uid'])->fetch_assoc();
if ($mastery_level[$name] < 10) {
db::c()->query('UPDATE `users` SET ?f = ?f + 1, `master` = `master` - 1 WHERE `id` = ?i', $name, $name, $_SESSION['uid']);
echo "<span style='color:darkgreen'>Параметр {$naming[$name]} увеличен на 1 ед.</span>";
} else {
echo "<span style='color: maroon;'>Ошибка: параметр достиг максимального значения!</span>";
}
} else {
return null;
}
}
function checkIntInRange($int, $min = 1, $max = PHP_INT_MAX)
{
return (int)filter_var($int, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]]);
}

View File

@ -12,7 +12,7 @@ $vips = [1 => 0.15, 2 => 0.30, 3 => 0.45];
function show_item($row, $txt, $place)
{
if (($row['maxdur'] <= $row['duration']) || ($row['dategoden'] && $row['dategoden'] <= time())) {
destructitem($row['id']);
\Battles\InventoryItem::destroyItem($row['id']);
}
$r = '';

View File

@ -211,14 +211,13 @@ if ($_GET['lib_room'] == 'hall' || !$_GET['lib_room']) {
addchp('Вы успешно создали свиток <strong>' . $dress['name'] . '</strong>!', '{[]}' . Nick::id($user['id'])->short() . '{[]}');
}
}
echo '<tr><td>Вы стоите в небольшой комнате, от пола до потолка забтиой банками, пробирками, ингредиентами и прочими полезными вещами.
Здесь Вы можете собрать предметы по имеющимся у Вас рецептам.<br/><br/><IMG align=left alt="Знак зодиака" height=99 src="i/';
//выводим знак зодиака
echo star_sign(substr($user['borndate'], 3, 2), substr($user['borndate'], 0, 2));
echo '.gif" width=100>';
$a = new \Battles\UserInfo($user['id']);
echo "<tr><td>Вы стоите в небольшой комнате, от пола до потолка забтиой банками, пробирками, ингредиентами и прочими полезными вещами.
Здесь Вы можете собрать предметы по имеющимся у Вас рецептам.<br><br><img align=left alt='Родовой знак' src='i/zodiac/{$a->showStarSign()}.png'";
//выводим инфо по стихиям
echo 'Ваша стихия:';
$el = element(star_sign(substr($user['borndate'], 3, 2), substr($user['borndate'], 0, 2)));
$el = element($a->showStarSign());
switch ($el) {
case 'a':
echo "<strong><font color=#0198ef><ins>Воздух</ins></font></strong>";

View File

@ -43,7 +43,7 @@ if ($user['battle'] > 0) {
echo "<font color=red><b>Этот свиток нельзя встраивать в предметы!<b></font>";
} else {
// встраиваем
destructitem($svitok['id']);
\Battles\InventoryItem::destroyItem($svitok['id']);
echo "<font color=red><b>Свиток \"" . $svitok['name'] . "\" удачно встроен в \"" . $dress['name'] . "\"<b></font>";
mysql_query("UPDATE `inventory` SET
" . ($dress['nintel'] < $svitok['nintel'] ? "`nintel`='" . $svitok['nintel'] . "'," : "") . "

View File

@ -34,7 +34,6 @@ $edit = $_GET['edit'] ?? null;
if ($edit) {
$ups = $_GET['ups'] ?? null;
$upm = $_GET['upm'] ?? null;
$use = $_GET['use'] ?? null;
$useTarget = $_POST['target'] ?? null;
$drop = $_GET['drop'] ?? null;
@ -45,9 +44,6 @@ if ($edit) {
if ($ups) {
$user->addOnePointToStat($ups);
}
if ($upm) {
addOnePoint($upm, 'mastery');
}
if ($drop) {
$items = new DressedItems($_SESSION['uid']);
$items->undressItem($drop);
@ -60,13 +56,12 @@ if ($edit) {
unset($dressing);
}
if ($destruct) {
$q = db::c()->query('SELECT `id`, `dressed`, `name`, `duration`, `maxdur` FROM `inventory` WHERE `owner` = ?i AND `id` = ?i', $_SESSION['uid'], $destruct);
if ($q->getNumRows()) {
$q = $q->fetch_assoc();
if (empty($q['dressed'])) {
destructitem($q['id']);
GameLogs::addUserLog($user->getId(), $user->getLogin() . ' выбросил предмет ' . $q['name'] . ' id:(cap' . $q['id'] . ')');
err('Предмет ' . $q['name'] . ' выброшен.');
$q = DBPDO::INIT()->ofetch('select name,dressed_slot from inventory where owner_id = ? and item_id = ?', [$user->getId(), $destruct]);
if ($q) {
if (empty($q->dressed_slot)) {
InventoryItem::destroyItem($destruct);
GameLogs::addUserLog($user->getId(), $user->getLogin() . ' выбросил предмет ' . $q->name . ' id:(cap' . $destruct . ')');
err('Предмет ' . $q->name . ' выброшен.');
} else {
err('Ошибка: нельзя выбросить одетый предмет!');
}