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

217 lines
11 KiB
PHP
Raw Permalink 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\Template;
use Battles\User, Battles\Database\Db;
const CASTLE_MAX_LEVEL = 10;
require_once 'functions.php';
$castleOwners = db::c()->query('SELECT * FROM `clans` WHERE `short` = (SELECT * FROM `variables` WHERE `var` = "?s")', 'gotzamok');
if ($castleOwners['id'] == $user['klan']) {
// если мой клан
if ($_GET['goto'] == 'arsenal') {
User::getInstance()->setRoom(38);
}
if ($_GET['goto'] == 'home') {
User::getInstance()->setRoom(37);
}
if ($_GET['goto'] == 'dvor') {
User::getInstance()->setRoom(39);
}
if ($_GET['goto'] == 'master') {
User::getInstance()->setRoom(40);
}
if ($_GET['goto'] == 'rest') {
User::getInstance()->setRoom(41);
}
if (in_array($_GET['goto'], ['arsenal', 'home', 'dvor', 'master', 'rest'])) {
db::c()->query('UPDATE `users`,`online` SET `users`.`room` = ?i,`online`.`room` = ?i WHERE `online`.`id` = `users`.`id` AND `online`.`id` = ?i', User::getInstance()->getRoom(), User::getInstance()->getRoom(), User::getInstance()->getId());
header('location: gotzamok.php');
} else {
$status = 'В этом замке нет такого места!';
}
}
$i = User::getInstance()->getRoom();
if ($i == '37') {
$backgroundImage = '689_small_550.jpg';
} elseif ($i == '41') {
$backgroundImage = 'ko.jpg';
}
if (User::getInstance()->getRoom() == 38) {
$glava = db::c()->query('SELECT owner_id FROM `clans` WHERE `short` = "?s"', $user['klan'])->fetch_assoc();
// возврат шмотки
if ($_GET['back']) {
$item = db::c()->query('SELECT * FROM `gotzam_arsenal` WHERE `id` = ?i', $_GET['back'])->fetch_assoc();
if ($_SESSION['uid'] == $item['owner'] or $_SESSION['uid'] == $glava['glava']) {
$status = 'Вы забрали вещь из арсенала.';
db::c()->query('UPDATE `inventory` SET `owner` = ?i WHERE `id` = ?i', $_SESSION['uid'], $item['id_it']);
db::c()->query('DELETE FROM `gotzam_arsenal` WHERE `id` = ?i', $_GET['back']);
}
}
// положить шмотку
if ($_GET['add']) {
$item = db::c()->query('SELECT * FROM `inventory` WHERE `dressed`=0 AND `setsale` = 0 AND `owner` =?i AND `id` = ?i', $_SESSION['uid'], $_GET['add'])->fetch_assoc();
if ($_SESSION['uid'] == $item['owner']) {
$status = 'Вы оставили вещь в арсенале.';
db::c()->query('UPDATE `inventory` SET `owner` = ?i WHERE `id` = ?i', -5, $item['id']);
db::c()->query('INSERT INTO `gotzam_arsenal` (`id_it`, `owner`) VALUES (?i, ?i)', $item['id'], $_SESSION['uid']);
}
}
}
if (User::getInstance()->getRoom() == 40) {
$at = db::c()->query('SELECT * FROM `variables` WHERE `var` = "?s"', 'gotzam_att')->fetch_assoc();
$def = db::c()->query('SELECT * FROM `variables` WHERE `var` = "?s"', 'gotzam_def')->fetch_assoc();
if ($_GET['up'] == 'at') {
if ($at[1] >= CASTLE_MAX_LEVEL) {
$status = 'Укрепление достигло максимального уровня!';
}
elseif ((pow(52, $at[1] + 1)) <= $user['money']) {
db::c()->query('UPDATE `users` SET `money` = `money` - ?i WHERE `id` = ?i', pow(52, $at[1] + 1), $_SESSION['uid']);
db::c()->query('UPDATE `variables` SET `value` = `value` + 1 WHERE `var` = "?s"', 'gotzam_att');
$at += 1;
} else {
$status = 'Не хватает денег!';
}
}
if ($_GET['up'] == 'def') {
if ($def[1] >= CASTLE_MAX_LEVEL) {
$status = 'Укрепление достигло максимального уровня!';
}
elseif ((pow(32, $def[1] + 1)) <= $user['money']) {
db::c()->query('UPDATE `users` SET `money` = `money` - ?i WHERE `id` = ?i', pow(52, $def[1] + 1), $_SESSION['uid']);
db::c()->query('UPDATE `variables` SET `value` = `value` + 1 WHERE `var` = "?s"', 'gotzam_def');
$def += 1;
} else {
$status = 'Не хватает денег!';
}
}
}
Template::header('Клановый замок');
?>
<script src="js/main.js"></script>
<style>
body {
background: url('i/<?= $backgroundImage ?>.jpg') no-repeat top right;
}
</style>
<h3>Приветствую тебя в замке <img src='i/clan/<?= $castleOwners['short'] ?>.png'> <?= $castleOwners['name'] ?>,
воин!</h3>
<div style="text-align: right;">
<button onClick="hrefToFrame('city.php?bps')">Вернуться</button>
</div>
<div><?php if (!empty($status)) {
err($status);
} ?></div>
<?php
if ($castleOwners['id'] == $user['klan']) { ?>
<h4>Приветствую в родной обители, собрат <b><?= $user['login'] ?>!</b></h4>
<table width=100%>
<TR>
<TD valign=top style="width:250px;">
<INPUT TYPE=button style="width:200px;" value="Перейти в приемную"
onClick="hrefToFrame('gotzamok.php?goto=home')">
<? if (User::getInstance()->getRoom() == 37): ?>
<img src='i/flag.gif'>
<?php endif; ?><BR>
<INPUT TYPE=button style="width:200px;" value="Перейти в арсенал"
onClick="hrefToFrame('gotzamok.php?goto=arsenal')">
<? if (User::getInstance()->getRoom() == 38): ?>
<img src='i/flag.gif'>
<?php endif; ?><BR>
<INPUT TYPE=button style="width:200px;" value="Перейти во внутренний двор"
onClick="hrefToFrame('gotzamok.php?goto=dvor')">
<? if (User::getInstance()->getRoom() == 39): ?>
<img src='i/flag.gif'>
<?php endif; ?><BR>
<INPUT TYPE=button style="width:200px;" value="Перейти в мастерские"
onClick="hrefToFrame('gotzamok.php?goto=master')">
<? if (User::getInstance()->getRoom() == 40): ?>
<img src='i/flag.gif'>
<?php endif; ?><BR>
<INPUT TYPE=button style="width:200px;" value="Перейти в опочивальни"
onClick="hrefToFrame('gotzamok.php?goto=rest')">
<? if (User::getInstance()->getRoom() == 41): ?>
<img src='i/flag.gif'>
<?php endif; ?><BR>
</td>
<td valign=top>
<?php if (User::getInstance()->getRoom() == 38): ?>
<h4>Арсенал</h4>
<button onClick="hrefToFrame('gotzamok.php?do=zdat')">Сдать в арсенал</button>
<div style="background: silver; border: 1px solid dimgray;">
Хранилище вещей клана. Если замок будет захвачен, все предметы перейдут к захватчикам.
</div>
<?php if (!$_GET['do']): $data = db::c()->query('SELECT * FROM `gotzam_arsenal`'); ?>
<TABLE class="zebra" WIDTH=100% CELLSPACING="1" CELLPADDING="2">
<?php while ($item = $data->fetch_assoc()):
$row = db::c()->query('SELECT * FROM `inventory` WHERE `id` = ?i', $item['id_it'])->fetch_assoc();
?>
<TR>
<TD align=center width=20%>
<IMG SRC="i/sh/<?= $row['img'] ?>">
<BR>
<small>Положил: <?= Nick::id($item['owner'])->full(1) ?><BR></small>
<?php
if ($_SESSION['uid'] == $item['owner'] or $_SESSION['uid'] == $glava['glava']): ?>
<A HREF="?back=<?= $item['id'] ?>">забрать</A><BR>
<?php else: $status = 'Вы не можете забрать эту вещь из арсенала.';
endif; ?>
</TD>
<TD valign=top> Тут был showitem($row);</TD>
</TR>
<?php endwhile; ?>
</table>
<?php else: ?>
<TABLE class="zebra" WIDTH=100% CELLSPACING="1" CELLPADDING="2">
<?php
$data = db::c()->query('SELECT * FROM `inventory` WHERE `dressed` = 0 AND `setsale` = 0 AND `owner` = ?i ORDER BY `update` DESC ', $_SESSION['uid']);
while ($row = $data->fetch_assoc()): ?>
<TR>
<TD align=center style='width:150px'>
<IMG SRC="i/sh/<?= $row['img'] ?>">
<BR><A HREF="?add=<?= $row['id'] ?>&sid=&sale=1">сдать в арсенал</A>
</TD>
<TD valign=top> Тут был showitem($row);</TD>
</TR>
<?php endwhile; ?>
</table>
<?php
endif;
endif;
if (User::getInstance()->getRoom() == 40): ?>
<h4>Мастерские</h4>
<div style="background: silver; border: 1px solid dimgray;">
Здесь вы можете улучшить оборонные способности вашего замка.
<br>Максимальный уровень ваших укреплений: <b><?= CASTLE_MAX_LEVEL ?></b>
<div>
<img src='i/at.gif'> <b>Атакующие</b> укрепления:
<br>Построено: <b><?= $at[1] ?> </b>
<a href='?up=at'>улучшить за <?= (pow(52, $at[1] + 1)) ?> кр.</a>
</div>
<div>
<img src='i/def.gif'> <b>Защитные</b> укрепления:
<br>Построено: <b><?= $def[1] ?> </b>
<a href='?up=at'>улучшить за <?= (pow(32, $def[1] + 1)) ?> кр.</a>
</div>
</div>
<?php endif;
if (User::getInstance()->getRoom() == 41): ?>
<h4>Комнаты отдыха</h4>
<div style="background: silver; border: 1px solid dimgray;">
Посиди в тишине, внутри стен. Тут нет врагов. Тут спокойно.
</div>
<?php endif; ?>
</td>
</tr>
</table>
<? } else {
$status = 'Ворота замка закрыты, привратник отказывается даже разговаривать с тобой...';
} ?>