otdel = intval($_GET['otdel']); $this->itemId = intval($_GET['itmid']); $this->shopId = $shopId; $this->wares = Db::getRows('select * from items_shop left join items_main on items_shop.item_id = items_main.id left join items_main_data on items_main_data.items_id = items_main.id where sid = ? and r = ? and kolvo > 0 order by pos', [$this->shopId, $this->otdel]); $this->buyer = new class { private User $user; public function __construct() { $this->user = User::start(); } public function getId() { return $this->user->info['id']; } public function getCredits() { return $this->user->info['money1']; } public function getEuroCredits() { return $this->user->info['money2']; } public function getMoney3() { return $this->user->info['money3']; } public function getVoinstvennost() { return $this->user->rep['rep3'] - $this->user->rep['rep3_buy']; } public function getAlign() { return $this->user->info['align']; } public function getNextAct() { return $this->user->info['nextAct']; // что ты такое?! } public function isAdmin(): bool { return $this->user->info['admin'] > 0; } }; } public function printWares(string $plu = '') { if ($this->buyer->isAdmin()) { if (isset($_GET['itmup'])) { $this->itemUp(); } elseif (isset($_GET['itmdown'])) { $this->itemDown(); } } $cr = 'c8c8c8'; foreach ($this->wares as $pl) { $cr = $cr == 'd4d4d4' ? 'c8c8c8' : 'd4d4d4'; $pl['price_1'] = $this->calculateMinimalPrice($pl['price1'], $pl['price_1'], $pl['tr_items']); $pl['price_2'] = $this->calculateMinimalPrice($pl['price2'], $pl['price_2'], $pl['tr_items']); if (empty($pl['data'])) { $pl['data'] = ''; } $itemData = ConversionHelper::dataStringToArray($pl['data']); if ($this->shopId == self::SHOP_2) { $itemData['icos'] = 'WL'; } if (($pl['type'] >= 18 && $pl['type'] <= 24) || $pl['type'] == 26 || $pl['type'] == 27) { //Зоны блока + $itemData['zonb']++; } $is2 = ''; if ($pl['type'] == 71) { $is1 = '
'; } else { $is1 = '
'; } if ($this->shopId == self::SHOP_2) { $is1 .= ' купить'; } else { if ($this->shopId == self::BEREZKA || $this->shopId == self::ARTEFACTS) { $is1 .= 'купить '; } else { $is1 .= 'купить '; } } //название $pl['name'] = $this->align($itemData['tr_align'], $itemData['tr_align_bs']); if (!empty($itemData['renameadd'])) { $pl['name'] .= ' (Предмет: ' . $itemData['renameadd'] . ')'; } if (!empty($itemData['icos'])) { $pl['name'] = '' . $pl['name'] . '  ' . $itemData['icos'] . ' '; } $is2 .= '' . $pl['name'] . '    '; if ($pl['massa'] > 0) { $is2 .= '(Масса: ' . round($pl['massa'], 2) . ')'; } if (isset($itemData['art'])) { $is2 .= ' '; } $is2 .= $this->destiny($itemData['sudba']); //цена if ($this->buyer->isAdmin()) { $is2 .= '
  ' . $pl['pos'] . '  
'; } $is2 .= '
Цена: '; if ($this->shopId == self::SHOP_2) { $is2 .= $this->printColoredValue($this->buyer->getVoinstvennost() >= $pl['price_4'], $pl['price_4']); $is2 .= ' Воинственности '; } elseif ($pl['price_3'] > 0) { $is2 .= $this->printColoredValue($this->buyer->getMoney3() >= $pl['price_3'], $pl['price_3']); $is2 .= ' $ '; } elseif ($this->shopId == self::BEREZKA || $this->shopId == self::ARTEFACTS) { $is2 .= ''; $is2 .= $this->printColoredValue($this->buyer->getEuroCredits() >= $pl['price_2'], $pl['price_2']); $is2 .= ' екр. '; } else { $is2 .= $this->printColoredValue($this->buyer->getCredits() >= $pl['price_1'], $pl['price_1']); $is2 .= ' кр. '; } if ($pl['pricerep'] > 0) { $is2 .= ' (' . round($pl['pricerep'], 2) . ' Воинственности)'; } if ($pl['kolvo'] < 100000) { $is2 .= '     (количество: ' . $pl['kolvo'] . ')'; } $is2 .= $this->needItems($pl['tr_items']); //долговечность if ($pl['iznos'] > 0) { $pl['iznosMAXi'] = $pl['iznos']; } if ($pl['iznosMAXi'] > 0) { if ($pl['iznosMAXi'] == 999999999) { $is2 .= 'Долговечность: неразрушимо
'; } else { $is2 .= 'Долговечность: 0/' . $pl['iznosMAXi'] . '
'; } } if ($itemData['battleUseZd'] > 0) { $is2 .= 'Задержка использования: ' . $this->timeOut($itemData['battleUseZd']) . '
'; } $is2 = rtrim($is2, '
'); //Срок годности предмета if ($itemData['srok'] > 0) { $pl['srok'] = $itemData['srok']; } if ($pl['srok'] > 0) { $is2 .= '
Срок годности: ' . $this->timeOut($pl['srok']); } if ($pl['magic_chance'] > 0) { $is2 .= '
Вероятность срабатывания: ' . min([$pl['magic_chance'], 100]) . '%'; } //Продолжительность действия магии: if ((int)$pl['magic_inci'] > 0) { $magicDuration = Db::getValue('select actiontime from eff_main where id2 = ?', [(int)$pl['magic_inci']]); if ($magicDuration > 0) { $is2 .= '
Продолжительность действия: ' . ConversionHelper::secondsToTimeout($magicDuration); } } //Требуется минимальное: $tr = ''; $t = $this->items['tr']; $x = 0; while ($x < count($t)) { $n = $t[$x]; if (isset($itemData['tr_' . $n]) && $itemData['tr_' . $n] != 0) { if ($itemData['tr_' . $n] > $this->stats[$n]) { if ($n == 'rep') { $temp = explode('::', $itemData['tr_' . $n]); if ($this->rep['rep' . $temp[1]] < $temp[0]) { $tr .= ''; $notr++; } unset($temp); } elseif ($n != 'align' || floor($this->buyer->getAlign()) != $itemData['tr_' . $n]) { $tr .= ''; $notr++; } } $tr .= '
• '; if ($n == 'rep') { $temp = explode('::', $itemData['tr_' . $n]); $tr .= $this->is[$n] . ' ' . ucfirst( str_replace('city', ' city', $temp[1]) ) . ': ' . $temp[0]; unset($temp); } elseif ($n != 'align') { if ($n == 'sex') { if ($itemData['tr_' . $n] == 1) { $tr .= $this->is[$n] . ': Женский'; } else { $tr .= $this->is[$n] . ': Мужской'; } } else { $tr .= $this->is[$n] . ': ' . $itemData['tr_' . $n]; } } else { $tr .= $this->is[$n] . ': ' . $this->align_nm[$itemData['tr_' . $n]]; } if ($itemData['tr_' . $n] > $this->stats[$n]) { if ($n != 'align' || floor($this->buyer->getAlign()) != $itemData['tr_' . $n]) { $tr .= '
'; } } } $x++; } if ($tr != '') { $is2 .= '
Требуется минимальное:' . $tr; } //Действует на: $tr = ''; $t = $this->items['add']; $x = 0; while ($x < count($t)) { $n = $t[$x]; if (isset($itemData['add_' . $n], $this->is[$n])) { $z = '+'; if ($itemData['add_' . $n] < 0) { $z = ''; } $tr .= '
• ' . $this->is[$n] . ': ' . $z . '' . $itemData['add_' . $n]; } $x++; } //действует на (броня) $i = 1; $bn = [1 => 'головы', 2 => 'корпуса', 3 => 'пояса', 4 => 'ног']; while ($i <= 4) { if (isset($itemData['add_mab' . $i])) { if ($itemData['add_mab' . $i] == $itemData['add_mib' . $i] && $pl['geniration'] == 1) { $z = '+'; if ($itemData['add_mab' . $i] < 0) { $z = ''; } $tr .= '
• Броня ' . $bn[$i] . ': ' . $z . '' . $itemData['add_mab' . $i]; } else { $tr .= '
• Броня ' . $bn[$i] . ': ' . $itemData['add_mib' . $i] . '-' . $itemData['add_mab' . $i]; } } $i++; } if ($tr != '') { $is2 .= '
Действует на:' . $tr; } //Свойства предмета: $tr = ''; $t = $this->items['sv']; if (isset($itemData['sv_yron_min'], $itemData['sv_yron_max'])) { $tr .= '
• Урон: ' . $itemData['sv_yron_min'] . ' - ' . $itemData['sv_yron_max']; } $x = 0; while ($x < count($t)) { $n = $t[$x]; if (isset($itemData['sv_' . $n])) { $z = '+'; if ($itemData['sv_' . $n] < 0) { $z = ''; } $tr .= '
• ' . $this->is[$n] . ': ' . $z . '' . $itemData['sv_' . $n]; } $x++; } if ($pl['2too'] == 1) { $tr .= '
• Второе оружие'; } if ($pl['2h'] == 1) { $tr .= '
• Двуручное оружие'; } if (isset($itemData['zonb'])) { $tr .= '
• Зоны блокирования: '; if ($itemData['zonb'] > 0) { $x = 1; while ($x <= $itemData['zonb']) { $tr .= '+'; $x++; } } else { $tr .= '—'; } } if ($tr != '') { $is2 .= '
Свойства предмета:' . $tr; } //Особенности $tr = ''; if (isset($itemData['imposed']) && $itemData['imposed'] > 0) { if ($itemData['imposed_lvl'] == 0) { $rnc = 'maroon'; } elseif ($itemData['imposed_lvl'] == 1) { $rnc = '#624542'; } elseif ($itemData['imposed_lvl'] == 2) { $rnc = '#77090b'; } elseif ($itemData['imposed_lvl'] == 3) { $rnc = '#d99800'; } else { $rnc = '#282828'; } $itemData['imposed_name'] = str_replace('Чары ', '', $itemData['imposed_name']); $tr .= '
Наложены заклятия: ' . $itemData['imposed_name'] . ' '; unset($rnc); } if ($tr != '') { $is2 .= '
Улучшения предмета:'; $is2 .= $tr; } if ($notr == 0 && $pl['magic_inc'] != '') { $pl['data'] = 1; } if (isset($itemData['free_stats']) && $itemData['free_stats'] > 0) { $is2 .= '
Распределение статов:
'; $is2 .= '• Возможных распределений: +' . $itemData['free_stats'] . ' характеристик'; } //Встроенная магия if ($pl['magic_inci'] != '' || $pl['magic_inc'] != '') { if ($pl['magic_inc'] == '') { $pl['magic_inc'] = $pl['magic_inci']; } $mgi = mysql_fetch_array( mysql_query( 'SELECT * FROM `eff_main` WHERE `id2` = "' . $pl['magic_inc'] . '" AND `type1` = "12345" LIMIT 1' ) ); if (isset($mgi['id2'])) { $is2 .= '
Встроено заклятие ' . $mgi['minfo'] . '
'; } } if (floor($pl['iznosNOW']) >= ceil($pl['iznosMAX'])) { $pl['data'] = 0; } if (isset($itemData['complect'])) { $is2 .= '
Дополнительная информация:'; } if (isset($itemData['complect'])) { //не отображается $com1 = ['name' => 'Неизвестный Комплект', 'x' => 0, 'text' => '']; $spc = mysql_query( 'SELECT `id`,`com`,`name`,`x`,`data` FROM `complects` WHERE `com` = "' . $itemData['complect'] . '" ORDER BY `x` ASC LIMIT 20' ); while ($plc = mysql_fetch_array($spc)) { $com1['name'] = $plc['name']; $com1['text'] .= '    • ' . $plc['x'] . ': '; //действие комплекта $i1c = 0; $i2c = 0; $i1e = ConversionHelper::dataStringToArray($plc['data']); while ($i1c < count($this->items['add'])) { if (isset($i1e[$this->items['add'][$i1c]])) { $i3c = $i1e[$this->items['add'][$i1c]]; if ($i3c > 0) { $i3c = '+' . $i3c; } if ($i2c > 0) { $com1['text'] .= '    ' . $this->is[$this->items['add'][$i1c]] . ': ' . $i3c; } else { $com1['text'] .= $this->is[$this->items['add'][$i1c]] . ': ' . $i3c; } $com1['text'] .= '
'; $i2c++; } $i1c++; } unset($i1c, $i2c, $i3c); $com1['x']++; } $is2 .= '
• Часть комплекта: ' . $com1['name'] . '
'; $is2 .= $com1['text']; $is2 .= ''; } if ($pl['max_text'] - $pl['use_text'] > 0) { $is2 .= '
Количество символов: ' . ($pl['max_text'] - $pl['use_text']) . '
'; } $is2 .= ''; if (isset($itemData['gravi'])) { $is2 .= '
На поверхности выгравирована надпись: ' . $itemData['gravi'] . ''; } if ($pl['info'] != '') { $is2 .= '
Рекомендации:
' . $pl['info'] . '
'; } if ($itemData['info'] != '') { $is2 .= '
' . $itemData['info'] . '
'; } if (isset($itemData['noremont'])) { $is2 .= '
Предмет не подлежит ремонту
'; } if (isset($itemData['nosale'])) { $is2 .= '
Предмет нельзя продать
'; } if (isset($itemData['nomodif'])) { $is2 .= '
Предмет нельзя улучшать
'; } if (isset($itemData['nodelete'])) { $is2 .= '
Предмет нельзя выбросить
'; } if (isset($itemData['frompisher']) && $itemData['frompisher'] > 0) { $is2 .= '
Предмет из подземелья
'; } if (isset($itemData['sleep_moroz']) && $itemData['sleep_moroz'] > 0) { $is2 .= '
Предмет не портится во время сна
'; } if (isset($itemData['fromlaba']) && $itemData['fromlaba'] > 0) { $is2 .= '
Предмет из лабиринта
'; } if (isset($itemData['vip_sale']) && $itemData['vip_sale'] > 0) { $is2 .= '
Предмет куплен за 10% от стоимости
'; } if ($pl['dn_delete'] > 0) { $is2 .= '
Предмет будет удален при выходе из подземелья
'; } if (self::ITEM_GENERATION_CURRENT > $pl['geni']) { $is2 .= '
Предмет устарел
'; } $is2 .= '
'; $crd = ''; if ($this->buyer->isAdmin()) { $crd = ' Редактировать предмет   обновить
'; } echo ' ' . $is1 . '  ' . $crd . '' . $is2 . ' '; } if (empty($this->wares)) { echo ' Прилавок магазина пуст '; } } private function itemUp() { $this->changeItemPositionByInt(-1); } private function changeItemPositionByInt(int $modificator) { Db::sql('update items_shop set pos = pos + ? where sid = ? and r = ? and item_id = ? and kolvo > 0', [$modificator, $this->shopId, $this->otdel, $this->itemId]); } private function itemDown() { $this->changeItemPositionByInt(1); } private function calculateMinimalPrice($basePrice, $shopPrice, $needItems) { if ($shopPrice < 0.01 && !$needItems) { $shopPrice = $basePrice; } if ($shopPrice < 0) { $shopPrice = 0; } return $shopPrice; } private function align($needAlign, $needAlignBs): string { if ($needAlignBs == '1') { $align = '1.75'; } elseif ($needAlignBs == '3') { $align = '3.01'; } elseif (!empty($needAlign) && empty($needAlignBs)) { $align = $needAlign; } return !empty($align) ? 'Требуется склонность' : ''; } private function destiny($d): string { if (empty($d)) { return ''; } if ($d == 0) { $str = 'первым, кто наденет его'; } elseif ($d == 1) { $str = 'первым, кто возьмёт его'; } else { $str = $d; } return 'Общая судьба'; } /** * Если в первом параметре передаётся false, строка во втором параметре красится в красный цвет. * @param bool $check * @param $value * @return string */ private function printColoredValue(bool $check, $value): string { $color = $check ? 'inherit' : 'red'; return sprintf('%s', $color, $value); } private function needItems(string $items): string { if (!$items || Config::get('noitembuy')) { return ''; } $result = ''; $trn = true; $itemsArray = explode(',', $items); foreach ($itemsArray as $keyvalue) { [$key, $value] = explode('=', $keyvalue); if (!empty($key) && !empty($value)) { $neededItemName = Db::getValue('select name from items_main where id = ?', [$key]); if ($neededItemName) { $neededItemsInInventoryCount = Db::getValue( 'select count(*) from items_users where item_id = ? and inShop = 0 and inOdet = 0 and `delete` in (0,1000) and uid = ?', [$key, $this->buyer->getId()]); if ($neededItemsInInventoryCount < (int)$value) { $trn = false; } $result .= '[' . $neededItemName . '] x' . $value . ', '; } } } return $this->printColoredValue($trn, '
Требует предмет: ' . rtrim($result, ', ') . ' ') . '
'; } }