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 .= '
';
}
$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, ', ') . ' ') . '
';
}
}