From 10f3bab59d8506a8a90e9b7c87d30499110d98a5 Mon Sep 17 00:00:00 2001 From: "Igor Barkov (iwork)" Date: Tue, 26 Jan 2021 17:50:57 +0200 Subject: [PATCH 1/5] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=BD=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20=D0=B2=20sqlite.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/Battles/Bank.php | 64 ++++++++++++++++++++++++--------------- databases/logs.sqlite | Bin 0 -> 16384 bytes 2 files changed, 39 insertions(+), 25 deletions(-) create mode 100644 databases/logs.sqlite diff --git a/classes/Battles/Bank.php b/classes/Battles/Bank.php index 83f3a4b..5a5b74e 100644 --- a/classes/Battles/Bank.php +++ b/classes/Battles/Bank.php @@ -6,6 +6,13 @@ */ namespace Battles; +use Config; +use db; +use Exceptions\GameException; +use Krugozor\Database\Mysql\Exception; +use SQLite3; +use Throwable; + class Bank { public $user_id; @@ -26,8 +33,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]; @@ -35,7 +42,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; } } @@ -49,7 +56,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 { @@ -66,7 +73,7 @@ class Bank * @param int $senderId ID отправителя (ID игрока, если не указано иное). * * @return void - * @throws \Krugozor\Database\Mysql\Exception + * @throws Exception */ private function bankLogs(int $receiverId, int $amount, string $operationType, int $senderId = 0): void { @@ -83,8 +90,15 @@ class Bank $text .= " Комиссия: " . $this->bankCommission($amount); } - \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); + $db = new SQLite3('databases/logs.sqlite'); + $logLine = $db->prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)"); + $logLine->bindParam(1, $senderId, SQLITE3_INTEGER); + $logLine->bindParam(2, $receiverId, SQLITE3_INTEGER); + $logLine->bindParam(3, $amount, SQLITE3_INTEGER); + $logLine->bindParam(4, $operationType, SQLITE3_TEXT); + $logLine->bindParam(5, $text, SQLITE3_TEXT); + $logLine->execute(); + $logLine->close(); } /** @@ -94,20 +108,20 @@ class Bank * @param int $amount сумма. * * @return int - * @throws \Krugozor\Database\Mysql\Exception + * @throws Exception */ 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 \Exceptions\GameException(self::ERROR_WRONG_AMOUNT); + throw new GameException(self::ERROR_WRONG_AMOUNT); } if (!$receiverWallet) { - throw new \Exceptions\GameException(self::ERROR_NO_BANK_ACCOUNT); + throw new GameException(self::ERROR_NO_BANK_ACCOUNT); } $amountWithComission = $amount + $this->bankCommission($amount); if ($amountWithComission > $this->money) { - throw new \Exceptions\GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT); + throw new GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT); } // Снимаем сумму с комиссией у отправителя $this->money -= $amountWithComission; @@ -127,16 +141,16 @@ class Bank * @param int $amount сумма. * * @return array - * @throws \Krugozor\Database\Mysql\Exception + * @throws Exception */ public function depositMoney(int $amount): array { if ($amount <= 0) { - throw new \Exceptions\GameException(self::ERROR_WRONG_AMOUNT); + throw new 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 \Exceptions\GameException(self::ERROR_NO_MONEY_IN_WALLET); + throw new GameException(self::ERROR_NO_MONEY_IN_WALLET); } // Забираем деньги из кошелька получателя $this->user->money -= $amount; @@ -158,16 +172,16 @@ class Bank * @param int $amount сумма. * * @return array - * @throws \Krugozor\Database\Mysql\Exception + * @throws Exception */ public function withdrawMoney(int $amount):array { if ($amount <= 0) { - throw new \Exceptions\GameException(self::ERROR_WRONG_AMOUNT); + throw new GameException(self::ERROR_WRONG_AMOUNT); } $amountWithComission = $amount + $this->bankCommission($amount); if ($this->money < $amountWithComission) { - throw new \Exceptions\GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT); + throw new GameException(self::ERROR_NO_MONEY_IN_BANK_ACCOUNT); } // Снимаем сумму с комиссией у отправителя $this->money -= $amountWithComission; @@ -191,16 +205,16 @@ class Bank * @param string $operationType Тип операции. По умолчанию пусто. Если ввести, система запишет событие в банковский лог. * * @return void - * @throws \Krugozor\Database\Mysql\Exception + * @throws Exception */ public static function setBankMoney(int $amount, int $user_id, string $operationType = ''): void { try { - \db::c()->query('UPDATE bank SET money = ?i WHERE user_id = ?i', $amount, $user_id); + 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) { + } catch (Throwable $e) { echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})"; } @@ -213,13 +227,13 @@ class Bank * @param int $user_id ID пользователя. * * @return void - * @throws \Krugozor\Database\Mysql\Exception + * @throws Exception */ public static function setWalletMoney(int $amount, int $user_id): void { try { - \db::c()->query('UPDATE users SET money = ?i WHERE `id` = ?i', $amount, $user_id); - } catch (\Throwable $e) { + db::c()->query('UPDATE users SET money = ?i WHERE `id` = ?i', $amount, $user_id); + } catch (Throwable $e) { echo "Не отработал запрос в БД в файле {$e->getFile()}({$e->getLine()})"; } diff --git a/databases/logs.sqlite b/databases/logs.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..536cafe43f697af4d69998fed2f5adc105f30b88 GIT binary patch literal 16384 zcmeI(&ui0A902hA=r$8=J9a69>D~&Zt=p_~gMlD8rMC@#6~t4`nzt^jdFhgu&3bDY z^CZKgUc~=E(7`}Ak6u&%1HF6j4^aFjThp}SnBZmX8_2Kkd-?X|^UdXj^ufJFgHy6% z*`~(HtS~HyqHvQCK@dh@jltSkF2F(bTf#0w{n2 zD1ZVefC4Ch0w{n2|1OXyiN#c*Aa2caZMjBWhuRRj7KGwq$SK#Xs#DghWp38}K0N{H z_Wj~QsYpr-w-$@!k7hNeDuzxB#%Yz>s?xkOFq9e}7h7hKe_3N|LHh6@){`#`_vcY6 z7IV0*L1GeiD%aOkMN#UuVQO}RtkDM1Ty7bxVpEecKBX!SWjeLX-628DrWI;z^hY(* zav}NA$e|l=)G6WgiJ!*b1;=Xst~8jMoD?4g_v5VBU^-ZK=(e8}d-9Fc=#Qo}N|#&RUmaerVt* zGzModm@WB)gGqOPEPY(ny4_AtHotSEXoOjuFt=8NQb2`Qt)51mu4rzJlj#{~)-{-( z9~F^wT5|B{tZ>7mxopPCPGy<3na$^;H4eL`orc4ynT{4c{CPDW_uYmCA^9x;#0?6d z01BW03ZMWApa2S>01BW03ZTGg6}TizvC&as`={{h@$lHw!#4uesy0`h^XLB(O#YKU z@D0FeEiaB61yBG5Pyhu`00mG01yBG5P~fZ!WE9tl%ksDweqtiUC3ym(ov&aH=l@Jd zeonHpu7&rH0w{n2D1ZVefC4Ch0w{n2D1ZY0N8q7!4*p*+Wt)m5o!{6r_^NJen@bj> z4eyP&-`;7ryghH1c<;SkZy(loq}}umVAFoqegTbduMqE*ci?^W_8``T?ap;FGdDjk h4*7{QOOW@aPV1Iq@WZsPq4y_PKLq*qgY=PfzX1@Dfd~Kq literal 0 HcmV?d00001 From 625793c0f510d9630ba369f3760de127e6f33750 Mon Sep 17 00:00:00 2001 From: "Igor Barkov (iwork)" Date: Tue, 26 Jan 2021 17:59:05 +0200 Subject: [PATCH 2/5] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=BD=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20=D0=B2=20sqlite.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/Battles/Bank.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/classes/Battles/Bank.php b/classes/Battles/Bank.php index 5a5b74e..3cb4de2 100644 --- a/classes/Battles/Bank.php +++ b/classes/Battles/Bank.php @@ -4,6 +4,7 @@ * Date: 03.07.2020 * Time: 07:24 */ + namespace Battles; use Config; @@ -67,10 +68,10 @@ class Bank /** * Пишем банковское событие в лог в БД * - * @param int $receiverId ID получателя. - * @param int $amount сумма. + * @param int $receiverId ID получателя. + * @param int $amount сумма. * @param string $operationType тип банковской операции. - * @param int $senderId ID отправителя (ID игрока, если не указано иное). + * @param int $senderId ID отправителя (ID игрока, если не указано иное). * * @return void * @throws Exception @@ -91,6 +92,7 @@ class Bank } $db = new SQLite3('databases/logs.sqlite'); + $db->exec("CREATE TABLE IF NOT EXISTS bank_logs (id integer constraint bank_logs_pk primary key autoincrement, sender_id integer, receiver_id integer, amount integer, type text, text text)"); $logLine = $db->prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)"); $logLine->bindParam(1, $senderId, SQLITE3_INTEGER); $logLine->bindParam(2, $receiverId, SQLITE3_INTEGER); @@ -105,7 +107,7 @@ class Bank * Перевод денег между банковскими счетами игроков с банковской комиссией. * * @param int $receiver ID получателя. - * @param int $amount сумма. + * @param int $amount сумма. * * @return int * @throws Exception @@ -174,7 +176,7 @@ class Bank * @return array * @throws Exception */ - public function withdrawMoney(int $amount):array + public function withdrawMoney(int $amount): array { if ($amount <= 0) { throw new GameException(self::ERROR_WRONG_AMOUNT); @@ -200,8 +202,8 @@ class Bank /** * Установить количество денег на банковском счету. * - * @param int $amount сумма. - * @param int $user_id ID пользователя. + * @param int $amount сумма. + * @param int $user_id ID пользователя. * @param string $operationType Тип операции. По умолчанию пусто. Если ввести, система запишет событие в банковский лог. * * @return void @@ -223,7 +225,7 @@ class Bank /** * Установить количество денег на руках. * - * @param int $amount сумма. + * @param int $amount сумма. * @param int $user_id ID пользователя. * * @return void From 938002ae57e14a8bc50b4baa320d3ad96c409294 Mon Sep 17 00:00:00 2001 From: "Igor Barkov (iwork)" Date: Wed, 27 Jan 2021 12:18:31 +0200 Subject: [PATCH 3/5] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D0=B8=D0=B0=D0=BA=D0=BA=D0=B0=D1=83=D0=BD=D1=82=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=20sqlite.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- enter.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/enter.php b/enter.php index e363222..92030f8 100644 --- a/enter.php +++ b/enter.php @@ -1,4 +1,7 @@ query('INSERT INTO users_logs (user_id, type, text) VALUES (?i, "?s", "?s")', $user_query['id'], "multiaccounts", "Разные ID на входе. Возможно используются несколько аккаунтов."); + $db = new SQLite3('databases/logs.sqlite'); + $logLine = $db->prepare("INSERT INTO users_logs (user_id, type, text) VALUES (?, 'multiaccounts', 'Разные ID на входе. Возможно используются несколько аккаунтов.')"); + $logLine->bindParam(1, $user_query['id'], SQLITE3_INTEGER); + $logLine->execute(); + $logLine->close(); } setcookie("battle", $user_query['id']); @@ -52,7 +59,7 @@ if ($username && $password) { $error = ERROR_EMPTY_CREDENTIALS; } -\Battles\Template::header('Входим...'); +Template::header('Входим...'); if ($error) { echo sprintf(' ← на главную

%s

', $error); From a10f3911f24d909c15ba1d0a49ecf64bef5fe66a Mon Sep 17 00:00:00 2001 From: "Igor Barkov (iwork)" Date: Wed, 27 Jan 2021 13:30:11 +0200 Subject: [PATCH 4/5] =?UTF-8?q?=D0=9B=D0=BE=D0=B3=D0=B3=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=83=D0=B5=D1=85=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/Battles/Bank.php | 12 +------- classes/Battles/GameLogs.php | 54 ++++++++++++++++++++++++++++++++++++ enter.php | 7 ++--- 3 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 classes/Battles/GameLogs.php diff --git a/classes/Battles/Bank.php b/classes/Battles/Bank.php index 3cb4de2..b1c00a3 100644 --- a/classes/Battles/Bank.php +++ b/classes/Battles/Bank.php @@ -90,17 +90,7 @@ class Bank $receiverId = $this->user_id; $text .= " Комиссия: " . $this->bankCommission($amount); } - - $db = new SQLite3('databases/logs.sqlite'); - $db->exec("CREATE TABLE IF NOT EXISTS bank_logs (id integer constraint bank_logs_pk primary key autoincrement, sender_id integer, receiver_id integer, amount integer, type text, text text)"); - $logLine = $db->prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)"); - $logLine->bindParam(1, $senderId, SQLITE3_INTEGER); - $logLine->bindParam(2, $receiverId, SQLITE3_INTEGER); - $logLine->bindParam(3, $amount, SQLITE3_INTEGER); - $logLine->bindParam(4, $operationType, SQLITE3_TEXT); - $logLine->bindParam(5, $text, SQLITE3_TEXT); - $logLine->execute(); - $logLine->close(); + GameLogs::addBankLog($senderId,$receiverId,$amount,$operationType,$text); } /** diff --git a/classes/Battles/GameLogs.php b/classes/Battles/GameLogs.php new file mode 100644 index 0000000..fd91a19 --- /dev/null +++ b/classes/Battles/GameLogs.php @@ -0,0 +1,54 @@ +prepare("INSERT INTO bank_logs (sender_id, receiver_id, amount, type, text) VALUES (?, ?, ?, ?, ?)"); + $row->bindParam(1, $senderId, SQLITE3_INTEGER); + $row->bindParam(2, $receiverId, SQLITE3_INTEGER); + $row->bindParam(3, $amount, SQLITE3_INTEGER); + $row->bindParam(4, $type, SQLITE3_TEXT); + $row->bindParam(5, $text, SQLITE3_TEXT); + $row->execute(); + $row->close(); + } + + /** + * Добавление записи в лог пользовательских операций (личное дело). + * @param int $userId кому добавляется запись. + * @param string $text текст записи. + * @param string $type тип записи. + * @param int $authorId кто добавляет запись. Использовать -1 для системной записи по умолчанию. + */ + public static function addUserLog(int $userId, string $text, string $type = '', int $authorId = 0) + { + if (empty($authorId)) { + $authorId = -1; + } + if (empty($type)) { + $type = "system"; + } + $db = new SQLite3('databases/logs.sqlite'); + $row = $db->prepare("INSERT INTO users_logs (user_id, author_id, type, text) VALUES (?,?,?,?)"); + $row->bindParam(1, $userId, SQLITE3_INTEGER); + $row->bindParam(2, $authorId, SQLITE3_INTEGER); + $row->bindParam(3, $type, SQLITE3_TEXT); + $row->bindParam(4, $text, SQLITE3_TEXT); + $row->execute(); + $row->close(); + } +} \ No newline at end of file diff --git a/enter.php b/enter.php index 92030f8..9ea620e 100644 --- a/enter.php +++ b/enter.php @@ -1,5 +1,6 @@ prepare("INSERT INTO users_logs (user_id, type, text) VALUES (?, 'multiaccounts', 'Разные ID на входе. Возможно используются несколько аккаунтов.')"); - $logLine->bindParam(1, $user_query['id'], SQLITE3_INTEGER); - $logLine->execute(); - $logLine->close(); + GameLogs::addUserLog($user_query['id'],'Разные ID на входе. Возможно используются несколько аккаунтов.', 'multiaccounts'); } setcookie("battle", $user_query['id']); From 0cb06d633345fc2b2c79a87e63b3536c10575f1f Mon Sep 17 00:00:00 2001 From: "Igor Barkov (iwork)" Date: Wed, 27 Jan 2021 15:53:39 +0200 Subject: [PATCH 5/5] Close #9 --- classes/Battles/Nick.php | 20 ++++++++-------- post.php | 51 +++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/classes/Battles/Nick.php b/classes/Battles/Nick.php index c5f4242..09c5d52 100644 --- a/classes/Battles/Nick.php +++ b/classes/Battles/Nick.php @@ -1,5 +1,6 @@ align)) { return sprintf('', $this->align); @@ -28,7 +29,7 @@ class Nick extends User * Отображение иконки клана. * @return string */ - private function getClan() + private function getClan():string { if (isset($this->clan)) { return sprintf('', $this->clan); @@ -51,12 +52,11 @@ class Nick extends User /** * Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль. * - * @param int $showInvisibility - По умолчанию 0. Выбрать 1, если надо отображать невидимый статус. + * @param int $showInvisibility отображать логин даже если персонаж невидимка. * * @return string - * @throws \Krugozor\Database\Mysql\Exception */ - public function full($showInvisibility = 0) + public function full($showInvisibility = 0):string { if ($showInvisibility && $this->getInvisibilityStatus()) { return 'невидимка'; @@ -66,12 +66,12 @@ class Nick extends User /** * Возвращает строку с логином или невидимым статусом. + * @param int $showInvisibility отображать логин даже если персонаж невидимка. * @return string - * @throws \Krugozor\Database\Mysql\Exception */ - public function short() + public function short($showInvisibility = 0):string { - if ($this->getInvisibilityStatus()) { + if ($showInvisibility && $this->getInvisibilityStatus()) { return 'невидимка'; } else { return htmlspecialchars($this->login); @@ -82,7 +82,7 @@ class Nick extends User * Возвращает строку со склонностью, кланом, логином, уровнем, ссылкой на профиль, здоровьем. * @return string */ - public function battle() + public function battle():string { return $this->getAlign().$this->getClan().sprintf('%s [%s] HP _hp_/_maxhp_', $this->login, $this->level, $this->login); } @@ -93,7 +93,7 @@ class Nick extends User * * @return string */ - public function battleShort($textstyle) + public function battleShort($textstyle):string { if ($this->getInvisibilityStatus()) { return 'невидимка'; diff --git a/post.php b/post.php index 0ff6dbb..db76b1d 100644 --- a/post.php +++ b/post.php @@ -1,7 +1,15 @@ money -= 1; Bank::setWalletMoney($user->money, $user->id); db::c()->query('UPDATE `inventory` SET owner_id = ?i WHERE item_id= ?i AND owner_id = ?i', $receiverId, $sendItemId, $_SESSION['uid']); - $statusMessage = 'Предмет "' . $res['name'] . '" передан персонажу ' . $receiverId; + $statusMessage = 'Предмет "' . $res['name'] . '" передан персонажу ' . Nick::id($receiverId)->short(1); + $receiverLogMessage = 'Получен предмет "' . $res['name'] . '" от персонажа ' . Nick::id($_SESSION['uid'])->short(1); db::c()->query('INSERT INTO `telegraph` (`receiver`,`text`) VALUES (?i,"?s")', $receiverId, 'Почтовый перевод: ' . $res['name'] . ' от персонажа ' . $user['login'] . '.'); + // Пишем в лог отправителю. + GameLogs::addUserLog($_SESSION['uid'], $statusMessage, 'почта'); + // Пишем в лог получателю. + GameLogs::addUserLog($receiverId, $receiverLogMessage, 'почта'); } } $queryItems = db::c()->query('SELECT * FROM inventory WHERE dressed_slot = 0 AND on_sale = 0 AND owner_id = ?i', $user->id); while ($row = $queryItems->fetch_assoc()) { - $iteminfo[] = new \Battles\InventoryItem($row); + $iteminfo[] = new InventoryItem($row); } } } -\Battles\Template::header('Почта'); +Template::header('Почта'); ?> -
- -
-

Почта

-
-Услуги почты платные: 1 кредит. +
+ +
+

Почта

+
+ Услуги почты платные: 1 кредит. Получатель: full() ?> Сменить @@ -78,11 +91,10 @@ if ($_SESSION['receiverName']) { - - - + - - - getNumRows())): ?> + + + getNumRows())): ?> - - +
Передача предметовПередача предметов +
printImage(); ?> @@ -91,20 +103,15 @@ if ($_SESSION['receiverName']) { - printInfo(); ?> -
Нечего передавать...
Нечего передавать...
- -