battles/podzem_dialog.php
Igor Barkov (iwork) 3502904656 Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42.
Новые шаги для решения #16 и #52.
Closes #42.
Closes #32.
Closes #31.
2022-01-27 01:15:33 +02:00

302 lines
18 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Battles\Database\Db;
use Battles\Item;
use Battles\Template;
use Battles\User;
use Battles\UserInfo;
require_once "functions.php";
require_once "startpodzemel.php";
const QUEST_ITEM_NAME = [
'g' => 'Гайка',
'v' => 'Вентиль',
'b' => 'Болт',
'z' => 'Жетон',
'k' => 'Ключиик',
];
$fd = Db::getInstance()->execute('select location, name, glava from labirint where user_id = ?', User::getInstance()->getId())->fetch();
$vb = Db::getInstance()->fetchColumn('select n18 from podzem3 where glava = ? and name = ?', [$fd['glava'], 'Канализация 1 этаж']);
if ($fd['location'] != '28' || $fd['name'] != 'Канализация 1 этаж' || $vb != '8') {
return;
}
$userInfo = new UserInfo(User::getInstance()->getId());
Template::header('Подземелье Луки');
?>
<div id=hint3 class=ahint></div>
<TABLE width=100% cellspacing=0 cellpadding=0 border=0>
<TR>
<TD valign=top>
<div style="width: 250px; text-align: center;">
<?php $userInfo->showUserDoll(); ?>
</div>
</TD>
<TD>
<i>
<?php
$gag = Db::getInstance()->fetchAll('select * from qwest where login = ?', User::getInstance()->getLogin());
foreach ($gag as $qw) {
$name_qwest = $qw['name_items'];
if ($name_qwest === QUEST_ITEM_NAME['k']) {
$qwest = 1;
$name_qw = 'kluchiik';
}
}
$qwus = Db::getInstance()->fetch('select * from qwest where login = ? and name_qwest = ?', [User::getInstance()->getLogin(), $name_qw]);
$qwest_status = $qwus["status"];
$qwesta = Db::getInstance()->fetch('select * from inventory where item_type = 200 and name = ? and owner_id = ?', [QUEST_ITEM_NAME['k'], User::getInstance()->getId()]);
if ($qwesta) {
$ok_qwest = "1";
}
if (!$_GET['d']) {
print"Запах... ОНИ! Мою хороошую, мою чистую канализацию испортилиии...";
}
if ($_GET['d'] == '1') {
print"ОН... Он был тут первым... САМЫМ! Гайки, болты, вентили... чинииил... Лука помогал ему... А он... ОН! он ПРЕДАААЛ!! Луку... ЛУКУ ОБИИИИДЕЛ! Он... он теперь не с намиии... ПОМОЙКАаа... Запаааах... Найди.. УБЕЕЙ! а.. Лука, лука даст тебе новые жетоны. Целых 3!!";
}
if ($_GET['d'] == '1.1') {
print"Ты НАШООЛ их.? Лука хочет менять! Лука тебе даст жетоны, а ты дашь Луке ИХ! Согла-а-асен?";
}
if ($qwest_status != 'ok') {
if ($ok_qwest == '1' && $_GET['d'] == '1.2') {
print"Ооо... Лука рад... Лука очень благодарен тебе... Лука даст тебе подарок... Лука даст тебе одно из двух... Лука даст Гайку силы или Гайку мудрости... выбирай...";
}
if ($ok_qwest == '1' && $_GET['d'] == '1.3') {
$query = 'insert into inventory (owner_id, name, add_strength, add_criticals, item_type, durability) values (?,?,?,?,?,?)';
$item_name = 'Гайка силы';
}
if ($ok_qwest == '1' && $_GET['d'] == '1.4') {
$query = 'insert into inventory (owner_id, name, add_dexterity, add_evasion, item_type, durability) values (?,?,?,?,?,?)';
$item_name = 'Гайка ловкости';
}
if ($ok_qwest == 1 && ($_GET['d'] == 1.3 || $_GET['d'] == 1.4)) {
Db::getInstance()->execute($query, [User::getInstance()->getId(), $item_name, 3, 30, Item::ITEM_TYPE_AMULET, 20]);
$query = 'delete from inventory where owner_id = ? and item_type = 200 and name = ?';
Db::getInstance()->execute($query, [User::getInstance()->getId(), QUEST_ITEM_NAME['k']]);
$query = 'update qwest set status = ? where name_qwest = ? and login = ?';
Db::getInstance()->execute($query, ['ok', 'kluchiik', User::getInstance()->getLogin()]);
echo sprintf('<span style="font-size: 11px; color: #f00">Вы получили предмет %s.</span><br><br>Лука говорит спасибо...', $item_name);
}
}
if (($_GET['d'] == '2') && ($user['level'] >= 4) && ($user['level'] < 7)) {
print"Цена-аа? У Луки много жетонов. Лука не жаадный. Лука берет 3 Гайки и отдает жетон. Лука дает жетон за целый болт. Лука дает ТРИ жетона за найденный вентиль.<br> Лука дает жетоны серебрянные, если Гайки и Вентили Чистые, а Болт Длинный! Лука дает золотые жетоны, если Гайки с Резьбой, Вентиль Рабочий, а Болт Нужный!";
}
if (($_GET['d'] == '2') && ($user['level'] >= 7) && ($user['level'] <= 8)) {
print"Цена-аа? У Луки много жетонов. Лука не жаадный. Лука берет 9 Гаек и отдает жетон. Лука дает жетон за три болта. Лука дает целый жетон за найденный вентиль.<br> Лука дает жетоны серебрянные, если Гайки и Вентили Чистые, а Болт Длинный! Лука дает золотые жетоны, если Гайки с Резьбой, Вентиль Рабочий, а Болт Нужный!";
}
/////////////////////
if ($_GET['d'] == '3') {
$query = 'select item_id, durability, name from inventory where item_type = 200 and name in (?,?,?) and owner_id = ?';
$a = Db::getInstance()->fetchAll($query, [QUEST_ITEM_NAME['g'], QUEST_ITEM_NAME['v'], QUEST_ITEM_NAME['b'], User::getInstance()->getId()]);
unset($query);
foreach ($a as $row) {
if ($row['name'] == QUEST_ITEM_NAME['g']) {
$total_mass += $row['maxdur'];
$alls_id = $row['id'];
}
if ($row['name'] == QUEST_ITEM_NAME['b']) {
$total_mass_b += $row['maxdur'];
$vls_id = $row['id'];
}
if ($row['name'] == QUEST_ITEM_NAME['v']) {
$total_mass_v = +$row['maxdur'];
$bls_id = $row['id'];
}
}
if (in_array(User::getInstance()->getLevel(), [4, 5, 6])) {
$lim = 3;
$max = 60;
$vsego_v = $total_mass_v;
$ziton_v = $total_mass_v * 3;
$vsego_b = $total_mass_b;
$ziton_b = $total_mass_b;
} elseif (in_array(User::getInstance()->getLevel(), [7, 8])) {
$lim = 9;
$max = 200;
$vsego_v = $total_mass_v;
$ziton_v = $total_mass_v;
$lim_b = 9;
$max_b = 200;
}
$ziton = intval($total_mass / $lim);
if ($ziton > $max) {
$ziton = $max;
}
$vsego = $ziton * $lim;
$ziton_b = intval($total_mass_b / $lim_b);
if ($ziton_b > $max_b) {
$ziton_b = $max_b;
}
$vsego_b = $ziton_b * $lim_b;
$query1 = 'delete from inventory where name = ? and owner_id = ?';
$query2 = 'update inventory set durability = ?, weight = ? where item_id = ?';
$ostalos = intval($total_mass - $vsego);
$ostalos_v = intval($total_mass_v - $vsego_v);
$ostalos_b = intval($total_mass_b - $vsego_b);
if ($ostalos == 0) {
Db::getInstance()->execute($query1, [QUEST_ITEM_NAME['g'], User::getInstance()->getId()]);
} else {
Db::getInstance()->execute($query2, [$ostalos, $ostalos * 0.1, $alls_id]);
}
if ($ostalos_v == 0) {
Db::getInstance()->execute($query1, [QUEST_ITEM_NAME['v'], User::getInstance()->getId()]);
} else {
Db::getInstance()->execute($query2, [$ostalos_v, $ostalos_v * 0.2, $vls_id]);
}
if ($ostalos_b == 0) {
Db::getInstance()->execute($query1, [QUEST_ITEM_NAME['b'], User::getInstance()->getId()]);
} else {
Db::getInstance()->execute($query2, [$ostalos_b, $ostalos_b * 0.1, $bls_id]);
}
unset($query1, $query2);
$query1 = 'select durability from inventory where owner_id = ? and item_type = 200 and name = ?';
$query2 = 'update inventory set durability = durability + ?, weight = weight + ?, present = ? where owner_id = ? and item_type = 200 and name = ?';
$query3 = 'insert into inventory (name, durability, owner_id, item_type, weight, present) values (?,?,?,?,?,?)';
$all_zitons = $ziton + $ziton_v + $ziton_b;
if (!empty($all_zitons)) {
$check = Db::getInstance()->fetch($query1, [User::getInstance()->getId(), QUEST_ITEM_NAME['z']]);
if ($check['durability'] > 0) {
Db::getInstance()->execute($query2, [$all_zitons, $all_zitons * 0.1, 'Лука', User::getInstance()->getId(), QUEST_ITEM_NAME['z']]);
} else {
Db::getInstance()->execute($query3, [QUEST_ITEM_NAME['z'], $all_zitons, User::getInstance()->getId(), 200, $all_zitons * 0.1 . 'Лука']);
}
unset($query1, $query2, $query3);
} else {
print" ИХ больше у тебя нету... Неси еще, Луке нужно больше ИХ! ";
}
if ($ziton > 0) {
print" Вы отдали: <b>$vsego</b> шт.Гаек <br> Получили: <b>$ziton</b> шт.Жетонов.<br>";
}
if ($ziton_v > 0) {
print" Вы отдали: <b>$vsego_v</b> шт.Вентиль <br> Получили: <b>$ziton_v</b> шт.Жетонов.<br>";
}
if ($ziton_b > 0) {
print" Вы отдали: <b>$vsego_b</b> шт.Болтов <br> Получили: <b>$ziton_b</b> шт.Жетонов.";
}
}
//////////////////////
if ($_GET['d'] == '4') {
print"А?...";
}
if ($_GET['d'] == '5') {
echo 'Лука и Мартын тут живут давно... чииинят трубыы. Лука Чинит. Лука не любит пауков... Лука любит жетоны... Они красивые... Лука любит играть с ними... Мартын к паукам ушел... Теперь Лука один, чииинит...';
}
if ($qwest != '1') {
if ($_GET['d'] == '6') {
echo 'Да да! Мартын гаад... он украл у Луки важную вещь ' . QUEST_ITEM_NAME['k'] . '... убей Мартына... забери ' . QUEST_ITEM_NAME['k'] . '... принеси его к Луке... Лука вознаградит тебя...';
}
if ($_GET['d'] == '7') {
if ($qwest != '1') {
$T1 = Db::getInstance()->execute('insert into qwest (user_id,login,name_qwest,name_items,id_items,dlja,zadanie,kw,status) values (?,?,?,?,?,?,?,?,?)', [User::getInstance()->getId(), User::getInstance()->getLogin(), 'kluchiik', QUEST_ITEM_NAME['k'], '', 'Лука', 'Найти ключиик', 0, 'no']);
echo sprintf('<span style="font-size:11px; color:red;">Вы приняли задание.(Найти %s).</span><br><br>Хорошо... Лука будет ждать...', QUEST_ITEM_NAME['k']);
} else {
echo sprintf('<span style="font-size:11px; color:red;">Вы уже приняли задание.(Найти %s).</span><br><br>Ну что? Лука ждёт...', QUEST_ITEM_NAME['k']);
}
}
}
?>
</i><BR><BR>
<?php
//Вопросы)
if (!isset($_GET['d'])) {
print"&bull;<A href='?act=luka&d=1'> Запах?? Ты вообще о чем? </A><BR>";
print"&bull;<A href='?act=luka&d=1.1'> Я тут гайки-вентили нашел, тебе они случайно не нужны? </A><BR>";
if ($qwest_status != 'ok' && $ok_qwest == '1') {
print"&bull;<A href='?act=luka&d=1.2'> Вот твой ключиик! </A><BR>";
}
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '1') {
print"&bull;<A href='?act=luka'> Понятно. Но я хотел поговорить о другом. </A><BR>";
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '1.1') {
print"&bull;<A href='?act=luka&d=2'> Я хочу знать, сколько жетонов ты мне дашь. </A><BR>";
print"&bull;<A href='?act=luka&d=3'> Я хочу поменять ИХ на жетоны. </A><BR>";
print"&bull;<A href='?act=luka'> С гайками все ясно. Вернемся назад. </A><BR>";
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($ok_qwest == '1' && $_GET['d'] == '1.2') {
print"&bull;<A href='?act=luka&d=1.3'> Выбераю Гайку силы.</A><BR>";
print"&bull;<A href='?act=luka&d=1.4'> Выбераю Гайку мудрости.</A><BR>";
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду..</A><BR>";
}
if ($_GET['d'] == '1.3') {
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '1.4') {
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '2') {
print"&bull;<A href='?act=luka&d=3'> Я хочу поменять ИХ на жетоны. </A><BR>";
print"&bull;<A href='?act=luka'> Спасибо, за прайс-лист. </A><BR>";
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '3') {
print"&bull;<A href='?act=luka&d=4'> Я хотел еще спросить... </A><BR>";
print"&bull;<A href='main.php?act=none'> Хорошо, пойду еще принесу.</A><BR>";
}
if ($_GET['d'] == '4') {
print"&bull;<A href='?act=luka&d=1.1'> Что ты там говорил про гайки-вентили? </A><BR>";
print"&bull;<A href='?act=luka&d=5'> Расскажи мне о себе. </A><BR>";
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '5') {
print"&bull;<A href='?act=luka&d=1.1'> Что ты там говорил про гайки-вентили? </A><BR>";
}
if ($qwest != '1' && $_GET['d'] == '5') {
print"&bull;<A href='?act=luka&d=6'> Может помочь чем? </A><BR>";
}
if ($_GET['d'] == '5') {
print"&bull;<A href='main.php?act=none'> Я, пожалуй, пойду.</A><BR>";
}
if ($_GET['d'] == '6') {
print"&bull;<A href='?act=luka&d=7'> Я помогу тебе... принесу я ключиик... жди! </A><BR>";
print"&bull;<A href='main.php?act=none'> Да ну тя сам разберайся.</A><BR>";
}
if ($_GET['d'] == '7') {
print"&bull;<A href='main.php?act=none'> Я, пойду.(конец диалога).</A><BR>";
}
print"</i>";
?>
<BR><BR>
</TD>
<TD>
<?php
$buser = Db::getInstance()->fetch('select * from users where login = ?', 'Лука');
//Этот класс не умеет работать с ботами! Этот вызов - заглушка!
$botInfo = new UserInfo('Лука');
$botInfo->showUserDoll();
?>
</TD>
</TR>
</TABLE>
<!-- <DIV ID=oMenu CLASS=menu onmouseout="closeMenu()"></DIV> -->
<DIV ID="oMenu" style="position:absolute; border:1px solid #666; background-color:#CCC; display:none; "></DIV>
<TEXTAREA ID=holdtext STYLE="display:none;"></TEXTAREA>