Рефакторинг, очистка, работа над ошибками, связанными с базой, отказ от глобальной переменной $user во многих файлах.
Singleton в некоторых местах вместо решения #42. Новые шаги для решения #16 и #52. Closes #42. Closes #32. Closes #31.
This commit is contained in:
+39
-71
@@ -5,7 +5,7 @@
|
||||
* Project name: Battles-Game
|
||||
*/
|
||||
|
||||
use Battles\Database\DBPDO;
|
||||
use Battles\Database\Db;
|
||||
use Battles\DressedItems;
|
||||
use Battles\InventoryItem;
|
||||
use Battles\Travel;
|
||||
@@ -17,11 +17,9 @@ require_once 'config.php';
|
||||
if (empty($_SESSION['uid'])) {
|
||||
header("Location: index.php");
|
||||
exit;
|
||||
} elseif (empty($user)) {
|
||||
$user = new User($_SESSION['uid']);
|
||||
}
|
||||
|
||||
if (User::$current->getBlock()) {
|
||||
if (User::getInstance()->getBlock()) {
|
||||
exit('user blocked!');
|
||||
}
|
||||
|
||||
@@ -33,7 +31,6 @@ $fbattleCheckFiles = [
|
||||
'c_haos.php',
|
||||
'c_park.php',
|
||||
'city.php',
|
||||
'clan_castle.php',
|
||||
'enter_cave.php',
|
||||
'library.php',
|
||||
'atk.php',
|
||||
@@ -57,12 +54,12 @@ $fbattleCheckFiles = [
|
||||
'zayavka.php',
|
||||
];
|
||||
//Может просто отовсюду? О_о
|
||||
if (User::$current->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) {
|
||||
if (User::getInstance()->getBattle() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $fbattleCheckFiles)) {
|
||||
header('location: fbattle.php');
|
||||
exit;
|
||||
}
|
||||
$towerinCheckFiles = ['main.php', 'city.php', 'tower.php'];
|
||||
if (User::$current->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) {
|
||||
if (User::getInstance()->getInTower() && in_array(pathinfo(debug_backtrace()[0]['file'])['basename'], $towerinCheckFiles)) {
|
||||
header('location: towerin.php');
|
||||
exit;
|
||||
}
|
||||
@@ -70,8 +67,8 @@ $roomsCheck = [22, 23, 25, 27, 29, 30, 31, 37, 38, 39, 40, 41, 45, 53, 61, 401,
|
||||
// Если я в одной из этих комнат,
|
||||
// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь
|
||||
// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых
|
||||
if (in_array(User::$current->getRoom(), $roomsCheck)
|
||||
&& pathinfo(debug_backtrace()[0]['file'])['basename'] != Travel::$roomFileName[User::$current->getRoom()]
|
||||
if (in_array(User::getInstance()->getRoom(), $roomsCheck)
|
||||
&& pathinfo(debug_backtrace()[0]['file'])['basename'] != Travel::$roomFileName[User::getInstance()->getRoom()]
|
||||
&& in_array(array_search(pathinfo(debug_backtrace()[0]['file'])['basename'], Travel::$roomFileName), $roomsCheck)) {
|
||||
header('location: main.php');
|
||||
exit;
|
||||
@@ -79,8 +76,8 @@ if (in_array(User::$current->getRoom(), $roomsCheck)
|
||||
|
||||
if (!empty($_GET['goto']) && !empty($_GET['tStamp']) && !empty($_GET['vcode']) && $_GET['vcode'] == md5(sha1($_GET['goto'] . $_GET['tStamp']))) {
|
||||
$query = 'update users u, online o set u.room = ?, o.room = ? where user_id = id and user_id = ?';
|
||||
DBPDO::$db->execute($query, [$_GET['goto'], $_GET['goto'], User::$current->getId()]);
|
||||
User::$current->setRoom(intval($_GET['goto']));
|
||||
Db::getInstance()->execute($query, [$_GET['goto'], $_GET['goto'], User::getInstance()->getId()]);
|
||||
User::getInstance()->setRoom(intval($_GET['goto']));
|
||||
}
|
||||
|
||||
function createbot($bot, $login = "")
|
||||
@@ -109,34 +106,6 @@ $var_map = [
|
||||
'cell_25' => 'Полесье',
|
||||
];
|
||||
|
||||
function get_out($u)
|
||||
{
|
||||
$pers = db::c()->query('SELECT * FROM users WHERE id = ?i', $u)->fetch_assoc_array();
|
||||
DressedItems::undressAllItems($pers['id']);
|
||||
db::c()->query('UPDATE inventory SET owner = ?i WHERE owner = ?i', $pers['id'], $pers['id'] + _BOTSEPARATOR_);
|
||||
###
|
||||
$row = db::c()->query('SELECT * FROM `effects` WHERE `owner` = ?i', $pers['id'] + _BOTSEPARATOR_);
|
||||
$travm = [11, 12, 13, 14];
|
||||
while ($efs = $row->fetch_assoc()) {
|
||||
if (in_array($efs['type'], $travm)) {
|
||||
$pers['sila'] -= $efs['sila'];
|
||||
$pers['lovk'] -= $efs['lovk'];
|
||||
$pers['inta'] -= $efs['inta'];
|
||||
$pers['vinos'] -= $efs['vinos'];
|
||||
} else {
|
||||
$pers['sila'] += $efs['sila'];
|
||||
$pers['lovk'] += $efs['lovk'];
|
||||
$pers['inta'] += $efs['inta'];
|
||||
$pers['vinos'] += $efs['vinos'];
|
||||
$pers['maxhp'] += $efs['hp'];
|
||||
}
|
||||
$efs['owner'] = $_SESSION['uid'];
|
||||
//mysql_query('UPDATE `effects` SET `owner` = "' . $efs['owner'] . '" WHERE `id` = "' . $efs['id'] . '" LIMIT 1');
|
||||
//mysql_query('UPDATE `users` SET `sila` = "' . $pers['sila'] . '", `lovk` = "' . $pers['lovk'] . '", `inta` = "' . $pers['inta'] . '", `vinos` = "' . $pers['vinos'] . '", `maxhp` = "' . $pers['maxhp'] . '" WHERE `id` = "' . $pers['id'] . '" LIMIT 1');
|
||||
}
|
||||
###
|
||||
}
|
||||
|
||||
const _BOTSEPARATOR_ = 10000000;
|
||||
|
||||
function savecavedata($cavedata, $caveleader, $floor)
|
||||
@@ -185,19 +154,19 @@ HTML;
|
||||
function echoscroll($slot)
|
||||
{
|
||||
$all_magic = 0;
|
||||
if (User::$current->getBattle()) {
|
||||
if (User::getInstance()->getBattle()) {
|
||||
$script = 'fbattle';
|
||||
$bat = db::c()->query('SELECT `magic` FROM `battle` WHERE `id` = ?i', User::$current->getBattle())->fetch_assoc();
|
||||
$bat = db::c()->query('SELECT `magic` FROM `battle` WHERE `id` = ?i', User::getInstance()->getBattle())->fetch_assoc();
|
||||
$all_magic = unserialize($bat['magic']);
|
||||
} else {
|
||||
$script = 'main';
|
||||
}
|
||||
|
||||
$dress = db::c()->query('SELECT `id`, `magic`, `name`, `img`, `duration`, `maxdur` FROM `inventory` WHERE `id` = ?i', User::$current->$slot)->fetch_assoc();
|
||||
$dress = db::c()->query('SELECT `id`, `magic`, `name`, `img`, `duration`, `maxdur` FROM `inventory` WHERE `id` = ?i', User::getInstance()->$slot)->fetch_assoc();
|
||||
$need_charge = db::c()->query('SELECT `needcharge` FROM `magic` WHERE `id` = ?i', $dress['magic'])->fetch_assoc();
|
||||
|
||||
if ((User::$current->$slot > 0) && ($all_magic[User::$current->getId()] < 1 || empty($need_charge['needcharge']))) {
|
||||
$row['id'] = User::$current->$slot;
|
||||
if ((User::getInstance()->$slot > 0) && ($all_magic[User::getInstance()->getId()] < 1 || empty($need_charge['needcharge']))) {
|
||||
$row['id'] = User::getInstance()->$slot;
|
||||
if ($dress['magic']) {
|
||||
$magic = db::c()->query('SELECT targeted FROM `magic` WHERE `id` = ?i', $dress['magic'])->fetch_assoc();
|
||||
echo "<a onclick=\"";
|
||||
@@ -214,7 +183,7 @@ function echoscroll($slot)
|
||||
echo <<<ACTIVE_SCROLL
|
||||
<img class='tooltip' src="i/sh/{$dress['img']}" width='40' title="<b>{$dress['name']}</b><br> Прочность {$dress['duration']} / {$dress['maxdur']} " height='25' alt="Свиток"></a>
|
||||
ACTIVE_SCROLL;
|
||||
} elseif ((User::$current->$slot > 0) && ($all_magic[User::$current->getId()] >= 1) && $need_charge['needcharge'] > 0) {
|
||||
} elseif ((User::getInstance()->$slot > 0) && ($all_magic[User::getInstance()->getId()] >= 1) && $need_charge['needcharge'] > 0) {
|
||||
echo <<<INACTIVE_SCROLL
|
||||
<img src="i/sh/magicclock.gif" width="40" height="25" title='Произведите размен ударами и магия снова станет доступна' alt="Свиток">
|
||||
INACTIVE_SCROLL;
|
||||
@@ -367,8 +336,9 @@ function ref_drop()
|
||||
// использовать магию
|
||||
function usemagic($id, $target)
|
||||
{
|
||||
$row = db::c()->query('SELECT * FROM `inventory` WHERE `owner` = ?i AND id = ?i', User::$current->getId(), $id)->fetch_assoc_array();
|
||||
$bat = db::c()->query('SELECT * FROM `battle` WHERE `id` = ?i', User::$current->getBattle())->fetch_assoc_array();
|
||||
$user = Db::getInstance()->fetch('select * from users where id = ?', $_SESSION['uid']);
|
||||
$row = db::c()->query('SELECT * FROM `inventory` WHERE `owner` = ?i AND id = ?i', User::getInstance()->getId(), $id)->fetch_assoc_array();
|
||||
$bat = db::c()->query('SELECT * FROM `battle` WHERE `id` = ?i', User::getInstance()->getBattle())->fetch_assoc_array();
|
||||
$all_magic = unserialize($bat['magic']);
|
||||
$charge = 0;
|
||||
$magic = db::c()->query('SELECT * FROM `magic` WHERE `id` = ?i', $row['magic'])->fetch_assoc_array();
|
||||
@@ -382,7 +352,7 @@ function usemagic($id, $target)
|
||||
$charge = $incmagic['needcharge'];
|
||||
}
|
||||
//Переделать под новую базу
|
||||
if (($all_magic[User::$current->getId()] < 1 || $charge == 0) &&
|
||||
if (($all_magic[User::getInstance()->getId()] < 1 || $charge == 0) &&
|
||||
($user['sila'] >= $row['nsila'] &&
|
||||
$user['lovk'] >= $row['nlovk'] &&
|
||||
$user['inta'] >= $row['ninta'] &&
|
||||
@@ -430,22 +400,22 @@ function usemagic($id, $target)
|
||||
} else {
|
||||
$query = 'update inventory set durability = durability + ? where item_id = ?';
|
||||
}
|
||||
DBPDO::$db->execute($query, [$bat, $row['id']]);
|
||||
Db::getInstance()->execute($query, [$bat, $row['id']]);
|
||||
}
|
||||
if (!$charge) {
|
||||
$charge = 0;
|
||||
}
|
||||
//ограничение по кол-ву за ход
|
||||
if (User::$current->getBattle()) {
|
||||
$bat = DBPDO::$db->fetch('select * from battle where battle_id = ?', User::$current->getBattle());
|
||||
if (User::getInstance()->getBattle()) {
|
||||
$batMagic = Db::getInstance()->fetchColumn('select magic from battle where battle_id = ?', User::getInstance()->getBattle());
|
||||
}
|
||||
if ($bat['magic'] == '') {
|
||||
if (empty($batMagic)) {
|
||||
$all_magic = [];
|
||||
} else {
|
||||
$all_magic = unserialize($bat['magic']);
|
||||
$all_magic = unserialize($batMagic);
|
||||
}
|
||||
$all_magic[User::$current->getId()] += $charge;
|
||||
DBPDO::$db->execute('update battle set magic = ? where battle_id = ?', [serialize($all_magic), User::$current->getBattle()]);
|
||||
$all_magic[User::getInstance()->getId()] += $charge;
|
||||
Db::getInstance()->execute('update battle set magic = ? where battle_id = ?', [serialize($all_magic), User::getInstance()->getBattle()]);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -462,7 +432,7 @@ function usemagic($id, $target)
|
||||
function addch($text, $room = 0)
|
||||
{
|
||||
if ($room == 0) {
|
||||
$room = User::$current->getRoom();
|
||||
$room = User::getInstance()->getRoom();
|
||||
}
|
||||
if ($fp = @fopen("tmp/chat.txt", "a")) { //открытие
|
||||
flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА
|
||||
@@ -477,7 +447,7 @@ function addch($text, $room = 0)
|
||||
function addchp($text, $who, $room = 0)
|
||||
{
|
||||
if ($room == 0) {
|
||||
$room = User::$current->getRoom();
|
||||
$room = User::getInstance()->getRoom();
|
||||
}
|
||||
$fp = fopen("tmp/chat.txt", "a"); //открытие
|
||||
flock($fp, LOCK_EX); //БЛОКИРОВКА ФАЙЛА
|
||||
@@ -500,8 +470,8 @@ function err($t)
|
||||
*/
|
||||
function telegraph(int $userId, string $text)
|
||||
{
|
||||
if (DBPDO::$db->ofetch('SELECT 1 FROM users WHERE id = ?', $userId)) {
|
||||
DBPDO::$db->execute('INSERT INTO chat (user_id,receiver_id,msg,type) VALUES (-1,?,?,?)', [$userId, $text, 'sms']);
|
||||
if (Db::getInstance()->ofetch('SELECT 1 FROM users WHERE id = ?', $userId)) {
|
||||
Db::getInstance()->execute('INSERT INTO chat (user_id,receiver_id,msg,type) VALUES (-1,?,?,?)', [$userId, $text, 'sms']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -542,33 +512,31 @@ function SolveExp($at_id, $def_id, $damage): float
|
||||
$bot_def = false;
|
||||
|
||||
if ($at_id > _BOTSEPARATOR_) {
|
||||
$bots = DBPDO::$db->fetch('select * from bots where bot_id = ?', $at_id);
|
||||
$at_id = $bots['prototype'];
|
||||
$at_id = Db::getInstance()->fetchColumn('select prototype from bots where bot_id = ?', $at_id);
|
||||
$bot_active = true;
|
||||
}
|
||||
|
||||
$query = 'select greatest(1, sum(price)) as allprice from users left join inventory on users.id = inventory.owner_id where id = ?';
|
||||
$at = DBPDO::$db->fetch($query, $at_id);
|
||||
$def = DBPDO::$db->fetch($query, $def_id);
|
||||
$atAllPrice = Db::getInstance()->fetchColumn($query, $at_id);
|
||||
$defAllPrice = Db::getInstance()->fetchColumn($query, $def_id);
|
||||
|
||||
$atInfo = new UserStats($at_id);
|
||||
$defInfo = new UserStats($def_id);
|
||||
|
||||
$table_name = $at_id > _BOTSEPARATOR_ ? 'bots' : 'users';
|
||||
$bt = DBPDO::$db->fetch('select blood, type, t1, t2 from battle where battle_id = (select battle from ? where id = ?)', [$table_name, $at_id]);
|
||||
$bt = Db::getInstance()->ofetch('select blood, type, t1, t2 from battle where battle_id = (select battle from ? where id = ?)', [$table_name, $at_id]);
|
||||
|
||||
if ($def_id > _BOTSEPARATOR_) {
|
||||
$bots = DBPDO::$db->fetch('select * from bots where bot_id = ?', $def_id);
|
||||
$def_id = $bots['prototype'];
|
||||
$def_id = Db::getInstance()->fetchColumn('select prototype from bots where bot_id = ?', $def_id);
|
||||
$bot_def = true;
|
||||
}
|
||||
|
||||
if ($bt['blood']) {
|
||||
if ($bt->blood) {
|
||||
$expmf = $mods['bloodb'];
|
||||
}
|
||||
|
||||
$filebtl = '/tmp/' . $at_id . '.btl';
|
||||
if ($bt['type'] == 1 && file_exists($filebtl)) {
|
||||
if ($bt->type == 1 && file_exists($filebtl)) {
|
||||
$btfl = fopen($filebtl, 'r');
|
||||
$contents = fread($btfl, filesize($filebtl));
|
||||
fclose($btfl);
|
||||
@@ -614,7 +582,7 @@ function SolveExp($at_id, $def_id, $damage): float
|
||||
"25" => 919
|
||||
];
|
||||
|
||||
$mfit = ($at['allprice'] / ($standart[$atInfo->getLevel()] / 3));
|
||||
$mfit = ($atAllPrice / ($standart[$atInfo->getLevel()] / 3));
|
||||
if ($mfit < 0.8) {
|
||||
$mfit = 0.8;
|
||||
}
|
||||
@@ -622,7 +590,7 @@ function SolveExp($at_id, $def_id, $damage): float
|
||||
$mfit = 1.5;
|
||||
}
|
||||
|
||||
$pls = count(explode(";", $bt['t1'])) + count(explode(";", $bt['t2']));
|
||||
$pls = count(explode(";", $bt->t1)) + count(explode(";", $bt->t2));
|
||||
if ($pls > 2) {
|
||||
$mfbot = $bot_active ? 0.3 : 1;
|
||||
$mfbot2 = $bot_def ? 0.7 : 1;
|
||||
@@ -634,5 +602,5 @@ function SolveExp($at_id, $def_id, $damage): float
|
||||
$expmf = 1;
|
||||
}
|
||||
|
||||
return round((($baseexp[$defInfo->getLevel()]) * ($def['allprice'] / (($at['allprice'] + $def['allprice']) / 2)) * ($damage / $defInfo->getMaxHealth()) * $expmf * $mfit * $mfbot * $mfbot2) / 3);
|
||||
return round((($baseexp[$defInfo->getLevel()]) * ($defAllPrice / (($atAllPrice + $defAllPrice) / 2)) * ($damage / $defInfo->getMaxHealth()) * $expmf * $mfit * $mfbot * $mfbot2) / 3);
|
||||
}
|
||||
Reference in New Issue
Block a user