Будь проклят тот день, когда я решил ввести неймспейсы...

This commit is contained in:
lopar
2020-10-28 22:21:08 +02:00
parent f1b9ce6a45
commit d38d62c5b5
159 changed files with 339 additions and 304 deletions
+47 -26
View File
@@ -4,6 +4,7 @@
* Date: 03.07.2020
* Time: 07:24
*/
namespace Battles;
class Bank
{
@@ -25,8 +26,8 @@ class Bank
public function __construct($row)
{
$bank_row = db::c()->query('SELECT user_id, money FROM bank WHERE user_id = ?i', $row)->fetch_assoc();
$this->user = db::c()->query('SELECT money FROM users WHERE id = ?i', $row)->fetch_object();
$bank_row = \db::c()->query('SELECT user_id, money FROM bank WHERE user_id = ?i', $row)->fetch_assoc();
$this->user = \db::c()->query('SELECT money FROM users WHERE id = ?i', $row)->fetch_object();
foreach ($this as $key => $value) {
if (isset($bank_row[$key])) {
$this->$key = $bank_row[$key];
@@ -34,7 +35,7 @@ class Bank
}
// Если ВДРУГ у человека нет счёта в банке - создаём.
if (empty($this->user_id)) {
db::c()->query('INSERT INTO bank (user_id) VALUES (?i)', $row);
\db::c()->query('INSERT INTO bank (user_id) VALUES (?i)', $row);
$this->user_id = $row;
}
}
@@ -48,7 +49,7 @@ class Bank
*/
private function bankCommission(int $amount): int
{
$bankCommission = round($amount * Config::$bank_commission);
$bankCommission = round($amount * \Config::$bank_commission);
if ($bankCommission < 1) {
return 1;
} else {
@@ -82,7 +83,7 @@ class Bank
$text .= " Комиссия: " . $this->bankCommission($amount);
}
db::c()->query('INSERT INTO `bank_logs` (sender_id, receiver_id, amount_result, type, text)
\db::c()->query('INSERT INTO `bank_logs` (sender_id, receiver_id, amount_result, type, text)
VALUES (?i, ?i, ?i, "?s", "?s")', $senderId, $receiverId, $amount, $operationType, $text);
}
@@ -92,21 +93,21 @@ class Bank
* @param int $receiver ID получателя.
* @param int $amount сумма.
*
* @return void
* @return int
* @throws \Krugozor\Database\Mysql\Exception
*/
public function sendMoney(int $receiver, int $amount): void
public function sendMoney(int $receiver, int $amount): int
{
$receiverWallet = db::c()->query('SELECT money FROM bank WHERE user_id = ?i', $receiver)->fetch_object();
$receiverWallet = \db::c()->query('SELECT money FROM bank WHERE user_id = ?i', $receiver)->fetch_object();
if ($amount <= 0) {
throw new Exception(self::ERROR_WRONG_AMOUNT);
throw new \Exceptions\GameException(self::ERROR_WRONG_AMOUNT);
}
if (!$receiverWallet) {
throw new Exception(self::ERROR_NO_BANK_ACCOUNT);
throw new \Exceptions\GameException(self::ERROR_NO_BANK_ACCOUNT);
}
$amountWithComission = $amount + $this->bankCommission($amount);
if ($amountWithComission > $this->money) {
throw new Exception(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
throw new \Exceptions\GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
}
// Снимаем сумму с комиссией у отправителя
$this->money -= $amountWithComission;
@@ -116,6 +117,8 @@ class Bank
$receiverWallet->money += $amount;
self::setBankMoney($receiverWallet->money, $receiver);
$this->bankLogs($receiver, $receiverWallet->money, "receiveMoney");
// Возвращаем изменившиеся значения
return $this->money;
}
/**
@@ -123,26 +126,30 @@ class Bank
*
* @param int $amount сумма.
*
* @return void
* @return array
* @throws \Krugozor\Database\Mysql\Exception
*/
public function depositMoney(int $amount): void
public function depositMoney(int $amount): array
{
if ($amount <= 0) {
throw new Exception(self::ERROR_WRONG_AMOUNT);
throw new \Exceptions\GameException(self::ERROR_WRONG_AMOUNT);
}
$wallet = db::c()->query('SELECT money FROM users WHERE id = ?i', $this->user_id)->fetch_object();
$wallet = \db::c()->query('SELECT money FROM users WHERE id = ?i', $this->user_id)->fetch_object();
if ($wallet->money < $amount) {
throw new Exception(self::ERROR_NO_MONEY_IN_WALLET);
throw new \Exceptions\GameException(self::ERROR_NO_MONEY_IN_WALLET);
}
// Забираем деньги из кошелька получателя
//todo check it!
$this->user->money -= $amount;
self::setWalletMoney($this->user->money, $this->user_id);
// Отдаём сумму на счёт получателю
$this->money += $amount;
self::setBankMoney($this->money, $this->user_id);
$this->bankLogs(0, $this->money, "depositMoney");
// Возвращаем изменившиеся значения
return [
'walletMoney' => $this->user->money,
'bankMoney' => $this->money
];
}
/**
@@ -150,26 +157,30 @@ class Bank
*
* @param int $amount сумма.
*
* @return void
* @return array
* @throws \Krugozor\Database\Mysql\Exception
*/
public function withdrawMoney(int $amount): void
public function withdrawMoney(int $amount):array
{
if ($amount <= 0) {
throw new Exception(self::ERROR_WRONG_AMOUNT);
throw new \Exceptions\GameException(self::ERROR_WRONG_AMOUNT);
}
$amountWithComission = $amount + $this->bankCommission($amount);
if ($this->money < $amountWithComission) {
throw new Exception(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
throw new \Exceptions\GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT);
}
// Снимаем сумму с комиссией у отправителя
$this->money -= $amountWithComission;
self::setBankMoney($this->money, $this->user_id);
$this->bankLogs(0, $this->money, "withdrawMoney");
// Отдаём сумму в кошелёк получателя
//todo check it!
$this->user->money += $amount;
self::setWalletMoney($this->user->money, $this->user_id);
// Возвращаем изменившиеся значения
return [
'walletMoney' => $this->user->money,
'bankMoney' => $this->money
];
}
/**
@@ -184,10 +195,15 @@ class Bank
*/
public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void
{
db::c()->query('UPDATE bank SET money = ?i WHERE user_id = ?i', $amount, $user_id);
if ($operationType) {
(new Bank($user_id))->bankLogs(0, $amount, $operationType);
try {
\db::c()->query('UPDATE bank SET money = ?i WHERE user_id = ?i', $amount, $user_id);
if ($operationType) {
(new Bank($user_id))->bankLogs(0, $amount, $operationType);
}
} catch (\Throwable $e) {
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
}
}
/**
@@ -201,7 +217,12 @@ class Bank
*/
public static function setWalletMoney(int $amount, int $user_id): void
{
db::c()->query('UPDATE users SET money = ?i WHERE `id` = ?i', $amount, $user_id);
try {
\db::c()->query('UPDATE users SET money = ?i WHERE `id` = ?i', $amount, $user_id);
} catch (\Throwable $e) {
echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})";
}
}
public function getMoney()
@@ -1,5 +1,6 @@
<?php
# Date: 26.10.2020 (17:56)
namespace Battles;
// todo: #10
class City
{
@@ -4,7 +4,7 @@
* Date: 06.07.2020
* Time: 22:41
*/
namespace Battles;
class DressedItems
{
private $DB;
@@ -1,5 +1,5 @@
<?php
namespace Battles;
class InventoryItem extends Item
{
private $present;
@@ -1,5 +1,5 @@
<?php
namespace Battles;
abstract class Item
{
protected $item_id;
+58
View File
@@ -0,0 +1,58 @@
<?php
# Date: 16.09.2020 (08:23)
// Магия лечения травм
namespace Battles\Magic;
use Battles\UserEffects;
use Battles\User;
class CureInjury extends magic
{
private $target;
use UserEffects;
/**
* Магия лечения травм. Если у персонажа несколько травм, лечится самая тяжёлая.
* @param $target - кого лечим.
* @param $injuryType - тип травмы, которую лечим. 11 лёгкая, 12 средняя, 13 тяжёлая, 14 неизлечимая.
* @throws \Krugozor\Database\Mysql\Exception
*/
public function __construct($target, $injuryType)
{
$this->target = $target;
if ($target && $this->isUsable()) {
$injury = \db::c()->query('SELECT effect_id, type, name FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ?i ORDER BY type DESC LIMIT 1', $target)->fetch_object();
$targetName = $this->target->login;
if (in_array($injury->effect_id, [11, 12, 13, 14]) && $injuryType >= $injury->type) {
\db::c()->query('DELETE FROM users_effects WHERE effect_id = ?i', $injury->effect_id);
if (empty($injury->name) || $injury->name == 'Неизвестный эффект') {
$injuryName = self::$effectName[$injury->type];
} else {
$injuryName = $injury->name;
}
return "Вы вылечили повреждение ${injuryName} персонажу ${targetName}.";
} elseif ($injury->effect_id && $injuryType == 15) {
\db::c()->query('DELETE FROM users_effects WHERE type IN (11,12,13,14) AND owner_id = ?i', $target);
return "Вы вылечили все повреждения персонажу ${targetName}.";
} else {
return false;
}
} else {
return $this->status;
}
}
/**
* Проверки на успех.
* @return bool
*/
private function isUsable()
{
$caster = new User($_SESSION['uid']);
if ($this->target == $_SESSION['uid']) {
$this->target = $caster;
} else {
$this->target = new User($this->target);
}
return ($this->isVisible($caster, $this->target) && $this->isNotDead($caster) && $this->enoughMana($caster) && $this->isNotInBattle($caster));
}
}
@@ -1,6 +1,6 @@
<?php
# Date: 16.09.2020 (08:45)
namespace Battles\Magic;
class Magic
{
protected $status;
@@ -1,6 +1,6 @@
<?php
namespace magic\attack;
namespace Battles\Magic;
use db;
+38
View File
@@ -0,0 +1,38 @@
<?php
/**
* Author: lopiu
* Date: 05.07.2020
* Time: 23:32
*/
namespace Battles\Models;
class EffectsModel
{
protected $DB;
const EFFECT_HIDEUSERINFO = 5; // Обезлик
public function __construct(int $user_id) {
try {
$this->DB = \db::c()->query('SELECT * FROM users_effects WHERE owner_id = ?i', $user_id);
} catch (\Throwable $e) {echo '<div class="debug">class EffectsModel: Не могу подключиться к таблице effects!</div>';}
}
private function getEffects($user_id)
{
}
/**
* Проверка обезличен ли персонаж.
* @return int date() до конца эффекта или 0.
*/
public function getHideUserInfoStatus()
{
if ($this->DB) {
while ($row = $this->DB->fetch_object()) {
if ($row->type == self::EFFECT_HIDEUSERINFO) {
return $row->time;
}
}
}
return 0;
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
/**
* Author: lopiu
* Date: 04.07.2020
* Time: 13:17
*/
namespace Battles\Models;
use Exceptions\GameException;
class PresentsModel
{
protected $DB;
public function __construct(int $user_id)
{
if (!$this->DB) {
$this->DB = \db::c()->query('SELECT sender_id, image FROM `users_presents` WHERE owner_id = ?i', $user_id);
if ($this->DB->getNumRows() == 0) {
throw new GameException("<div class='debug'>class PresentsModel: Не прогрузилась база!</div>");
}
}
}
public function getAllPresents()
{
return $this->DB;
}
public function getPresentsSum()
{
return $this->DB->getNumRows();
}
}
+22
View File
@@ -0,0 +1,22 @@
<?php
/**
* Author: lopiu
* Date: 05.07.2020
* Time: 22:38
*/
namespace Battles\Models;
class UserLogModel
{
protected $DB;
public function __construct(int $user_id)
{
$this->DB = \db::c()->query('SELECT * FROM users_logs WHERE user_id = ?i ORDER BY `id` ASC', $user_id);
}
public function getUserLog()
{
return $this->DB;
}
}
@@ -1,5 +1,5 @@
<?php
namespace Battles;
/**
* Разные способы отображения строки с логином персонажа.
*/
@@ -1,4 +1,5 @@
<?php
namespace Battles;
/*
* Список наименований игровых комнат.
*/
@@ -1,5 +1,5 @@
<?php
namespace Battles;
class ShopItem extends Item
{
public function printInfo()
@@ -1,6 +1,6 @@
<?php
# Date: 30.09.2020 (09:42)
namespace Battles;
class Template
{
/**
@@ -1,6 +1,6 @@
<?php
# Date: 26.10.2020 (16:08)
namespace Battles;
class Travel
{
/**
@@ -48,8 +48,8 @@ class Travel
*/
public static function toRoom(int $roomId, int $roomIdCurrent): void
{
$itemsWeight = db::c()->query('SELECT SUM(weight) AS all_weight FROM `inventory` WHERE owner_id = ?i AND on_sale = 0', $_SESSION['uid'])->fetch_assoc();
$eff = db::c()->query('SELECT type FROM users_effects WHERE owner_id = ?i AND (`type` = 10 OR `type` = 13 OR `type` = 14)', $_SESSION['uid'])->fetch_assoc();
$itemsWeight = \db::c()->query('SELECT SUM(weight) AS all_weight FROM `inventory` WHERE owner_id = ?i AND on_sale = 0', $_SESSION['uid'])->fetch_assoc();
$eff = \db::c()->query('SELECT type FROM users_effects WHERE owner_id = ?i AND (`type` = 10 OR `type` = 13 OR `type` = 14)', $_SESSION['uid'])->fetch_assoc();
$errors = [];
if ($itemsWeight['all_weight'] > get_meshok()) {
$errors[0] = 'У вас переполнен рюкзак, вы не можете передвигаться...';
@@ -65,7 +65,7 @@ class Travel
echo sprintf('<span class="error">%s</span>', $error);
}
} elseif (in_array($roomId, self::allowedRoomMoves($roomIdCurrent))) {
db::c()->query('UPDATE users, online SET users.room = ?i, online.room = ?i WHERE `online`.`user_id` = `users`.`id` AND `online`.`user_id` = ?i', $roomId, $roomId, $_SESSION['uid']);
\db::c()->query('UPDATE users, online SET users.room = ?i, online.room = ?i WHERE `online`.`user_id` = `users`.`id` AND `online`.`user_id` = ?i', $roomId, $roomId, $_SESSION['uid']);
header('location: ' . self::$roomFileName[$roomId]);
exit;
}
@@ -1,4 +1,6 @@
<?php
namespace Battles;
use Exceptions\GameException;
class User
{
@@ -51,7 +53,7 @@ class User
public function __construct($user)
{
$user_query = db::c()->query('SELECT * FROM users WHERE id = "?s" OR login = "?s"', $user, $user)->fetch_assoc();
$user_query = \db::c()->query('SELECT * FROM users WHERE id = "?s" OR login = "?s"', $user, $user)->fetch_assoc();
foreach ($this as $key => $value) {
if (isset($user_query[$key])) {
$this->$key = $user_query[$key];
@@ -66,7 +68,7 @@ class User
* @param $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'.
* @param int $isMainWindow - переключатель "главного окна". Если включить, дополнительно будет показывать ссылку на повышение стата на 1, при условии наличия свободных очков статов.
* @return string
* @throws Exception
* @throws GameException
*/
public function getStat($stat_name, $isMainWindow = 0)
{
@@ -78,14 +80,14 @@ class User
return $this->$stat_name;
}
} else {
throw new Exception(self::ERROR_STAT_UNKNOWN);
throw new \Exceptions\GameException(self::ERROR_STAT_UNKNOWN);
}
}
/**
* Повышает один из выбранных статов на 1, но не выше self::STAT_MAXIMUM_AMOUNT при условии наличия свободных очков статов.
* @param $stat_name - имя стата. Может принимать значения 'strength', 'dexterity', 'intuition', 'endurance', 'intelligence', 'wisdom'.
* @throws \Krugozor\Database\Mysql\Exception
* @throws GameException
*/
public function addOnePointToStat($stat_name)
{
@@ -93,12 +95,12 @@ class User
if (in_array($stat_name, $allowed)) {
if ($this->free_stat_points > 0 && $this->$stat_name <= self::STAT_MAXIMUM_AMOUNT) {
$query = 'UPDATE users SET ?f = ?f + 1, free_stat_points = free_stat_points - 1 WHERE id = ?i';
db::c()->query($query, $stat_name, $stat_name, $this->id);
\db::c()->query($query, $stat_name, $stat_name, $this->id);
} else {
throw new Exception(self::ERROR_STAT_IS_MAXIMUM);
throw new \Exceptions\GameException(self::ERROR_STAT_IS_MAXIMUM);
}
} else {
throw new Exception(self::ERROR_STAT_UNKNOWN);
throw new \Exceptions\GameException(self::ERROR_STAT_UNKNOWN);
}
}
@@ -1,7 +1,7 @@
<?php
# Date: 16.09.2020 (08:28)
# Названия эффектов, налагаемых на персонажа.
namespace Battles;
trait UserEffects
{
public static $effectName = [
@@ -1,5 +1,5 @@
<?php
namespace Battles;
class UserInfo extends User
{
use Rooms;
@@ -141,7 +141,7 @@ class UserInfo extends User
$infoString = '<br><span>ИД Игрока: %s<br> ИД Комнаты: %s<br> Деньги: %s<br> Деньги в банке: %s<br> Опыт: %s<br> Нераспределённые очки: %s<br> Текущая сессия: %s</span>';
echo sprintf($infoString, $this->id, $this->room, $this->money, $this->Bank->getMoney(), $this->experience, $this->free_stat_points, $this->session_id);
}
$this->UserLogs = new UserLogModel($this->id);
$this->UserLogs = new \Battles\Models\UserLogModel($this->id);
echo '<div class="secret-info-user-log"><b>Личное дело</b><br>';
while ($userLogRow = $this->UserLogs->getUserLog()->fetch_object()) {
echo sprintf('<code>%s</code><br>', date("d.m.Y H:i ", strtotime($userLogRow->date)) . $userLogRow->text);
@@ -153,18 +153,18 @@ class UserInfo extends User
public function showUserInfo()
{
$this->effects = new EffectsModel($this->id);
$this->effects = new \Battles\Models\EffectsModel($this->id);
$this->WatcherStatus();
if ($this->block && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
throw new Exception('<span class="error">Персонаж ' . $this->login . ' заблокирован!</span>');
throw new \Exceptions\GameException('<span class="error">Персонаж ' . $this->login . ' заблокирован!</span>');
} elseif ($this->effects->getHideUserInfoStatus() && (!$this->watcherIsAdmin || !$this->watcherIsModerator)) {
if ($this->effects->getHideUserInfoStatus() == -1) {
$date = 'навсегда';
} else {
$date = 'до' . date('d.m.Y', strtotime($this->effects->getHideUserInfoStatus()));
}
throw new Exception('<span class="error">Персонаж ' . $this->login . ' обезличен ' . $date . '.</span>');
throw new \Exceptions\GameException('<span class="error">Персонаж ' . $this->login . ' обезличен ' . $date . '.</span>');
} else {
$this->Info();
}
+11
View File
@@ -0,0 +1,11 @@
<?php
/**
* @author Vasiliy Makogon, makogon-vs@yandex.ru
* @link https://github.com/Vasiliy-Makogon/Database/
*/
namespace Krugozor\Database\Mysql;
class Exception extends \Exception
{
}
File diff suppressed because it is too large Load Diff
+167
View File
@@ -0,0 +1,167 @@
<?php
/**
* @author Vasiliy Makogon, makogon-vs@yandex.ru
* @link https://github.com/Vasiliy-Makogon/Database/
*
* Обёртка над объектом mysqli_result.
*/
namespace Krugozor\Database\Mysql;
class Statement
{
/**
* Рузультат SQL-операции в виде объекта mysqli_result.
*
* @var mysqli_result
*/
private $mysqli_result = null;
/**
* @param mysqli_result
*/
public function __construct(\mysqli_result $mysqli_result)
{
$this->mysqli_result = $mysqli_result;
}
/**
* Извлекает результирующий ряд в виде ассоциативного массива.
*
* @see mysqli_fetch_assoc
* @param void
* @return array
*/
public function fetch_assoc()
{
return mysqli_fetch_assoc($this->mysqli_result);
}
/**
* Извлекает результирующий ряд в виде массива.
*
* @see mysqli_fetch_row
* @param void
* @return array
*/
public function fetch_row()
{
return mysqli_fetch_row($this->mysqli_result);
}
/**
* Извлекает результирующий ряд в виде объекта.
*
* @see mysqli_fetch_object
* @param void
* @return stdClass
*/
public function fetch_object()
{
return mysqli_fetch_object($this->mysqli_result);
}
/**
* Возвращает результат в виде массива ассоциативных массивов.
*
* @param void
* @return array
*/
public function fetch_assoc_array()
{
$array = array();
while ($row = mysqli_fetch_assoc($this->mysqli_result)) {
$array[] = $row;
}
return $array;
}
/**
* Возвращает результат в виде массива массивов.
*
* @param void
* @return array
*/
public function fetch_row_array()
{
$array = array();
while ($row = mysqli_fetch_row($this->mysqli_result)) {
$array[] = $row;
}
return $array;
}
/**
* Возвращает результат в виде массива объектов.
*
* @param void
* @return array
*/
public function fetch_object_array()
{
$array = array();
while ($row = mysqli_fetch_object($this->mysqli_result)) {
$array[] = $row;
}
return $array;
}
/**
* Возвращает значение первого поля результирующей таблицы.
*
* @param void
* @return string
*/
public function getOne()
{
$row = mysqli_fetch_row($this->mysqli_result);
return $row[0];
}
/**
* Возвращает количество рядов в результате.
* Эта команда верна только для операторов SELECT.
*
* @see mysqli_num_rows
* @param void
* @return int
*/
public function getNumRows()
{
return mysqli_num_rows($this->mysqli_result);
}
/**
* Возвращает объект результата mysqli_result.
*
* @param void
* @return mysqli_result
*/
public function getResult()
{
return $this->mysqli_result;
}
/**
* Освобождает память занятую результатами запроса.
*
* @param void
* @return void
*/
public function free()
{
$this->mysqli_result->free();
}
public function __destruct()
{
$this->free();
}
}
+436
View File
@@ -0,0 +1,436 @@
-- phpMyAdmin SQL Dump
-- version 5.0.1
-- https://www.phpmyadmin.net/
--
-- Хост: localhost
-- Время создания: Окт 21 2020 г., 17:33
-- Версия сервера: 10.3.17-MariaDB
-- Версия PHP: 7.2.24
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- База данных: `battles`
--
-- --------------------------------------------------------
--
-- Структура таблицы `bank`
--
CREATE TABLE `bank` (
`user_id` smallint(6) NOT NULL,
`money` smallint(5) UNSIGNED DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `bank`
--
INSERT INTO `bank` (`user_id`, `money`) VALUES
(2, 0);
-- --------------------------------------------------------
--
-- Структура таблицы `bank_logs`
--
CREATE TABLE `bank_logs` (
`id` int(11) NOT NULL,
`sender_id` smallint(6) DEFAULT NULL,
`receiver_id` smallint(6) DEFAULT NULL,
`amount` int(11) NOT NULL,
`type` varchar(16) NOT NULL,
`text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура таблицы `chat`
--
CREATE TABLE `chat` (
`id` int(10) UNSIGNED NOT NULL,
`user_id` smallint(6) NOT NULL,
`receiver_id` smallint(6) DEFAULT NULL,
`msg` text NOT NULL,
`msgdate` timestamp NULL DEFAULT current_timestamp(),
`type` varchar(10) NOT NULL DEFAULT 'msg'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Chat messages';
--
-- Дамп данных таблицы `chat`
--
INSERT INTO `chat` (`id`, `user_id`, `receiver_id`, `msg`, `msgdate`, `type`) VALUES
(1, 2, NULL, 'dfdf', '2020-06-23 13:41:58', 'msg'),
(2, 2, NULL, 'А вот и чёртов чат. :)', '2020-06-23 13:42:15', 'msg'),
(3, 2, NULL, 'Почему этот кусок дебила работает в строчку?', '2020-06-23 13:42:38', 'msg'),
(4, 2, NULL, 'Переполнение!', '2020-07-21 07:15:57', 'msg'),
(5, 2, NULL, 'Надо переполнение!', '2020-07-21 07:16:03', 'msg'),
(6, 2, NULL, 'Точно надо переполнение!', '2020-07-21 07:16:10', 'msg'),
(7, 2, NULL, 'Ещё раз, переполенение.', '2020-07-21 07:16:19', 'msg'),
(8, 2, NULL, 'Текст-текстик!', '2020-07-21 07:16:25', 'msg'),
(9, 2, NULL, 'Ещё немного!', '2020-07-21 07:16:29', 'msg'),
(10, 2, NULL, 'Бдыщ!', '2020-07-21 07:16:35', 'msg'),
(11, 2, NULL, 'Серьёзно?', '2020-07-21 07:16:41', 'msg'),
(12, 2, NULL, 'Внезапно...', '2020-07-21 07:16:49', 'msg'),
(13, 2, NULL, 'Да вы издеваетесь...', '2020-07-21 07:17:00', 'msg'),
(14, 2, NULL, 'Скотыняка. :(', '2020-07-21 07:17:15', 'msg');
-- --------------------------------------------------------
--
-- Структура таблицы `inventory`
--
CREATE TABLE `inventory` (
`item_id` int(11) NOT NULL,
`owner_id` smallint(6) NOT NULL,
`name` varchar(255) NOT NULL DEFAULT 'Неизвестный предмет',
`item_type` smallint(6) NOT NULL DEFAULT 0,
`durability` smallint(6) NOT NULL,
`price` int(11) NOT NULL DEFAULT 0,
`need_strength` tinyint(4) NOT NULL DEFAULT 0,
`need_dexterity` tinyint(4) NOT NULL DEFAULT 0,
`need_intuition` tinyint(4) NOT NULL DEFAULT 0,
`need_endurance` tinyint(4) NOT NULL DEFAULT 0,
`need_intelligence` tinyint(4) NOT NULL DEFAULT 0,
`need_wisdom` tinyint(4) NOT NULL DEFAULT 0,
`add_strength` tinyint(4) NOT NULL DEFAULT 0,
`add_dexterity` tinyint(4) NOT NULL DEFAULT 0,
`add_intuition` tinyint(4) NOT NULL DEFAULT 0,
`add_endurance` tinyint(4) NOT NULL DEFAULT 0,
`add_intelligence` tinyint(4) NOT NULL DEFAULT 0,
`add_wisdom` tinyint(4) NOT NULL DEFAULT 0,
`add_accuracy` smallint(6) DEFAULT 0,
`add_evasion` smallint(6) DEFAULT 0,
`add_criticals` smallint(6) DEFAULT 0,
`add_min_physical_damage` smallint(5) UNSIGNED DEFAULT 0,
`add_max_physical_damage` smallint(5) UNSIGNED DEFAULT 0,
`dressed_slot` tinyint(4) NOT NULL DEFAULT 0,
`image` varchar(64) NOT NULL DEFAULT 'noitem.png',
`weight` smallint(5) UNSIGNED DEFAULT 1,
`on_sale` tinyint(4) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Инвентарь персонажей';
--
-- Дамп данных таблицы `inventory`
--
INSERT INTO `inventory` (`item_id`, `owner_id`, `name`, `item_type`, `durability`, `price`, `need_strength`, `need_dexterity`, `need_intuition`, `need_endurance`, `need_intelligence`, `need_wisdom`, `add_strength`, `add_dexterity`, `add_intuition`, `add_endurance`, `add_intelligence`, `add_wisdom`, `add_accuracy`, `add_evasion`, `add_criticals`, `add_min_physical_damage`, `add_max_physical_damage`, `dressed_slot`, `image`, `weight`, `on_sale`) VALUES
(1, 2, 'Кольчужка', 2, 10, 55, 10, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'armor.png', 6, 0),
(2, 2, 'Нож', 6, 5, 12, 4, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 'katana.png', 1, 0),
(3, 2, 'Ещё кольчужка', 2, 10, 50, 8, 2, 2, 8, 0, 0, -1, -1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'armor.png', 5, 0),
(4, 2, 'Колечко', 9, 4, 150, 15, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 20, 10, 0, 0, 0, 'ring1.png', 1, 0),
(5, 2, 'Перстенёк', 9, 6, 180, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 'ring2.png', 1, 0),
(6, 2, 'Перстенёк', 9, 6, 180, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 'ring2.png', 1, 0),
(7, 2, 'Кольцо общей слабости', 9, 100, 5311, 0, 0, 0, 0, 0, 0, -7, -7, -7, -7, -5, -5, -20, -20, -20, 0, 0, 0, 'ring1.png', 1, 0),
(8, 2, 'Кольцо общей слабости', 9, 100, 5311, 0, 0, 0, 0, 0, 0, -7, -7, -7, -7, -5, -5, -20, -20, -20, 0, 0, 0, 'ring1.png', 1, 0);
-- --------------------------------------------------------
--
-- Структура таблицы `online`
--
CREATE TABLE `online` (
`user_id` smallint(6) NOT NULL DEFAULT 0,
`date` int(12) UNSIGNED DEFAULT 0,
`real_time` int(11) NOT NULL,
`room` smallint(5) UNSIGNED DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `online`
--
INSERT INTO `online` (`user_id`, `date`, `real_time`, `room`) VALUES
(2, 1601412403, 1601651536, 1);
-- --------------------------------------------------------
--
-- Структура таблицы `users`
--
CREATE TABLE `users` (
`id` smallint(6) NOT NULL,
`login` varchar(64) NOT NULL,
`email` varchar(64) DEFAULT 'no_mail_set',
`pass` varchar(255) DEFAULT NULL,
`realname` varchar(64) DEFAULT NULL,
`borndate` varchar(24) DEFAULT '',
`info` longtext DEFAULT NULL,
`level` tinyint(4) NOT NULL DEFAULT 1,
`align` tinyint(4) DEFAULT 0,
`clan` varchar(16) DEFAULT '',
`money` int(11) DEFAULT 0,
`strength` tinyint(3) UNSIGNED NOT NULL DEFAULT 10,
`dexterity` tinyint(3) UNSIGNED NOT NULL DEFAULT 10,
`intuition` tinyint(3) UNSIGNED NOT NULL DEFAULT 10,
`endurance` tinyint(3) UNSIGNED NOT NULL DEFAULT 10,
`intelligence` tinyint(3) UNSIGNED NOT NULL DEFAULT 10,
`wisdom` tinyint(3) UNSIGNED NOT NULL DEFAULT 10,
`free_stat_points` tinyint(3) UNSIGNED DEFAULT 0,
`health` int(11) NOT NULL,
`mana` int(11) NOT NULL,
`ip` varchar(16) DEFAULT NULL,
`session_id` varchar(128) DEFAULT NULL,
`admin` tinyint(4) DEFAULT 0,
`enter_game` tinyint(1) NOT NULL DEFAULT 0,
`room` smallint(5) UNSIGNED NOT NULL DEFAULT 1,
`block` tinyint(4) NOT NULL DEFAULT 0,
`shadow` varchar(64) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` (`id`, `login`, `email`, `pass`, `realname`, `borndate`, `info`, `level`, `align`, `clan`, `money`, `strength`, `dexterity`, `intuition`, `endurance`, `intelligence`, `wisdom`, `free_stat_points`, `health`, `mana`, `ip`, `session_id`, `admin`, `enter_game`, `room`, `block`, `shadow`) VALUES
(2, 'Father', 'father@battles.lan', '$2y$10$avSnIjtR/v1i5hJJ3dXH/e638WDbXFUtDmrSkUuyhmwsgmk7f35hq', 'Отец', '1986-10-20', 'И немного о себе..', 1, 6, '7', 0, 10, 10, 10, 10, 10, 10, 0, 17, 4, '192.168.20.15', 'lnuefs4n3air4jbpd76npq7hsl', 1, 0, 30, 0, 'father.png');
-- --------------------------------------------------------
--
-- Структура таблицы `users_effects`
--
CREATE TABLE `users_effects` (
`effect_id` int(11) NOT NULL,
`owner_id` smallint(6) NOT NULL,
`type` smallint(6) NOT NULL DEFAULT 0,
`name` varchar(64) NOT NULL DEFAULT 'Неизвестный эффект',
`remaining_time` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура таблицы `users_logs`
--
CREATE TABLE `users_logs` (
`id` int(11) NOT NULL,
`user_id` smallint(6) NOT NULL,
`author_id` smallint(6) NOT NULL DEFAULT 0,
`type` varchar(24) NOT NULL DEFAULT 'system',
`date` datetime DEFAULT current_timestamp(),
`text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `users_logs`
--
INSERT INTO `users_logs` (`id`, `user_id`, `author_id`, `type`, `date`, `text`) VALUES
(1, 2, 0, 'system', '2020-07-05 23:03:52', 'Проверочная запись.');
-- --------------------------------------------------------
--
-- Структура таблицы `users_presents`
--
CREATE TABLE `users_presents` (
`id` int(11) NOT NULL,
`owner_id` smallint(6) NOT NULL,
`sender_id` smallint(6) NOT NULL,
`image` varchar(64) NOT NULL DEFAULT 'null.png'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура таблицы `users_recovery`
--
CREATE TABLE `users_recovery` (
`login` varchar(64) NOT NULL,
`hash` varchar(64) NOT NULL,
`ip` varchar(16) NOT NULL,
`date` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `bank`
--
ALTER TABLE `bank`
ADD UNIQUE KEY `bank_id_uindex` (`user_id`);
--
-- Индексы таблицы `bank_logs`
--
ALTER TABLE `bank_logs`
ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `chat`
--
ALTER TABLE `chat`
ADD PRIMARY KEY (`id`),
ADD KEY `chat_users_id_fk` (`user_id`);
--
-- Индексы таблицы `inventory`
--
ALTER TABLE `inventory`
ADD PRIMARY KEY (`item_id`),
ADD KEY `inventory_users_id_fk` (`owner_id`);
--
-- Индексы таблицы `online`
--
ALTER TABLE `online`
ADD UNIQUE KEY `online_user_id_uindex` (`user_id`);
--
-- Индексы таблицы `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `users_login_uindex` (`login`),
ADD UNIQUE KEY `users_email_uindex` (`email`);
--
-- Индексы таблицы `users_effects`
--
ALTER TABLE `users_effects`
ADD PRIMARY KEY (`effect_id`),
ADD KEY `users_effects_users_id_fk` (`owner_id`);
--
-- Индексы таблицы `users_logs`
--
ALTER TABLE `users_logs`
ADD PRIMARY KEY (`id`),
ADD KEY `users_logs_users_id_fk` (`user_id`);
--
-- Индексы таблицы `users_presents`
--
ALTER TABLE `users_presents`
ADD PRIMARY KEY (`id`),
ADD KEY `users_presents_users_id_fk` (`owner_id`);
--
-- Индексы таблицы `users_recovery`
--
ALTER TABLE `users_recovery`
ADD PRIMARY KEY (`login`),
ADD UNIQUE KEY `users_recovery_login_uindex` (`login`),
ADD UNIQUE KEY `users_recovery_hash_uindex` (`hash`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `bank_logs`
--
ALTER TABLE `bank_logs`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT для таблицы `chat`
--
ALTER TABLE `chat`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
--
-- AUTO_INCREMENT для таблицы `inventory`
--
ALTER TABLE `inventory`
MODIFY `item_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
--
-- AUTO_INCREMENT для таблицы `users`
--
ALTER TABLE `users`
MODIFY `id` smallint(6) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT для таблицы `users_effects`
--
ALTER TABLE `users_effects`
MODIFY `effect_id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT для таблицы `users_logs`
--
ALTER TABLE `users_logs`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT для таблицы `users_presents`
--
ALTER TABLE `users_presents`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Ограничения внешнего ключа сохраненных таблиц
--
--
-- Ограничения внешнего ключа таблицы `bank`
--
ALTER TABLE `bank`
ADD CONSTRAINT `bank_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Ограничения внешнего ключа таблицы `chat`
--
ALTER TABLE `chat`
ADD CONSTRAINT `chat_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Ограничения внешнего ключа таблицы `inventory`
--
ALTER TABLE `inventory`
ADD CONSTRAINT `inventory_users_id_fk` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Ограничения внешнего ключа таблицы `online`
--
ALTER TABLE `online`
ADD CONSTRAINT `online_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Ограничения внешнего ключа таблицы `users_effects`
--
ALTER TABLE `users_effects`
ADD CONSTRAINT `users_effects_users_id_fk` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Ограничения внешнего ключа таблицы `users_logs`
--
ALTER TABLE `users_logs`
ADD CONSTRAINT `users_logs_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Ограничения внешнего ключа таблицы `users_presents`
--
ALTER TABLE `users_presents`
ADD CONSTRAINT `users_presents_users_id_fk` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+31
View File
@@ -0,0 +1,31 @@
<?php
/**
* Created by PhpStorm.
* User: lopiu
* Date: 28.01.2018
* Time: 16:35
*/
class db
{
private static $_instance = null;
private function __clone() {}
private function __construct() {}
/**
* @return \Krugozor\Database\Mysql\Mysql
*/
public static function c()
{
if (!self::$_instance)
{
self::$_instance = Krugozor\Database\Mysql\Mysql::create("192.168.20.5", "battles", "bottle-neck-horse", 32101)
// Выбор базы данных
->setDatabaseName("battles")
// Выбор кодировки
->setCharset("utf8");
}
return self::$_instance;
}
}