57 Commits

Author SHA1 Message Date
DarksLight2 5518b335a8 Обучение. Правило для новой страницы с неправильным вводом ответа 2023-01-18 12:54:10 +01:00
DarksLight2 95604fc4b1 Вынес логику из автозагрузчика 2023-01-18 12:53:20 +01:00
DarksLight2 5df2447d34 Убрал лишнее 2023-01-18 12:51:58 +01:00
DarksLight2 328e7483cd Новая фича с хэлперами 2023-01-18 12:51:33 +01:00
DarksLight2 3f579afaed Обучение. Новые задания 2023-01-18 12:51:06 +01:00
DarksLight2 bae941e155 Обучение. Рефакторинг 2023-01-18 12:43:45 +01:00
DarksLight2 037d43857d Merge branch 'maksym' of https://src.lopar.space/new-combats.com/game into maksym 2023-01-15 23:26:58 +01:00
DarksLight2 739caee04b Закончил разработку обучения 2023-01-15 22:47:19 +01:00
DarksLight2 35c0b6825f revert 45fc2f51b4
revert Восстановление пароля
2023-01-13 21:41:44 +00:00
DarksLight2 45fc2f51b4 Восстановление пароля 2023-01-13 18:56:41 +01:00
DarksLight2 9ec0f42e17 Обучение. Начало Frontend части 2023-01-12 21:38:13 +01:00
lopar d9ec810f7f Merge pull request 'dev-cookie-to-id' (#37) from dev-cookie-to-id into dev
Reviewed-on: new-combats.com/game#37
2023-01-12 03:41:11 +00:00
lopar 89469b919f Merge remote-tracking branch 'origin/dev-cookie-to-id' into dev-cookie-to-id 2023-01-12 05:39:04 +02:00
lopar d0fb296691 почта не уходила 2023-01-12 05:38:48 +02:00
lopar e8252b8d4d даты рождения не совпадали 2023-01-12 05:31:22 +02:00
lopar c647600141 various small 2023-01-12 05:22:03 +02:00
lopar 68fe6ec13e various small 2023-01-12 05:08:32 +02:00
lopar b483b79df5 closes #33 2023-01-12 04:19:06 +02:00
lopar 557921edfa Uncaught TypeError: Argument 1 passed to User::snatItem() must be of the type int, null given 2023-01-12 04:07:43 +02:00
lopar f3bee1c3ac Typed property User::$info must be array, bool used 2023-01-12 03:21:13 +02:00
lopar 84c0847178 Trying to access array offset on value of type null i 2023-01-12 03:18:17 +02:00
lopar a1aca77a35 Запросы в несуществующий базы, снятие вещей из пустых слотов.. 2023-01-12 02:58:26 +02:00
lopar f1d838fcc4 Регистрация кажется завелась. 2023-01-12 01:39:26 +02:00
lopar 83fcf92ba0 Merge pull request 'dev-php74-utf8' (#31) from dev-php74-utf8 into master
Reviewed-on: new-combats.com/game#31
2023-01-11 13:51:55 +00:00
lopar ef7a874772 Merge branch 'master' into dev-php74-utf8 2023-01-11 13:44:09 +00:00
lopar 80117d69a4 Merge pull request 'dev-php74' (#30) from dev-php74 into master
Reviewed-on: new-combats.com/game#30
2023-01-11 13:29:35 +00:00
DarksLight2 93177f70b4 Merge pull request 'Maksym' (#25) from Maksym into dev-php74-utf8
Reviewed-on: new-combats.com/game#25
2023-01-10 22:50:55 +00:00
DarksLight2 220d965c01 Начало разработки обучения. 2023-01-10 23:39:11 +01:00
DarksLight2 23a2de0d17 Merge branch 'dev-php74-utf8' of https://src.lopar.space/new-combats.com/game into Maksym 2023-01-10 20:31:46 +01:00
lopar e3915d2495 move comissionShop method to external class 2023-01-10 21:15:53 +02:00
lopar c071d2d293 remove deprecated method sys_see() 2023-01-10 20:58:20 +02:00
lopar 2947b59172 type declarations 2023-01-10 20:53:10 +02:00
DarksLight2 c3b46c30b2 Баг с кодировкой в чате 2023-01-10 19:39:35 +01:00
lopar 7b822fe884 registration bug 2023-01-10 20:29:27 +02:00
lopar bbb35c19f9 encoding and smell 2023-01-10 20:14:47 +02:00
lopar 2590d62f1f registration bug 2023-01-10 20:13:19 +02:00
lopar f913d8e4a3 PHP Fatal error: Uncaught Error: Call to undefined method User::onlineBonus() 2023-01-10 19:42:59 +02:00
lopar b3810d2349 Remove cp1251. Я сильно недооценивал трудолюбие неизвестного кодера. 2023-01-10 19:26:14 +02:00
lopar 008f36c094 remove error_log 2023-01-10 18:34:25 +02:00
lopar 90b9c8325e Utf8 convert 2023-01-10 18:30:35 +02:00
lopar 71b759232c PDO::fetch возвращал все типы данных как строчные. 2023-01-06 21:26:51 +02:00
lopar 6794284497 Баги в регистрации. 2023-01-06 21:26:10 +02:00
lopar d8063d8900 Первичная чистка. 2023-01-06 18:24:52 +02:00
lopar 3f3de15fa2 Оптимизация логики 2023-01-06 18:23:53 +02:00
lopar 01b64fdebe Перенаправление. 2023-01-06 18:22:37 +02:00
lopar 4f9bfb9e6b Замена mysql_connect. 2023-01-06 18:21:51 +02:00
lopar 71b3a1c946 Оптимизация логики, минус один запрос в БД. 2023-01-06 18:19:01 +02:00
lopar d5bafe4e77 Users['id'] получал себе значение Room['id].' 2023-01-06 18:18:17 +02:00
lopar 9e45f170c7 Хороним $_COOKIE['pass'], отказываемся от md5('pass'). Это не регистрация, а чёрная дыра! 2023-01-06 16:57:25 +02:00
lopar e9ec7eb2f2 Mass update 2022-12-30 21:03:50 +02:00
lopar 7a5dfd22a7 tournaments 2.0 2022-12-20 03:57:09 +02:00
lopar cf51f4d996 bugfix 2022-12-20 00:03:26 +02:00
lopar a0efddefc5 Вычистка огрызков getIP() и перенос функции mail() в класс. 2022-12-19 23:15:56 +02:00
lopar 2f6517f5b3 Дозаливка 2022-12-19 22:22:19 +02:00
lopar 73d69cb0ae Дозаливка 2022-12-19 22:16:24 +02:00
lopar a53eab9795 Merge remote-tracking branch 'origin/dev-php74' into dev-php74
# Conflicts:
#	_incl_data/class/Battle.php
#	_incl_data/class/FightRequest.php
#	_incl_data/class/Filter.php
#	_incl_data/class/Magic.php
#	_incl_data/class/Priems.php
#	_incl_data/class/Quests.php
#	_incl_data/class/Season.php
#	_incl_data/class/User.php
#	_incl_data/class/__db_connect.php
#	_incl_data/class/priem/244.php
#	_incl_data/class/priem/263.php
#	_incl_data/class/priem/265.php
#	_incl_data/class/priem/267.php
#	buttons.php
#	cron_bs.php
#	cron_dungeon_getOut.php
#	cron_zv.php
#	dn_editor.php
#	dn_editor_bots.php
#	dn_editor_botsAll.php
#	dn_editor_bots_itms.php
#	enter.php
#	hmonitor.php
#	logs.php
#	main.php
#	main_bot.php
#	map.php
#	modules_data/_inv.php
#	modules_data/_umenie.php
#	modules_data/btl_.php
#	modules_data/location/btl_.php
#	modules_data/titul.php
#	myexp.php
#	obraz.php
#	online.php
#	register.php
#	ruin_characteristics.php
#	spam.php
2022-12-19 21:40:33 +02:00
lopar 924be6329b 7.4 to the go 2022-12-19 20:26:14 +02:00
21631 changed files with 212563 additions and 72765 deletions
+2 -32
View File
@@ -1,12 +1,4 @@
DefaultLanguage ru
AddDefaultCharset windows-1251
<IfModule mod_php5.c>
php_value session.use_trans_sid 0
php_value register_globals 1
<Directory "/usr/local/bin/php">
php_admin_value open_basedir none
</Directory>
</IfModule>
<IfModule mod_rewrite.c>
#Options +FollowSymLinks -MultiViews
@@ -24,15 +16,6 @@ RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$
RewriteRule (.+) https://new-combats.com/proxy/
#RewriteCond %{HTTP_HOST} ^new-combats\.ru [NC]
#RewriteCond %{SERVER_PORT} 80
#RewriteRule ^(.*)$ https://new-combats.com/$1 [R,L]
#RewriteCond %{HTTP_HOST} ^demonscity\.ru [NC]
#RewriteCond %{SERVER_PORT} 80
#RewriteRule ^(.*)$ https://new-combats.com/$1 [R,L]
#RewriteCond %{HTTP_HOST} ^new-combats\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://new-combats.com/$1 [R,L]
@@ -59,9 +42,6 @@ RewriteRule ^rating_pers/(.*)/?$ /reting_pers.php?$1 [L]
RewriteRule ^rating_clans/?$ /reting_clans.php [L]
RewriteRule ^rating_clans/(.*)/?$ /reting_clans.php?$1 [L]
#RewriteRule ^support/(.*)/?$ /support/index.php?$1 [L]
#RewriteRule ^support/?$ /support/index.php [L]
RewriteRule ^clan/(.*)/?$ /clans_inf.php?$1 [L]
RewriteRule ^clan/?$ /clans_inf.php [L]
@@ -70,18 +50,12 @@ RewriteRule ^ruins/?$ /ruins.php [L]
RewriteRule ^exp/(.*)/?$ /exp.php?$1 [L]
RewriteRule ^exp/?$ /exp.php [L]
#
#
RewriteRule ^news/(.*)/?$ /n/$1 [R=301,L]
RewriteRule ^news/?$ /n [R=301,L]
RewriteRule ^n/(.*)/?$ /news_script/index.php?$1 [L]
RewriteRule ^n/?$ /news_script/index.php [L]
#
#
#RewriteRule ^news/(.*)/?$ /news_script/index.php?$1 [L]
#RewriteRule ^news/?$ /news_script/index.php [L]
RewriteRule ^forum/(.*)/?$ /forum_script/index.php?$1 [L]
RewriteRule ^forum/?$ /forum_script/index.php [L]
@@ -101,10 +75,7 @@ RewriteRule ^rating/?$ /rating_script/index.php [L]
RewriteRule ^item/(.*)/?$ /items_info.php?$1 [L]
RewriteRule ^item/?$ /items_info.php [L]
RewriteRule ^repass/?$ /repass.php [L]
#
#
#
#
RewriteRule ^mail/(.*)/?$ /mailconf.php?$1 [L]
RewriteRule ^register/?$ /register.php [L]
@@ -126,4 +97,3 @@ RewriteRule . /index.php [L]
Order Allow,Deny
Allow from all
+18 -17
View File
@@ -1,23 +1,24 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>404</title>
<style>
body{
background-color:#444;
font-size:14px;
}
h3{
font-size:60px;
color:#eee;
text-align:center;
padding-top:30px;
font-weight:normal;
}
</style>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>404</title>
<style>
body {
background-color: #444;
font-size: 14px;
}
h3 {
font-size: 60px;
color: #eee;
text-align: center;
padding-top: 30px;
font-weight: normal;
}
</style>
</head>
<body>
+15 -20
View File
@@ -2,15 +2,15 @@
/*
ßäðî äëÿ îáðàáîòêè äàííûõ.
Îáðàáîòêà ïîåäèíêîâ, îáðàáîòêà çàÿâîê, îáðàáîòêà áîòîâ, îáðàáîòêà ïåùåð, îáðàáîòêà òóðíèðîâ, îáðàáîòêà âðåìåííûõ ãåíåðàöèé
Ядро для обработки данных.
Обработка поединков, обработка заявок, обработка ботов, обработка пещер, обработка турниров, обработка временных генераций
*/
if (isset($_GET['m1'])) {
define('GAME', true);
setlocale(LC_CTYPE, "ru_RU.CP1251");
include_once '_incl_data/__config.php';
include_once '_incl_data/class/__db_connect.php';
@@ -22,13 +22,13 @@ if (isset($_GET['m1'])) {
} elseif (isset($_GET['bk1'])) {
define('GAME', true);
setlocale(LC_CTYPE, "ru_RU.CP1251");
include('_incl_data/__config.php');
include('_incl_data/class/__db_connect.php');
$u = User::start();
$ins = 'Âåùè ÁÊ-1:<hr>';
$ins = 'Вещи БК-1:<hr>';
$sp = mysql_query('SELECT * FROM `items_main` WHERE `geni` = 1');
while ($pl = mysql_fetch_array($sp)) {
@@ -141,20 +141,15 @@ if (isset($_GET['test'])) {
die();
}
function getIP()
{
return isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : $_SERVER['REMOTE_ADDR'];
}
if (!isset($_GET['robot']) && getIP() != $_SERVER['SERVER_ADDR'] && getIP() != '127.0.0.1' && getIP() != '' && getIP(
) != '31.131.116.166' && !isset($_GET['test'])) {
die(getIP() . '<br>' . $_SERVER['SERVER_ADDR']);
if (!isset($_GET['robot']) && UserIp::get() != $_SERVER['SERVER_ADDR'] && UserIp::get() != '127.0.0.1' && UserIp::get(
) != '' && UserIp::get() != '31.131.116.166') {
die(UserIp::get() . '<br>' . $_SERVER['SERVER_ADDR']);
}
const GAME = true;
setlocale(LC_CTYPE, "ru_RU.CP1251");
include('_incl_data/__config.php');
include('_incl_data/class/__db_connect.php');
@@ -189,14 +184,14 @@ while ($pl = mysql_fetch_array($sp)) {
if ($pl['timereg'] == 0) {
mysql_query('UPDATE `users` SET `timereg` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
} else {
mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
User::setOnline($pl['id']);
}
if ($pl['bot'] == 0) {
mysql_query('UPDATE `stats` SET `bot` = "2" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
}
mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
User::setOnline($pl['id']);
BotLogic::start($pl['id']);
@@ -209,19 +204,19 @@ while ($pl = mysql_fetch_array($sp)) {
if ($pl['timereg'] == 0) {
mysql_query('UPDATE `users` SET `timereg` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
} else {
mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
User::setOnline($pl['id']);
}
if ($pl['bot'] == 0) {
mysql_query('UPDATE `stats` SET `bot` = "2" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
}
mysql_query('UPDATE `stats` SET `nextAct` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
User::setOnline($pl['id']);
echo '*';
}
echo '+';
echo '[' . $pl['login'] . '] -> Äåéñòâèå: ' . $pl['ipreg'] . ' , îæèäàåì: ' . ($pl['timeMain'] - time(
)) . ' ñåê., çàÿâêà: ' . $pl['zv'] . ', ïîåäèíîê: ' . $pl['battle'] . '';
echo '[' . $pl['login'] . '] -> Действие: ' . $pl['ipreg'] . ' , ожидаем: ' . ($pl['timeMain'] - time(
)) . ' сек., заявка: ' . $pl['zv'] . ', поединок: ' . $pl['battle'] . '';
echo '<hr>';
}
+1 -1
View File
@@ -1 +1 @@
deny from all
deny from all
+18 -72
View File
@@ -1,85 +1,24 @@
<?php
use Core\Config;
use Insallah\Tournaments\Tournament;
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 'Off');
setlocale(LC_CTYPE, "ru_RU.CP1251");
date_default_timezone_set('Europe/Moscow');
$c = [
'ver' => '1.8.3.7',
];
/* Конфигурации игры */
$c['name'] = 'Бойцовский Клуб';
$c['title'] = '«' . $c['name'] . '» - Бесплатная,браузерная онлайн игра'; //Название игры
$c['title2'] = ' - Бесплатная, онлайн игра посвященная сражениям и магии!';
$c['title3'] = $c['name'];
$c['keys'] = $c['name'] . ', combats.com, ' . $c['name'] . ' игра, ' . $c['name'] . ' играть, игра ' . $c['name'] . ', старый ' . $c['name'] . ', ' . $c['name'] . ' онлайн игра, ' . $c['name'] . ' браузерная игра, играть в ' . $c['name'] . ', игра бк, бк игра, старый бк, играть в бк, бк онлайн игра, новый бк, Легендарный ' . $c['name'] . ', легендарный бк, combats, комбатс, combats ru, combats com, OldBK, oldbk ru, oldbk com, олдбк, old bk, олд бк, mycombats, rebk, recombats, oldcombats, obk2'; //Ключевые слова META
$c['desc'] = '«' . $c['name'] . '» – это бесплатная увлекательная браузерная онлайн игра 2004-2009г, в которой сконцентрировано все самое лучшее от современных онлайн игр. В этой браузерной игре заложены самые интересные традиции всем известной онлайн игры под названием «' . $c['name'] . ' 2004-2009», которая, кстати, стала первооткрывателем всех браузерных игр.'; //Описание META
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
//Сервера
$c['host'] = 'new-combats.com';
$c['forum'] = 'forum.' . $c['host'];
$c['img'] = 'img' . $c['host'];
$c['thiscity'] = 'capitalcity';
$c['capitalcity'] = $c['host'];
$c['abandonedplain'] = $c['host'];
$c['exit'] = '<script>top.location="https://' . $c['host'] . '/";</script><noscript><meta http-equiv="refresh" content="0; URL=https://' . $c['host'] . '/"></noscript>';
require_once 'mysql_override.php';
//Валюта
$c['curency_name'] = 'RUB';
$c['curency_value'] = 36;
//Бот клон
$c['bot_level'] = 0; // до какого лвл бот (включительно)
$c['propsk_die'] = 0; //Смерть при пропуске ходов, 0 - выкл. , >= 1 - количество пропусков до смерти при нападении
//Скупка
$c['exp'] = 0; //бонус опыта
$c['shop_type1'] = 100; //в гос НЕ ТРОГАТЬ
$c['shop_type2'] = 90; //в березку НЕ ТРОГАТЬ
$c['shop_all'] = 0; //Скупка на все! , 0 - сделать для отключения скупки.
$c['shop_all_type1'] = 100; //Скупка только с госе! , 0 - сделать для отключения скупки.
$c['shop_all_type2'] = 100; //Скупка только с березки! , 0 - сделать для отключения скупки.
//
$c['nosanich'] = true; //Странички Саныча не выпадают - true , выпадают - false
$c['zuby'] = false; //зубы
$c['limitedexp'] = false; //лимит опыта
$c['infinity5level'] = false; //вечные 5 уровни
$c['expstop'] = 2999999; //9; //Опыт на котором останавливаемся 11 149999999
$c['expstopu'] = 2999999; //Опыт на котором останавливаемся
$c['noobgade'] = false; //нуб квест (пещера)
$c['bonusonline'] = true; //бонус за онлайн
$c['level_ransfer'] = 8; //С какого уровня разрешены передачи
$c['znahar'] = true; //бесплатный знахарь
$c['nolevel'] = false; //лимитирование уровней
$c['noitembuy'] = false; //Не требует ресурсы для покупки
$c['effz'] = 0; //Скольким секундам равен заряд
$c['money_haot'] = true; //кр за хаоты
$c['crtoecr'] = 500; //Курс обмена кр на екр (если 0, то выключено)
$c['ecrtocr'] = 200; //Курс обмена екр на кр
$c['bonuslevel'] = true; //Бонус уровня
$c['bonussocial'] = false; //Бонус социальный
$c['w'] = date('w');
$c['m'] = date('m');
$code = '1';
$c['counters'] = '';
$c['counters_noFrm'] = '';
$c['securetime'] = 0; //Время последнего возможного взлома персов (подбор пароля по базам данных других игр)
$c['copyright'] = 'Copyright © ' . date('Y') . ' « Новый Бойцовский Клуб »';
if (isset($_GET['version'])) {
die('Version: ' . $c['ver']);
}
// Для всех доработок, пока нет автозагрузки классов.
// Для всех доработок, пока нет автозагрузки классов.
require_once 'class/Insallah/Config.php';
// Попробуем в автозагрузку.
// Никогда не заработает с такими названиями классов и файлов!
// "На потом."
// Попробуем в автозагрузку.
// Никогда не заработает с такими названиями классов и файлов!
// "На потом."
spl_autoload_register(function ($className) {
# 1 with namespaces
# 2 without
@@ -94,3 +33,10 @@ spl_autoload_register(function ($className) {
}
}
});
$code = '1';
Config::init();
$c = Config::get();
//Tournament::startAllBattles();
+48
View File
@@ -0,0 +1,48 @@
<?php
const GAME = true; // Для совместимости с этой "защитой".
const GAME_VERSION = 'alpha-7.4';
// Новая автозагрузка.
// ВНИМАНИЕ! Не введено в эксплуатацию!
require_once 'mysql_override.php';
require_once 'class/Insallah/Config.php';
spl_autoload_register(function (string $className) {
# 1 with namespaces
# 2 without
$fileName = [
__DIR__ . '/class/' . str_replace('\\', DIRECTORY_SEPARATOR, $className . '.php'),
__DIR__ . '/class/' . $className . '.php'
];
foreach ($fileName as $file) {
if (file_exists($file)) {
require_once $file;
break;
}
}
});
spl_autoload_register(function (string $classname) {
$classMap = [
'NewCombats' => __DIR__ . '/class/',
'Insallah' => __DIR__ . '/class/Insallah/',
'DarksLight2' => __DIR__ . '/class/DarksLight2/',
];
$parts = explode('\\', $classname);
$namespace = array_shift($parts);
$classFile = array_pop($parts) . '.php';
if (!array_key_exists($namespace, $classMap)) {
return;
}
$path = implode(DIRECTORY_SEPARATOR, $parts);
$file = $classMap[$namespace] . $path . DIRECTORY_SEPARATOR . $classFile;
if (!file_exists($file) && !class_exists($classname)) {
return;
}
require_once $file;
});
+4334 -6207
View File
File diff suppressed because it is too large Load Diff
+112 -114
View File
@@ -21,7 +21,7 @@ class BotLogic
static function battle_priems()
{
//èñïîëüçóåì ïðèåìû â áîþ
//используем приемы в бою
if (self::$st['hpNow'] > 0 && self::$bot['battle'] > 0) {
$pr = explode('|', self::$bot['priems']);
@@ -36,7 +36,7 @@ class BotLogic
$i = 0;
while ($i < count($pr)) {
if ($rz[$i] < 1 && $pr[$i] > 0) {
//Ìîæíî èñïîëüçîâàòü ïðèåì, ïîäêëþ÷àåì ëîãèêó
//Можно использовать прием, подключаем логику
BotPriemLogic::start($i, $pr[$i]);
}
$i++;
@@ -48,15 +48,15 @@ class BotLogic
static function clear_bot()
{
//Î÷èñòêà áîòà, îáíóëÿåì åãî äî [0], óäàëÿåì ýôôåêòû, ïðåäìåòû è ò.ä, à òåêóùåìó ñòàâèì ëîãèí delete
//Очистка бота, обнуляем его до [0], удаляем эффекты, предметы и т.д, а текущему ставим логин delete
//Óäàëÿåì ñîîáùåíèÿ â ÷àòå
//Удаляем сообщения в чате
mysql_query('DELETE FROM `chat` WHERE `to` = "' . self::$bot['login'] . '"');
//Óäàëÿåì øìîòêè è ýôôåêòû
//Удаляем шмотки и эффекты
mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . self::$bot['id'] . '"');
mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . self::$bot['id'] . '"');
//Óäàëÿåì ñòàòû è ïîëå â þçåðñ
//Удаляем статы и поле в юзерс
mysql_query('DELETE FROM `users` WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('DELETE FROM `stats` WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('DELETE FROM `online` WHERE `uid` = "' . self::$bot['id'] . '" LIMIT 1');
@@ -80,13 +80,13 @@ class BotLogic
}
}
//ÏÐîâåðêà íà ôàéòðóì
//ПРоверка на файтрум
static function test_fr($id, $city = 'capitalcity')
{
return $city != 'capitalcity' || $id == 0 || $id == 2 || $id == 4 || $id == 5 || $id == 7 || $id == 377;
}
//Äåéñòâèÿ áîòà âíå áîÿ
//Действия бота вне боя
static function actions()
{
@@ -94,9 +94,9 @@ class BotLogic
if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0 && self::$bot['pass'] == 'saintlucia') {
//Ìîæíî: ñìåíèòü ôóëë, ïåðåéòè â äðóãóþ êîìíàòó, âõîäèòü íàéìîì, äåëàòü áàôû
//Можно: сменить фулл, перейти в другую комнату, входить наймом, делать бафы
//Ïåðåõîäèì â äðóãóþ êîìíàòó
//Переходим в другую комнату
if (true == false && self::$bot['a1'] != 0 && self::$bot['a1'] != self::$bot['room']) {
self::_loc(self::$bot['a1']);
@@ -116,22 +116,22 @@ class BotLogic
mysql_query('UPDATE `stats` SET `exp` = "3500000" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
}
//Äåéñòâèå â êîìíàòå
//Ìàãàçèí
//Ïîêóïàåì êðèñòàëë âå÷íîñòè
//Действие в комнате
//Магазин
//Покупаем кристалл вечности
if (self::$bot['room'] == 10 && self::$bot['level'] == 5 && self::$bot['exp'] >= 12499) {
$cr = mysql_fetch_array(mysql_query('SELECT `id` FROM `items_users` WHERE `item_id` = "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
if (!isset($cr['id'])) {
//Ïîêóïàåì êðèñòàëë
//Покупаем кристалл
$u->addItem(1204, self::$bot['id']);
}
}
//Ïåðåõîäèì â êîìíàòó äëÿ ñðàæåíèé
//Переходим в комнату для сражений
self::_loc(self::_loc_zv());
}
}
//Åñëè áîò óæå íàáðàë îïûò äëÿ ïåðåõîäà íà 6-îé
//Если бот уже набрал опыт для перехода на 6-ой
if (self::$bot['level'] == 5 && self::$bot['exp'] >= 12499) {
$cr = mysql_fetch_array(mysql_query('SELECT `id` FROM `items_users` WHERE `item_id` = "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
if (!isset($cr['id'])) {
@@ -139,12 +139,12 @@ class BotLogic
}
}
//Ïîõîæå ÷òî áîòó ïîðà ñìåíèòü êîìïëåêò ))
//Похоже что боту пора сменить комплект ))
if (self::$bot['clss'] == 0) {
//Âûáèðàåì íîâûé êëàññ è øìîòêè :)
//Выбираем новый класс и шмотки :)
//Ìåíÿåì êëàññ
//Меняем класс
self::$bot['clss'] = rand(1, 4);
$x = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" '));
@@ -154,7 +154,7 @@ class BotLogic
if ($x[0] > 1) {
$x = rand(1, $x[0]);
//âûáèðàåì 1 èç íåñêîëüêèõ
//выбираем 1 из нескольких
$da = ['ASC', 'DESC', 'DESC', 'ASC'];
$da = $da[rand(0, 5)];
$com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" ORDER BY `id` ' . $da . ' LIMIT ' . ($x - 1) . ',1'));
@@ -172,12 +172,12 @@ class BotLogic
mysql_query('UPDATE `users` SET `clss` = "' . self::$bot['clss'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
/* Çàáèðàåì ñòàðûå øìîòêè è ýôôåêòû */
/* Забираем старые шмотки и эффекты */
mysql_query('UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `gift` = "" AND `item_id` != "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
mysql_query('UPDATE `items_users` SET `iznosNOW` = "0" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
/* Îáíîâëÿåì ñòàòû è ïðèåìû */
/* Обновляем статы и приемы */
if ($com['pr'] == '') {
$i = 1;
@@ -193,7 +193,7 @@ class BotLogic
$i = 1;
while ($i <= 20) {
if ($com['e' . $i] > 0) {
//Âûäàåì è íàäåâàåì ïðåäìåò
//Выдаем и надеваем предмет
//$it = $u->addItem($com['e'.$i],self::$bot['id']);
$eff = mysql_fetch_array(mysql_query('SELECT * FROM `eff_main` WHERE `id2` = "' . $com['e' . $i] . '" LIMIT 1'));
mysql_query('INSERT INTO `eff_users` (`overType`,`id_eff`,`uid`,`name`,`timeUse`,`data`,`no_Ace`) VALUES ("' . $eff['oneType'] . '","' . $eff['id2'] . '","' . self::$bot['id'] . '","' . $eff['mname'] . '","' . (time() + 9640000) . '","' . $eff['mdata'] . '","' . $eff['noAce'] . '")');
@@ -204,7 +204,7 @@ class BotLogic
$i = 1;
while ($i <= 20) {
if ($com['w' . $i] > 0) {
//Âûäàåì è íàäåâàåì ïðåäìåò
//Выдаем и надеваем предмет
$it = $u->addItem($com['w' . $i], self::$bot['id']);
$eff1 = mysql_fetch_array(mysql_query('SELECT * FROM `items_shop` WHERE `item_id` = "' . $com['w' . $i] . '" LIMIT 1'));
if ($it > 0) {
@@ -217,7 +217,7 @@ class BotLogic
}
}
//åñëè áîò óæå 1-ûé óðîâåíü, à ñèäèò â íîâè÷êàõ :) êèäàåì åãî â çàëû
//если бот уже 1-ый уровень, а сидит в новичках :) кидаем его в залы
if (self::$bot['city'] == 'capitalcity' && self::$bot['level'] < 2 && self::$bot['room'] == 0 && self::$bot['a1'] == 0) {
self::_loc(self::_loc_zv());
}
@@ -226,7 +226,7 @@ class BotLogic
public $bot_last_action = [];
//Âêëþ÷àåì ëîãèêó áîòà
//Включаем логику бота
static function start($id)
{
if (!isset($bot_last_action[$id])) {
@@ -238,12 +238,12 @@ class BotLogic
self::$st = $u->getStats(self::$bot, 0);
//Çàõîäèì áîòîì â îíëàéí
//Заходим ботом в онлайн
self::_online();
if (self::$bot['battle'] > 0) {
//Äåéñòâèÿ áîòà â ïîåäèíêå
//Действия бота в поединке
self::$btl = mysql_fetch_array(mysql_query('SELECT * FROM `battle` WHERE `id` = "' . mysql_real_escape_string(self::$bot['battle']) . '" AND `team_win` = "-1" LIMIT 1'));
if (isset(self::$btl['id'])) {
@@ -252,16 +252,16 @@ class BotLogic
$a1 = mysql_fetch_array(mysql_query('SELECT `id`,`uid1`,`uid2`,`time` FROM `battle_act` WHERE `battle` = "' . self::$btl['id'] . '" AND `uid1` = "' . self::$bot['id'] . '" ORDER BY `time` ASC LIMIT 1'));
//Ïðîâåðÿåì âîçìîæíîñòü èñïîëüçîâàíèÿ ïðèåìîâ è äåëàåì ñïèñîê ÷òî èñïîëüçîâàòü
//èñïîëüçóåì ïðèåìû
//Проверяем возможность использования приемов и делаем список что использовать
//используем приемы
self::battle_priems();
//Áîò ñäåëàë óäàð, íî íèêòî íå îòâåòèë, ïðîâåðÿåì òàéìàóò è åñëè ÷òî çàõîäèì
//Бот сделал удар, но никто не ответил, проверяем таймаут и если что заходим
if (isset($a1['id']) && $a1['time'] + self::$btl['timeout'] < time()) {
$go_bot = true;
}
//ÒÓÒ test
//ТУТ test
$a2 = mysql_fetch_array(mysql_query('SELECT `id`,`uid1`,`uid2`,`time` FROM `battle_act` WHERE `battle` = "' . self::$btl['id'] . '" AND `uid2` = "' . self::$bot['id'] . '" ORDER BY `time` ASC LIMIT 1'));
if (isset($a2['uid1'])) {
mysql_query('UPDATE `stats` SET `enemy` = "' . $a2['uid1'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
@@ -270,41 +270,41 @@ class BotLogic
if (isset($a3['uid2'])) {
mysql_query('UPDATE `stats` SET `enemy` = "' . $a3['uid2'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
}
//Ðàçìåí ñ ïðîòèâíèêîì
//Размен с противником
self::$enemy = mysql_fetch_array(mysql_query('SELECT * FROM `stats` WHERE `id` = "' . self::$bot['enemy'] . '" LIMIT 1'));
} else {
//Çàõîäèì íà ïåðñîíàæà
//Заходим на персонажа
self::inuser_go_btl(self::$bot);
//Ïîåäèíîê óæå çàâåðøèëñÿ, âûêèäûâàåì èç áîÿ
//Поединок уже завершился, выкидываем из боя
self::$bot['battle'] = 0;
mysql_query('UPDATE `users` SET `battle` = "' . self::$bot['battle'] . '" WHERE `id` = "' . mysql_real_escape_string(self::$bot['id']) . '" LIMIT 1 ');
}
} else {
//Äåéñòâèÿ áîòà âíå ïîåäèíêà
//Действия бота вне поединка
if (self::$bot['timeMain'] < time()) {
mysql_query('UPDATE `chat` SET `time` = "' . time() . '" WHERE `to` = "' . self::$bot['login'] . '" AND `time` = "-1"');
//Äåéñòâèå âîçìîæíî ïðîèçâåñòè
//Действие возможно произвести
if (self::$bot['ipreg'] == 1 || self::$bot['ipreg'] == 2 || self::$bot['ipreg'] == 4) {
//Ïðèíèìàåì òîëüêî õàîòû
//Принимаем только хаоты
self::$bot['ipreg'] = 3;
}
if (self::$bot['ipreg'] == 5) {
//Ïîäàåì òîëüêî õàîòû
//Подаем только хаоты
self::$bot['ipreg'] = 7;
}
//
if (self::$bot['ipreg'] == 0 || !self::test_fr(self::$bot['room'])) {
//Îáíîâëÿåì ýôôåêòû
//Обновляем эффекты
$com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" LIMIT 1'));
if (isset($com['id'])) {
$eft = mysql_fetch_array(mysql_query('SELECT `id` FROM `eff_users` WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
@@ -313,7 +313,7 @@ class BotLogic
$i = 1;
while ($i <= 20) {
if ($com['e' . $i] > 0) {
//Âûäàåì è íàäåâàåì ïðåäìåò
//Выдаем и надеваем предмет
//$it = $u->addItem($com['e'.$i],self::$bot['id']);
$eff = mysql_fetch_array(mysql_query('SELECT * FROM `eff_main` WHERE `id2` = "' . $com['e' . $i] . '" LIMIT 1'));
mysql_query('INSERT INTO `eff_users` (`overType`,`id_eff`,`uid`,`name`,`timeUse`,`data`,`no_Ace`) VALUES ("' . $eff['oneType'] . '","' . $eff['id2'] . '","' . self::$bot['id'] . '","' . $eff['mname'] . '","' . (time() + 86400 * 7) . '","' . $eff['mdata'] . '","' . $eff['noAce'] . '")');
@@ -324,25 +324,25 @@ class BotLogic
}
if (self::$bot['level'] >= 13 && self::$bot['clan'] == 0 && self::$bot['align'] == 0) {
//îáíóëÿåì áîòà
//обнуляем бота
self::clear_bot();
}
//Òîëüêî-÷òî èç ïîåäèíêà, õèëÿåòñÿ
//Только-что из поединка, хиляется
if (!self::test_fr(self::$bot['room'])) {
//Â êàêîé-òî ëîêàöèè, âèäèìî ÷òî-òî äåëàåì
//В какой-то локации, видимо что-то делаем
} elseif (self::$st['hpNow'] >= self::$st['hpAll']) {
echo 1;
//Ïðèñòóïàåì ê àêòèâíîé äåÿòåëüíîñòè :)
//Приступаем к активной деятельности :)
mysql_query('UPDATE `stats` SET `zv`= "0",`team`= "0",`hpNow` = "' . self::$st['hpNow'] . '",`mpNow` = "' . self::$st['mpNow'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `users` SET `ipreg` = "' . self::new_action() . '",`mod_zvanie` = "Ñòàæåð" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `users` SET `ipreg` = "' . self::new_action() . '",`mod_zvanie` = "Стажер" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} else {
if (self::$bot['mod_zvanie'] == 'Ñòàæåð100500') {
//Íàäåâàåì êîìïëåêò + îáíîâëÿåì ýôôåêòû
if (self::$bot['mod_zvanie'] == 'Стажер100500') {
//Надеваем комплект + обновляем эффекты
mysql_query('UPDATE `eff_users` SET `timeUse` = "' . (time() + 7200) . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" AND `v1` != "priem" LIMIT 12');
mysql_query('UPDATE `items_users` SET `inOdet` = "0" WHERE `uid` = "' . self::$bot['id'] . '" AND `inOdet` > 0 AND `delete` = "0"');
$sp = mysql_query('SELECT `u`.`id`,`st`.`inslot`,`st`.`2too` FROM `items_users` AS `u` LEFT JOIN `items_main` AS `st` ON `st`.`id` = `u`.`item_id` WHERE `u`.`inOdet` = 0 AND `st`.`inslot` > 0 AND `st`.`inSlot` <= 20');
@@ -373,10 +373,10 @@ class BotLogic
mysql_query('UPDATE `items_users` SET `inOdet` = "' . $od . '" WHERE `id` = "' . $pl['id'] . '" AND `uid` = "' . self::$bot['id'] . '" LIMIT 1');
}
}
mysql_query('UPDATE `items_users` SET `mod_zvanie` = "Còaæåð" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `items_users` SET `mod_zvanie` = "Cтaжер" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
}
//Õèëÿåìñÿ äàëüøå
//Хиляемся дальше
if (self::$bot['regHP'] == 0 || self::$bot['regMP'] == 0) {
mysql_query('UPDATE `stats` SET `regHP` = "' . time() . '", `regMP` = "' . time() . '",`hpNow` = "' . self::$st['hpNow'] . '",`mpNow` = "' . self::$st['mpNow'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
}
@@ -390,10 +390,10 @@ class BotLogic
} elseif (self::$bot['ipreg'] == 1) {
//Ïðèíÿòü çàÿâêó íà áîé (ôèç.)
//Принять заявку на бой (физ.)
if (self::$bot['zv'] == 0) {
//Âûäåëÿåì ïîäõîäÿùóþ çàÿâêó â ôèç. ïîåäèíêå
//Выделяем подходящую заявку в физ. поединке
$rz = 2;
$zv = 0;
$nozv = 0;
@@ -415,13 +415,13 @@ class BotLogic
if ($uz1st['reting'] <= floor(self::$st['reting'] * 1.27)) {
//Ïðèíèìàåì çàÿâêó
//Принимаем заявку
$sa = '';
if (self::$bot['sex'] == 2) {
$sa = 'à';
$sa = 'а';
}
$text = ' [login:' . self::$bot['login'] . '] ïðèíÿë' . $sa . ' âàøó çàÿâêó íà áîé.[reflesh_main_zv_priem:' . self::$bot['id'] . ']';
$text = ' [login:' . self::$bot['login'] . '] принял' . $sa . ' вашу заявку на бой.[reflesh_main_zv_priem:' . self::$bot['id'] . ']';
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','" . $uz1['city'] . "','','','" . $uz1['login'] . "','" . $text . "','" . time() . "','6','0')");
mysql_query('UPDATE `stats` SET `zv` = "' . $zv['id'] . '",`team` = "2" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `users` SET `ipreg` = "8",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
@@ -449,19 +449,19 @@ class BotLogic
} elseif (self::$bot['ipreg'] == 2) {
//Ïðèíÿòü çàÿâêó íà áîé (ãðóï.)
//Принять заявку на бой (груп.)
self::bot_group_haot_zv(6);
} elseif (self::$bot['ipreg'] == 3) {
//Ïðèíÿòü çàÿâêó íà áîé (õàîò.)
//Принять заявку на бой (хаот.)
self::bot_group_haot_zv(7);
} elseif (self::$bot['ipreg'] == 4) {
//Ïðèíÿòü çàÿâêó íà áîé (òóðíèð.)
self::e('' . self::$bot['login'] . ', ÿ õî÷ó ïðèíÿòü òóðíèð...');
//Принять заявку на бой (турнир.)
self::e('' . self::$bot['login'] . ', я хочу принять турнир...');
} elseif (self::$bot['ipreg'] == 5) {
//Ïîäàòü çàÿâêó (ôèç.)
//Подать заявку (физ.)
if (self::$bot['zv'] == 0) {
$rz = 2;
@@ -531,34 +531,34 @@ class BotLogic
} elseif (self::$bot['ipreg'] == 8) {
//Îæèäàíèå íà÷àëà ïîåäèíêà
//Ожидание начала поединка
if (self::$bot['zv'] == 0) {
//Ïîåäèíîê íå óäàëîñü íà÷àòü
//Поединок не удалось начать
mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} else {
$zv = mysql_fetch_array(mysql_query('SELECT * FROM `zayvki` WHERE `id` = "' . self::$bot['zv'] . '" AND `cancel` = "0" AND `start` = "0" LIMIT 1'));
if (!isset($zv['id'])) {
//Îáíóëÿåì äåéñòâèÿ
//Обнуляем действия
mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} elseif ($zv['razdel'] == 4 || $zv['razdel'] == 5) {
//õàîò èëè ãðóïïà
//хаот или группа
if ($zv['time_start'] + $zv['time'] <= time()) {
self::inuser_go_zv(self::$bot);
}
} else {
//ôèç
//физ
if ($zv['creator'] == self::$bot['id']) {
$uz2 = mysql_fetch_array(mysql_query('SELECT `u`.`sex`,`u`.`id`,`u`.`login`,`u`.`align`,`u`.`clan`,`u`.`admin`,`u`.`city`,`u`.`room`,`u`.`online`,`u`.`level`,`u`.`battle`,`u`.`money`,`st`.* FROM `stats` AS `st` LEFT JOIN `users` AS `u` ON (`st`.`id` = `u`.`id`) WHERE `st`.`zv`="' . $zv['id'] . '" AND `st`.`team`="2" LIMIT 1'));
if (isset($uz2['id'])) {
//Çàÿâêó êòî-òî ïðèíÿë, ðåàãèðóåì! :)
//Заявку кто-то принял, реагируем! :)
$pr = -1;
$uz2st = $u->getStats($uz2, 0);
@@ -566,12 +566,12 @@ class BotLogic
//btl-cof
if ($uz2st['reting'] > floor(self::$st['reting'] * 1.27)) {
//Îòêàçûâàåì, â 95% ñëó÷àåâ, ïðîòèâíèê ñëèøêîì ñèëåí
//Отказываем, в 95% случаев, противник слишком силен
if (rand(0, 100) > 95) {
//îòïðàâëÿåì áîòà íà èçáèåíèå :D
//отправляем бота на избиение :D
$pr = 1;
} else {
//îòêàç
//отказ
$pr = 0;
}
@@ -579,13 +579,13 @@ class BotLogic
$pr = 1;
}
//Ìîæíî ïðèíÿòü çàÿâêó
//Можно принять заявку
//$pr = 0;
if ($pr == 1) {
//Ïðèåì çàÿâêè
//ñîçäàåì ïîåäèíîê ñ áîòîì
//Прием заявки
//создаем поединок с ботом
$expB = 0;
$btl = ['players' => '', 'timeout' => $zv['timeout'], 'type' => $zv['type'], 'invis' => $zv['invis'], 'noinc' => 0, 'travmChance' => 0, 'typeBattle' => 0, 'addExp' => $expB, 'money' => 0];
$ins = mysql_query('INSERT INTO `battle` (`time_over`,`city`,`time_start`,`players`,`timeout`,`type`,`invis`,`noinc`,`travmChance`,`typeBattle`,`addExp`,`money`,`team_win`) VALUES (
@@ -604,13 +604,13 @@ class BotLogic
"-1")');
if ($ins) {
$btl_id = mysql_insert_id();
//îáíîâëÿåì äàííûå î ïîåäèíêå
//обновляем данные о поединке
mysql_query('UPDATE `users` SET `battle`="' . $btl_id . '" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');
mysql_query('UPDATE `users` SET `battle`="' . $btl_id . '",`ipreg` = "0" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `stats` SET `zv` = "0",`team`="1" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `stats` SET `zv` = "0",`team`="2" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');
//Åñëè áîé êóëà÷íûé, òî ñíèìàåì âåùè
//Если бой кулачный, то снимаем вещи
if ($btl['type'] == 1) {
mysql_query('UPDATE `items_users` SET `inOdet`="0" WHERE `uid` = "' . self::$bot['id'] . '" AND `inOdet`!=0');
mysql_query('UPDATE `items_users` SET `inOdet`="0" WHERE `uid` = "' . $uz2['id'] . '" AND `inOdet`!=0');
@@ -618,21 +618,21 @@ class BotLogic
mysql_query('UPDATE `zayvki` SET `start` = "' . time() . '",`btl_id` = "' . $btl_id . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1');
//îáíîâëÿåì çàÿâêó, ÷òî áîé íà÷àëñÿ
//обновляем заявку, что бой начался
self::$bot['battle'] = $btl_id;
//Îòïðàâëÿåì ñîîáùåíèå â ÷àò âñåì áîéöàì
//Отправляем сообщение в чат всем бойцам
mysql_query("INSERT INTO `chat` (`city`,`room`,`to`,`time`,`type`,`toChat`,`sound`) VALUES ('" . $u->info['city'] . "','" . $u->info['room'] . "','" . $uz2['login'] . "','" . time() . "','11','0','117')");
}
} elseif ($pr == 0) {
//Îòêàç
//Отказ
$sa = '';
if (self::$bot['sex'] == 2) {
$sa = 'à';
$sa = 'а';
}
$text = ' [login:' . self::$bot['login'] . '] îòêàçàë' . $sa . ' âàì â ïîåäèíêå.';
$text = ' [login:' . self::$bot['login'] . '] отказал' . $sa . ' вам в поединке.';
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','" . $uz2['city'] . "','','','" . $uz2['login'] . "','" . $text . "','" . time() . "','6','0')");
mysql_query('UPDATE `stats` SET `zv` = "0",`team` = "1" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');
mysql_query('UPDATE `zayvki` SET `otk` = ( `otk` + 1 ),`bcs` = "' . (time() + rand(30, rand(60, 180))) . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1');
@@ -640,7 +640,7 @@ class BotLogic
} else {
//Çàÿâêó íèêòî íå ïðèíÿë, âîçìîæíî ñòîèò îòìåíèòü çàÿâêó âîîáùå!
//Заявку никто не принял, возможно стоит отменить заявку вообще!
if (self::$bot['timeMain'] < time() - 30 - rand((7 / $zv['otk']), (3 * 49 / $zv['otk']))) {
mysql_query('UPDATE `stats` SET `zv` = "0" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
@@ -655,7 +655,7 @@ class BotLogic
}
//Áîò óæå ñëèøêîì äîëãî æäåò îòâåòà èãðîêà, îòêàçûâàåìñÿ îò çàÿâêè
//Бот уже слишком долго ждет ответа игрока, отказываемся от заявки
if (self::$bot['timeMain'] < time() - rand((30 / $zv['otk']), (135 / $zv['otk'])) && $zv['creator'] != self::$bot['id'] && ($zv['razdel'] == 1 || $zv['razdel'] == 2)) {
$uz1 = mysql_fetch_array(mysql_query('SELECT `u`.`sex`,`u`.`id`,`u`.`login`,`u`.`align`,`u`.`clan`,`u`.`admin`,`u`.`city`,`u`.`room`,`u`.`online`,`u`.`level`,`u`.`battle`,`u`.`money`,`st`.* FROM `stats` AS `st` LEFT JOIN `users` AS `u` ON (`st`.`id` = `u`.`id`) WHERE `st`.`zv`="' . $zv['id'] . '" AND `st`.`team`="1" LIMIT 1'));
@@ -663,10 +663,10 @@ class BotLogic
$sa = '';
if (self::$bot['sex'] == 2) {
$sa = 'à';
$sa = 'а';
}
$text = ' [login:' . self::$bot['login'] . '] îòîçâàë' . $sa . ' ñâîé çàïðîñ íà áîé.';
$text = ' [login:' . self::$bot['login'] . '] отозвал' . $sa . ' свой запрос на бой.';
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','" . $uz1['city'] . "','','','" . $uz1['login'] . "','" . $text . "','" . time() . "','6','0')");
}
@@ -709,18 +709,18 @@ class BotLogic
if (self::$bot['level'] < 2) {
if ($r == 2 || $r == 3 || $r == 6 || $r == 7 || $r == 8) {
if (rand(0, 1) == 1) {
$r = 1; //ïðèíèìàåì ôèç
$r = 1; //принимаем физ
} elseif (rand(0, 1) == 0) {
$r = 4; //ïðèíèìàåì òóðíèð
$r = 4; //принимаем турнир
} else {
$r = 5; //ïîäàåì ôèç
$r = 5; //подаем физ
}
}
} elseif (self::$bot['level'] == 0) {
if (rand(0, 1) == 1) {
$r = 1; //ïðèíèìàåì ôèç
$r = 1; //принимаем физ
} else {
$r = 5; //ïîäàåì ôèç
$r = 5; //подаем физ
}
}
@@ -734,9 +734,9 @@ class BotLogic
/*/
Áàçîâûå ôóíêöèè îáó÷åíèÿ áîòà
Базовые функции обучения бота
/*/
//Áîò èùåò çàÿâêó â ãðóïïû èëè õàîò äëÿ ñâîåãî óðîâíÿ è ïîäõîäÿùóþ åìó
//Бот ищет заявку в группы или хаот для своего уровня и подходящую ему
static function bot_group_haot_zv($id)
{
$rz = 5;
@@ -783,7 +783,7 @@ class BotLogic
}
//Ëîãèêà ïðèåìà çàÿâêè
//Логика приема заявки
if ((self::team_zv_cf($pl, $atm) > (self::team_zv_cf($pl, $tmr) + self::$st['reting']) * 1.67 || ($zv['tm2max'] < $zv['tm1max'] / 2) || ($zv['tm1max'] < $zv['tm2max'] / 2)) && rand(0, 100) < 90) {
$go = 0;
}
@@ -840,7 +840,7 @@ class BotLogic
if ($tm > 0 || $rz == 5) {
//Ïðèíèìàåì ó÷àñòèå â çàÿâêå
//Принимаем участие в заявке
mysql_query('UPDATE `stats` SET `zv` = "' . $pl['id'] . '",`team` = "' . $tm . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `users` SET `login2` = "' . self::$bot['login2'] . '",`ipreg` = "8" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
self::$bot['zv'] = $pl['id'];
@@ -856,7 +856,7 @@ class BotLogic
}
//Äîáàâëÿåì íîâîãî áîòà
//Добавляем нового бота
static function createNewBot($login, $sex)
{
if ($sex != 1) {
@@ -865,22 +865,20 @@ class BotLogic
$se = 1;
}
$r = ['name' => '_', 'city_real' => '', 'deviz' => '', 'chatColor' => 'Black'];
$r = ['name' => '_', 'chatColor' => 'Black'];
$ins = mysql_query("INSERT INTO `users` (`fnq`,`host_reg`,`room`,`login`,`pass`,`ipreg`,`ip`,`city`,`cityreg`,`name`,`sex`,`city_real`,`deviz`,`chatColor`,`timereg`) VALUES (
$ins = mysql_query("INSERT INTO `users` (`fnq`,`host_reg`,`room`,`login`,`pass`,`ipreg`,`ip`,`city`,`cityreg`,`name`,`sex`,`chatColor`,`timereg`) VALUES (
'0',
'real_bot_user',
'0',
'" . mysql_real_escape_string($login) . "',
'" . md5('regnxt#$%^à0.' . time()) . "',
'" . md5('regnxt#$%^а0.' . time()) . "',
'127.0.0.1',
'127.0.0.1',
'capitalcity',
'capitalcity',
'" . $r['name'] . "',
'" . mysql_real_escape_string($sex) . "',
'" . $r['city_real'] . "',
'" . $r['deviz'] . "',
'" . $r['chatColor'] . "',
'" . time() . "')");
if ($ins) {
@@ -892,11 +890,11 @@ class BotLogic
}
//Áîò íàõîäèòñÿ â îíëàéíå
//Бот находится в онлайне
static function _online()
{
if (self::$bot['online'] < time() - 60) {
//óðîâåíü/àïï
//уровень/апп
if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0) {
self::_level();
}
@@ -905,7 +903,7 @@ class BotLogic
}
}
//Áîò ìåíÿåò ëîêàöèþ
//Бот меняет локацию
static function _loc_A($a, $b)
{
return $b;
@@ -920,28 +918,28 @@ class BotLogic
$r = rand(1, 4);
}
//áóäóàð
//будуар
if ($r == 4 && self::$bot['sex'] != 1) {
$r = rand(1, 3);
}
if (self::$bot['city'] == 'capitalcity') {
if ($r == 4) {
//áóäóàð
//будуар
$r = 7;
} elseif ($r == 3) {
//ÇÂ 3
//ЗВ 3
$r = 5;
} elseif ($r == 2) {
//ÇÂ 2
//ЗВ 2
$r = 2;
} else {
//ÇÂ 1
//ЗВ 1
$r = 4;
}
if (self::$bot['level'] == 0) {
//Íîâè÷êè
//Новички
$r = 0;
}
@@ -954,20 +952,20 @@ class BotLogic
{
if ($id == self::$bot['room']) {
//íè÷åãî, óæå ïðèøëè
//ничего, уже пришли
self::update('a1', 0);
} else {
//Ïðîêëàäûâàåì ìàðøðóò èç òåêóùåé êîìíàòû
//Прокладываем маршрут из текущей комнаты
$rid_next = self::_loc_A(self::$bot['room'], $id);
if ($rid_next > 0) {
//Èäåì òóäà
//Идем туда
//$rid_next = 377;
mysql_query('UPDATE `users` SET `room` = "' . $rid_next . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
return true;
} else {
//Íåâîçìîæíî äîéòè òóäà
//Невозможно дойти туда
return false;
}
@@ -975,7 +973,7 @@ class BotLogic
}
//Áîò ïîëó÷èë óðîâåíü, ëèáî àïï
//Бот получил уровень, либо апп
static function _level()
{
global $u;
@@ -1001,11 +999,11 @@ class BotLogic
}
//Âñïîìîãàòåëüíûå ôóíêöèè
//Вспомогательные функции
static function e($t)
{
mysql_query('INSERT INTO `chat` (`text`,`city`,`to`,`type`,`new`,`time`) VALUES ("core #' . date('d.m.Y') . ' %' . date('H:i:s') . ' (Êðèòè÷åñêàÿ îøèáêà): <b>' . mysql_real_escape_string($t) . '</b>","capitalcity",
mysql_query('INSERT INTO `chat` (`text`,`city`,`to`,`type`,`new`,`time`) VALUES ("core #' . date('d.m.Y') . ' %' . date('H:i:s') . ' (Критическая ошибка): <b>' . mysql_real_escape_string($t) . '</b>","capitalcity",
"LEL","6","1","-1")');
}
+57 -57
View File
@@ -13,85 +13,85 @@ class BotPriemLogic
$test = self::testpriem(self::$p);
if (isset(self::$p['id']) && $test == 0) {
//Èñïîëüçóåì ïðèåì ïîä íîìåðîì $id
//Используем прием под номером $id
if ($id == 1) {
self::priem1($i);
} //Ïðèêðûòüñÿ 1|2|3|4|5|6|7|8|9|10|11|13|14|45|47|48|49|188|204|211|217|220|223|232|235|240|0|0|0|0|0|0|0|0|0|0|0|0|0|0
} //Прикрыться 1|2|3|4|5|6|7|8|9|10|11|13|14|45|47|48|49|188|204|211|217|220|223|232|235|240|0|0|0|0|0|0|0|0|0|0|0|0|0|0
elseif ($id == 2) {
self::priem2($i);
} //Âëîìèòü
} //Вломить
elseif ($id == 3) {
self::priem3($i);
} //Ñîáðàòü çóáû
} //Собрать зубы
elseif ($id == 4) {
self::priem4($i);
} //Ñèëüíûé óäàð
} //Сильный удар
elseif ($id == 5) {
self::priem5($i);
} //Óòåðåòü ïîò
} //Утереть пот
elseif ($id == 6) {
self::priem6($i);
} //Âîëÿ ê ïîáåäå
} //Воля к победе
elseif ($id == 7) {
self::priem7($i);
} //Àêòèâíàÿ çàùèòà
} //Активная защита
elseif ($id == 8) {
self::priem8($i);
} //Òàíåö âåòðà
} //Танец ветра
elseif ($id == 9) {
self::priem9($i);
} //Äèêàÿ óäà÷à
} //Дикая удача
elseif ($id == 10) {
self::priem10($i);
} //Ïðåäâèäèíèå
} //Предвидиние
elseif ($id == 11) {
self::priem11($i);
} //Óäà÷íûé óäàð
} //Удачный удар
elseif ($id == 13) {
self::priem13($i);
} //Ñòîéêîñòü
} //Стойкость
elseif ($id == 14) {
self::priem14($i);
} //ßðîñòü
} //Ярость
elseif ($id == 45) {
self::priem45($i);
} //Ïîëíàÿ çàùèòà
} //Полная защита
elseif ($id == 47) {
self::priem47($i);
} //Ñëåïàÿ óäà÷à
} //Слепая удача
elseif ($id == 48) {
self::priem48($i);
} //Òàíåö ëåçâèé
} //Танец лезвий
elseif ($id == 49) {
self::priem49($i);
} //Âòîðîå äûõàíèå
} //Второе дыхание
elseif ($id == 188) {
self::priem188($i);
} //Æàæäà êðîâè
} //Жажда крови
elseif ($id == 204) {
self::priem204($i);
} //Îáðå÷åííîñòü
} //Обреченность
elseif ($id == 211) {
self::priem211($i);
} //Àãðåññèâíàÿ çàùèòà
} //Агрессивная защита
elseif ($id == 217) {
self::priem217($i);
} //Ðàçãàäàòü òàêòèêó
} //Разгадать тактику
elseif ($id == 220) {
self::priem220($i);
} //Ñòàâêà íà îïåðåæåíèå
} //Ставка на опережение
elseif ($id == 223) {
self::priem223($i);
} //Ðûâîê
} //Рывок
elseif ($id == 232) {
self::priem232($i);
} //Âûæèòü
} //Выжить
elseif ($id == 235) {
self::priem235($i);
} //Øîêèðóþùèé óäàð
} //Шокирующий удар
elseif ($id == 240) {
self::priem240($i);
} //Õëåáíóòü êðîâè
} //Хлебнуть крови
elseif ($id >= 175 && $id <= 179) {
self::priem175($i);
}
@@ -110,7 +110,7 @@ class BotPriemLogic
BotLogic::inuser_go_btl(BotLogic::$bot, $go_txt);
}
//Ñòàâêà íà îïåðåæåíèå
//Ставка на опережение
private static function priem220($i)
{
if (rand(0, 100) < 30) {
@@ -118,7 +118,7 @@ class BotPriemLogic
}
}
//Ðàçãàäàòü òàêòèêó
//Разгадать тактику
private static function priem217($i)
{
if (rand(0, 100) < 30) {
@@ -126,7 +126,7 @@ class BotPriemLogic
}
}
//Îáðå÷åííîñòü
//Обреченность
private static function priem204($i)
{
if (rand(0, 100) < 30) {
@@ -134,7 +134,7 @@ class BotPriemLogic
}
}
//Âûæèòü
//Выжить
private static function priem232($i)
{
if (self::hp() <= 30 && rand(0, 100) < 50) {
@@ -142,7 +142,7 @@ class BotPriemLogic
}
}
//Æàæäà êðîâè
//Жажда крови
private static function priem188($i)
{
if (rand(0, 100) < 30) {
@@ -150,7 +150,7 @@ class BotPriemLogic
}
}
//Øîê óäàð
//Шок удар
private static function priem235($i)
{
if (rand(0, 100) < 50) {
@@ -158,7 +158,7 @@ class BotPriemLogic
}
}
//Õëåáíóòü êðîâè
//Хлебнуть крови
private static function priem240($i)
{
if (self::hp() <= 70) {
@@ -166,13 +166,13 @@ class BotPriemLogic
}
}
//Ñèëîâîå ïîëå
//Силовое поле
private static function priem175($i)
{
self::usePriem($i);
}
//Ïðèêðûòüñÿ
//Прикрыться
private static function priem1($i)
{
if (rand(0, 100) < 50) {
@@ -180,7 +180,7 @@ class BotPriemLogic
}
}
//Âëîìèòü
//Вломить
private static function priem2($i)
{
if (rand(0, 100) < 50) {
@@ -188,7 +188,7 @@ class BotPriemLogic
}
}
//Ñîáðàòü çóáû
//Собрать зубы
private static function priem3($i)
{
if (self::hp() <= 70 && rand(0, 100) < 50) {
@@ -196,7 +196,7 @@ class BotPriemLogic
}
}
//Âîëÿ ê ïîáåäå
//Воля к победе
private static function priem6($i)
{
if (self::hp() <= 40 && rand(0, 100) < 50) {
@@ -204,7 +204,7 @@ class BotPriemLogic
}
}
//Òàíåö âåòðà
//Танец ветра
private static function priem8($i)
{
if (rand(0, 100) < 30) {
@@ -212,7 +212,7 @@ class BotPriemLogic
}
}
//Òàíåö ëåçâèé
//Танец лезвий
private static function priem48($i)
{
if (rand(0, 100) < 70) {
@@ -220,7 +220,7 @@ class BotPriemLogic
}
}
//Äèêàÿ óäà÷à
//Дикая удача
private static function priem9($i)
{
if (rand(0, 100) < 30) {
@@ -228,7 +228,7 @@ class BotPriemLogic
}
}
//Ñëåïàÿ óäà÷à
//Слепая удача
private static function priem47($i)
{
if (rand(0, 100) < 50) {
@@ -236,7 +236,7 @@ class BotPriemLogic
}
}
//Ïðåäâèäåíüå
//Предвиденье
private static function priem10($i)
{
if (rand(0, 100) < 30) {
@@ -244,7 +244,7 @@ class BotPriemLogic
}
}
//Âòîðîå äûõàíèå
//Второе дыхание
private static function priem49($i)
{
if (rand(0, 100) < 80 && self::hp() <= 60) {
@@ -252,7 +252,7 @@ class BotPriemLogic
}
}
//Ðûâîê
//Рывок
private static function priem223($i)
{
if (self::hp() <= 50 && rand(0, 100) < 50) {
@@ -260,7 +260,7 @@ class BotPriemLogic
}
}
//Óäà÷íûé óäàð
//Удачный удар
private static function priem11($i)
{
if (rand(0, 100) < 30) {
@@ -268,7 +268,7 @@ class BotPriemLogic
}
}
//Ñòîéêîñòü
//Стойкость
private static function priem13($i)
{
if (rand(0, 100) < 50) {
@@ -276,7 +276,7 @@ class BotPriemLogic
}
}
//ßðîñòü
//Ярость
private static function priem14($i)
{
if (rand(0, 100) < 50) {
@@ -284,7 +284,7 @@ class BotPriemLogic
}
}
//Ñèëüíûé óäàð
//Сильный удар
private static function priem4($i)
{
if (rand(0, 100) < 60) {
@@ -292,7 +292,7 @@ class BotPriemLogic
}
}
//Óòåðåòü ïîò
//Утереть пот
private static function priem5($i)
{
if (self::hp() <= 95) {
@@ -301,7 +301,7 @@ class BotPriemLogic
}
//Àãðåññèâíàÿ çàùèòà
//Агрессивная защита
private static function priem211($i)
{
if (rand(0, 100) < 80) {
@@ -310,7 +310,7 @@ class BotPriemLogic
}
//Ïîëíàÿ çàùèòà
//Полная защита
private static function priem45($i)
{
if (rand(0, 100) < 50) {
@@ -319,7 +319,7 @@ class BotPriemLogic
}
//Àêòèâíàÿ çàùèòà
//Активная защита
private static function priem7($i)
{
if (rand(0, 100) < 30) {
@@ -333,7 +333,7 @@ class BotPriemLogic
return round((BotLogic::$st['hpNow'] / BotLogic::$st['hpAll'] * 100), 2);
}
//Òåñò íà âîçìîæíîñòü èñïîëüçîâàíèÿ
//Тест на возможность использования
private static function testpriem($pl)
{
global $u;
@@ -382,14 +382,14 @@ class BotPriemLogic
}
if ($pl['trUser'] == 1) {
//òðåáóåò ÷òîáû ïîëüçîâàòåëü ñ êåì-òî ðàçìåíèâàëñÿ (ïðè îæèäàíèè ïðèåì ãàñíèò)
//требует чтобы пользователь с кем-то разменивался (при ожидании прием гаснит)
$ga = mysql_fetch_array(mysql_query('SELECT `id` FROM `battle_act` WHERE `battle` = "' . BotLogic::$bot['battle'] . '" AND `uid1` = "' . BotLogic::$bot['id'] . '" AND `uid2` = "' . BotLogic::$bot['enemy'] . '" LIMIT 1'));
if (isset($ga['id'])) {
$notr++;
}
}
//Åñëè ïðèåì óæå èñïîëüçîâàëè
//Если прием уже использовали
if (BotLogic::$st['prsu'][$pl['id']] > 0) {
$notr++;
}
-63
View File
@@ -1,63 +0,0 @@
<?php
/** Ïîëó÷àåì íà âõîä ñòðîêó, à íà âûõîä ðåçóëüòàò ìàòåìàòè÷åñêîé îïåðàöèè â ñòðîêå. */
class CalculateFromString
{
const PATTERN = '/(?:\-?\d+(?:\.?\d+)?[\+\-\*\/])+\-?\d+(?:\.?\d+)?/';
const PARENTHESIS_DEPTH = 10;
public function calculate($input){
if(strpos($input, '+') != null || strpos($input, '-') != null || strpos($input, '/') != null || strpos($input, '*') != null){
// Remove white spaces and invalid math chars
$input = str_replace(',', '.', $input);
$input = str_replace(' ', '', $input);
$input = preg_replace('[^0-9\.\+\-\*\/\(\)]', '', $input);
// Calculate each of the parenthesis from the top
$i = 0;
while(strpos($input, '(') || strpos($input, ')')){
$input = preg_replace_callback('/\(([^\(\)]+)\)/', 'self::callback', $input);
$i++;
if($i > self::PARENTHESIS_DEPTH){
break;
}
}
// Calculate the result
if(preg_match(self::PATTERN, $input, $match)){
return $this->compute($match[0]);
}
// To handle the special case of expressions surrounded by global parenthesis like "(1+1)"
if(is_numeric($input)){
return $input;
}
return 0;
}
return $input;
}
private function compute($input){
$compute = create_function('', 'return '.$input.';');
return 0 + $compute();
}
private function callback($input){
if(is_numeric($input[1])){
return $input[1];
}
elseif(preg_match(self::PATTERN, $input[1], $match)){
return $this->compute($match[0]);
}
return 0;
}
}
$Cal = new CalculateFromString();
$xyz='(100 * 25000) + (250 * 25000) + ((500/100) * 25000)';
$result = $Cal->calculate($xyz);
echo $result;
File diff suppressed because one or more lines are too long
+575
View File
@@ -0,0 +1,575 @@
<?php
class ComissionShop
{
public function commisionShop($sid, $preview = "full")
{
global $c, $code, $sid;
switch ((int)$_GET['otdel']) {
case 1:
$typeOtdel = 18;
break;
case 2:
$typeOtdel = 19;
break;
case 3:
$typeOtdel = 20;
break;
case 4:
$typeOtdel = 21;
break;
case 5:
$typeOtdel = 22;
break;
case 6:
$typeOtdel = 15;
break;
case 7:
$typeOtdel = 12;
break;
case 8:
$typeOtdel = 4;
break;
case 9:
$typeOtdel = 5;
break;
case 10:
$typeOtdel = 6;
break;
case 11:
$typeOtdel = 1;
break;
case 12:
$typeOtdel = 3;
break;
case 13:
$typeOtdel = 8;
break;
case 14:
$typeOtdel = 14;
break;
case 15:
$typeOtdel = 13;
break;
case 16:
$typeOtdel = 9;
break;
case 17:
$typeOtdel = 10;
break;
case 18:
$typeOtdel = 11;
break;
case 19:
$typeOtdel = 29;
break;
case 20:
$typeOtdel = 30;
break;
case 1050:
$typeOtdel = 1050;
break;
default :
$typeOtdel = 18;
}
if ($typeOtdel != 1050) {
if ($preview == "full") {
$cl = mysql_query(
'SELECT `items_users`.`id`,`items_users`.`item_id`,`items_users`.`1price`,`items_users`.`2price`,`items_users`.`uid`,`items_users`.`use_text`,`items_users`.`data`,`items_users`.`inOdet`,`items_users`.`inShop`,`items_users`.`delete`,`items_users`.`iznosNOW`,`items_users`.`iznosMAX`,`items_users`.`gift`,`items_users`.`gtxt1`,`items_users`.`gtxt2`,`items_users`.`kolvo`,`items_users`.`geniration`,`items_users`.`magic_inc`,`items_users`.`maidin`,`items_users`.`lastUPD`,`items_users`.`timeOver`,`items_users`.`overType`,`items_users`.`secret_id`,`items_users`.`time_create`,`items_users`.`inGroup`,`items_users`.`dn_delete`,`items_users`.`inTransfer`,`items_users`.`post_delivery`,`items_users`.`lbtl_`,`items_users`.`bexp`,`items_users`.`so`,`items_users`.`blvl`,`items_main`.`id`,`items_main`.`name`,`items_main`.`img`,`items_main`.`type`,`items_main`.`inslot`,`items_main`.`2h`,`items_main`.`2too`,`items_main`.`iznosMAXi`,`items_main`.`inRazdel`,`items_main`.`price1`,`items_main`.`price2`,`items_main`.`magic_chance`,`items_main`.`info`,`items_main`.`massa`,`items_main`.`level`,`items_main`.`magic_inci`,`items_main`.`overTypei`,`items_main`.`group`,`items_main`.`group_max`,`items_main`.`geni`,`items_main`.`ts`,`items_main`.`srok`,`items_main`.`class`,`items_main`.`class_point`,`items_main`.`anti_class`,`items_main`.`anti_class_point`,`items_main`.`max_text`,`items_main`.`useInBattle`,`items_main`.`lbtl`,`items_main`.`lvl_itm`,`items_main`.`lvl_exp`,`items_main`.`lvl_aexp`, count(`items_users`.`id`) as inGroupCount
FROM `items_users` LEFT JOIN `items_main` ON (`items_main`.`id` = `items_users`.`item_id`)
WHERE (( `items_users`.time_create + `items_main`.srok) > unix_timestamp() OR `items_main`.srok = "0") AND `items_users`.`delete`="0" AND `items_users`.`inOdet`="0" AND `items_users`.`inShop`="30" and `items_main`.`type` = "' . mysql_real_escape_string(
$typeOtdel
) . '" and `items_users`.`item_id` = "' . (int)$_GET['itemid'] . '" GROUP BY `items_users`.`inGroup`, `items_users`.`uid`,`items_users`.`1price` HAVING `items_users`.inGroup > 0
UNION ALL SELECT `items_users`.`id`,`items_users`.`item_id`,`items_users`.`1price`,`items_users`.`2price`,`items_users`.`uid`,`items_users`.`use_text`,`items_users`.`data`,`items_users`.`inOdet`,`items_users`.`inShop`,`items_users`.`delete`,`items_users`.`iznosNOW`,`items_users`.`iznosMAX`,`items_users`.`gift`,`items_users`.`gtxt1`,`items_users`.`gtxt2`,`items_users`.`kolvo`,`items_users`.`geniration`,`items_users`.`magic_inc`,`items_users`.`maidin`,`items_users`.`lastUPD`,`items_users`.`timeOver`,`items_users`.`overType`,`items_users`.`secret_id`,`items_users`.`time_create`,`items_users`.`inGroup`,`items_users`.`dn_delete`,`items_users`.`inTransfer`,`items_users`.`post_delivery`,`items_users`.`lbtl_`,`items_users`.`bexp`,`items_users`.`so`,`items_users`.`blvl`,`items_main`.`id`,`items_main`.`name`,`items_main`.`img`,`items_main`.`type`,`items_main`.`inslot`,`items_main`.`2h`,`items_main`.`2too`,`items_main`.`iznosMAXi`,`items_main`.`inRazdel`,`items_main`.`price1`,`items_main`.`price2`,`items_main`.`magic_chance`,`items_main`.`info`,`items_main`.`massa`,`items_main`.`level`,`items_main`.`magic_inci`,`items_main`.`overTypei`,`items_main`.`group`,`items_main`.`group_max`,`items_main`.`geni`,`items_main`.`ts`,`items_main`.`srok`,`items_main`.`class`,`items_main`.`class_point`,`items_main`.`anti_class`,`items_main`.`anti_class_point`,`items_main`.`max_text`,`items_main`.`useInBattle`,`items_main`.`lbtl`,`items_main`.`lvl_itm`,`items_main`.`lvl_exp`,`items_main`.`lvl_aexp`, count(`items_users`.`id`) as inGroupCount
FROM `items_users` LEFT JOIN `items_main` ON (`items_main`.`id` = `items_users`.`item_id`)
WHERE (( `items_users`.time_create + `items_main`.srok) > unix_timestamp() OR `items_main`.srok = "0") AND `items_users`.`delete`="0" AND `items_users`.`inOdet`="0" AND `items_users`.`inShop`="30" and `items_main`.`type` = "' . mysql_real_escape_string(
$typeOtdel
) . '" and `items_users`.`item_id` = "' . (int)$_GET['itemid'] . '" GROUP BY `items_users`.`uid`, `items_users`.`1price` HAVING `items_users`.inGroup = 0
ORDER BY `1price`ASC , inGroupCount DESC'
);
} else {
$cl = mysql_query(
'SELECT `items_users`.`id`,`items_users`.`item_id`,`items_users`.`1price`,`items_users`.`2price`,`items_users`.`uid`,`items_users`.`use_text`,`items_users`.`data`,`items_users`.`inOdet`,`items_users`.`inShop`,`items_users`.`delete`,`items_users`.`iznosNOW`,`items_users`.`iznosMAX`,`items_users`.`gift`,`items_users`.`gtxt1`,`items_users`.`gtxt2`,`items_users`.`kolvo`,`items_users`.`geniration`,`items_users`.`magic_inc`,`items_users`.`maidin`,`items_users`.`lastUPD`,`items_users`.`timeOver`,`items_users`.`overType`,`items_users`.`secret_id`,`items_users`.`time_create`,`items_users`.`inGroup`,`items_users`.`dn_delete`,`items_users`.`inTransfer`,`items_users`.`post_delivery`,`items_users`.`lbtl_`,`items_users`.`bexp`,`items_users`.`so`,`items_users`.`blvl`,`items_main`.`id`,`items_main`.`name`,`items_main`.`img`,`items_main`.`type`,`items_main`.`inslot`,`items_main`.`2h`,`items_main`.`2too`,`items_main`.`iznosMAXi`,`items_main`.`inRazdel`,`items_main`.`price1`,`items_main`.`price2`,`items_main`.`magic_chance`,`items_main`.`info`,`items_main`.`massa`,`items_main`.`level`,`items_main`.`magic_inci`,`items_main`.`overTypei`,`items_main`.`group`,`items_main`.`group_max`,`items_main`.`geni`,`items_main`.`ts`,`items_main`.`srok`,`items_main`.`class`,`items_main`.`class_point`,`items_main`.`anti_class`,`items_main`.`anti_class_point`,`items_main`.`max_text`,`items_main`.`useInBattle`,`items_main`.`lbtl`,`items_main`.`lvl_itm`,`items_main`.`lvl_exp`,`items_main`.`lvl_aexp` FROM `items_users` LEFT JOIN `items_main` ON (`items_main`.`id` = `items_users`.`item_id`) WHERE (( `items_users`.time_create + `items_main`.srok) > unix_timestamp() OR `items_main`.srok = "0") AND `items_users`.`delete`="0" AND `items_users`.`inOdet`="0" AND `items_users`.`inShop`="30" and `items_main`.`type` = "' . mysql_real_escape_string(
$typeOtdel
) . '" GROUP BY `items_users`.`item_id` ORDER BY `items_main`.`id` DESC'
);
}
} else {
if ($preview == "full") {
$cl = mysql_query(
'SELECT
`items_users`.`id` as id, `items_users`.`id` AS `idu`,`items_users`.`item_id` as item_id,`items_users`.`1price`,`items_users`.`2price`,`items_users`.`uid`,`items_users`.`use_text`,
`items_users`.`data`,`items_users`.`inOdet`,`items_users`.`inShop`,`items_users`.`delete`,`items_users`.`iznosNOW`,`items_users`.`iznosMAX`,
`items_users`.`gift`,`items_users`.`gtxt1`,`items_users`.`gtxt2`,`items_users`.`kolvo`,`items_users`.`geniration`,`items_users`.`magic_inc`,`items_users`.`maidin`,
`items_users`.`lastUPD`,`items_users`.`timeOver`,`items_users`.`overType`,`items_users`.`secret_id`,`items_users`.`time_create`,`items_users`.`inGroup`,`items_users`.`dn_delete`,
`items_users`.`inTransfer`,`items_users`.`post_delivery`,`items_users`.`lbtl_`,`items_users`.`bexp`,`items_users`.`so`,`items_users`.`blvl`,`items_main`.`id` as item_id,`items_main`.`name`,
`items_main`.`img`,`items_main`.`type`,`items_main`.`inslot`,`items_main`.`2h`,`items_main`.`2too`,`items_main`.`iznosMAXi`,`items_main`.`inRazdel`,`items_main`.`price1`,
`items_main`.`price2`,`items_main`.`magic_chance`,`items_main`.`info`,`items_main`.`massa`,`items_main`.`level`,`items_main`.`magic_inci`,`items_main`.`overTypei`,
`items_main`.`group`,`items_main`.`group_max`,`items_main`.`geni`,`items_main`.`ts`,`items_main`.`srok`,`items_main`.`class`,`items_main`.`class_point`,`items_main`.`anti_class`,
`items_main`.`anti_class_point`,`items_main`.`max_text`,`items_main`.`useInBattle`,`items_main`.`lbtl`,`items_main`.`lvl_itm`,`items_main`.`lvl_exp`,
`items_main`.`lvl_aexp` , count(`items_users`.`id`) as inGroupCount
FROM `items_users` LEFT JOIN `items_main` ON (`items_main`.`id` = `items_users`.`item_id`)
WHERE (( `items_users`.time_create + `items_main`.srok) > unix_timestamp() OR `items_main`.srok = "0") AND `items_users`.`delete`="0" AND `items_users`.`item_id` = "' . (int)$_GET['itemid'] . '"
AND `items_users`.`inOdet`="0" AND `items_users`.`inShop`="30" and `items_main`.`type` != "18" AND `items_main`.`type` != "19" AND `items_main`.`type` != "20" AND `items_main`.`type` != "21" AND `items_main`.`type` != "22" AND `items_main`.`type` != "15" AND `items_main`.`type` != "12" AND `items_main`.`type` != "4" AND `items_main`.`type` != "5" AND `items_main`.`type` != "6" AND `items_main`.`type` != "1" AND `items_main`.`type` != "3" AND `items_main`.`type` != "8" AND `items_main`.`type` != "14" AND `items_main`.`type` != "13" AND `items_main`.`type` != "9" AND `items_main`.`type` != "10" AND `items_main`.`type` != "11" AND `items_main`.`type` != "29" AND `items_main`.`type` != "30"
GROUP BY `items_users`.`inGroup`, `items_users`.`uid`,`items_users`.`1price` HAVING `items_users`.inGroup > 0
UNION ALL
SELECT `items_users`.`id` as id, `items_users`.`id` AS `idu`,`items_users`.`item_id` as item_id,`items_users`.`1price`,`items_users`.`2price`,`items_users`.`uid`,`items_users`.`use_text`,
`items_users`.`data`,`items_users`.`inOdet`,`items_users`.`inShop`,`items_users`.`delete`,`items_users`.`iznosNOW`,`items_users`.`iznosMAX`,
`items_users`.`gift`,`items_users`.`gtxt1`,`items_users`.`gtxt2`,`items_users`.`kolvo`,`items_users`.`geniration`,`items_users`.`magic_inc`,`items_users`.`maidin`,
`items_users`.`lastUPD`,`items_users`.`timeOver`,`items_users`.`overType`,`items_users`.`secret_id`,`items_users`.`time_create`,`items_users`.`inGroup`,`items_users`.`dn_delete`,
`items_users`.`inTransfer`,`items_users`.`post_delivery`,`items_users`.`lbtl_`,`items_users`.`bexp`,`items_users`.`so`,`items_users`.`blvl`,`items_main`.`id` as item_id,`items_main`.`name`,
`items_main`.`img`,`items_main`.`type`,`items_main`.`inslot`,`items_main`.`2h`,`items_main`.`2too`,`items_main`.`iznosMAXi`,`items_main`.`inRazdel`,`items_main`.`price1`,
`items_main`.`price2`,`items_main`.`magic_chance`,`items_main`.`info`,`items_main`.`massa`,`items_main`.`level`,`items_main`.`magic_inci`,`items_main`.`overTypei`,
`items_main`.`group`,`items_main`.`group_max`,`items_main`.`geni`,`items_main`.`ts`,`items_main`.`srok`,`items_main`.`class`,`items_main`.`class_point`,`items_main`.`anti_class`,
`items_main`.`anti_class_point`,`items_main`.`max_text`,`items_main`.`useInBattle`,`items_main`.`lbtl`,`items_main`.`lvl_itm`,`items_main`.`lvl_exp`,
`items_main`.`lvl_aexp`, count(`items_users`.`id`) as inGroupCount
FROM `items_users` LEFT JOIN `items_main` ON (`items_main`.`id` = `items_users`.`item_id`)
WHERE (( `items_users`.time_create + `items_main`.srok) > unix_timestamp() OR `items_main`.srok = "0") AND `items_users`.`delete`="0" AND `items_users`.`item_id` = "' . (int)$_GET['itemid'] . '"
AND `items_users`.`inOdet`="0" AND `items_users`.`inShop`="30" and `items_main`.`type` != "18" AND `items_main`.`type` != "19" AND `items_main`.`type` != "20" AND `items_main`.`type` != "21" AND `items_main`.`type` != "22" AND `items_main`.`type` != "15" AND `items_main`.`type` != "12" AND `items_main`.`type` != "4" AND `items_main`.`type` != "5" AND `items_main`.`type` != "6" AND `items_main`.`type` != "1" AND `items_main`.`type` != "3" AND `items_main`.`type` != "8" AND `items_main`.`type` != "14" AND `items_main`.`type` != "13" AND `items_main`.`type` != "9" AND `items_main`.`type` != "10" AND `items_main`.`type` != "11" AND `items_main`.`type` != "29" AND `items_main`.`type` != "30"
GROUP BY `items_users`.`uid`,`items_users`.`1price` HAVING `items_users`.inGroup = 0
ORDER BY `1price`ASC , inGroupCount DESC'
);
} else {
$cl = mysql_query(
'SELECT `items_users`.`id`, `items_users`.`id` AS `idu`,`items_users`.`item_id`,`items_users`.`1price`,`items_users`.`2price`,`items_users`.`uid`,`items_users`.`use_text`,`items_users`.`data`,`items_users`.`inOdet`,`items_users`.`inShop`,`items_users`.`delete`,`items_users`.`iznosNOW`,`items_users`.`iznosMAX`,`items_users`.`gift`,`items_users`.`gtxt1`,`items_users`.`gtxt2`,`items_users`.`kolvo`,`items_users`.`geniration`,`items_users`.`magic_inc`,`items_users`.`maidin`,`items_users`.`lastUPD`,`items_users`.`timeOver`,`items_users`.`overType`,`items_users`.`secret_id`,`items_users`.`time_create`,`items_users`.`inGroup`,`items_users`.`dn_delete`,`items_users`.`inTransfer`,`items_users`.`post_delivery`,`items_users`.`lbtl_`,`items_users`.`bexp`,`items_users`.`so`,`items_users`.`blvl`,`items_main`.`id`,`items_main`.`name`,`items_main`.`img`,`items_main`.`type`,`items_main`.`inslot`,`items_main`.`2h`,`items_main`.`2too`,`items_main`.`iznosMAXi`,`items_main`.`inRazdel`,`items_main`.`price1`,`items_main`.`price2`,`items_main`.`magic_chance`,`items_main`.`info`,`items_main`.`massa`,`items_main`.`level`,`items_main`.`magic_inci`,`items_main`.`overTypei`,`items_main`.`group`,`items_main`.`group_max`,`items_main`.`geni`,`items_main`.`ts`,`items_main`.`srok`,`items_main`.`class`,`items_main`.`class_point`,`items_main`.`anti_class`,`items_main`.`anti_class_point`,`items_main`.`max_text`,`items_main`.`useInBattle`,`items_main`.`lbtl`,`items_main`.`lvl_itm`,`items_main`.`lvl_exp`,`items_main`.`lvl_aexp` FROM `items_users` LEFT JOIN `items_main` ON (`items_main`.`id` = `items_users`.`item_id`) WHERE (( `items_users`.time_create + `items_main`.srok) > unix_timestamp() OR `items_main`.srok = "0") AND `items_users`.`delete`="0" AND `items_users`.`inOdet`="0" AND `items_users`.`inShop`="30" and `items_main`.`type` != "18" AND `items_main`.`type` != "19" AND `items_main`.`type` != "20" AND `items_main`.`type` != "21" AND `items_main`.`type` != "22" AND `items_main`.`type` != "15" AND `items_main`.`type` != "12" AND `items_main`.`type` != "4" AND `items_main`.`type` != "5" AND `items_main`.`type` != "6" AND `items_main`.`type` != "1" AND `items_main`.`type` != "3" AND `items_main`.`type` != "8" AND `items_main`.`type` != "14" AND `items_main`.`type` != "13" AND `items_main`.`type` != "9" AND `items_main`.`type` != "10" AND `items_main`.`type` != "11" AND `items_main`.`type` != "29" AND `items_main`.`type` != "30" GROUP BY `items_users`.`item_id` ORDER BY `items_main`.`id` DESC'
);
}
}
$cr = 'c8c8c8';
$i = 0;
$steckCikl = 1;
while ($pl = mysql_fetch_array($cl)) {
// количетсво одинаковых предметов в комке
if ($preview == "preview") {
$steck = ['--', '--', '--', '--'];
}
if ($cr == 'd4d4d4') {
$cr = 'c8c8c8';
} else {
$cr = 'd4d4d4';
}
if ($preview == "preview" && ($steck[0] > 1 && $steck[0] > $steckCikl)) {
++$steckCikl;
} else {
$steckCikl = 1;
$d = mysql_fetch_array(
mysql_query(
'SELECT `id`,`items_id`,`data` FROM `items_main_data` WHERE `items_id` = "' . $pl['item_id'] . '" LIMIT 1'
)
);
if ($steck[0] > 1 && $preview == "preview") {
$po = $this->lookStats($d['data']);
} else {
$po = $this->lookStats($pl['data']);
}
if (($pl['type'] >= 18 && $pl['type'] <= 24) || $pl['type'] == 26 || $pl['type'] == 27) {
//Зоны блока +
if ($pl['inOdet'] != 14) {
$po['zonb']++;
}
}
$is2 = '';
$is1 = '<img src="https://img.new-combats.com/i/items/' . $pl['img'] . '"><br>';
if ($preview == "full") {
$is1 .= '<a href="?otdel=' . ((int)$_GET['otdel']) . '&toRent=3&itemid=' . (int)$_GET['itemid'] . '&buy=' . $pl[0] . '&sd4=' . $this->info['nextAct'] . '&rnd=' . $code . ' " >купить</a> ';
} elseif ($preview == "preview") {
$is1 .= '<a href="?otdel=' . ((int)$_GET['otdel']) . '&toRent=3&itemid=' . $pl['item_id'] . ' " >Просмотреть</a> ';
}
//название
$col = $this->itemsX($pl[0]);
if ($col > 1 && $pl['inGroup'] != 0 && $pl['inGroupCount'] > 1) {
$pl['kolvo'] = $col;
$pl['name'] .= ' (x' . $col . ')';
}
$is2 .= '<a href="https://new-combats.com/item/' . $pl['item_id'] . '" target="_blank">' . $pl['name'] . '</a> &nbsp; &nbsp;';
if ($pl['massa'] > 0 && $preview == "full") {
$is2 .= '(Масса: ' . round($pl['massa'], 2) . ')';
if ($pl['gift'] != '') {
$ttl = '';
if ($pl['gift'] == 1) {
$ttl = 'Вы не можете передать этот предмет кому-либо';
} else {
$ttl = 'Этот предмет подарил ' . $pl['gift'] . '. Вы не сможете передать этот предмет кому-либо еще';
}
$is2 .= ' <img title="' . $ttl . '" src="https://img.new-combats.com/i/podarok.gif">';
}
if (isset($po['art'])) {
$is2 .= ' <img title="Артефакт" src="https://img.new-combats.com/i/artefact.gif">';
}
if (isset($po['sudba'])) {
if ($po['sudba'] == '0') {
$is2 .= ' <img title="Этот предмет будет связан общей судьбой с первым, кто наденет его. Никто другой не сможет его использовать." src="https://img.new-combats.com/i/destiny0.gif">';
} elseif ($po['sudba'] == '1') {
$is2 .= ' <img title="Этот предмет будет связан общей судьбой с первым, кто возьмет предмет. Никто другой не сможет его использовать." src="https://img.new-combats.com/i/destiny0.gif">';
} else {
$is2 .= ' <img title="Этот предмет связан общей судьбой с ' . $po['sudba'] . '. Никто другой не сможет его использовать." src="https://img.new-combats.com/i/desteny.gif">';
}
}
}
//цена
$is2 .= '<br><strong>Цена: ';
if ($steck[0] > 1 && $preview == "preview") {
$is2 .= $steck[3] . '-' . $steck[4] . ' кр.</strong> ';
} else {
$is2 .= $pl['1price'] . ' кр.</strong> ';
}
if ($pl['pricerep'] > 0) {
$is2 .= ' <small><strong>(' . round($pl['pricerep'], 2) . ' Воинственности)</strong></small>';
}
//долговечность
if ($pl['iznosMAX'] > 0) {
$izcol = '';
if (floor($pl['iznosNOW']) >= (floor($pl['iznosMAX']) - ceil($pl['iznosMAX']) / 100 * 20)) {
$izcol = 'brown';
}
}
if ($preview == "preview") {
$is2 .= '<br>Долговечность: <font color="' . $izcol . '">' . floor($steck[1]) . '/' . ceil(
$steck[2]
) . '</font>';
} else {
if ($pl['iznosMAXi'] == 999999999) {
$is2 .= '<br>Долговечность: <font color="brown">неразрушимо</font>';
} else {
$is2 .= '<br>Долговечность: <font color="' . $izcol . '">' . floor(
$pl['iznosNOW']
) . '/' . ceil($pl['iznosMAX']) . '</font>';
}
}
//Срок годности предмета
if ($po['srok'] > 0) {
$pl['srok'] = $po['srok'];
}
if ($pl['srok'] > 0 and $preview != "preview") {
if ($pl['time_create'] + $pl['srok'] < time()) {
$is2 .= '<br>Срок годности: ' . $this->timeOut($pl['srok']) . ' (испорчен)';
} else {
$is2 .= '<br>Срок годности: ' . $this->timeOut($pl['srok']) . ' (до ' . date(
'd.m.Y H:i', $pl['time_create'] + $pl['srok']
) . ')';
}
} elseif ($pl['srok'] > 0) {
$is2 .= '<br>Срок годности: ' . $this->timeOut($pl['srok']);
}
if ($pl['magic_chance'] > 0) {
$is2 .= '<br>Вероятность срабатывания: ' . min([$pl['magic_chance'], 100]) . '%';
}
//Продолжительность действия магии:
if ((int)$pl['magic_inci'] > 0) {
$efi = mysql_fetch_array(
mysql_query(
'SELECT `id2`,`mname`,`type1`,`img`,`mdata`,`actionTime`,`type2`,`type3`,`onlyOne`,`oneType`,`noAce`,`see`,`info`,`overch`,`bp`,`noch` FROM `eff_main` WHERE `id2` = "' . ((int)$pl['magic_inci']) . '" LIMIT 1'
)
);
if (isset($efi['id2']) && $efi['actionTime'] > 0) {
$is2 .= '<br>Продолжительность действия: ' . $this->timeOut($efi['actionTime']);
}
}
if ($preview == "full" || $preview == "preview") {
//<strong>Требуется минимальное:</strong>
$tr = '';
$t = $this->items['tr'];
$x = 0;
while ($x < count($t)) {
$n = $t[$x];
if (isset($po['tr_' . $n]) && $po['tr_' . $n] != 0) {
if ($po['tr_' . $n] > $this->stats[$n]) {
if ($n == 'rep') {
$temp = explode('::', $po['tr_' . $n]);
if ($this->rep['rep' . $temp[1]] < $temp[0]) {
$tr .= '<font color="red">';
$notr++;
}
unset($temp);
} elseif ($n != 'align' || floor($this->info['align']) != $po['tr_' . $n]) {
$tr .= '<font color="red">';
$notr++;
}
}
$tr .= '<br>• ';
if ($n == 'rep') {
$temp = explode('::', $po['tr_' . $n]);
$tr .= $this->is[$n] . ' ' . ucfirst(
str_replace('city', ' city', $temp[1])
) . ': ' . $temp[0];
unset($temp);
} elseif ($n != 'align') {
if ($n == 'sex') {
if ($po['tr_' . $n] == 1) {
$tr .= $this->is[$n] . ': Женский';
} else {
$tr .= $this->is[$n] . ': Мужской';
}
} else {
$tr .= $this->is[$n] . ': ' . $po['tr_' . $n];
}
} else {
$tr .= $this->is[$n] . ': ' . $this->align_nm[$po['tr_' . $n]];
}
if ($po['tr_' . $n] > $this->stats[$n]) {
if ($n != 'align' || floor($this->info['align']) != $po['tr_' . $n]) {
$tr .= '</font>';
}
}
}
$x++;
}
if ($tr != '') {
$is2 .= '<br><strong>Требуется минимальное:</strong>' . $tr;
}
//<strong>Действует на:</strong>
$tr = '';
$t = $this->items['add'];
$x = 0;
while ($x < count($t)) {
$n = $t[$x];
if (isset($po['add_' . $n], $this->is[$n])) {
$z = '+';
if ($po['add_' . $n] < 0) {
$z = '';
}
$tr .= '<br>• ' . $this->is[$n] . ': ' . $z . '' . $po['add_' . $n];
}
$x++;
}
//действует на (броня)
$i = 1;
$bn = [1 => 'головы', 2 => 'корпуса', 3 => 'пояса', 4 => 'ног'];
while ($i <= 4) {
if (isset($po['add_mab' . $i])) {
if ($po['add_mab' . $i] == $po['add_mib' . $i] && $pl['geniration'] == 1) {
$z = '+';
if ($po['add_mab' . $i] < 0) {
$z = '';
}
$tr .= '<br>• Броня ' . $bn[$i] . ': ' . $z . '' . $po['add_mab' . $i];
} else {
$tr .= '<br>• Броня ' . $bn[$i] . ': ' . $po['add_mib' . $i] . '-' . $po['add_mab' . $i] . ' (' . $this->bronFx(
[$po['add_mib' . $i], $po['add_mab' . $i]]
) . ')';
}
}
$i++;
}
if ($tr != '') {
$is2 .= '<br><strong>Действует на:</strong>' . $tr;
}
//<strong>Свойства предмета:</strong>
$tr = '';
$t = $this->items['sv'];
if (isset($po['sv_yron_min'], $po['sv_yron_max'])) {
$tr .= '<br>• Урон: ' . $po['sv_yron_min'] . ' - ' . $po['sv_yron_max'];
}
$x = 0;
while ($x < count($t)) {
$n = $t[$x];
if (isset($po['sv_' . $n])) {
$z = '+';
if ($po['sv_' . $n] < 0) {
$z = '';
}
$tr .= '<br>• ' . $this->is[$n] . ': ' . $z . '' . $po['sv_' . $n];
}
$x++;
}
if ($pl['2too'] == 1) {
$tr .= '<br>• Второе оружие';
}
if ($pl['2h'] == 1) {
$tr .= '<br>• Двуручное оружие';
}
if (isset($po['zonb'])) {
$tr .= '<br>• Зоны блокирования: ';
if ($po['zonb'] > 0) {
$x = 1;
while ($x <= $po['zonb']) {
$tr .= '+';
$x++;
}
} else {
$tr .= '—';
}
}
if ($tr != '') {
$is2 .= '<br><strong>Свойства предмета:</strong>' . $tr;
}
$tr = '';
if (isset($po['imposed']) && $po['imposed'] > 0) {
if ($po['imposed_lvl'] == 0) {
$rnc = 'maroon';
} elseif ($po['imposed_lvl'] == 1) {
$rnc = '#624542';
} elseif ($po['imposed_lvl'] == 2) {
$rnc = '#77090b';
} elseif ($po['imposed_lvl'] == 3) {
$rnc = '#d99800';
} else {
$rnc = '#282828';
}
$po['imposed_name'] = str_replace('Чары ', '', $po['imposed_name']);
$tr .= '<br>&bull; <font color=' . $rnc . '>Наложены заклятия:</font> ' . $po['imposed_name'] . ' ';
unset($rnc);
}
if ($tr != '') {
$is2 .= '<br><strong>Улучшения предмета:</strong>';
$is2 .= $tr;
}
if ($notr == 0) {
$d[0] = 1;
if ($pl['magic_inc'] != '') {
$d[2] = 1;
}
}
if (isset($po['free_stats']) && $po['free_stats'] > 0) {
$is2 .= '<br><strong>Распределение статов:</strong>';
$is2 .= '&bull; Возможных распределений: ' . $po['free_stats'] . '';
}
if (floor($pl['iznosNOW']) >= ceil($pl['iznosMAX'])) {
$d[0] = 0;
$d[2] = 0;
}
if (isset($po['complect']) || isset($po['complect2'])) {
$is2 .= '<br><i>Дополнительная информация:</i>';
}
if (isset($po['complect'])) {
//не отображается
$com1 = ['name' => 'Неизвестный Комплект', 'x' => 0, 'text' => ''];
$spc = mysql_query(
'SELECT `id`,`com`,`name`,`x`,`data` FROM `complects` WHERE `com` = "' . $po['complect'] . '" ORDER BY `x` ASC LIMIT 20'
);
while ($plc = mysql_fetch_array($spc)) {
$com1['name'] = $plc['name'];
$com1['text'] .= '&nbsp; &nbsp; &bull; <font color="green">' . $plc['x'] . '</font>: ';
//действие комплекта
$i1c = 0;
$i2c = 0;
$i1e = $this->lookStats($plc['data']);
while ($i1c < count($this->items['add'])) {
if (isset($i1e[$this->items['add'][$i1c]])) {
$i3c = $i1e[$this->items['add'][$i1c]];
if ($i3c > 0) {
$i3c = '+' . $i3c;
}
if ($i2c > 0) {
$com1['text'] .= '&nbsp; &nbsp; ' . $this->is[$this->items['add'][$i1c]] . ': ' . $i3c;
} else {
$com1['text'] .= $this->is[$this->items['add'][$i1c]] . ': ' . $i3c;
}
$com1['text'] .= '<br>';
$i2c++;
}
$i1c++;
}
unset($i1c, $i2c, $i3c);
$com1['x']++;
}
$is2 .= '<br>&bull; Часть комплекта: <strong>' . $com1['name'] . '</strong><br><small>';
$is2 .= $com1['text'];
$is2 .= '</small>';
}
if (isset($po['complect2'])) {
//не отображается
$com1 = ['name' => 'Неизвестный Комплект', 'x' => 0, 'text' => ''];
$spc = mysql_query(
'SELECT `id`,`com`,`name`,`x`,`data` FROM `complects` WHERE `com` = "' . $po['complect2'] . '" ORDER BY `x` ASC LIMIT 20'
);
while ($plc = mysql_fetch_array($spc)) {
$com1['name'] = $plc['name'];
$com1['text'] .= '&nbsp; &nbsp; &bull; <font color="green">' . $plc['x'] . '</font>: ';
//действие комплекта
$i1c = 0;
$i2c = 0;
$i1e = $this->lookStats($plc['data']);
while ($i1c < count($this->items['add'])) {
if (isset($i1e[$this->items['add'][$i1c]])) {
$i3c = $i1e[$this->items['add'][$i1c]];
if ($i3c > 0) {
$i3c = '+' . $i3c;
}
if ($i2c > 0) {
$com1['text'] .= '&nbsp; &nbsp; ' . $this->is[$this->items['add'][$i1c]] . ': ' . $i3c;
} else {
$com1['text'] .= $this->is[$this->items['add'][$i1c]] . ': ' . $i3c;
}
$com1['text'] .= '<br>';
$i2c++;
}
$i1c++;
}
unset($i1c, $i2c, $i3c);
$com1['x']++;
}
$is2 .= '<br>&bull; Часть комплекта (подгонка): <strong>' . $com1['name'] . '</strong><br><small>';
$is2 .= $com1['text'];
$is2 .= '</small>';
}
$is2 .= '<small style="">';
if (isset($po['gravi'])) {
$is2 .= '<br>На поверхности выгравирована надпись: <strong>' . $po['gravi'] . '</strong>';
}
if ($pl['info'] != '') {
$is2 .= '<div><strong>Рекомендации:</strong></div><div>' . $pl['info'] . '</div>';
}
if ($po['info'] != '') {
$is2 .= '<div>' . $po['info'] . '</div>';
}
if ($pl['max_text'] - $pl['use_text'] > 0) {
$is2 .= '<div>Количество символов: ' . ($pl['max_text'] - $pl['use_text']) . '</div>';
}
if (isset($po['noremont'])) {
$is2 .= '<div style="color:brown;">Предмет не подлежит ремонту</div>';
}
if (isset($po['nosale'])) {
$is2 .= '<div style="color:brown;">Предмет нельзя продать</div>';
}
if (isset($po['nomodif'])) {
$is2 .= '<div style="color:brown;">Предмет нельзя улучшать</div>';
}
if (isset($po['nodelete'])) {
$is2 .= '<div style="color:brown;">Предмет нельзя выбросить</div>';
}
if (isset($po['frompisher']) && $po['frompisher'] > 0) {
$is2 .= '<div style="color:brown;">Предмет из подземелья</div>';
}
if (isset($po['sleep_moroz']) && $po['sleep_moroz'] > 0) {
$is2 .= '<div style="color:brown;">Предмет не портится во время сна</div>';
}
if (isset($po['fromlaba']) && $po['fromlaba'] > 0) {
$is2 .= '<div style="color:brown;">Предмет из лабиринта</div>';
}
if (isset($po['vip_sale']) && $po['vip_sale'] > 0) {
$is2 .= '<div style="color:brown;">Предмет куплен за 10% от стоимости</div>';
}
if ($pl['dn_delete'] > 0) {
$is2 .= '<div style="color:brown;">Предмет будет удален при выходе из подземелья</div>';
}
if ($this->pokol > $pl['geni']) {
$is2 .= '<div style="color:brown">Предмет устарел</div>';
}
if (isset($po['zazuby']) && $po['zazuby'] > 0) {
$is2 .= '<div style="color:brown;">Предмет куплен за зубы</div>';
}
$is2 .= '</small>';
}
if ($preview == "preview") {
$kolvoprint = "<small style=\"float:right; color:grey;\" align=\"right\">Количество: <strong>$steck[0]</strong> шт.</small>";
}
echo '<tr style="background-color:#' . $cr . ';"><td width="100" style="padding:7px;" valign="middle" align="center">' . $is1 . '</td><td style="padding:7px;" valign="top">' . $kolvoprint . $is2 . '</td></tr>';
$i++;
}
}
if ($i == 0) {
echo '<tr style="background-color:#' . $cr . ';"><td style="padding:7px;" align="center" valign="top">Прилавок магазина пуст</td></tr>';
}
}
}
+100
View File
@@ -0,0 +1,100 @@
<?php
namespace Core;
class Config
{
private static self $instance;
private function __construct()
{
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 'Off');
ini_set('date.timezone', 'Europe/Moscow');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
}
public static function get(?string $key = null)
{
$c['ver'] = '1.8.3.7';
/* Конфигурации игры */
$c['name'] = 'Бойцовский Клуб';
$c['title'] = 'Новый «' . $c['name'] . '» - Бесплатная,браузерная онлайн игра'; //Название игры
$c['title2'] = ' - Бесплатная, онлайн игра посвященная сражениям и магии!';
$c['title3'] = $c['name'];
$c['keys'] = $c['name'] . ', combats.com, ' . $c['name'] . ' игра, ' . $c['name'] . ' играть, игра ' . $c['name'] . ', старый ' . $c['name'] . ', ' . $c['name'] . ' онлайн игра, ' . $c['name'] . ' браузерная игра, играть в ' . $c['name'] . ', игра бк, бк игра, старый бк, играть в бк, бк онлайн игра, новый бк, Легендарный ' . $c['name'] . ', легендарный бк, combats, комбатс, combats ru, combats com, OldBK, oldbk ru, oldbk com, олдбк, old bk, олд бк, mycombats, rebk, recombats, oldcombats, obk2'; //Ключевые слова META
$c['desc'] = '«' . $c['name'] . '» – это бесплатная увлекательная браузерная онлайн игра 2004-2009г, в которой сконцентрировано все самое лучшее от современных онлайн игр. В этой браузерной игре заложены самые интересные традиции всем известной онлайн игры под названием «' . $c['name'] . ' 2004-2009», которая, кстати, стала первооткрывателем всех браузерных игр.'; //Описание META
$c['footer'] = $c['name'] . ' © 2013-' . date('Y');
//Сервера
$c['host'] = 'new-combats.com';
$c['forum'] = 'forum.' . $c['host'];
$c['img'] = 'img.' . $c['host'];
$c['thiscity'] = 'capitalcity';
$c['capitalcity'] = $c['host'];
$c['abandonedplain'] = $c['host'];
$c['https'] = 'https://' . $c['host'] . DIRECTORY_SEPARATOR;
$c['exit'] = '<script>top.location.href="' . $c['https'] . '";</script>';
$c['support'] = 'support@' . $c['host'];
//Валюта
$c['curency_name'] = 'RUB';
$c['curency_value'] = 30;
//Бот клон
$c['bot_level'] = 0; // до какого лвл бот (включительно)
$c['propsk_die'] = 0; //Смерть при пропуске ходов, 0 - выкл. , >= 1 - количество пропусков до смерти при нападении
//Скупка
$c['exp'] = 0; //бонус опыта
$c['shop_type1'] = 100; //в гос НЕ ТРОГАТЬ
$c['shop_type2'] = 90; //в березку НЕ ТРОГАТЬ
$c['shop_all'] = 0; //Скупка на все! , 0 - сделать для отключения скупки.
$c['shop_all_type1'] = 100; //Скупка только с госе! , 0 - сделать для отключения скупки.
$c['shop_all_type2'] = 100; //Скупка только с березки! , 0 - сделать для отключения скупки.
//
$c['nosanich'] = true; //Странички Саныча не выпадают - true , выпадают - false
$c['zuby'] = false; //зубы
$c['limitedexp'] = false; //лимит опыта
$c['infinity5level'] = false; //вечные 5 уровни
$c['expstop'] = 2999999; //9; //Опыт на котором останавливаемся 11 149999999
$c['expstopu'] = 2999999; //Опыт на котором останавливаемся
$c['noobgade'] = false; //нуб квест (пещера)
$c['bonusonline'] = true; //бонус за онлайн
$c['level_ransfer'] = 8; //С какого уровня разрешены передачи
$c['znahar'] = true; //бесплатный знахарь
$c['nolevel'] = false; //лимитирование уровней
$c['noitembuy'] = false; //Не требует ресурсы для покупки
$c['effz'] = 0; //Скольким секундам равен заряд
$c['money_haot'] = true; //кр за хаоты
$c['crtoecr'] = 500; //Курс обмена кр на екр (если 0, то выключено)
$c['ecrtocr'] = 200; //Курс обмена екр на кр
$c['bonuslevel'] = true; //Бонус уровня
$c['bonussocial'] = false; //Бонус социальный
$c['w'] = date('w');
$c['m'] = date('m');
$c['counters'] = '';
$c['counters_noFrm'] = '';
$c['securetime'] = 0; //Время последнего возможного взлома персов (подбор пароля по базам данных других игр)
$c['copyright'] = 'Copyright © ' . date('Y') . ' « Новый Бойцовский Клуб »';
$c['db_user'] = 'prod1';
$c['db_name'] = 'game_production';
$c['db_password'] = 'Bz@fGaZjFU2206Ua';
return $c[$key] ?? $c;
}
public static function init(): Config
{
if (!isset(self::$instance)) {
self::$instance = new static();
}
return self::$instance;
}
}
+51
View File
@@ -0,0 +1,51 @@
<?php
namespace Core;
use PDO;
class Database
{
private static self $instance;
protected static PDO $db;
/**
* Singleton.
*/
private function __construct() {
mysql_select_db(Config::get('db_name'), mysql_connect('localhost', Config::get('db_user'), Config::get('db_password')));
mysql_query('SET NAMES utf8mb4');
}
/**
* Для совместимости со старыми функциями mysql_*.
* @return Database
*/
public static function init(): Database
{
if (!isset(self::$instance)) {
self::$instance = new static();
}
return self::$instance;
}
/**
* Новое подключение к БД.
* @return PDO
*/
public static function pdoinit(): PDO
{
return new PDO(
'mysql:host=localhost;dbname=' . Config::get('db_name'),
Config::get('db_user'),
Config::get('db_password'),
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
]
);
}
}
+144
View File
@@ -0,0 +1,144 @@
<?php
namespace Core;
use Exception;
use PDO;
use PDOException;
use PDOStatement;
class Db
{
private static PDO $db;
private static self $instance;
/**
* DB constructor.
* @throws Exception
*/
public function __construct()
{
try {
self::$db = Database::pdoinit();
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
private static function init(): void
{
self::$instance ??= new self();
}
/**
* @param string $stmt
* @return PDOStatement
*/
private static function query(string $stmt): PDOStatement
{
self::init();
return self::$db->query($stmt);
}
/**
* @param string $stmt
* @return PDOStatement
*/
public static function prepare(string $stmt): PDOStatement
{
self::init();
return self::$db->prepare($stmt);
}
/**
* @param string $query
* @return int
*/
static public function exec(string $query): int
{
self::init();
return self::$db->exec($query);
}
/**
* @return string
*/
static public function lastInsertId(): string
{
self::init();
return self::$db->lastInsertId();
}
/**
* @param string $query
* @param array $args
* @return PDOStatement
*/
public static function run(string $query, array $args = []): PDOStatement
{
try {
if (!$args) {
return self::query($query);
}
$stmt = self::prepare($query);
$stmt->execute($args);
return $stmt;
} catch (PDOException $e) {
throw new PDOException($e->getMessage());
}
}
/**
* @param string $query
* @param array $args
* @return mixed
*/
public static function getRow(string $query, array $args = [])
{
return self::run($query, $args)->fetch();
}
/**
* @param string $query
* @param array $args
* @return array
*/
public static function getRows(string $query, array $args = []): array
{
return self::run($query, $args)->fetchAll();
}
/**
* @param string $query
* @param array $args
* @return mixed
*/
public static function getValue(string $query, array $args = [])
{
$result = self::getRow($query, $args);
if (!empty($result)) {
$result = array_shift($result);
}
return $result;
}
/**
* @param string $query
* @param array $args
* @return array
*/
public static function getColumn(string $query, array $args = []): array
{
return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
}
/**
* @param string $query
* @param array $args
*/
public static function sql(string $query, array $args = [])
{
self::run($query, $args);
}
}
+38
View File
@@ -0,0 +1,38 @@
<?php
namespace Core;
use PHPMailer;
class Mail
{
public static function send($to, $message, $subject = 'Бойцовский клуб')
{
require dirname(__DIR__) . '/mail/class.phpmailer.php';
$mail = new PHPMailer;
$mail->IsSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.mail.yahoo.com'; // Specify main and backup server
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'newcombats@yahoo.com'; // SMTP username
$mail->Password = 'uqcdbnsoagxcyysh';
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->Port = 587;
$mail->CharSet = 'UTF-8';
$mail->From = 'newcombats@yahoo.com';
$mail->FromName = 'Бойцовский Клуб';
$mail->AddAddress($to); // Add a recipient
$mail->IsHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = '<div>' . $message . '</div>';
$mail->AltBody = $message;
if (!$mail->Send()) {
return 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo;
}
return 1;
}
}
@@ -0,0 +1,11 @@
<?php
namespace DarksLight2\Helpers;
class Str
{
public static function snakeCase($string): string
{
return strtolower(preg_replace(['/([a-z\d])([A-Z])/', '/([^_])([A-Z][a-z])/'], '$1_$2', $string));
}
}
@@ -0,0 +1,48 @@
<?php
namespace DarksLight2\Training;
use DarksLight2\Helpers\Str;
use User;
abstract class StepFactory
{
abstract public function getTitle(): string;
abstract public function getMessage(): string;
abstract public function getRewards(): array;
public function onLocations(): array
{
return ['all'];
}
public function getShortName(): string
{
return Str::snakeCase(get_class($this));
}
public function getAnswer()
{
return null;
}
public function allowedToMove(): array
{
return [];
}
public function isInfo(): bool
{
return true;
}
public function databaseRecord()
{
return [
'completed' => false,
'progress' => [
'current' => 0,
'need' => 1,
]
];
}
}
@@ -0,0 +1,34 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class ChatFirstQuest extends StepFactory
{
public function getTitle(): string
{
return 'Начало.';
}
public function getMessage(): string
{
return 'Отправьте сообщение в общий чат.';
}
public function getRewards(): array
{
return [];
}
public function getShortName(): string
{
return 'chat_first_quest';
}
public function isInfo(): bool
{
return false;
}
}
@@ -0,0 +1,30 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class ChatFirstStep extends StepFactory
{
public function getTitle(): string
{
return 'Начало.';
}
public function getMessage(): string
{
return 'Помните, оскорблять, унижать, обсуждать политику, подстёгивать других игроков, как в общем чате так и в приватном приведет к временному ограничению возможности отправки сообщений в любой из чатов.';
}
public function getShortName(): string
{
return 'chat_first_step';
}
public function getRewards(): array
{
return [];
}
}
@@ -0,0 +1,35 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class ChatSecondQuest extends StepFactory
{
public function getTitle(): string
{
return 'Начало.';
}
public function getMessage(): string
{
return 'Отправьте адресное сообщение в общий чат, нажав 1 раз по никнейму игрока либо в чате, либо со списка онлайна, который находится справа.';
}
public function getShortName(): string
{
return 'chat_second_quest';
}
public function getRewards(): array
{
return [];
}
public function isInfo(): bool
{
return false;
}
}
@@ -0,0 +1,34 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class ChatThirdQuest extends StepFactory
{
public function getTitle(): string
{
return 'Начало.';
}
public function getMessage(): string
{
return 'Отправьте адресное личное сообщение в чат, нажав 2 раза по никнему игрока либо в чате, либо со списка онлайна, который находится справа.';
}
public function getShortName(): string
{
return 'chat_third_quest';
}
public function getRewards(): array
{
return [];
}
public function isInfo(): bool
{
return false;
}
}
@@ -0,0 +1,35 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserFirstQuest extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'Сколько всего основных игровых Валют? Введите их число...';
}
public function getShortName(): string
{
return 'my_user_first_quest';
}
public function getRewards(): array
{
return [];
}
public function getAnswer(): string
{
return '2';
}
}
@@ -0,0 +1,30 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserFirstStep extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'В нашей игре, ваш персонаж расположен слева от экрана с игровыми локациями, там же, можно увидеть пустые слоты под предметы и параметры персонажа, ваш опыт, деньги, ежедневные задания...';
}
public function getShortName(): string
{
return 'my_user_first_step';
}
public function getRewards(): array
{
return [];
}
}
@@ -0,0 +1,35 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserFourthQuest extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'Войдите во вкладку " Умения ", в правой части экрана, сверху, а далее, перейдите во вкладку " Приёмы ", после чего, выберите нужные Вам приемы, но будьте внимательны, некоторые из приемов могут быть на разные классы, обязательно прочтите их описание или потестируйте в поединках.';
}
public function getShortName(): string
{
return 'my_user_fourth_quest';
}
public function getRewards(): array
{
return [];
}
public function isInfo(): bool
{
return false;
}
}
@@ -0,0 +1,48 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserFourthStep extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return '"Параметры Персонажа"<br>
Все игроки имеют свободные очки распределения параметров, что они дают игрокам конкретные модификаторы в зависимости от того, в какой из параметров распределяются очки распределения.<br>
--- если можно, добавить скрин как выглядит эта кнопка ---
Сила - Увеличивает мощность рубящего урона ( для Силачей )<br>
Ловкость - Увеличивает мощность колющего урона ( для Критоуворотов и Уворотов )<br>
Интуиция - Увеличивает мощность режущего урона ( для Критовиков )<br>
Выносливость - Увеличивает защиту от урона и магии, а так же добавит немного жизней. ( для Танков )<br>
Интелект - Увеличивает мощность магии. ( Для Любого Мага )<br>
Мудрость - Увеличивает колличество маны. ( Для Любого Мага )<br>
<br>
Дополнительно, игроки имеют очки распределения Мастерства Оружия, это позволит воинам увеличить урон, а магам, открыть новые приемы.<br>
Очки распределения Оружий распределяются точно так же, как и очки распределения параметров ( статов ).<br>
<br>
В случае, если вы распределили неверно любые доступные очки распределения, или хотите их изменить, вы можете это сделать, поднявшись на 2 этаж здания " Бойцовский Клуб ".';
}
public function getShortName(): string
{
return 'my_user_fourth_step';
}
public function getRewards(): array
{
return [];
}
public function getAnswer(): string
{
return '';
}
}
@@ -0,0 +1,35 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserSecondQuest extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'Кого убивает игровой класс "Танк"?';
}
public function getShortName(): string
{
return 'my_user_second_quest';
}
public function getRewards(): array
{
return [];
}
public function getAnswer(): string
{
return 'Уворотов и Силачей';
}
}
@@ -0,0 +1,39 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserSecondStep extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'Опыт - Получение опыта происходит после сыгранных поединков, в зависимости от выбитого урона с противников, нажав по своему опыту, откроется таблица опыта, в которой можно посмотреть, когда вы получите дополнительное очко распределение параметров персонажа/оружий, награду за взятие " апа " или " Уровня "<br>
Текущий уровень - Отображает ваш текущий уровень персонажа.<br>
Победы - Отображает сумму всех ваших побед, в любых поединках.<br>
Поражения - Отображает сумму всех ваших поражений, в любых поединках.<br>
Ничьих - Отображает сумму всех поединков, которые завершились в ничью.<br>
Кредиты - Обычная игровая валюта - кредиты ( креды ), которые можно потратить в обычном магазине.<br>
Еврокредиты - Покупная игровая валюта - еврокредиты ( екры ) , которые можно потратить в магазине " Берёзка ". <br>
Воинственность - Дополнительная игровая валюта, потратить её можно в Подпольной Лавке.<br>
Ежедневное задание - Отображает текущее ежедневное задание либо предоставляет возможность его взятия.<br>
Бонус - Позволяет получить немного кредитов или еврокредитов.';
}
public function getShortName(): string
{
return 'my_user_second_step';
}
public function getRewards(): array
{
return [];
}
}
@@ -0,0 +1,40 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserThirdQuest extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'Распределите свободные параметры распределения ( статы ) и параметры оружий ( умения ) в зависимости от выбранного вами при регистрации "Класса" игрока нажав по кнопке " + Способности ", а далее, после распределения параметров " Сохранить ".';
}
public function getShortName(): string
{
return 'my_user_third_quest';
}
public function getRewards(): array
{
return [];
}
public function isInfo(): bool
{
return false;
}
public function allowedToMove(): array
{
return ['cp1'];
}
}
@@ -0,0 +1,45 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class MyUserThirdStep extends StepFactory
{
public function getTitle(): string
{
return 'Персонаж.';
}
public function getMessage(): string
{
return 'В нашей игре, существует 5 Воинских и 4 Магических класса, такие как:<br>
Критовик - Убивает Танков и Магов, основное оружие - Мечи<br>
Уворот - Убивает Критовиков и Силачей, основное оружие - Кинжалы<br>
Танк - Убивает Уворотов и Силачей, основное оружие - Дубина и щит.<br>
Силач - Убивает Критовиков и Магов, основное оружие - Топоры<br>
Критоуворот - Убивает Силачей и с небольшим шансом Критовиков и Уворотов, основное оружие - Кинжалы.<br>
<br>
Маг Огня - Атакующий маг, убивает Уворотов и Танков.<br>
Маг Воздуха - Атакующий маг, убивает Уворотов и Танков.<br>
Маг Земли - Защищающийся маг, слабый урон, хорошая защита.<br>
Маг Воды - Защищающийся маг, слабый урон, хорошая защита.';
}
public function getShortName(): string
{
return 'my_user_third_step';
}
public function getRewards(): array
{
return [];
}
public function allowedToMove(): array
{
return ['cp1'];
}
}
@@ -0,0 +1,18 @@
<?php
namespace DarksLight2\Training;
use Exception;
class TrainingException extends Exception
{
public static function alreadyRegistered(): self
{
return new self("The steps have been registered before");
}
public static function noRenderingFile(): self
{
return new self("Rendering file missing");
}
}
@@ -0,0 +1,196 @@
<?php
namespace DarksLight2\Training;
use Core\Db;
use DarksLight2\Training\Steps\ChatFirstStep;
use DarksLight2\Training\Steps\MyUserFirstQuest;
use DarksLight2\Training\Steps\MyUserFirstStep;
use DarksLight2\Training\Steps\MyUserFourthQuest;
use DarksLight2\Training\Steps\MyUserFourthStep;
use DarksLight2\Training\Steps\MyUserSecondQuest;
use DarksLight2\Training\Steps\MyUserSecondStep;
use DarksLight2\Training\Steps\MyUserThirdQuest;
use DarksLight2\Training\Steps\MyUserThirdStep;
use DarksLight2\Traits\Singleton;
use PassGen;
use PDO;
use stdClass;
use User;
class TrainingManager
{
use Singleton;
private int $user_id;
public string $current_step = '';
private array $registered_steps;
private array $completed_steps;
private array $active_steps;
private $database;
public function __construct(int $user_id, $refresh_token = true)
{
try {
$this->register([
new ChatFirstStep(),
new MyUserFirstStep(),
new MyUserFirstQuest(),
new MyUserSecondStep(),
new MyUserSecondQuest(),
new MyUserThirdStep(),
new MyUserThirdQuest(),
new MyUserFourthStep(),
new MyUserFourthQuest(),
]);
} catch (TrainingException $e) {
}
$this->user_id = $user_id;
if($refresh_token) {
$this->generateToken();
}
$this->database = Db::getRow('SELECT * FROM user_training WHERE user_id = ?', [$user_id]);
$this->createDatabaseRecord();
$this->database['data'] = json_decode($this->database['data'], true);
$this->selectActiveSteps();
}
public function getCurrentStepName(): string
{
if(empty($this->current_step)) {
$this->current_step = array_key_first($this->active_steps) ?? '';
}
return $this->current_step;
}
public function getRegistered(): array
{
return $this->registered_steps;
}
public function getDatabaseData()
{
return $this->database;
}
public function addPoint($short_name, $closure = null)
{
if($short_name === $this->getCurrentStepName()) {
$this->database['data'][$short_name]['progress']['current']++;
if(isset($closure)) {
$closure($this);
}
}
}
public function nextStep()
{
if($this->database['data'][$this->getCurrentStepName()]['progress']['need'] <= $this->database['data'][$this->getCurrentStepName()]['progress']['current']) {
$this->database['data'][$this->getCurrentStepName()]['progress']['current'] = 0;
$this->database['data'][$this->getCurrentStepName()]['completed'] = true;
unset($this->active_steps[$this->getCurrentStepName()]);
$this->current_step = array_key_first($this->active_steps) ?? '';
$this->database['current'] = $this->getCurrentStepName();
}
}
public function previousStep()
{
$this->current_step = end($this->completed_steps) ?? '';
$this->database['current'] = $this->current_step;
$this->database['data'][$this->getCurrentStepName()]['completed'] = false;
}
public function selectActiveSteps()
{
foreach ($this->database['data'] as $step_name => $data) {
if($data['completed'] === false) {
$this->active_steps[$step_name] = $data;
continue;
}
$this->completed_steps[] = $step_name;
}
}
public function store()
{
Db::sql('UPDATE user_training SET data = ?, current = ? WHERE user_id = ?', [json_encode($this->database['data']), $this->database['current'], $this->user_id]);
}
/**
* @param StepFactory[] $steps
*
* @return void
* @throws \DarksLight2\Training\TrainingException
*/
public function register(array $steps)
{
if (!empty($this->steps)) {
throw TrainingException::alreadyRegistered();
}
foreach ($steps as $step) {
if($step instanceof StepFactory) {
$this->registered_steps[$step->getShortName()] = $step;
}
}
}
private function generateToken($length = 16)
{
$token = PassGen::new($length);
Db::run('UPDATE user_training SET api_token = ? WHERE user_id = ?', [
$token,
$this->user_id
]);
}
public function createDatabaseRecord()
{
if(!$this->database) {
$data = [];
foreach ($this->registered_steps as $step) {
$data[$step->getShortName()] = $step->databaseRecord();
}
Db::sql('INSERT INTO user_training (user_id, data, current) VALUES (?, ?, ?)', [
$this->user_id,
json_encode($data, true),
array_key_first($data)
]);
$this->database = Db::getRow('SELECT * FROM user_training WHERE user_id = ?', [$this->user_id]);
}
}
/**
* @throws \DarksLight2\Training\TrainingException
*/
public function render()
{
if(in_array(User::start()->room['file'], $this->registered_steps[$this->getCurrentStepName()]->onLocations()) || in_array('all', $this->registered_steps[$this->getCurrentStepName()]->onLocations())) {
$path = $_SERVER['DOCUMENT_ROOT'] . '/modules_data/steps/step.php';
if (file_exists($path)) {
$short_name = $this->getCurrentStepName();
$answer = $this->registered_steps[$this->getCurrentStepName()]->getAnswer();
require $path;
return;
}
throw TrainingException::noRenderingFile();
}
}
}
@@ -0,0 +1,17 @@
<?php
namespace DarksLight2\Traits;
trait Singleton
{
private static self $instance;
public static function getInstance(...$args): self
{
if(!isset(self::$instance)) {
self::$instance = new self(...$args);
}
return self::$instance;
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+64 -64
View File
@@ -2,13 +2,13 @@
class DungeonEditor
{
public $bs, $info, $see, $error, $gs = 1, $map = [0 => [] //êàðòà
public $bs, $info, $see, $error, $gs = 1, $map = [0 => [] //карта
], $id_dng, $cord = ['x' => 0], $sg = [1 => [1 => 1, 2 => 2, 3 => 3, 4 => 4], 2 => [1 => 2, 2 => 3, 3 => 4, 4 => 1], 3 => [1 => 3, 2 => 4, 3 => 1, 4 => 2], 4 => [1 => 4, 2 => 1, 3 => 2, 4 => 3]];
public function start()
{
global $u, $c, $code, $id;
$this->info = ['id2' => $id, 'id' => 0, 'name' => 'Ðåäàêòèðîâàíèå Ïåùåðû', 'room' => 0, 'time_start' => time(), 'time_start' => 0, 'uid' => 0, 'type' => 0, 'bsid' => 0];
$this->info = ['id2' => $id, 'id' => 0, 'name' => 'Редактирование Пещеры', 'room' => 0, 'time_start' => time(), 'time_start' => 0, 'uid' => 0, 'type' => 0, 'bsid' => 0];
$this->id_dng = $this->info['id2'];
$this->gs = $u->info['psevdo_s'];
@@ -18,24 +18,24 @@ class DungeonEditor
if ($this->info['bsid'] > 0) {
$this->bs = mysql_fetch_array(mysql_query('SELECT * FROM `bs_turnirs` WHERE `city` = "' . $u->info['city'] . '" AND `id` = "' . $this->info['bsid'] . '" AND `time_start` = "' . $this->info['time_start'] . '" LIMIT 1'));
//Åñëè ÁÑ çàêîí÷åíà
//Если БС закончена
if (isset($this->bs['id']) && $this->bs['users'] - $this->bs['users_finish'] < 2) {
$u->bsfinish($this->bs, false, null);
}
}
/* ãåíåðèðóåì âèä ïåðñîíàæà (òîëüêî êàðòà)
$this->gs = 1; //ñìîòðèì ïðÿìî
2; //ñìîòðèì ëåâî
3; //ñìîòðèì âíèç
4; //ñìîòðèì ïðàâî
/* генерируем вид персонажа (только карта)
$this->gs = 1; //смотрим прямо
2; //смотрим лево
3; //смотрим вниз
4; //смотрим право
( ( ( `y` >= '.$u->info['psevdo_y'].' && `y` <= '.($u->info['psevdo_y']+4).' ) && ( `x` >= '.($u->info['psevdo_x']-1).' && `x` <= '.($u->info['psevdo_x']+1).' ) ) || ( (`x` = '.($u->info['psevdo_x']+2).' || `x` = '.($u->info['psevdo_x']-2).') && ( `y` = '.($u->info['psevdo_y']+3).' || `y` = '.($u->info['psevdo_y']+4).' ) ) )
*/
$whr = [1 => ' ((`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`y` >= ' . $u->info['psevdo_y'] . ' && `y` <= ' . ($u->info['psevdo_y'] + 4) . ')) ', //ïðÿìî
3 => ' ((`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`y` <= ' . $u->info['psevdo_y'] . ' && `y` >= ' . ($u->info['psevdo_y'] - 4) . ')) ', //âíèç
2 => ' ((`x` <= ' . $u->info['psevdo_x'] . ' && `x` >= ' . ($u->info['psevdo_x'] - 4) . ') && (`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ', //ëåâî
4 => ' ((`x` >= ' . $u->info['psevdo_x'] . ' && `x` <= ' . ($u->info['psevdo_x'] + 4) . ') && (`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ' //ïðàâî
$whr = [1 => ' ((`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`y` >= ' . $u->info['psevdo_y'] . ' && `y` <= ' . ($u->info['psevdo_y'] + 4) . ')) ', //прямо
3 => ' ((`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`y` <= ' . $u->info['psevdo_y'] . ' && `y` >= ' . ($u->info['psevdo_y'] - 4) . ')) ', //вниз
2 => ' ((`x` <= ' . $u->info['psevdo_x'] . ' && `x` >= ' . ($u->info['psevdo_x'] - 4) . ') && (`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ', //лево
4 => ' ((`x` >= ' . $u->info['psevdo_x'] . ' && `x` <= ' . ($u->info['psevdo_x'] + 4) . ') && (`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ' //право
];
$i = 1;
@@ -44,7 +44,7 @@ class DungeonEditor
$this->map[0][$pl['y'] . '_' . $pl['x']] = $pl;
$i++;
}
$this->map['good'] = $i; //öåëûõ êëåòîê
$this->map['good'] = $i; //целых клеток
$this->map[1] = $this->genMatix();
$this->lookDungeon();
}
@@ -53,43 +53,43 @@ class DungeonEditor
{
global $u, $c;
$r = '';
/* îòîáðàæåíèå áîòîâ (áåñïîëåçíî â äàííîì ðåäàêòîðå) */
/* отображение ботов (бесполезно в данном редакторе) */
}
public function atack($id)
{
global $u, $c, $code;
/* íàïàäåíèå, êàêîå íàïàäåíèå ìîæåò áûòü â ðåäàêòîðå? :) Íà ñàìîãî ñåáÿ, ñî ñòóëîì? :) */
/* нападение, какое нападение может быть в редакторе? :) На самого себя, со стулом? :) */
}
public function takeinv($id)
{
global $u, $c, $code;
/* Ýòî ðåäàêòîð, à íå ìàéíêðàôò, çäåñü íè÷åãî ñîáèðàòü íå íóæíî :) */
/* Это редактор, а не майнкрафт, здесь ничего собирать не нужно :) */
}
public function takeit($id)
{
global $u, $c, $code, $magic;
/*  ðåäàêòîðå íè÷åãî íå ïàäàåò ;) */
/* В редакторе ничего не падает ;) */
}
public function addItem($i)
{
//äîáàâëÿåì ïðåäìåò â ïåùåðó (âîçìîæíî âûïàë èç áîòà èëè èç ñóíäóêà)
/* À ÷òî åùå? Ïóëüò ê óïðàâëåíèþ Çåìëåé?! */
//добавляем предмет в пещеру (возможно выпал из бота или из сундука)
/* А что еще? Пульт к управлению Землей?! */
}
public function itemsMap()
{
global $u, $c, $code;
/* Äà íè÷åãî çäåñü íå ïàäàåò! Ãîâîðþ æå! */
/* Да ничего здесь не падает! Говорю же! */
}
public function testLike($x1, $y1, $x2, $y2)
{
//èç $x1,$y1 â $x2,$y2
//äîñòóïíà-ëè ýòà êëåòêà äëÿ äåéñòâèé
//из $x1,$y1 в $x2,$y2
//доступна-ли эта клетка для действий
$r = 0;
$c1 = mysql_fetch_array(mysql_query('SELECT * FROM `dungeon_map` WHERE `x` = "' . $x1 . '" AND `y` = "' . $y1 . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'));
$c2 = mysql_fetch_array(mysql_query('SELECT * FROM `dungeon_map` WHERE `x` = "' . $x2 . '" AND `y` = "' . $y2 . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'));
@@ -97,10 +97,10 @@ class DungeonEditor
if ($x1 == $x2 && $y1 == $y2) {
$r = 1;
} elseif (
$x1 == $x2 - 1 && $c1['go_1'] == 1 || //ïðàâî
$x1 == $x2 + 1 && $c1['go_2'] == 1 || //ëåâî
$y1 == $y2 - 1 && $c1['go_3'] == 1 || //âåðõ
$y1 == $y2 + 1 && $c1['go_4'] == 1 //íèç
$x1 == $x2 - 1 && $c1['go_1'] == 1 || //право
$x1 == $x2 + 1 && $c1['go_2'] == 1 || //лево
$y1 == $y2 - 1 && $c1['go_3'] == 1 || //верх
$y1 == $y2 + 1 && $c1['go_4'] == 1 //низ
)
{
$r = 1;
@@ -113,13 +113,13 @@ class DungeonEditor
{
global $u, $c, $code;
////i:{id,name,mapPoint,action,img,type},
//'count':1,0:{0:1234,1:'Ñóíäóê',2:5,3:'',4:'test.gif',5:0,6:position,7:width,8:heigh,9:left,10:top},
//psition 0 - ïî öåíòðó , 1- ñâåðõó, 2- ñëåâà, 3- ñíèçó, 4- ñïðàâà
//'count':1,0:{0:1234,1:'Сундук',2:5,3:'',4:'test.gif',5:0,6:position,7:width,8:heigh,9:left,10:top},
//psition 0 - по центру , 1- сверху, 2- слева, 3- снизу, 4- справа
$r = '';
$whr = [1 => ' (((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` >= ' . ($u->info['psevdo_y'] + 1) . ' && `u`.`y` <= ' . ($u->info['psevdo_y'] + 4) . ')) OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ', //ïðÿìî
3 => ' (((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] - 1) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 4) . ')) OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ', //âíèç
2 => ' (((`u`.`x` <= ' . ($u->info['psevdo_x'] - 1) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . '))OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ', //ëåâî
4 => ' (((`u`.`x` >= ' . ($u->info['psevdo_x'] + 1) . ' && `u`.`x` <= ' . ($u->info['psevdo_x'] + 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . ')) OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ' //ïðàâî
$whr = [1 => ' (((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` >= ' . ($u->info['psevdo_y'] + 1) . ' && `u`.`y` <= ' . ($u->info['psevdo_y'] + 4) . ')) OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ', //прямо
3 => ' (((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] - 1) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 4) . ')) OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ', //вниз
2 => ' (((`u`.`x` <= ' . ($u->info['psevdo_x'] - 1) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . '))OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ', //лево
4 => ' (((`u`.`x` >= ' . ($u->info['psevdo_x'] + 1) . ' && `u`.`x` <= ' . ($u->info['psevdo_x'] + 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . ')) OR (`u`.`y` = ' . $u->info['psevdo_y'] . ' && `u`.`x` = ' . $u->info['psevdo_x'] . ')) ' //право
];
$sp = mysql_query('SELECT `u`.* FROM `dungeon_obj` AS `u` WHERE `u`.`dn` = "0" AND `u`.`for_dn` = "' . $this->id_dng . '" AND ((`u`.`s` = "0" OR `u`.`s` = "' . $this->gs . '") OR `u`.`s2` = "' . $this->gs . '") AND ' . $whr[$this->gs] . ' LIMIT 76');
# die('SELECT `u`.* FROM `dungeon_obj` AS `u` WHERE `u`.`dn` = "0" AND `u`.`for_dn` = "'.$this->id_dng.'" AND ((`u`.`s` = "0" OR `u`.`s` = "'.$this->gs.'") OR `u`.`s2` = "'.$this->gs.'") AND '.$whr[$this->gs].' LIMIT 76');
@@ -144,8 +144,8 @@ class DungeonEditor
$da[$dt2[$is][0]] = $dt2[$is][1];
$is++;
}
#if(isset($da['rl2']))$da['rl2'] = -round((int)$da['rl2'] * 0.70); // Ñëåâà
if (isset($da['rl2'])) $da['rl2'] = round((int)$da['rl2'] - 230); // Ñëåâà
#if(isset($da['rl2']))$da['rl2'] = -round((int)$da['rl2'] * 0.70); // Слева
if (isset($da['rl2'])) $da['rl2'] = round((int)$da['rl2'] - 230); // Слева
if (isset($da['rl3'])) $da['rl3'] = round((int)$da['rl3'] + 160);
if (isset($da['rl4'])) $da['rl4'] = round((int)$da['rl4'] - 120);
$pl['date'] = str_replace('"', '', json_encode($da));
@@ -165,8 +165,8 @@ class DungeonEditor
$da[$dt2[$is][0]] = $dt2[$is][1];
$is++;
}
#if(isset($da['rl2']))$da['rl2'] = 355-round((int)$da['rl2'] * 0.30); // Ñïðàâà
if (isset($da['rl2'])) $da['rl2'] = round((int)$da['rl2'] + 230); // Ñïðàâà
#if(isset($da['rl2']))$da['rl2'] = 355-round((int)$da['rl2'] * 0.30); // Справа
if (isset($da['rl2'])) $da['rl2'] = round((int)$da['rl2'] + 230); // Справа
if (isset($da['rl3'])) $da['rl3'] = round((int)$da['rl3'] - 160);
if (isset($da['rl4'])) $da['rl4'] = round((int)$da['rl4'] + 120);
$pl['date'] = str_replace('"', '', json_encode($da));
@@ -188,13 +188,13 @@ class DungeonEditor
////i:{id,login,mapPoint,sex,obraz,type,users_p},
//'count':1,0:{0:1015,1:'Test1',2:5,3:0,4:'1',5:'user',6:1},
$r = '';
$whr = [1 => ' ((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` >= ' . $u->info['psevdo_y'] . ' && `u`.`y` <= ' . ($u->info['psevdo_y'] + 4) . ')) ', //ïðÿìî
3 => ' ((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` <= ' . $u->info['psevdo_y'] . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 4) . ')) ', //âíèç
2 => ' ((`u`.`x` <= ' . $u->info['psevdo_x'] . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ', //ëåâî
4 => ' ((`u`.`x` >= ' . $u->info['psevdo_x'] . ' && `u`.`x` <= ' . ($u->info['psevdo_x'] + 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ' //ïðàâî
$whr = [1 => ' ((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` >= ' . $u->info['psevdo_y'] . ' && `u`.`y` <= ' . ($u->info['psevdo_y'] + 4) . ')) ', //прямо
3 => ' ((`u`.`x` <= ' . ($u->info['psevdo_x'] + 2) . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 2) . ') && (`u`.`y` <= ' . $u->info['psevdo_y'] . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 4) . ')) ', //вниз
2 => ' ((`u`.`x` <= ' . $u->info['psevdo_x'] . ' && `u`.`x` >= ' . ($u->info['psevdo_x'] - 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ', //лево
4 => ' ((`u`.`x` >= ' . $u->info['psevdo_x'] . ' && `u`.`x` <= ' . ($u->info['psevdo_x'] + 4) . ') && (`u`.`y` <= ' . ($u->info['psevdo_y'] + 2) . ' && `u`.`y` >= ' . ($u->info['psevdo_y'] - 2) . ')) ' //право
];
$i = 0;
//îòîáðàæàåì áîòîâ
//отображаем ботов
$sp = mysql_query('SELECT `u`.*,`st`.* FROM `dungeon_bots` AS `u` LEFT JOIN `test_bot` AS `st` ON (`u`.`id_bot` = `st`.`id`) WHERE ' . $whr[$this->gs] . ' AND `dn` = "0" AND `for_dn` = "' . $this->id_dng . '" AND `u`.`delete` = "0" LIMIT 50');
while ($pl = mysql_fetch_array($sp)) {
$i++;
@@ -219,7 +219,7 @@ class DungeonEditor
$btli = mysql_fetch_array(mysql_query('SELECT `id` FROM `battle` WHERE `id` = "' . $user['battle'] . '" AND `team_win` = "-1" LIMIT 1'));
}
if (!isset($btli['id'])) {
//Ñîçäàåì ïîåäèíîê
//Создаем поединок
$btl_id = 0;
$expB = 0;
$btl = ['players' => '', 'timeout' => 180, 'type' => 0, 'invis' => 0, 'noinc' => 0, 'travmChance' => 0, 'typeBattle' => 0, 'addExp' => $expB, 'money' => 0];
@@ -243,7 +243,7 @@ class DungeonEditor
$btl_id = mysql_insert_id();
if ($btl_id > 0) {
//Äîáàâëÿåì áîòîâ
//Добавляем ботов
$sp = mysql_query('SELECT * FROM `dungeon_bots` WHERE `for_dn` = "0" AND `dn` = "' . $this->info['id'] . '" AND `x` = "' . $bot['x'] . '" AND `y` = "' . $bot['y'] . '" LIMIT 50');
$j = 0;
$logins_bot = [];
@@ -279,16 +279,16 @@ class DungeonEditor
global $u, $c, $code;
$go = 0;
if ($id == 1) {
//âïåðåä
//вперед
$go = $this->sg[$this->gs][1];
} elseif ($id == 2) {
//íàçàä
//назад
$go = $this->sg[$this->gs][3];
} elseif ($id == 3) {
//íà ïðàâî
//на право
$go = $this->sg[$this->gs][4];
} elseif ($id == 4) {
//íà ëåâî
//на лево
$go = $this->sg[$this->gs][2];
}
$thp = mysql_fetch_array(mysql_query('SELECT * FROM `dungeon_map` WHERE `x` = "' . $u->info['psevdo_x'] . '" AND `y` = "' . $u->info['psevdo_y'] . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'));
@@ -313,7 +313,7 @@ class DungeonEditor
}
$tmap = mysql_fetch_array(mysql_query('SELECT * FROM `dungeon_map` WHERE `x` = "' . $u->info['psevdo_x'] . '" AND `y` = "' . $u->info['psevdo_y'] . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'));
//íàëè÷èå ïðåäìåòà
//наличие предмета
if ($tmap['tr_items'] != '') {
$ti = explode(',', $tmap['tr_items']);
$i = 0;
@@ -335,19 +335,19 @@ class DungeonEditor
}
if ($trnit != '') {
$trnit = rtrim($trnit, ', ');
$this->error = 'Ó âàñ íåò ïîäõîäÿùåãî ïðåäìåòà. Òðåáóåòñÿ ' . $trnit;
$this->error = 'У вас нет подходящего предмета. Требуется ' . $trnit;
}
}
$tmGo = $u->info['timeGo'] - time(); //ñêîëüêî ñåêóíä îñòàëîñü
$tmGo = $u->info['timeGo'] - time(); //сколько секунд осталось
if ($tmGo > 0) {
$go = 0;
$this->error = 'Íå òàê áûñòðî...';
$this->error = 'Не так быстро...';
}
if ($u->aves['now'] >= $u->aves['max']) {
$go = 0;
$this->error = 'Âû íå ìîæåòå ïåðåìåùàòüñÿ, ðþêçàê ïåðåïîëíåí ...';
$this->error = 'Вы не можете перемещаться, рюкзак переполнен ...';
}
if ($go > 0) {
@@ -371,16 +371,16 @@ class DungeonEditor
global $u, $c, $code;
$go = 0;
if ($id == 1) {
//âïåðåä
//вперед
$go = $this->sg[$this->gs][1];
} elseif ($id == 2) {
//íàçàä
//назад
$go = $this->sg[$this->gs][3];
} elseif ($id == 3) {
//íà ïðàâî
//на право
$go = $this->sg[$this->gs][4];
} elseif ($id == 4) {
//íà ëåâî
//на лево
$go = $this->sg[$this->gs][2];
}
$thp = mysql_fetch_array(mysql_query('SELECT * FROM `dungeon_map` WHERE `x` = "' . $u->info['psevdo_x'] . '" AND `y` = "' . $u->info['psevdo_y'] . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'));
@@ -410,7 +410,7 @@ class DungeonEditor
public function testSt($id, $s)
{
$r = 0;
//çàìåíÿåì îòîáðàæåíèå ñòåí â çàâèñèìîñòè îò óãëà îáçîðà
//заменяем отображение стен в зависимости от угла обзора
$s = $this->sg[$this->gs][$s];
if (isset($this->map[1][$id]['id'])) {
$r = $this->map[1][$id]['st'][($s - 1)];
@@ -421,7 +421,7 @@ class DungeonEditor
public function lookDungeon()
{
global $u, $c, $code, $pd;
/* Ãåíåðèðóåì èçîáðàæåíèå êàðòû */
/* Генерируем изображение карты */
/* LEVEL 1 */
if ($this->testSt(2, 4) > 0 || $this->testSt(3, 2) > 0) {
$pd[28] = 1;
@@ -502,9 +502,9 @@ class DungeonEditor
$pd[3] = 1;
}
/* Ãåíåðèðóåì ïðåäìåòû íà êàðòå */
/* Генерируем предметы на карте */
/* Ãåíåðèðóåì ïåðñîíàæåé è áîòîâ íà êàðòå */
/* Генерируем персонажей и ботов на карте */
}
@@ -520,7 +520,7 @@ class DungeonEditor
{
$r = [];
if ($this->gs == 1) {
//1; //ñìîòðèì ïðÿìî
//1; //смотрим прямо
$r[1] = $this->getMatrix(0, -1);
$r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(0, 1);
@@ -541,7 +541,7 @@ class DungeonEditor
$r[18] = $this->getMatrix(4, 2);
$r[19] = $this->getMatrix(4, -2);
} elseif ($this->gs == 2) {
//2; //ñìîòðèì ëåâî
//2; //смотрим лево
$r[1] = $this->getMatrix(-1, 0);
$r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(1, 0);
@@ -562,7 +562,7 @@ class DungeonEditor
$r[18] = $this->getMatrix(2, -4);
$r[19] = $this->getMatrix(-2, -4);
} elseif ($this->gs == 3) {
//3; //ñìîòðèì âíèç
//3; //смотрим вниз
$r[1] = $this->getMatrix(0, 1);
$r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(0, -1);
@@ -583,7 +583,7 @@ class DungeonEditor
$r[18] = $this->getMatrix(-4, -2);
$r[19] = $this->getMatrix(-4, 2);
} elseif ($this->gs == 4) {
//4; //ñìîòðèì ïðàâî
//4; //смотрим право
$r[1] = $this->getMatrix(1, 0);
$r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(-1, 0);
File diff suppressed because it is too large Load Diff
+41 -41
View File
@@ -10,7 +10,7 @@ class Filter
return ($str);
}
//
//Ñìàéëèêè
//Смайлики
private $sm = ["laugh" => 1, "fingal" => 1, "eek" => 1, "smoke" => 1, "hi" => 1, "bye" => 1, "king" => 1, "king2" => 1, "boks2" => 1, "boks" => 1, "gent" => 1, "lady" => 1, "tongue" => 1, "smil" => 1, "rotate" => 1, "ponder" => 1, "bow" => 1, "angel" => 1, "angel2" => 1, "hello" => 1, "dont" => 1, "idea" => 1, "mol" => 1, "super" => 1, "beer" => 1, "drink" => 1, "baby" => 1, "tongue2" => 1, "sword" => 1, "agree" => 1, "loveya" => 1, "kiss" => 1, "kiss2" => 1, "kiss3" => 1, "kiss4" => 1, "rose" => 1, "love" => 1, "love2" => 1, "confused" => 1, "yes" => 1, "no" => 1, "shuffle" => 1, "nono" => 1, "maniac" => 1, "privet" => 1, "ok" => 1, "ninja" => 1, "pif" => 1, "smash" => 1, "alien" => 1, "pirate" => 1, "gun" => 1, "trup" => 1, "mdr" => 1, "sneeze" => 1, "mad" => 1, "friday" => 1, "cry" => 1, "grust" => 1, "rupor" => 1, "fie" => 1, "nnn" => 1, "row" => 1, "red" => 1, "lick" => 1, "help" => 1, "wink" => 1, "jeer" => 1, "tease" => 1, "nunu" => 1, "inv" => 1, "duel" => 1, "susel" => 1, "nun" => 1, "kruger" => 1, "flowers" => 1, "horse" => 1, "hug" => 1, "str" => 1, "alch" => 1, "pal" => 1, "mag" => 1, "sniper" => 1, "vamp" => 1, "doc" => 1, "doc2" => 1, "sharp" => 1, "naem" => 1, "naem2" => 1, "naem3" => 1, "invis" => 1, "chtoza" => 1, "beggar" => 1, "sorry" => 1, "sorry2" => 1, "creator" => 1, "grace" => 1, "dustman" => 1, "carreat" => 1, "lordhaos" => 1, "ura" => 1, "elix" => 1, "dedmoroz" => 1, "snegur" => 1, "showng" => 1, "superng" => 1, "podz" => 1, "sten" => 1, "devil" => 1, "cat" => 1, "owl" => 1, "lightfly" => 1, "snowfight" => 1, "rocket" => 1, "ball" => 1, "smile" => 1, "fuck" => 1];
public function e($t)
@@ -18,7 +18,7 @@ class Filter
mysql_query(
'INSERT INTO `chat` (`text`,`city`,`to`,`type`,`new`,`time`) VALUES ("#' . date('d.m.Y') . ' %' . date(
'H:i:s'
) . ': <b>' . mysql_real_escape_string($t) . '</b>","capitalcity","Èãðîìèð","6","1","-1")'
) . ': <b>' . mysql_real_escape_string($t) . '</b>","capitalcity","Игромир","6","1","-1")'
);
}
@@ -56,8 +56,8 @@ class Filter
{
$str = strtolower($string);
if (strtolower('S') != 's') {
$ru = 'ÀÁÂÃÄŨÆÇÈÉÊËÌÍÎÐÏÑÒÓÔÕÖרÙÚÜÛÝÞß';
$ru2 = 'àáâãä叿çèéêëìíîðïñòóôõö÷øùúüûýþÿ';
$ru = 'АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ';
$ru2 = 'абвгдеёжзийклмнорпстуфхцчшщъьыэюя';
$en = 'QWERTYUIOPASDFGHJKLZXCVBNM';
$en2 = 'qwertyuiopasdfghjklzxcvbnm';
$i = 0;
@@ -77,7 +77,7 @@ class Filter
public function spamFiltr($txt)
{
$txt = str_replace('¸', 'å', $txt);
$txt = str_replace('ё', 'е', $txt);
$nospam = 0;
$txt = str_replace('&gt;', '', $txt);
@@ -91,7 +91,7 @@ class Filter
}
$i++;
}
/* ôèëüòð */
/* фильтр */
$spam = mysql_fetch_array(mysql_query('SELECT * FROM `spam_word` WHERE `id` = 1 LIMIT 1'));
$spam = $spam['data'];
//
@@ -100,45 +100,45 @@ class Filter
$testEN2 = str_replace('&quot;', '', $testEN2);
$testEN2 = str_replace('&nbsp;', '', $testEN2);
$testEN2 = str_replace('à', 'a', $testEN2);
$testEN2 = str_replace('á', 'b', $testEN2);
$testEN2 = str_replace('ñ', 'c', $testEN2);
$testEN2 = str_replace('â', 'b', $testEN2);
$testEN2 = str_replace('å', 'e', $testEN2);
$testEN2 = str_replace('ò', 't', $testEN2);
$testEN2 = str_replace('î', 'o', $testEN2);
$testEN2 = str_replace('ð', 'p', $testEN2);
$testEN2 = str_replace('ì', 'm', $testEN2);
$testEN2 = str_replace('í', 'h', $testEN2);
$testEN2 = str_replace('ó', 'y', $testEN2);
$testEN2 = str_replace('ê', 'k', $testEN2);
$testEN2 = str_replace('è', 'u', $testEN2);
$testEN2 = str_replace('õ', 'x', $testEN2);
$testEN2 = str_replace('ÿ', '9', $testEN2);
$testEN2 = str_replace('а', 'a', $testEN2);
$testEN2 = str_replace('б', 'b', $testEN2);
$testEN2 = str_replace('с', 'c', $testEN2);
$testEN2 = str_replace('в', 'b', $testEN2);
$testEN2 = str_replace('е', 'e', $testEN2);
$testEN2 = str_replace('т', 't', $testEN2);
$testEN2 = str_replace('о', 'o', $testEN2);
$testEN2 = str_replace('р', 'p', $testEN2);
$testEN2 = str_replace('м', 'm', $testEN2);
$testEN2 = str_replace('н', 'h', $testEN2);
$testEN2 = str_replace('у', 'y', $testEN2);
$testEN2 = str_replace('к', 'k', $testEN2);
$testEN2 = str_replace('и', 'u', $testEN2);
$testEN2 = str_replace('х', 'x', $testEN2);
$testEN2 = str_replace('я', '9', $testEN2);
$testEN2 = str_replace('()', 'o', $testEN2);
$testEN2 = str_replace('0', 'o', $testEN2);
$testEN2 = preg_replace('/[^A-z]*/i', '', $testEN2);
$testRU = preg_replace('/[^À-ÿ]*/i', '', $txt);
$testRU = preg_replace('/[^А]*/i', '', $txt);
$testRU2 = $txt;
$testRU2 = str_replace('a', 'à', $testRU2);
$testRU2 = str_replace('b', 'á', $testRU2);
$testRU2 = str_replace('c', 'ñ', $testRU2);
$testRU2 = str_replace('b', 'â', $testRU2);
$testRU2 = str_replace('e', 'å', $testRU2);
$testRU2 = str_replace('t', 'ò', $testRU2);
$testRU2 = str_replace('o', 'î', $testRU2);
$testRU2 = str_replace('p', 'ð', $testRU2);
$testRU2 = str_replace('m', 'ì', $testRU2);
$testRU2 = str_replace('h', 'í', $testRU2);
$testRU2 = str_replace('y', 'ó', $testRU2);
$testRU2 = str_replace('k', 'ê', $testRU2);
$testRU2 = str_replace('x', 'õ', $testRU2);
$testRU2 = str_replace('u', 'è', $testRU2);
$testRU2 = str_replace('()', 'î', $testRU2);
$testRU2 = str_replace('0', 'î', $testRU2);
$testRU2 = preg_replace('/[^À-ÿ]*/i', ' ', $testRU2);
$testRU2 = preg_replace('/[^À-ß]*/i', ' ', $testRU2);
$testRU2 = str_replace('a', 'а', $testRU2);
$testRU2 = str_replace('b', 'б', $testRU2);
$testRU2 = str_replace('c', 'с', $testRU2);
$testRU2 = str_replace('b', 'в', $testRU2);
$testRU2 = str_replace('e', 'е', $testRU2);
$testRU2 = str_replace('t', 'т', $testRU2);
$testRU2 = str_replace('o', 'о', $testRU2);
$testRU2 = str_replace('p', 'р', $testRU2);
$testRU2 = str_replace('m', 'м', $testRU2);
$testRU2 = str_replace('h', 'н', $testRU2);
$testRU2 = str_replace('y', 'у', $testRU2);
$testRU2 = str_replace('k', 'к', $testRU2);
$testRU2 = str_replace('x', 'х', $testRU2);
$testRU2 = str_replace('u', 'и', $testRU2);
$testRU2 = str_replace('()', 'о', $testRU2);
$testRU2 = str_replace('0', 'о', $testRU2);
$testRU2 = preg_replace('/[^А]*/i', ' ', $testRU2);
$testRU2 = preg_replace('/[^А]*/i', ' ', $testRU2);
$i = 0;
$spe = explode('|', $spam);
while ($i <= count($spe)) {
@@ -154,6 +154,6 @@ class Filter
public function __clone()
{
trigger_error('Äóáëèðîâàíèå íå äîïóñêàåòñÿ.', E_USER_ERROR);
trigger_error('Дублирование не допускается.', E_USER_ERROR);
}
}
+75 -64
View File
@@ -1,44 +1,55 @@
<?php
/**@deprecated âðîäå íèãäå íå âûçûâàåòñÿ, íèêåì íå èñïîëüçóåòñÿ */
/**@deprecated вроде нигде не вызывается, никем не используется */
class GameDealer
{
//Êîíôèãóðàöèè
//Конфигурации
private $c = [
'db_name' => 'pay_operations', //Òàáëèöà â êîòîðóþ çàíîñÿòñÿ äàííûå
'db_name' => 'pay_operations', //Таблица в которую заносятся данные
'db_host' => 'localhost',
'db_user' => 'newcom1_abk',
'db_pass' => '4nWYsIM[c?}P',
'db_base' => 'newcom1_abk', /* Íàñòðîéêè ïëàòåæåé */
'ip_list' => ['127,0,0,1,188.166.34.68,136.243.38.147,136.243.38.149,136.243.38.150,136.243.38.151,136.243.38.189,88.198.88.98'], //Óêàçûâàòü ÷åðåç çàïÿòóþ (Ðàçðåøåííûå IP)
'db_base' => 'newcom1_abk', /* Настройки платежей */
'ip_list' => ['127,0,0,1,188.166.34.68,136.243.38.147,136.243.38.149,136.243.38.150,136.243.38.151,136.243.38.189,88.198.88.98'], //Указывать через запятую (Разрешенные IP)
'key' => 'qtzl0igb', //gamedealer key
'id' => '65643' //ID ïðîåêòà
], $BACK = []; //Ðåçóëüòàò êîòîðûé âîçâðàùàåì â êîíöå
'id' => '65643' //ID проекта
], $BACK = []; //Результат который возвращаем в конце
//Êîäèðóåì èç ÞÒÔ-8 â Êèðèëèöó
//Кодируем из ЮТФ-8 в Кирилицу
/**
* @param $text
* @return mixed
* @deprecated
*/
public function in($text)
{
return iconv("UTF-8", "cp1251", $text);
return $text;
}
//Êîäèðóåì èç Êèðèëèöó â ÞÒÔ-8
//Кодируем из Кирилицу в ЮТФ-8
/**
* @param $text
* @return mixed
* @deprecated
*/
public function out($text)
{
return iconv("cp1251", "UTF-8", $text);
return $text;
}
//Äîáàâëÿåì äàííûå â áàçó äàííûõ
//Добавляем данные в базу данных
public function add($type, $value, $money)
{
mysql_query('INSERT INTO `' . $this->c['db_name'] . '` (`time`,`type`,`ip`,`value`,`money`,`project`) VALUES ("' . time() . '","' . mysql_real_escape_string($type) . '","' . $_SERVER['HTTP_X_REAL_IP'] . '","' . mysql_real_escape_string($value) . '","' . mysql_real_escape_string($money) . '","' . mysql_real_escape_string($this->id) . '")');
}
//Ïîäêëþ÷àåìñÿ ê áàçå äàííûõ
//Подключаемся к базе данных
public function connect_db()
{
$db = mysql_connect($this->c['db_host'], $this->c['db_user'], $this->c['db_pass']) or die('Îøèáêà ïîäêëþ÷åíèÿ ê MySQL ñåðâåðó!');
mysql_select_db($this->c['db_base'], $db) or die('Îøèáêà ïîäêëþ÷åíèÿ ê áàçå äàííûõ!');
mysql_query('SET NAMES cp1251');
$db = mysql_connect($this->c['db_host'], $this->c['db_user'], $this->c['db_pass']) or die('Ошибка подключения к MySQL серверу!');
mysql_select_db($this->c['db_base'], $db) or die('Ошибка подключения к базе данных!');
mysql_query('SET NAMES utf8mb4');
}
public function output($a, $v = null)
@@ -69,7 +80,7 @@ class GameDealer
return $r;
}
//Ãåíåðèðóåì XML-ôàéë
//Генерируем XML-файл
public function backInformation()
{
header('Content-Type: text/html/force-download');
@@ -77,7 +88,7 @@ class GameDealer
echo $this->output($this->BACK, 1);
}
//Ïðîâåðêà ñóùåñòâîâàíèÿ ïåðñîíàæà
//Проверка существования персонажа
public function test_accaunt($nick)
{
$r = false;
@@ -88,7 +99,7 @@ class GameDealer
return $r;
}
//Ïîëó÷àåò ñ÷åò â áàíêå ïî ëîãèíó
//Получает счет в банке по логину
public function getBank($nick)
{
$nick = mysql_fetch_array(mysql_query('SELECT `id` FROM `users` WHERE `login` = "' . mysql_real_escape_string($nick) . '" LIMIT 1'));
@@ -96,7 +107,7 @@ class GameDealer
return $nick['id'];
}
//Ïîèñê ëîãèíà
//Поиск логина
public function bank_user($nick)
{
$nick = mysql_fetch_array(mysql_query('SELECT `id`,`uid FROM `bank` WHERE `id` = "' . mysql_real_escape_string($nick) . '" LIMIT 1'));
@@ -104,79 +115,79 @@ class GameDealer
return $nick['login'];
}
//Íà÷èíàåì îáðàáîòêó çàïðîñîâ
//Начинаем обработку запросов
public function start_session()
{
$ip = '';
$ip = $_SERVER['HTTP_X_REAL_IP'];
//Ïîäêëþ÷àåìñÿ ê ÁÄ
//Подключаемся к БД
$this->connect_db();
//Ïîëó÷àåì äàííûå çàïðîñà
//Получаем данные запроса
//$xml = file_get_contents('php://input');
//Ïàðñèíã XML çàïðîñà
//Парсинг XML запроса
if (function_exists('simplexml_load_string')) {
$xml = simplexml_load_string($xml);
} else {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Íå óäàëîñü ïðîèçâåñòè îáðàáîòêó çàïðîñà']]]];
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Не удалось произвести обработку запроса']]]];
die($this->backInformation());
}
$this->id = $xml->projectid;
if (!in_array($ip, $this->c['ip_list'])) {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Íåò äîñòóïà ñ äàííîãî IP']]]];
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Нет доступа с данного IP']]]];
die($this->backInformation());
}
//Îáðàáîòêà çàïðîñîâ
//Обработка запросов
if ($xml->method == 'check_balance') {
//<sign>MD5(method+MD5(gdKey))</sign>
$sign = md5($xml->method . md5($this->c['key']));
if ($sign == $xml->sign) {
//Áàëàíñ äèëåðà
//Баланс дилера
$balance = 1000000;
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Áàëàíñ äèëåðà: ' . $balance], ['balance', $balance]]]];
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Баланс дилера: ' . $balance], ['balance', $balance]]]];
$this->add('4', 'check:' . $xml->nick . ':1' . $r, 0);
}
} elseif ($xml->method == 'check') {
/*
nick - ëîãèí ïåðñîíàæà <sign>MD5(nick+method+MD5(gdKey))</sign> */
nick - логин персонажа <sign>MD5(nick+method+MD5(gdKey))</sign> */
$sign = md5($xml->nick . $xml->method . md5($this->c['key']));
if ($sign == $xml->sign) {
$xml->nick = $this->in($xml->nick);
if ($this->test_accaunt($xml->nick) == true) {
//Ïåðñîíàæ íàéäåí è çà÷èñëÿåì åìó èãðîâóþ âàëþòó
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Áàíêîâñêèé ñ÷åò íàéäåí']]]];
//Персонаж найден и зачисляем ему игровую валюту
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Банковский счет найден']]]];
$this->add('3', 'check:' . $xml->nick . ':1' . $r, 0);
} else {
//Ïåðñîíàæ íå íàéäåí
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ïëàòåæ íå îáðàáîòàí. Áàíêîâñêèé ñ÷åò íå íàéäåí.']]]];
$this->add('-1', 'Ïåðñîíàæ íå íàéäåí:pay:' . $xml->nick . ':0', 0);
//Персонаж не найден
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Платеж не обработан. Банковский счет не найден.']]]];
$this->add('-1', 'Персонаж не найден:pay:' . $xml->nick . ':0', 0);
}
}
} elseif ($xml->method == 'pay') {
/* Ïðîâîäèì ïëàòåæ
nick - ëîãèí àêêàóíòà , projectid - id ïðîåêòà , sign , amount - äåíüãè , payid - id ïëàòåæà */
/* Проводим платеж
nick - логин аккаунта , projectid - id проекта , sign , amount - деньги , payid - id платежа */
$sign = md5($xml->nick . $xml->projectid . $xml->amount . $xml->payid . $xml->method . md5($this->c['key']));
if ($sign == $xml->sign) {
$xml->nick = $this->in($xml->nick);
if ($this->test_accaunt($xml->nick)) {
//Ïåðñîíàæ íàéäåí è çà÷èñëÿåì åìó èãðîâóþ âàëþòó
//Персонаж найден и зачисляем ему игровую валюту
$bank = $this->test_accaunt($xml->nick);
if ($bank > 0) {
mysql_query('UPDATE `bank` SET `money2` = `money2` + ' . mysql_real_escape_string($xml->amount) . ' WHERE `id` = "' . mysql_real_escape_string($xml->nick) . '" LIMIT 1');
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Ïëàòåæ ïðîøåë óñïåøíî'], ['id', $this->c['id']]]]];
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Платеж прошел успешно'], ['id', $this->c['id']]]]];
$this->add('2', 'pay:' . $xml->nick . ':' . $xml->projectid . ':' . $xml->sign . ':' . $xml->amount . ':' . $xml->payid . ':' . $bank['id'], $xml->amount);
$user = mysql_fetch_array(mysql_query('SELECT `id`,`uid` FROM `bank` WHERE `id` = "' . mysql_real_escape_string($xml->nick) . '" LIMIT 1'));
@@ -184,59 +195,59 @@ class GameDealer
mysql_query('UPDATE `users` SET `catch` = `catch` + ' . mysql_real_escape_string(floor($xml->amount)) . ' WHERE `id` = "' . mysql_real_escape_string($xml->nick) . '" LIMIT 1');
$r = '<span class=date>' . date('d.m.Y H:i') . '</span> Àëõèìèê <img src=https://img.new-combats.com/i/align/align50.gif width=12 height=15 /><u><b>Enchanter</b> / Àâòîìàòè÷åñêàÿ îïëàòà</u> ñîîáùàåò: ';
$r = '<span class=date>' . date('d.m.Y H:i') . '</span> Алхимик <img src=https://img.new-combats.com/i/align/align50.gif width=12 height=15 /><u><b>Enchanter</b> / Автоматическая оплата</u> сообщает: ';
if ($user['sex'] == 1) {
$r .= 'Óâàæàåìàÿ';
$r .= 'Уважаемая';
} else {
$r .= 'Óâàæàåìûé';
$r .= 'Уважаемый';
}
$r .= ' <b>' . $user['login'] . '</b>, íà Âàø áàíêîâñêèé ñ÷åò ¹' . $bank . ' çà÷èñëåíî ' . $xml->amount . ' Ekr. Áëàãîäàðèì Âàñ çà ïîêóïêó!';
$r .= ' <b>' . $user['login'] . '</b>, на Ваш банковский счет №' . $bank . ' зачислено ' . $xml->amount . ' Ekr. Благодарим Вас за покупку!';
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','" . $user['city'] . "','" . $user['room'] . "','','" . $user['login'] . "','" . $r . "','-1','5','0')");
} else {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ó ïîëüçîâàòåëÿ îòñóòñòâóåò áàíê'], ['id', $this->c['id']]]]];
$this->add('-1', 'Ó ïåðñîíàæà îòñóòñòâóåò áàíê:pay:' . $xml->nick . ':' . $xml->projectid . ':' . $xml->sign . ':' . $xml->amount . ':' . $xml->payid . ':' . $bank['id'], $xml->amount);
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'У пользователя отсутствует банк'], ['id', $this->c['id']]]]];
$this->add('-1', 'У персонажа отсутствует банк:pay:' . $xml->nick . ':' . $xml->projectid . ':' . $xml->sign . ':' . $xml->amount . ':' . $xml->payid . ':' . $bank['id'], $xml->amount);
}
} else {
//Ïåðñîíàæ íå íàéäåí
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ïëàòåæ íå îáðàáîòàí. Ïåðñîíàæ íå íàéäåí.']]]];
$this->add('-1', 'Ïåðñîíàæ íå íàéäåí:pay:' . $xml->nick . ':0', 0);
//Персонаж не найден
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Платеж не обработан. Персонаж не найден.']]]];
$this->add('-1', 'Персонаж не найден:pay:' . $xml->nick . ':0', 0);
}
} else {
//Îøèáêà ñèãíàòóðû
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Îøèáêà ñèãíàòóðû']]]];
$this->add('-1', 'Îøèáêà ñèãíàòóðû:pay:' . $xml->nick . ':0', 0);
//Ошибка сигнатуры
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ошибка сигнатуры']]]];
$this->add('-1', 'Ошибка сигнатуры:pay:' . $xml->nick . ':0', 0);
}
} elseif ($xml->method == 'check_login') {
/* Ïðîâåðêà àêêàóíòà
nick - ëîãèí àêêàóíòà , projectid - id ïðîåêòà , sign */
/* Проверка аккаунта
nick - логин аккаунта , projectid - id проекта , sign */
$sign = md5($xml->nick . $xml->method . md5($this->c['key']));
if ($sign == $xml->sign) {
$xml->nick = $this->in($xml->nick);
if ($this->test_accaunt($xml->nick)) {
//Ïåðñîíàæ íàéäåí
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Ñ÷åò íàéäåí'], ['addinfo', $this->bank_user($xml->nick)]]]];
//Персонаж найден
$this->BACK = [['gdanswer', [['status', '1'], ['desc', 'Счет найден'], ['addinfo', $this->bank_user($xml->nick)]]]];
$this->add('1', 'check_login:' . $xml->nick . ':1' . $r, 0);
} else {
//Ïåðñîíàæ íå íàéäåí
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ñ÷åò íå íàéäåí']]]];
$this->add('-1', 'Ïåðñîíàæ íå íàéäåí:check_login:' . $xml->nick . ':0', 0);
//Персонаж не найден
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Счет не найден']]]];
$this->add('-1', 'Персонаж не найден:check_login:' . $xml->nick . ':0', 0);
}
} else {
//Îøèáêà ñèãíàòóðû
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Îøèáêà ñèãíàòóðû']]]];
$this->add('-1', 'Îøèáêà ñèãíàòóðû:pay:' . $xml->nick . ':0', 0);
//Ошибка сигнатуры
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ошибка сигнатуры']]]];
$this->add('-1', 'Ошибка сигнатуры:pay:' . $xml->nick . ':0', 0);
}
} else {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Íåèçâåñòíûé òèï çàïðîñà']]]];
$this->add('-1', 'Íåèçâåñòíûé òèï çàïðîñà:error_method:gamedealer', 0);
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Неизвестный тип запроса']]]];
$this->add('-1', 'Неизвестный тип запроса:error_method:gamedealer', 0);
}
//Âîçâðàùàåì ðåçóëüòàò
//Возвращаем результат
$this->backInformation();
}
}
+94 -76
View File
@@ -2,132 +2,145 @@
namespace Insallah;
use Core\Db;
use User;
class Achievements
{
private $user;
private User $user;
private $info;
private $data = [
private array $data = [
'zb' => [
'questname' => 'Åæåäí.Çàäàíèÿ',
'quest' => 'Âûïîëíèòü çàäàíèÿ áàáêè.',
'check' => ['Çàäàíèé', 5, 25, 50, 100, 250],
'prize' => ['Æåòîí <br>óñïåõà <br>', 5, 20, 40, 60, 100],
'questname' => 'Ежедн.Задания',
'quest' => 'Выполнить задания бабки.',
'check' => ['Заданий', 5, 25, 50, 100, 250],
'prize' => ['Жетон <br>успеха <br>', 5, 20, 40, 60, 100],
'startlink' => 11
],
'vx' => [
'questname' => 'Õàîòè÷åñêèå áîè',
'quest' => 'Ïîáåäèòü â õàîòè÷åñêèõ áîÿõ.',
'check' => ['Ïîáåä', 50, 300, 400, 500, 1000],
'prize' => ['åêð.', 25, 50, 75, 100, 200],
'questname' => 'Хаотические бои',
'quest' => 'Победить в хаотических боях.',
'check' => ['Побед', 50, 300, 400, 500, 1000],
'prize' => ['екр.', 25, 50, 75, 100, 200],
'startlink' => 21
],
'snt' => [
'questname' => 'Ñóíäóê òðóïîæîðà',
'quest' => 'Îòêðûòü ñóíäóê òðóïîæîðà.',
'check' => ['Îòêðûòèé', 5, 25, 50, 100, 250],
'prize' => ['åêð.', 10, 25, 50, 75, 200],
'questname' => 'Сундук трупожора',
'quest' => 'Открыть сундук трупожора.',
'check' => ['Открытий', 5, 25, 50, 100, 250],
'prize' => ['екр.', 10, 25, 50, 75, 200],
'startlink' => 31
],
'rp' => [
'questname' => 'Ðóíû 8 ëâë.',
'quest' => 'Ïîëó÷èòü ðóíó ïðè ïëàâêå ïëîõèõ çàãîòîâîê. [S]',
'check' => ['Ðóí', 5, 10, 25, 50, 100],
'prize' => ['Ïëîõèå <br> çàãîòîâêè <br>', 5, 7, 10, 12, 15],
'questname' => 'Руны 8 лвл.',
'quest' => 'Получить руну при плавке плохих заготовок. [S]',
'check' => ['Рун', 5, 10, 25, 50, 100],
'prize' => ['Плохие <br> заготовки <br>', 5, 7, 10, 12, 15],
'startlink' => 41
],
'rn' => [
'questname' => 'Ðóíû 9 ëâë.',
'quest' => 'Ïîëó÷èòü ðóíó ïðè ïëàâêå íîðìàëüíûõ çàãîòîâîê. [M]',
'check' => ['Ðóí', 5, 10, 15, 25, 50],
'prize' => ['Íîðìàëüíûå <br> çàãîòîâêè <br>', 5, 7, 9, 12, 15],
'questname' => 'Руны 9 лвл.',
'quest' => 'Получить руну при плавке нормальных заготовок. [M]',
'check' => ['Рун', 5, 10, 15, 25, 50],
'prize' => ['Нормальные <br> заготовки <br>', 5, 7, 9, 12, 15],
'startlink' => 51
],
'rb' => [
'questname' => 'Ðóíû 10 ëâë.',
'quest' => 'Ïîëó÷èòü ðóíó ïðè ïëàâêå èäåàëüíûõ çàãîòîâîê. [L]',
'check' => ['Ðóí', 2, 5, 8, 11, 15],
'prize' => ['Èäåàëüíûå <br> çàãîòîâêè <br>', 2, 4, 6, 10, 15],
'questname' => 'Руны 10 лвл.',
'quest' => 'Получить руну при плавке идеальных заготовок. [L]',
'check' => ['Рун', 2, 5, 8, 11, 15],
'prize' => ['Идеальные <br> заготовки <br>', 2, 4, 6, 10, 15],
'startlink' => 61
],
'pg' => [
'questname' => 'Ãåðîè÷. Ñðàæåíèÿ',
'quest' => 'Ïîó÷àñòâîâàòü â ãåðîè÷åñêîì ñðàæåíèè.',
'check' => ['Ó÷àñòèé', 100, 200, 400, 600, 1000],
'prize' => ['Æåòîí <br>óñïåõà <br>', 10, 20, 40, 60, 80],
'questname' => 'Героич. Сражения',
'quest' => 'Поучаствовать в героическом сражении.',
'check' => ['Участий', 100, 200, 400, 600, 1000],
'prize' => ['Жетон <br>успеха <br>', 10, 20, 40, 60, 80],
'startlink' => 71
],
'bv' => [
'questname' => 'Ïðîäàæè Áàáóøêå',
'quest' => 'Ïðîäàòü áàáóøêå íàéäåííûå âåùè â ïåùåðå.',
'check' => ['Ïðîäàæ', 5, 25, 50, 100, 250],
'prize' => ['êð.', 500, 1000, 2000, 4000, 5000],
'questname' => 'Продажи Бабушке',
'quest' => 'Продать бабушке найденные вещи в пещере.',
'check' => ['Продаж', 5, 25, 50, 100, 250],
'prize' => ['кр.', 500, 1000, 2000, 4000, 5000],
'startlink' => 81
],
'kw' => [
'questname' => 'Êëàí Ïîåäèíêè',
'quest' => 'Ïîáåäèòü â êëàíîâîé âîéíå.',
'check' => ['Ïîáåä', 5, 10, 15, 20, 25],
'prize' => ['Ñâèòîê <br> êëàíîâîãî<br> îïûòà ', 1, 2, 5, 10, 15],
'questname' => 'Клан Поединки',
'quest' => 'Победить в клановой войне.',
'check' => ['Побед', 5, 10, 15, 20, 25],
'prize' => ['Свиток <br> кланового<br> опыта ', 1, 2, 5, 10, 15],
'startlink' => 91
],
'pa' => [ # not implemented!
'questname' => 'Ïîêðîâèòåëüñòâî',
'quest' => 'Ïîëó÷èòü ïîêðîâèòåëüñòâî Àíãåëà.',
'check' => ['Ïîëó÷åíî', 5, 25, 50, 100, 250],
'questname' => 'Покровительство',
'quest' => 'Получить покровительство Ангела.',
'check' => ['Получено', 5, 25, 50, 100, 250],
'prize' => null,
'startlink' => null
],
'bs' => [
'questname' => 'Áàøíÿ ñìåðòè',
'quest' => 'Ïîáåäû â áàøíå ñìåðòè.',
'check' => ['Ïîáåä', 1, 5, 10, 50, 500],
'prize' => ['åêð.', 1, 5, 10, 50, 200],
'questname' => 'Башня смерти',
'quest' => 'Победы в башне смерти.',
'check' => ['Побед', 1, 5, 10, 50, 500],
'prize' => ['екр.', 1, 5, 10, 50, 200],
'startlink' => 101
],
'trn' => [ # not implemented!
'questname' => 'Òóðíèðû',
'quest' => 'Ïîó÷àâñòâîâàòü â òóðíèðàõ.',
'check' => ['Ïîáåä', 25, 50, 100, 200, 500],
'prize' => ['åêð.', 25, 25, 25, 25, 50],
'questname' => 'Турниры',
'quest' => 'Поучавствовать в турнирах.',
'check' => ['Побед', 25, 50, 100, 200, 500],
'prize' => ['екр.', 25, 25, 25, 25, 50],
'startlink' => 111
],
];
public function __construct(\User $user)
public function __construct(User $user)
{
$this->user = $user;
$this->info = Db::getRow('select * from users_achiv where id = ?', [$user->info['id']]);
}
private function prizeName($int, $string)
//fixme: сюда иногда приходит (NULL, NULL).
private function prizeName(?int $int, ?string $string): string
{
return in_array($string, ['åêð.', 'êð.']) ? $int . ' ' . $string : $string . ' ' . $int;
return in_array($string, ['екр.', 'кр.']) ? $int . ' ' . $string : $string . ' ' . $int;
}
private function drawSunduk($nagr, $whatInside, $tier)
private function drawSunduk($nagr, $whatInside, $tier): string
{
return vsprintf('<img onclick="%s" onmouseover="%s" onmouseout="%s" onmousedown="%s" class="cp" src="%s" alt="Ñóíäóê">',
return vsprintf(
'<img onclick="%s" onmouseover="%s" onmouseout="%s" onmousedown="%s" class="cp" src="%s" alt="Сундук">',
[
"location.href='\main.php?titul&nagr=$nagr'",
"top.hi(this, '<b>Ñóíäóê $tier ðàíãà<hr>Ñîäåðæèò:<hr> $whatInside</b>', event, 2, 0, 1, 1, 'max-width:307px')",
"top.hi(this, '<b>Сундук $tier ранга<hr>Содержит:<hr> $whatInside</b>', event, 2, 0, 1, 1, 'max-width:307px')",
"top.hic();",
"top.hic();",
"https://img.new-combats.com/i/titul/nagr$tier.gif"
]);
]
);
}
public function getList()
public function getList(): string
{
$string = '';
$this->calculateCurrent(1);
foreach ($this->data as $key => $value) {
//Áëÿ, êàêóþ õåðíþ ïðèõîäèòñÿ ãîðîäèòü!
//Ïåðâîå ÷èñëî = òðåáîâàíèå ñëåäóþùåãî òèðà ìèíóñ òðåáîâàíèå òåêóùåãî òèðà (íàäî íàáðàòü)
//Âòîðîå ÷èñëî = êîëè÷åñòâî äîñòèæåíèé ìèíóñ òðåáîâàíèå òåêóùåãî òèðà (íàáðàë)
//Òðåáîâàíèÿ òåêóùåãî òèðà îòíèìàþòñÿ ÷òîáû êàæäûé òèð íà÷èíàë ñ÷èòàòü ïðîöåíò ñ 0.
//Ïèçäû äàòü òîìó, êòî òàê óåáàíñêè íàçûâàåò ïåðåìåííûå, ÷òî íóæíî ïîëäíÿ âúåçæàòü ÷òî ïðîèñõîäèò.
//È õåð ïîìåíÿåøü - âñ¸ ñëîìàåòñÿ. FFUUUUUUUUUUUUUU!!! Ins.
//Бля, какую херню приходится городить!
//Первое число = требование следующего тира минус требование текущего тира (надо набрать)
//Второе число = количество достижений минус требование текущего тира (набрал)
//Требования текущего тира отнимаются чтобы каждый тир начинал считать процент с 0.
//Пизды дать тому, кто так уебански называет переменные, что нужно полдня въезжать что происходит.
//И хер поменяешь - всё сломается. FFUUUUUUUUUUUUUU!!! Ins.
if (!is_numeric($value['check'][$this->info['klas' . $key]])) {
// Потомы что первый элемент массива - слово. В РНР5.4 прокатывало, в РНР7.4 - нет.
$value['check'][$this->info['klas' . $key]] = 0;
}
$percentToSuccess = Math::get100Percentage(
$value['check'][$this->info['klas' . $key] + 1] - $value['check'][$this->info['klas' . $key]],
$this->info[$key] - $value['check'][$this->info['klas' . $key]]
@@ -135,14 +148,15 @@ class Achievements
$questname = empty($value['questname']) ? $value['quest'] : $value['questname'];
$string .= '<h4>' . $questname . '</h4>';
$string .= '<strong>' . $value['quest'] . '</strong><br>';
$string .= 'Òåêóùèé Ðàíã: <strong>' . $this->info['klas' . $key] . '</strong> ';
$string .= 'Êîëè÷åñòâî ' . mb_strtolower($value['check'][0]) . ': <strong>' . $this->info[$key] . ' =' . $percentToSuccess . '%</strong>';
$string .= 'Текущий Ранг: <strong>' . $this->info['klas' . $key] . '</strong> ';
$string .= 'Количество ' . mb_strtolower($value['check'][0]) . ': <strong>' . $this->info[$key] . ' = ' . $percentToSuccess . '%</strong>';
//$string .= '<progress value="' . $percentToSuccess . '" max="100" style="accent-color:green; appearance: none;">' . $percentToSuccess . '</progress>';
$string .= Table::get([
['Ðàíãè', 1, 2, 3, 4, 5],
['Ранги', 1, 2, 3, 4, 5],
$value['check'],
[
'Íàãðàäà',
'Награда',
$this->prizeName($value['prize'][1], $value['prize'][0]),
$this->prizeName($value['prize'][2], $value['prize'][0]),
$this->prizeName($value['prize'][3], $value['prize'][0]),
@@ -157,7 +171,7 @@ class Achievements
!empty($value['prize']) &&
!empty($value['startlink'])
) {
$string .= '<br>Íàãðàäà:<br>';
$string .= '<br>Награда:<br>';
$string .= $this->drawSunduk(
$this->info[$key . '_n'] + $value['startlink'],
$this->prizeName($value['prize'][$this->info[$key . '_n'] + 1], $value['prize'][0]),
@@ -182,6 +196,10 @@ class Achievements
continue;
}
if (is_null($this->info[$k])) {
$this->info[$k] = 0;
}
$this->info["klas$k"] = 0;
$this->info["name$k"] = $this->data[$k]['questname'];
$this->info["klasP$k"] = Math::get100Percentage($this->data[$k]['check'][1], $this->info[$k]);
@@ -190,7 +208,7 @@ class Achievements
if ($this->info[$k] >= $this->data[$k]['check'][$i]) {
$this->info["klas$k"] = $i;
if ($i === 5) {
# Íà 5 ðàíãå äîëæíî îòäàâàòü ìàêñèìóì.
# На 5 ранге должно отдавать максимум.
$this->info["klasP$k"] = 100;
} else {
$this->info["klasP$k"] = Math::get100Percentage(
@@ -203,10 +221,10 @@ class Achievements
}
}
public function getInfo($user_id = null)
public function getInfo(?int $uid = null)
{
if (!is_null($user_id)) {
$this->info = Db::getRow('select * from users_achiv where id = ?', [$user_id]);
if (!is_null($uid)) {
$this->info = \Core\Db::getRow('select * from users_achiv where id = ?', [$uid]);
}
$this->calculateCurrent();
return $this->info;
@@ -220,7 +238,7 @@ class Achievements
private function addOne($name)
{
Db::sql("update users_achiv set $name = $name + 1 where id = ?", [$this->user->info['id']]);
\Core\Db::sql("update users_achiv set $name = $name + 1 where id = ?", [$this->user->info['id']]);
}
public function updateTier($name)
@@ -240,12 +258,12 @@ class Achievements
/**
* @return array[]
*/
public function getData()
public function getData(): array
{
return $this->data;
}
public function hasNoTier4Access($nagr)
public function hasNoTier4Access($nagr): bool
{
return $this->user->info['level'] < 9 && in_array($nagr, [14, 15, 24, 25, 34, 35, 44, 45, 54, 55, 64, 65, 74, 75, 84, 85, 94, 95, 104, 105]);
}
@@ -257,7 +275,7 @@ class Achievements
}
}
public function getTypes()
public function getTypes(): array
{
return array_keys($this->data);
}
+8 -8
View File
@@ -1,16 +1,16 @@
<?php
use Insallah\Tournament;
//use Insallah\Tournament;
require_once 'Core/Db.php';
//require_once 'Core/Db.php';
require_once 'Core/Math.php';
require_once 'Core/Table.php';
require_once 'Runes/Runes.php';
require_once 'Tournament/Tournament.php';
require_once 'Tournament/TournamentModel.php';
//require_once 'Tournament/Tournament.php';
//require_once 'Tournament/TournamentModel.php';
require_once 'Achievements.php';
//Âìåñòî êðîíà äëÿ òóðíèðà.
if (Tournament::IS_ENABLED) {
(new Tournament())->startAllBattles();
}
//Вместо крона для турнира.
//if (Tournament::IS_ENABLED) {
// (new Tournament())->startAllBattles();
//}
-170
View File
@@ -1,170 +0,0 @@
<?php
namespace Insallah;
use Exception;
use http\Message;
use PDO;
use PDOException;
use PDOStatement;
class Db
{
/**
* Íàñòðîéêè ïîäêëþ÷åíèÿ
* Ëó÷øå âûíîñèòü â êîíôèã
* self::DB_HOST -> Config::DB_HOST
*/
const DB_HOST = '127.0.0.1'; // localhost
const DB_USER = 'newcom1_abk';
const DB_PASSWORD = '4nWYsIM[c?}P';
const DB_NAME = 'newcom1_abk';
const CHARSET = 'cp1251';
const DB_PREFIX = '';
/**
* @var PDO
*/
static private $db;
/**
* @var null
*/
protected static $instance = null;
/**
* DB constructor.
* @throws Exception
*/
public function __construct()
{
if (self::$instance === null) {
try {
self::$db = new PDO(
'mysql:host=' . self::DB_HOST . ';dbname=' . self::DB_PREFIX . self::DB_NAME,
self::DB_USER,
self::DB_PASSWORD,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES " . self::CHARSET,
]
);
} catch (PDOException $e) {
throw new Exception ($e->getMessage());
}
}
return self::$instance;
}
/**
* @param $stmt
* @return PDOStatement
*/
public static function query($stmt)
{
return self::$db->query($stmt);
}
/**
* @param $stmt
* @return PDOStatement
*/
public static function prepare($stmt)
{
return self::$db->prepare($stmt);
}
/**
* @param $query
* @return int
*/
static public function exec($query)
{
return self::$db->exec($query);
}
/**
* @return string
*/
static public function lastInsertId()
{
return self::$db->lastInsertId();
}
/**
* @param $query
* @param array $args
* @return PDOStatement
* @throws Exception
*/
public static function run($query, $args = [])
{
try {
if (!$args) {
return self::query($query);
}
$stmt = self::prepare($query);
$stmt->execute($args);
return $stmt;
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
/**
* @param $query
* @param array $args
* @return mixed
* @throws Exception
*/
public static function getRow($query, $args = [])
{
return self::run($query, $args)->fetch();
}
/**
* @param $query
* @param array $args
* @return array
* @throws Exception
*/
public static function getRows($query, $args = [])
{
return self::run($query, $args)->fetchAll();
}
/**
* @param $query
* @param array $args
* @return mixed
* @throws Exception
*/
public static function getValue($query, $args = [])
{
$result = self::getRow($query, $args);
if (!empty($result)) {
$result = array_shift($result);
}
return $result;
}
/**
* @param $query
* @param array $args
* @return array
* @throws Exception
*/
public static function getColumn($query, $args = [])
{
return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
}
/**
* @throws Exception
*/
public static function sql($query, $args = [])
{
self::run($query, $args);
}
}
+165
View File
@@ -0,0 +1,165 @@
<?php
namespace Insallah;
//use Core\Database;
use Exception;
//use http\Message;
use PDO;
use PDOException;
use PDOStatement;
class DbOld
{
/**
* Настройки подключения
* Лучше выносить в конфиг
* self::DB_HOST -> Config::DB_HOST
*/
const DB_HOST = '127.0.0.1'; // localhost
const DB_USER = 'newcom1_abk';
const DB_PASSWORD = '4nWYsIM[c?}P';
const DB_NAME = 'newcom1_abk';
const CHARSET = 'utf8mb4';
const DB_PREFIX = '';
/**
* @var PDO
*/
static private $db;
/**
* @var null
*/
protected static $instance = null;
/**
* DB constructor.
* @throws Exception
*/
public function __construct()
{
if (self::$instance === null) {
try {
self::$db = new PDO(
'mysql:host=' . self::DB_HOST . ';dbname=' . self::DB_PREFIX . self::DB_NAME,
self::DB_USER,
self::DB_PASSWORD,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES " . self::CHARSET,
]
);
// self::$db = Database::pdoinit();
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
return self::$instance;
}
/**
* @param $stmt
* @return PDOStatement
*/
public static function query($stmt)
{
return self::$db->query($stmt);
}
/**
* @param $stmt
* @return PDOStatement
*/
public static function prepare($stmt)
{
return self::$db->prepare($stmt);
}
/**
* @param $query
* @return int
*/
static public function exec($query)
{
return self::$db->exec($query);
}
/**
* @return string
*/
static public function lastInsertId()
{
return self::$db->lastInsertId();
}
/**
* @param $query
* @param array $args
* @return PDOStatement
* @throws Exception
*/
public static function run($query, $args = [])
{
try {
if (!$args) {
return self::query($query);
}
$stmt = self::prepare($query);
$stmt->execute($args);
return $stmt;
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
/**
* @param $query
* @param array $args
* @return mixed
*/
public static function getRow($query, $args = [])
{
return self::run($query, $args)->fetch();
}
/**
* @param $query
* @param array $args
* @return array
*/
public static function getRows($query, $args = [])
{
return self::run($query, $args)->fetchAll();
}
/**
* @param $query
* @param array $args
* @return mixed
*/
public static function getValue($query, $args = [])
{
$result = self::getRow($query, $args);
if (!empty($result)) {
$result = array_shift($result);
}
return $result;
}
/**
* @param $query
* @param array $args
* @return array
*/
public static function getColumn($query, $args = [])
{
return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
}
public static function sql($query, $args = [])
{
self::run($query, $args);
}
}
+14 -3
View File
@@ -5,19 +5,30 @@ namespace Insallah;
/** All raw mathematics in one place. */
class Math
{
public static function getPercentage($total, $number)
/**
* @param float|int $total
* @param int|null $number
* @return float
*/
public static function getPercentage($total, ?int $number): float
{
if (is_null($number)) {
return 0;
}
return $total > 0 ? round(($number * 100) / $total, 2) : 0;
}
public static function get100Percentage($total, $number)
public static function get100Percentage($total, ?int $number)
{
if (is_null($number)) {
return 0;
}
return min(self::getPercentage($total, $number), 100);
}
/** Number-20% and Number+20% */
public static function get20PercentRange($number)
public static function get20PercentRange($number): array
{
return [
'min' => $number * ((100 - 20) / 100),
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace Insallah;
/** All raw mathematics in one place. */
class Math
{
/**
* @param float|int $total
* @param int|null $number
* @return float
*/
public static function getPercentage($total, int $number): float
{
return $total > 0 ? round(($number * 100) / $total, 2) : 0;
}
public static function get100Percentage($total, int $number)
{
return min(self::getPercentage($total, $number), 100);
}
/** Number-20% and Number+20% */
public static function get20PercentRange($number): array
{
return [
'min' => $number * ((100 - 20) / 100),
'max' => $number * ((100 + 20) / 100),
];
}
public static function addPercent($num, $percent)
{
return $num + (($percent / 100) * $num);
}
}
+2 -3
View File
@@ -5,7 +5,6 @@ namespace Insallah;
class Runes
{
/** Создаём руну в зависимости от уровня.
*
* @param $level
*
* @return array
@@ -15,7 +14,7 @@ class Runes
if (!in_array($level, [8, 9, 10])) {
return [];
}
$power = [8 => 3, 9 => 5, 10 => 7];
$power = [8 => 3, 9 => 3, 10 => 5];
$stats = [8 => 1, 9 => 3, 10 => 3];
$rand9 = array_rand(array_flip(['hpAll', 'm2', 'm5']));
$runes = [
@@ -64,7 +63,7 @@ class Runes
$returnData = '|' . http_build_query($resultRune, '', '|');
$returnData = str_replace('|', '|add_', $returnData);
//Строчка человекопонятных параметров в статус.
$returnText = urldecode(http_build_query($resultText, '', ', '));
$returnText = urldecode(http_build_query($resultText, '', ', '));
$returnText = 'Характеристики Руны: ' . str_replace('=', ': +', $returnText) . '.';
return [$returnData, $returnText];
}
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace Insallah;
class Table
{
public static function get($rows, $class = '', $fill = false)
{
$c = '';
$max_rows = sizeof(max($rows));
foreach ($rows as $row) {
if ($fill && sizeof($row) < $max_rows) {
$row = array_merge($row, array_fill(0, $max_rows - sizeof($row), ''));
}
$c .= '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';
}
return (!empty($class) ? "<table class='$class'>" : '<table>') . $c . '</table>' . PHP_EOL;
}
}
@@ -5,46 +5,46 @@ namespace Insallah;
class Tournament
{
const IS_ENABLED = true;
const SEND_CHAT_MESSAGE = 3;
const START_TOURNAMENT = 5;
const PRIZE1 = 25;
const PRIZE2 = 10;
const PRIZE3 = 5;
private const SEND_CHAT_MESSAGE = 3;
private const START_TOURNAMENT = 5;
private const PRIZE1 = 25;
private const PRIZE2 = 10;
private const PRIZE3 = 5;
const MIN_EXP = 175000;
const CHAT_MESSAGE = 'Âíèìàíèå! Òóðíèð äëÿ %d óðîâíÿ îòêðûò! Ïîñïåøèòå ïðèíÿòü ó÷àñòèå â Çàëå Âîèíîâ!';
const VICTORY_MESSAGE = 'Òóðíèð äëÿ %d óðîâíåé çàâåðø¸í! Ïåðâîå ìåñòî: %s. Âòîðîå ìåñòî: %s. Òðåòüå ìåñòî: %s.';
const DELAY1 = '+12hour';
const DELAY2 = '+6hour';
const DELAY3 = '+3hour';
private const CHAT_MESSAGE = 'Внимание! Турнир для %d уровня открыт! Поспешите принять участие в Зале Воинов!';
private const VICTORY_MESSAGE = 'Турнир для %d уровней завершён! Первое место: %s. Второе место: %s. Третье место: %s.';
private const DELAY1 = '+12hour';
private const DELAY2 = '+6hour';
private const DELAY3 = '+3hour';
/** Ôîðìóëà ðàññ÷¸òà ðàçðåø¸ííîé ñòîèìîñòè îäåòûõ ïðåäìåòîâ.
/** Формула рассчёта разрешённой стоимости одетых предметов.
*
* @param int $int
*
* @return float|int
*/
public static function ekrOverpriceFormula($int)
public static function ekrOverpriceFormula(int $int): int
{
return ($int - 7) * 151;
}
/**
* Ïðîâåðÿåì ìîæåò ëè èãðîê ó÷àâñòâîâàòü â òóðíèðå è ëèáî ïðèñîåäèíÿåì åãî, ëèáî îáëàìûâàåì.
* Проверяем может ли игрок учавствовать в турнире и либо присоединяем его, либо обламываем.
*
* @param int $user_id
* @param int $uid
*
* @return void
*/
public function join($user_id)
public function join(int $uid): void
{
/** Âîçâðàùàåò level, èëè 0 åñëè ïðîâàëåíû ïðîâåðêè. */
$userLevel = TournamentModel::getUserLevel($user_id);
/** Возвращает level, или 0 если провалены проверки. */
$userLevel = TournamentModel::getUserLevel($uid);
if (
$userLevel === 0 ||
TournamentModel::isEkrOverpriced($user_id, $userLevel) ||
!TournamentModel::isEnoughExperience($user_id) ||
TournamentModel::IsRestrictedToJoin($user_id) ||
TournamentModel::isStarted($user_id)
TournamentModel::isEkrOverpriced($uid, $userLevel) ||
!TournamentModel::isEnoughExperience($uid) ||
TournamentModel::isRestrictedToJoin($uid) ||
TournamentModel::isStarted($uid)
) {
return;
}
@@ -54,7 +54,7 @@ class Tournament
TournamentModel::createTournament($userLevel);
}
TournamentModel::joinTournament($user_id, $userLevel);
TournamentModel::joinTournament($uid, $userLevel);
$mq++;
if ($mq == self::SEND_CHAT_MESSAGE) {
@@ -67,37 +67,39 @@ class Tournament
}
/**
* Ïðîâåðêà äëÿ êðîíà\êîíôèãà. Âûáèâàåò ïðîèãðàâøèõ è ïåðåçàïóñêàåò ïîåäèíêè âî âñåõ òóðíèðàõ.
* Проверка для крона\конфига. Выбивает проигравших и перезапускает поединки во всех турнирах.
* @return void
*/
public function startAllBattles()
public function startAllBattles(): void
{
$db = new Db();
$db::sql('delete from tournaments where start_time + date_add(start_time,interval 30 minute) < unix_timestamp()');
$db::sql(
'delete from tournaments where start_time + date_add(start_time,interval 30 minute) < unix_timestamp()'
);
TournamentModel::removeFighter(TournamentModel::getLooser());
$tournament_levels = $db::getColumn('select tid from tournaments where start_time = -1');
foreach ($tournament_levels as $level) {
$alive_fighters = TournamentModel::getFreeFighters($level);
if (count($alive_fighters) > 1) {
shuffle($alive_fighters);
$this->start_battle($alive_fighters);
} elseif (count($alive_fighters) === 1) {
TournamentModel::removeFighter($alive_fighters[0], true);
$tournamentLevels = $db::getColumn('select tid from tournaments where start_time = -1');
foreach ($tournamentLevels as $level) {
$aliveFighters = TournamentModel::getFreeFighters($level);
if (count($aliveFighters) > 1) {
shuffle($aliveFighters);
$this->startBattle($aliveFighters);
} elseif (count($aliveFighters) === 1) {
TournamentModel::removeFighter($aliveFighters[0], true);
$this->victory($level);
}
}
}
/**
* Ïîëó÷àåì ïàðû áîéöîâ è íà÷èíàåì èõ ïîåäèíêè.
* Получаем пары бойцов и начинаем их поединки.
*
* @param array $fighters_list
* @param array $fightersList
*
* @return void
*/
private function start_battle(array $fighters_list)
private function startBattle(array $fightersList): void
{
$teams = TournamentModel::getFightersTeams($fighters_list);
$teams = TournamentModel::getFightersTeams($fightersList);
foreach ($teams as $team) {
if (count($team) === 2) {
TournamentModel::startBattle($team[0], $team[1]);
@@ -106,15 +108,15 @@ class Tournament
}
/**
* Íàãðàæäàåì ïîáåäèòåëåé òóðíèðà, ÷èñòèì áàçó.
* Награждаем победителей турнира, чистим базу.
*
* @param int $tournament_id
* @param int $tid
*
* @return void
*/
private function victory($tournament_id)
private function victory(int $tid): void
{
$winners = TournamentModel::getWinners($tournament_id);
$winners = TournamentModel::getWinners($tid);
sleep(1);
TournamentModel::givePrizeItems($winners[1], self::PRIZE1);
TournamentModel::givePrizeItems($winners[2], self::PRIZE2);
@@ -124,12 +126,16 @@ class Tournament
TournamentModel::giveDelay($winners[2], strtotime(self::DELAY2));
TournamentModel::giveDelay($winners[3], strtotime(self::DELAY3));
sleep(1);
TournamentModel::sysMessage(sprintf(self::VICTORY_MESSAGE,
$tournament_id,
TournamentModel::uidToLogin($winners[1]),
TournamentModel::uidToLogin($winners[2]),
TournamentModel::uidToLogin($winners[3])));
TournamentModel::sysMessage(
sprintf(
self::VICTORY_MESSAGE,
$tid,
TournamentModel::uidToLogin($winners[1]),
TournamentModel::uidToLogin($winners[2]),
TournamentModel::uidToLogin($winners[3])
)
);
sleep(3);
TournamentModel::destroyTournament($tournament_id);
TournamentModel::destroyTournament($tid);
}
}
}
@@ -6,14 +6,14 @@ class TournamentModel
{
/**
* ïðîâåðêà óðîâíÿ, ñòîèìîñòè ýêâèïà, ïðî÷èå ïðîâåðêè, ÷òî ïåðñîíàæ ñâîáîäåí
* òàéìåð îæèäàíèÿ 30 ìèíóò
* проверка уровня, стоимости эквипа, прочие проверки, что персонаж свободен
* таймер ожидания 30 минут
*
* @param int $uid
*
* @return int
*/
public static function getUserLevel($uid)
public static function getUserLevel(int $uid): int
{
$db = new Db();
$level = $db::getValue('select level from users where id = ? and level between 8 and 12 and battle = 0', [$uid]);
@@ -21,12 +21,12 @@ class TournamentModel
}
/**
* @param int $uid
* @param int $level
* @param int $uid
* @param int|null $level
*
* @return bool
*/
public static function isEkrOverpriced($uid, $level = null)
public static function isEkrOverpriced(int $uid, ?int $level = null): bool
{
$db = new Db();
if (is_null($level)) {
@@ -41,7 +41,7 @@ class TournamentModel
*
* @return bool
*/
public static function isEnoughExperience($uid)
public static function isEnoughExperience(int $uid): bool
{
$db = new Db();
return $db::getValue('select exp from stats where id = ?', [$uid]) >= Tournament::MIN_EXP;
@@ -52,130 +52,128 @@ class TournamentModel
*
* @return bool
*/
public static function IsRestrictedToJoin($uid)
public static function isRestrictedToJoin(int $uid): bool
{
$db = new Db();
$delayEffect = $db::getValue('select count(*) from eff_users where uid = ? and id_eff = 486 and `delete` = 0', [$uid]);
return (bool)$delayEffect;
return $db::getValue('select count(*) from eff_users where uid = ? and id_eff = 486 and `delete` = 0', [$uid]);
}
/**
* @param $tid
* @param int $tid
*
* @return bool
*/
public static function isStarted($tid)
public static function isStarted(int $tid): bool
{
$db = new Db();
$status = $db::getValue('select count(*) from tournaments where start_time = -1 and tid = ?', [$tid]);
return (bool)$status;
return $db::getValue('select count(*) from tournaments where start_time = -1 and tid = ?', [$tid]);
}
/**
* Ñ÷èòàåì ñêîëüêî èãðîêîâ æäóò â çàÿâêå íà òóðíèð.
* Считаем сколько игроков ждут в заявке на турнир.
*
* @param int $tid
*
* @return int
*/
public static function getWaitingMembersQuantity($tid)
public static function getWaitingMembersQuantity(int $tid): int
{
$db = new Db();
return $db::getValue('select count(*) from tournaments_users where tid = ?', [$tid]);
}
/**
* Ñîçäàíèå íîâîãî òóðíèðà.
* Создание нового турнира.
*
* @param int $tid
*
* @return void
*/
public static function createTournament($tid)
public static function createTournament(int $tid): void
{
$db = new Db();
$db::sql('insert into tournaments (tid) values (?)', [$tid]);
}
/**
* Èãðîê ïðèñîåäèíÿåòñÿ ê òóðíèðó è òåëåïîðòèðóåòñÿ â òóðíèðíóþ êîìíàòó.
* Игрок присоединяется к турниру и телепортируется в турнирную комнату.
*
* @param int $uid
* @param int $tid
*
* @return void
*/
public static function joinTournament($uid, $tid)
public static function joinTournament(int $uid, int $tid): void
{
/** Êàñòîìíûå êîìíàòû 25008 - 25012. */
$room_id = 25000 + $tid;
/** Кастомные комнаты 25008 - 25012. */
$roomId = 25000 + $tid;
$db = new Db();
$db::sql('insert into tournaments_users (tid, uid) values (?, ?)', [$tid, $uid]);
self::teleport($uid, $room_id);
self::teleport($uid, $roomId);
}
/**
* Ñòàðò òóðíèðà.
* Старт турнира.
*
* @param int $tid
*
* @return void
*/
public static function startTournament($tid)
public static function startTournament(int $tid): void
{
$db = new Db();
$db::sql('update tournaments set start_time = -1 where tid = ?', [$tid]);
}
/**
* ×èñòèì áàçû îò ïðîøåäøåãî òóðíèðà.
* Чистим базы от прошедшего турнира.
*
* @param int $tid
*
* @return void
*/
public static function destroyTournament($tid)
public static function destroyTournament(int $tid): void
{
$db = new Db();
//Óáåäèòüñÿ ÷òî â áàçå íàñòðîåí foreign_keys è ïîñëåäóåò àâòîî÷èñòêà tournaments_users !!!
//Убедиться что в базе настроен foreign_keys и последует автоочистка tournaments_users !!!
$db::sql('delete from tournaments where tid = ?', [$tid]);
}
/**
* Ïîëó÷àåì ñïèñîê áîéöîâ è áü¸ì èõ íà ïàðû. Âîçâðàùàåì ñïèñêè ïàð + 1 ïîñëåäíèé áåç ïàðû åñëè åñòü.
* Получаем список бойцов и бьём их на пары. Возвращаем списки пар + 1 последний без пары если есть.
*
* @param array $fighters_list
* @param array $fightersList
*
* @return array
*/
public static function getFightersTeams(array $fighters_list)
public static function getFightersTeams(array $fightersList): array
{
$db = new Db();
$query = sprintf("select id from users where battle = 0 and id in (%s)", implode(', ', $fighters_list));
$query = sprintf("select id from users where battle = 0 and id in (%s)", implode(', ', $fightersList));
return array_chunk($db::getColumn($query), 2);
}
/**
* Âûáèðàåì æèâûõ áîéöîâ íå ñðàæàþùèõñÿ â äàííûé ìîìåíò.
* Выбираем живых бойцов не сражающихся в данный момент.
*
* @param int $tid
*
* @return array
*/
public static function getFreeFighters($tid)
public static function getFreeFighters(int $tid): array
{
$db = new Db();
return $db::getColumn('select uid from tournaments_users where tid = ? and death_time = 0 order by uid', [$tid]);
}
/**
* Âûáèðàåì ïîáåäèòåëåé. Ñìåùàåì ìàññèâ, ÷òîáû âîçâðàò ø¸ë ñ åäèíèöû.
* Выбираем победителей. Смещаем массив, чтобы возврат шёл с единицы.
*
* @param int $tid
*
* @return array
*/
public static function getWinners($tid)
public static function getWinners(int $tid): array
{
$db = new Db();
$winners = $db::getColumn('select uid from tournaments_users where tid = ? order by death_time desc limit 3', [$tid]);
@@ -187,24 +185,24 @@ class TournamentModel
}
/**
* Ïðîáóåì âûêóñèòü ïðîèãðàâøåãî â ïîñëåäíåé òóðíèðíîé áèòâå è óäàëèòü ýòó ñàìóþ áèòâó âî èçáåæàíèå.
* Пробуем выкусить проигравшего в последней турнирной битве и удалить эту самую битву во избежание.
* @return mixed
*/
public static function getLooser()
{
$query = '
select uid, battle
from
battle_users,
(select id, team_win
from battle
where
team_win > 0 and
typeBattle = 25000
order by time_over desc
limit 1) as last_battle
where
battle_users.battle = last_battle.id and
select uid, battle
from
battle_users,
(select id, team_win
from battle
where
team_win > 0 and
typeBattle = 25000
order by time_over desc
limit 1) as last_battle
where
battle_users.battle = last_battle.id and
battle_users.team != last_battle.team_win and
battle_users.uid in (select uid from tournaments_users where death_time = 0)';
@@ -214,103 +212,105 @@ class TournamentModel
where typeBattle = 25000 and death_time = 0 order by b.time_start desc limit 1';
$db = new Db;
$row = $db::getRow($query);
return $row['uid'];
return $row['uid'] ?? 0;
}
/**
* Âûáûâøèé èç òóðíèðà ïîêèäàåò êîìíàòó è ïîëó÷àåò âðåìÿ ñìåðòè.
*
* @param int $uid
* Выбывший из турнира покидает комнату и получает время смерти.
*
* @param int $uid
* @param bool $winner
* @return void
*/
public static function removeFighter($uid, $winner = false)
public static function removeFighter(int $uid, bool $winner = false): void
{
if (!$uid) return;
//$winner_timer_add = $winner? 500 : 0; # Ïîñëåäíûé ÄÎËÆÅÍ áûòü ïîñëåäíèì.
if (!$uid) {
return;
}
//$winner_timer_add = $winner? 500 : 0; # Последный ДОЛЖЕН быть последним.
$db = new Db();
$db::sql('update tournaments_users set death_time = unix_timestamp() + 500 where death_time = 0 and uid = ?', [$uid]);
self::teleport($uid, 9);
//fixme: Êëàññû íå ïîäêëþ÷àþòñÿ äðóã ê äðóãó. Íóæíî ìåíÿòü àðõèòåêòóðó èãðû. :(
//fixme: Классы не подключаются друг к другу. Нужно менять архитектуру игры. :(
Db::sql("update users_achiv set trn = trn + 1 where id = ?", [$uid]);
//(new Achievements(\user::start()))->updateCounter('trn');
}
/**
* Óçíà¸ì id òóðíèðà ïî id èãðîêà.
* Узнаём id турнира по id игрока.
*
* @param int $uid
*
* @return mixed
*/
public static function getTournamentIdByUserId($uid)
public static function getTournamentIdByUserId(int $uid)
{
$db = new Db();
return $db::getValue('select tid from tournaments_users where uid = ?', [$uid]);
}
/**
* Ïîïðîáóåì ñòàðòîíóòü ïîåäèíîê.
* 25000 - Óíèêàëüíûé id ïîåäèíêà ïîä òóðíèðû.
* noinc - çàïðåò íà âìåøàòåëüñòâî
* invis - íåâèäèìûé áîé
* Попробуем стартонуть поединок.
* 25000 - Уникальный id поединка под турниры.
* noinc - запрет на вмешательство
* invis - невидимый бой
*
* @param int $uid1
* @param int $uid2
*
* @return void
*/
public static function startBattle($uid1, $uid2)
public static function startBattle(int $uid1, int $uid2): void
{
$db = new Db();
$check = Db::getValue('select count(*) from users where id in (?, ?) and battle = 0', [$uid1, $uid2]);
if ((int)$check !== 2) {
if ($check !== 2) {
return;
}
$db::exec('insert into battle (city, time_start, timeout, type, invis, noinc, travmChance, typeBattle)
$db::exec('insert into battle (city, time_start, timeout, type, invis, noinc, travmChance, typeBattle)
values (\'capitalcity\', unix_timestamp(), 60, 0, 1, 1, 0, 25000)');
$bid = $db::lastInsertId(); // ÂÀÆÍÎ!
$bid = $db::lastInsertId(); // ВАЖНО!
$db::sql('update stats set team = 1, hpNow = hpAll, mpNow = mpAll where id = ?', [$uid1]);
$db::sql('update stats set team = 2, hpNow = hpAll, mpNow = mpAll where id = ?', [$uid2]);
$db::sql('update users set battle = ? where id in (?, ?)', [$bid, $uid1, $uid2]);
}
/**
* Óçíà¸ì ëîãèí ïåðñîíàæà ïî åãî id.
* Узнаём логин персонажа по его id.
*
* @param int $uid
*
* @return mixed
*/
public static function uidToLogin($uid)
public static function uidToLogin(int $uid)
{
$db = new Db();
return $db::getValue('select login from users where id = ?', [$uid]);
}
/**
* Òåëåïîðò ïî êîìíàòàì.
* Телепорт по комнатам.
*
* @param int $uid
* @param int $room_id
* @param int $roomId
*
* @return void
*/
private static function teleport($uid, $room_id)
private static function teleport(int $uid, int $roomId): void
{
$db = new Db();
$db::sql('update users set room = ? where id = ?', [$room_id, $uid]);
$db::sql('update users set room = ? where id = ?', [$roomId, $uid]);
}
/**
* Íåò ïðîâåðîê $message ïîòîìó ÷òî îíî âñåãäà çàäà¸òñÿ â êîäå è èãðîê íà íåãî íå âëèÿåò.
* Нет проверок $message потому что оно всегда задаётся в коде и игрок на него не влияет.
*
* @param string $message
*
* @return void
*/
public static function sysMessage($message)
public static function sysMessage(string $message): void
{
if (!empty($message)) {
$db = new Db();
@@ -320,16 +320,16 @@ class TournamentModel
}
/**
* Ãåíåðèðóåò ìíîæåñòâåííûé çàïðîñ ñðàçó íà $quantity îäíîòèïíûõ ïðåäìåòîâ â èíâåíòàðü ïîëüçîâàòåëÿ $uid.
* Генерирует множественный запрос сразу на $quantity однотипных предметов в инвентарь пользователя $uid.
*
* @param int $uid
* @param int $quantity
*
* @return void
*/
public static function givePrizeItems($uid, $quantity)
public static function givePrizeItems(int $uid, int $quantity): void
{
$query = 'insert into items_users (item_id, uid, data, iznosMAX, lastUPD, time_create)
$query = 'insert into items_users (item_id, uid, data, iznosMAX, lastUPD, time_create)
values (4754, :uid, :data, 1, unix_timestamp(), unix_timestamp())';
$args = [
'uid' => $uid,
@@ -342,17 +342,17 @@ class TournamentModel
}
}
/** Ýôôåêò-îãðàíè÷èòåëü íà ó÷àñòèå â òóðíèðå.
* @param $uid
* @param $unix_time
/** Эффект-ограничитель на участие в турнире.
* @param int $uid
* @param int $unixtime
*
* @return void
*/
public static function giveDelay($uid, $unix_time)
public static function giveDelay(int $uid, int $unixtime): void
{
$db = new Db();
$query = 'insert into eff_users (id_eff, uid, name, timeUse) VALUES (?,?,?,?)';
$args = [486, $uid, 'Ïðèç¸ð ãîðîäñêîãî òóðíèðà!', $unix_time];
$args = [486, $uid, 'Призёр городского турнира!', $unixtime];
$db::sql($query, $args);
}
}
}
@@ -0,0 +1,35 @@
<?php
namespace Insallah\Tournaments;
class Config
{
const IS_ENABLED = true;
const SEND_CHAT_MESSAGE = 3;
const START_TOURNAMENT = 5;
const PRIZE1 = 25;
const PRIZE2 = 10;
const PRIZE3 = 5;
const MIN_EXP = 175000;
const CHAT_MESSAGE = 'Внимание! Турнир для %d уровня открыт! Поспешите принять участие в Зале Воинов!';
const VICTORY_MESSAGE = 'Турнир для %d уровней завершён! Первое место: %s. Второе место: %s. Третье место: %s.';
const DELAY1 = '+12hour';
const DELAY2 = '+6hour';
const DELAY3 = '+3hour';
const STEP_EKR = 151;
const DELAY_EFFECT_ID = 486;
const CUSTOM_BATTLE_ID = 25000;
const PRIZE_ITEM_ID = 4754;
const RETURN_ROOM = 9;
const MINIMUM_USER_LEVEL = 8;
/** Формула рассчёта разрешённой стоимости одетых предметов.
*
* @param $level
* @return float|int
*/
public static function ekrOverpriceFormula($level)
{
return max(($level - ($level - 1)) * self::STEP_EKR, 0);
}
}
@@ -0,0 +1,173 @@
<?php
namespace Insallah\Tournaments\Model;
use Insallah\Db;
use Insallah\Tournaments\Config;
class GameConnector
{
private array $u;
public function setUser(int $uid): GameConnector
{
$this->u = Db::getRow('select id, `level`, login, battle from users where id = ?', [$uid]);
return $this;
}
public function getAllowedLevel(): int
{
return $this->u['level'] >= Config::MINIMUM_USER_LEVEL && $this->u['battle'] === 0 ? $this->u['level'] : 0;
}
/**
* @return bool
*/
public function isEkrOverpriced(): bool
{
return Db::getValue('select sum(2price) from items_users where inOdet > 0 and uid = ?', [$this->u['id']])
> Config::ekrOverpriceFormula($this->u['level']);
}
/**
* @return bool
*/
public function isEnoughExperience(): bool
{
return Db::getValue('select exp from stats where id = ?', [$this->u['id']]) >= Config::MIN_EXP;
}
/**
* @return bool
*/
public function isRestrictedToJoin(): bool
{
return Db::getValue('select count(*) from eff_users where uid = ? and id_eff = ? and `delete` = 0', [
$this->u['id'], Config::DELAY_EFFECT_ID,]
) > 0;
}
/**
* Узнаём логин персонажа по его id.
*
* @return mixed
*/
public function uidToLogin()
{
return $this->u['login'];
}
/**
* Телепорт по комнатам.
*
* @param bool $out - обратный телепорт.
*
* @return void
*/
public function teleport(bool $out = false)
{
$roomId = $out ? Config::RETURN_ROOM : Config::CUSTOM_BATTLE_ID + $this->u['level'];
Db::sql('update users set room = ? where id = ?', [$roomId, $this->u['id']]);
}
/**
* Получаем список бойцов и бьём их на пары, между которыми стартуют поединки 1х1.
* noinc - запрет на вмешательство
* invis - невидимый бой
*
* @param array $fightersList
*
* @return void
*/
public static function startBattle(array $fightersList)
{
$teamsq = sprintf("select id from users where battle = 0 and id in (%s)", implode(', ', $fightersList));
$teams = array_chunk(Db::getColumn($teamsq), 2);
foreach ($teams as $team) {
if (count($team) !== 2) {
continue;
}
Db::exec(
'insert into battle (city, time_start, timeout, type, invis, noinc, travmChance, typeBattle)
values (\'capitalcity\', unix_timestamp(), 60, 0, 1, 1, 0, ' . Config::CUSTOM_BATTLE_ID . ')'
);
$battleId = Db::lastInsertId();
Db::sql('update stats set team = 1, zv = 0, hpNow = hpAll, mpNow = mpAll where id = ?', [$team[0]]);
Db::sql('update stats set team = 2, zv = 0, hpNow = hpAll, mpNow = mpAll where id = ?', [$team[1]]);
$query = sprintf('update users set battle = %d where id in (%d, %d)', $battleId, $team[0], $team[1]);
Db::exec($query);
}
}
/**
* Генерирует множественный запрос сразу на $quantity однотипных предметов в инвентарь пользователя $uid.
*
* @param int $quantity
*
* @return void
*/
public function givePrizeItems(int $quantity)
{
$query = 'insert into items_users (item_id, uid, `data`, iznosMAX, lastUPD, time_create)
values (' . Config::PRIZE_ITEM_ID . ', :uid, :data, 1, unix_timestamp(), unix_timestamp())';
$args = [
'uid' => $this->u['id'],
'data' => 'nosale=1|musor=1|sudba=' . $this->uidToLogin() . '|lvl=8|tr_s1=0|tr_s2=0|tr_s3=0|tr_s4=0',
];
$stmt = Db::prepare($query);
for ($i = 0; $i < $quantity; $i++) {
$stmt->execute($args);
}
}
/** Эффект-ограничитель на участие в турнире.
*
* @param int $unixtime
*
* @return void
*/
public function giveDelay(int $unixtime)
{
$query = 'insert into eff_users (id_eff, uid, `name`, timeUse) select id2, ?, mname, ? from eff_main where id2 = ?';
$args = [Config::DELAY_EFFECT_ID, $this->u['id'], strtotime($unixtime)];
Db::sql($query, $args);
}
/**
* Пробуем выкусить проигравшего в последней турнирной битве и удалить эту самую битву во избежание.
* @return mixed
*/
public static function getLooser(): int
{
$query = '
select uid
from
battle_users,
(select id, team_win
from battle
where
team_win > 0 and
typeBattle = ' . Config::CUSTOM_BATTLE_ID . '
order by time_over desc
limit 1) as last_battle
where
battle_users.battle = last_battle.id and
battle_users.team != last_battle.team_win';
return Db::getValue($query);
}
/**
* Нет проверок $message потому что оно всегда задаётся в коде и игрок на него не влияет.
*
* @param string $message
*
* @return void
*/
public static function sysMessage(string $message)
{
if (empty($message)) {
return;
}
Db::sql('insert into chat (`time`, type, `text`, new, da) values (unix_timestamp(), 6, ?, 1, 1)', [$message]);
}
}
@@ -0,0 +1,114 @@
<?php
namespace Insallah\Tournaments\Model;
use Insallah\Db;
class Tournament
{
private array $t;
public function __construct()
{
$this->t = Db::getRows('select * from tournaments') ?? [];
}
public function getAllStarted(): array
{
$tidList = [];
foreach ($this->t as $row) {
if ($row['start_time'] === -1) {
$tidList[] = $row['tid'];
}
}
return $tidList;
}
public function isStarted(int $tid): bool
{
foreach ($this->t as $row) {
if ($row['start_time'] === -1 && $row['tid'] === $tid) {
return true;
}
}
return false;
}
public function getList(): string
{
$list = '';
$tournamentMembersId = new User();
foreach ($this->t as $row) {
$time = $row['start_time'] === -1 ? 'Турнир уже начался!' : date('G:i', $row['start_time']);
$members = [];
foreach ($tournamentMembersId->getAlive($row['tid']) as $member) {
$members[] = (new GameConnector())->setUser($member)->uidToLogin();
}
$list .= sprintf(
"<li>Турнир для %d уровней.<br>Время подачи заявки: %s<br>Участники: %s</li>",
$row['tid'],
$time,
implode(', ', $members)
);
}
return $list ? "<div><strong>Активные турниры.</strong><br><ul>$list</ul></div>" : '';
}
public function getOne(int $tid): string
{
$str = '';
$tournamentMembersId = new User();
foreach ($this->t as $row) {
if ($this->t['tid'] === $tid) {
$time = $row['start_time'] === -1 ? 'Турнир уже начался!' : date('G:i', $row['start_time']);
$members = [];
foreach ($tournamentMembersId->getAlive($row['tid']) as $member) {
$members[] = (new GameConnector())->setUser($member)->uidToLogin();
}
$str = sprintf(
"<div>Турнир для %d уровней.<br>Время подачи заявки: %s<br>Участники: %s</div>",
$row['tid'],
$time,
implode(', ', $members)
);
}
}
return $str;
}
/**
* Создание нового турнира.
*
* @param int $tid
*
* @return void
*/
public static function create(int $tid)
{
Db::sql('insert into tournaments (tid) values (?)', [$tid]);
}
/**
* Старт турнира.
*
* @param int $tid
*
* @return void
*/
public static function start(int $tid)
{
Db::sql('update tournaments set start_time = -1 where tid = ?', [$tid]);
}
/**
* Чистим базы от прошедшего турнира.
*
* @param int $tid
*
* @return void
*/
public static function destroy(int $tid)
{
Db::sql('delete from tournaments where tid = ?', [$tid]);
}
}
@@ -0,0 +1,128 @@
<?php
namespace Insallah\Tournaments\Model;
use Insallah\Db;
class User
{
private array $u;
private int $waitingUsers = 0;
public function __construct()
{
$this->u = Db::getRows('select * from tournaments_users');
}
/**
* Считаем сколько игроков ждут в заявке на турнир.
*
* @param int $tid
*
* @return int
*/
public function getWaitingQuantity(int $tid): int
{
foreach ($this->u as $row) {
if ($row['tid'] === $tid) {
$this->addWaitingUser();
}
}
return $this->waitingUsers;
}
public function addWaitingUser()
{
$this->waitingUsers++;
}
/**
* Игрок присоединяется к турниру и телепортируется в турнирную комнату.
*
* @param int $uid
* @param int $tid
*
* @return void
*/
public function joinTournament(int $uid, int $tid)
{
Db::sql('insert into tournaments_users (tid, uid) values (?, ?)', [$tid, $uid]);
(new GameConnector())->setUser($uid)->teleport();
}
/**
* Выбираем живых бойцов не сражающихся в данный момент.
*
* @param int $tid
* @param bool $shuffle - установить true если нужно перетасовать массив.
*
* @return array
*/
public function getAlive(int $tid, bool $shuffle = false): array
{
$arr = [];
foreach ($this->u as $row) {
if ($row['tid'] === $tid && $row['death_time'] === 0) {
$arr[] = $row['uid'];
}
}
if ($shuffle) {
shuffle($arr);
}
return $arr;
}
/**
* Выбираем победителей.
*
* @param int $tid
*
* @return array
*/
public function getWinners(int $tid): array
{
$users = [];
$dt = [];
foreach ($this->u as $item) {
if ($item['tid'] === $tid) {
$users[]['uid'] = $item['uid'];
$users[]['death_time'] = $item['death_time'];
}
}
foreach ($users as $k => $v) {
$dt[$k] = $v['death_time'];
}
array_multisort($dt, SORT_DESC, $users);
return [
1 => $users[0],
2 => $users[1],
3 => $users[2]
];
}
/**
* Выбывший из турнира покидает комнату и получает время смерти.
*
* @param int $uid
*
* @return void
*/
public static function remove(int $uid)
{
Db::sql('update tournaments_users set death_time = unix_timestamp() where death_time = 0 and uid = ?', [$uid]);
(new GameConnector())->setUser($uid)->teleport(true);
}
/**
* Узнаём id турнира по id игрока.
*
* @param int $uid
*
* @return mixed
*/
public static function getTournamentIdByUserId(int $uid): int
{
return Db::getValue('select tid from tournaments_users where uid = ?', [$uid]);
}
}
@@ -0,0 +1,104 @@
<?php
namespace Insallah\Tournaments;
class Tournament
{
/**
* Проверяем может ли игрок учавствовать в турнире и либо присоединяем его, либо обламываем.
*
* @param int $uid
*
* @return void
*/
public function join(int $uid)
{
/** Возвращает level, или 0 если провалены проверки. */
$checks = new Model\GameConnector();
$tournament = new Model\Tournament();
$userLevel = $checks->setUser($uid)->getAllowedLevel();
if (
$userLevel === 0 ||
$checks->isEkrOverpriced() ||
!$checks->isEnoughExperience() ||
$checks->isRestrictedToJoin() ||
$tournament->isStarted($uid)
) {
return;
}
$user = new Model\User();
if (empty($user->getWaitingQuantity($userLevel))) {
Model\Tournament::create($userLevel);
}
$user->joinTournament($uid, $userLevel);
$user->addWaitingUser();
if ($user->getWaitingQuantity($userLevel) == Config::SEND_CHAT_MESSAGE) {
Model\GameConnector::sysMessage(sprintf(Config::CHAT_MESSAGE, $userLevel));
}
if ($user->getWaitingQuantity($userLevel) == Config::START_TOURNAMENT) {
Model\Tournament::start($userLevel);
}
}
/**
* Проверка для крона\конфига. Выбивает проигравших и перезапускает поединки во всех турнирах.
* @return void
*/
public static function startAllBattles()
{
if (!Config::IS_ENABLED) {
return;
}
$tournamentlevels = new Model\Tournament();
$alivefighters = new Model\User();
Model\User::remove(Model\GameConnector::getLooser());
foreach ($tournamentlevels->getAllStarted() as $level) {
$count = count($alivefighters->getAlive($level, true));
if ($count > 1) {
Model\GameConnector::startBattle($alivefighters->getAlive($level, true));
} elseif ($count === 1) {
Model\User::remove($alivefighters->getAlive($level, true)[0]);
self::victory($level);
}
}
}
/**
* Награждаем победителей турнира, чистим базу.
*
* @param int $tid
*
* @return void
*/
private static function victory(int $tid)
{
$u = new Model\User();
$uid = new Model\GameConnector();
sleep(1);
$uid->setUser($u->getWinners($tid)[1])->givePrizeItems(Config::PRIZE1);
$uid->setUser($u->getWinners($tid)[2])->givePrizeItems(Config::PRIZE2);
$uid->setUser($u->getWinners($tid)[3])->givePrizeItems(Config::PRIZE3);
sleep(1);
$uid->setUser($u->getWinners($tid)[1])->giveDelay(Config::DELAY1);
$uid->setUser($u->getWinners($tid)[2])->giveDelay(Config::DELAY2);
$uid->setUser($u->getWinners($tid)[3])->giveDelay(Config::DELAY3);
sleep(1);
Model\GameConnector::sysMessage(
sprintf(
Config::VICTORY_MESSAGE,
$tid,
$uid->setUser($u->getWinners($tid)[1])->uidToLogin(),
$uid->setUser($u->getWinners($tid)[2])->uidToLogin(),
$uid->setUser($u->getWinners($tid)[3])->uidToLogin()
)
);
sleep(3);
Model\Tournament::destroy($tid);
}
}
@@ -0,0 +1,52 @@
<?php
namespace Insallah\Tournaments\View;
use Insallah\Tournaments\Config;
use Insallah\Tournaments\Model\GameConnector;
use Insallah\Tournaments\Model\Tournament;
use Insallah\Tournaments\Model\User;
class TList
{
private string $str;
public function __construct($user)
{
if (!Config::IS_ENABLED) {
$this->str = '<div><strong style="color: crimson;">В данный момент турниры не проводятся!</strong></div>';
return;
}
$tournamentstatus = new Tournament();
$this->str = '<div>
<strong style="color: crimson;">Внимание!</strong>
<ul>
<li>Присоединяясь к турниру покинуть заявку <u>невозможно</u>!</li>';
if ((new GameConnector())->setUser($user->info['id'])->isEkrOverpriced()) {
$this->str .= '<li>Стоимость предметов, одетых на вас не должна
превышать ' . Config::ekrOverpriceFormula($user->info['level']) . ' еврокредитов.
</li>';
}
if ($user->info['exp'] < Config::MIN_EXP) {
$this->str .= '<li>У вас должно быть не менее ' . Config::MIN_EXP . ' опыта.</li>';
}
$this->str .= '<li>Турнир начнётся, когда в заявке
наберётся ' . Config::START_TOURNAMENT . ' человек.</li>
</ul>
</div>';
$this->str .= $tournamentstatus->getList();
if (!User::getTournamentIdByUserId($user->info['id']) || !$tournamentstatus->isStarted($user->info['level'])) {
$this->str .= '<form method="post">
<input type="submit" name="tournament_start" value="Принять участие в турнире">
<input type="hidden" name="key" value="' . $_SESSION['bypass'] . '">
</form>';
} else {
$this->str .= 'Вы учавствуете.';
}
}
public function __toString()
{
return $this->str;
}
}
+46
View File
@@ -0,0 +1,46 @@
<?php
use Core\Db;
class Learming
{
private $uid;
private $shouldStartLearning;
public function __construct()
{
/** @var User $user */
$user = User::start();
$this->uid = $user->info['id'];
$this->shouldStartLearning = $user->info['shouldStartLearning'];
}
public function getLearningStatus()
{
if (!isset($this->shouldStartLearning)) {
Db::sql('insert into users_learming (uid) value (?)' ,
[$this->uid]);
return 1;
}
return (bool)$this->shouldStartLearning;
}
public function hasLearned()
{
if (!isset($this->shouldStartLearning)) {
return false;
}
$this->shouldStartLearning = 0;
$this->save();
return true;
}
private function save()
{
if (empty($this->uid) || empty($this->shouldStartLearning)) {
return;
}
Db::sql('replace into users_learming (uid, shouldStartLearming) values (?,?)',
[$this->uid, $this->shouldStartLearning]);
}
}
+1 -2
View File
@@ -1338,7 +1338,6 @@ class Magic
'cityreg' => $u->info['cityreg'],
'name' => $u->info['name'],
'sex' => $u->info['sex'],
'deviz' => $u->info['deviz'],
'hobby' => $u->info['hobby'],
'time_reg' => $u->info['time_reg'],
'obraz' => $u->info['obraz'],
@@ -1604,7 +1603,7 @@ class Magic
private static function getDressedEkrTotalPrice($uid)
{
return \Insallah\Db::getValue('select sum(2price) from items_users where inOdet > 0 and uid = ?', [$uid]);
return \Core\Db::getValue('select sum(2price) from items_users where inOdet > 0 and uid = ?', [$uid]);
}
private static function canAttack8Level($attacker, $target)
+22
View File
@@ -0,0 +1,22 @@
<?php
class PassGen
{
public static function new($length = 8)
{
return substr(
preg_replace(
"/[^a-zA-Z0-9]/",
"",
base64_encode(openssl_random_pseudo_bytes($length + 1))
),
0,
$length
);
}
public static function intCode($length = 8): int
{
return mt_rand(10 ** ($length - 1), 10 ** $length - 1);
}
}
File diff suppressed because it is too large Load Diff
+121 -121
View File
@@ -4,7 +4,7 @@ class Quests
{
private $free_x = 28;
/* Проверка доступности квеста */
/* Проверка доступности квеста */
public function testGood($pl)
{
global $u;
@@ -17,12 +17,12 @@ class Quests
$d1 = 0;
$sp1 = mysql_fetch_array(mysql_query('SELECT COUNT(`id`) FROM `actions` WHERE `vars` LIKE "%start_quest%" AND `vals` = "go" AND `uid` = "' . $u->info['id'] . '" LIMIT 100'));
$pl1 = $pl1[0];
//Если уже более 5 квестов взяли
//Если уже более 5 квестов взяли
if ($d1 >= $this->free_x) {
$r = 0;
}
unset($d1, $pl1, $sp1);
//Если квест уже взяли
//Если квест уже взяли
$qlst = mysql_fetch_array(mysql_query('SELECT `id`,`vals` FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" ORDER BY `id` DESC LIMIT 1'));
if (isset($qlst['id']) && $qlst['vals'] != 'win' && $qlst['vals'] != 'end' && $qlst['vals'] != 'bad') {
$r = 0;
@@ -30,7 +30,7 @@ class Quests
unset($qlst, $qlst2);
$d = $this->expl($pl['tr_date']);
//Завершить квесты [ 1,2,3,4,5 ...
//Завершить квесты [ 1,2,3,4,5 ...
if (isset($d['tr_endq'])) {
$i = 0;
$e = explode(',', $d['tr_endq']);
@@ -43,7 +43,7 @@ class Quests
}
unset($qn, $qlst, $qlst2);
}
//Задержка между выполнением квеста
//Задержка между выполнением квеста
if (isset($d['tr_zdr'])) {
$qlst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" AND `vals` != "go" ORDER BY `time` DESC LIMIT 1'));
if ($qlst['time'] + ($d['tr_zdr'] * 60 * 60) - time() > 0) {
@@ -51,7 +51,7 @@ class Quests
}
unset($qlst);
}
//Переодичность квеста
//Переодичность квеста
if (isset($d['tr_tm1'])) {
$d['tr_tm1'] = str_replace('d', date('d'), $d['tr_tm1']);
$d['tr_tm1'] = str_replace('m', date('m'), $d['tr_tm1']);
@@ -59,9 +59,9 @@ class Quests
$d['tr_tm2'] = str_replace('d', date('d'), $d['tr_tm2']);
$d['tr_tm2'] = str_replace('m', date('m'), $d['tr_tm2']);
$d['tr_tm2'] = str_replace('y', date('y'), $d['tr_tm2']);
//проверка интервалов
//проверка интервалов
}
//Сколько раз можно пройти квест
//Сколько раз можно пройти квест
if (isset($d['tr_raz'])) {
$qlst = $u->testAction('SELECT `id` FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" LIMIT ' . $d['tr_raz'], 2);
if ($d['tr_raz'] > 0 && $d['tr_raz'] - $qlst[0] <= 0) {
@@ -69,7 +69,7 @@ class Quests
}
unset($qlst);
}
//Попыток пройти квест
//Попыток пройти квест
if (isset($d['tr_raz2'])) {
$qlst = $u->testAction('SELECT `id` FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" AND `vals` != "go" AND `vals` != "win" LIMIT ' . $d['tr_raz2'], 2);
if ($d['tr_raz2'] - $qlst[0] <= 0) {
@@ -81,7 +81,7 @@ class Quests
}
public function onlyOnceQuest($quests, $uid)
{ // Отсеиваем одноразовые квесты
{ // Отсеиваем одноразовые квесты
$result = [];
$rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $uid));
foreach ($quests as $quest) {
@@ -117,20 +117,20 @@ class Quests
return $result;
}
/* Взять квест */
/* Взять квест */
public function startq($id, $val = null)
{
global $c, $u;
$pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE (`city` = "" OR `city` = "' . $u->info['city'] . '") AND `delete` = "0" AND `min_lvl` <= ' . $u->info['level'] . ' AND `max_lvl` >= ' . $u->info['level'] . ' AND (`align` = "0" OR `align` = "' . floor($u->info['align']) . '") AND `id` = "' . mysql_real_escape_string($id) . '" LIMIT 1'));
if (isset($pl['id'])) {
$u->addAction(time(), 'start_quest' . $pl['id'], 'go', null, $val);
$u->error = 'Вы успешно получили задание &quot;' . $pl['name'] . '&quot;';
$u->error = 'Вы успешно получили задание &quot;' . $pl['name'] . '&quot;';
} else {
$u->error = 'Не удалось получить данное задание';
$u->error = 'Не удалось получить данное задание';
}
}
/* Взять квест в пещере */
/* Взять квест в пещере */
public function startq_dn($id, $val = null)
{
global $c, $u;
@@ -140,13 +140,13 @@ class Quests
$u->addAction(time(), 'start_quest' . $pl['id'], 'go');
else
$u->addAction(time(), 'start_quest' . $pl['id'], 'go', $u->info['id'], $val);
$u->error = 'Вы успешно получили задание &quot;' . $pl['name'] . '&quot;';
$u->error = 'Вы успешно получили задание &quot;' . $pl['name'] . '&quot;';
} else {
$u->error = 'Не удалось получить данное задание';
$u->error = 'Не удалось получить данное задание';
}
}
/* Отказаться от квеста */
/* Отказаться от квеста */
public function endq($id, $tp)
{
global $u;
@@ -155,28 +155,28 @@ class Quests
if (isset($qlst['id'])) {
if ($tp == 'end') {
mysql_query('UPDATE `actions` SET `vals` = "end" WHERE `id` = "' . $qlst['id'] . '" LIMIT 1');
$u->error = 'Вы успешно отказались от задания &quot;' . $pl['name'] . '&quot;';
$u->error = 'Вы успешно отказались от задания &quot;' . $pl['name'] . '&quot;';
} elseif ($tp == 'win') {
mysql_query('UPDATE `actions` SET `vals` = "win" ,`time` = "' . time() . '" WHERE `id` = "' . $qlst['id'] . '" LIMIT 1');
}
} else {
$u->error = 'Не удалось отказаться от задания ';
$u->error = 'Не удалось отказаться от задания ';
}
}
/* Инфо о квесте в пещерах */
/* Инфо о квесте в пещерах */
public function infoDng($pl)
{
global $u;
$r = 0;
$xrz = 0;
$qst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" AND `vals` = "go" LIMIT 1'));
//Условия задания которые должны удовлетворять текущим характеристикам
//Условия задания которые должны удовлетворять текущим характеристикам
//$d = $this->expl($pl['tr_date']);
//Действия квеста
//Действия квеста
$d = $this->expl($pl['act_date']);
//Поговорить с NPS
//Поговорить с NPS
if (isset($d['dlg_nps'])) {
$i7 = 0;
$x3 = explode(',', $d['dlg_nps']);
@@ -190,12 +190,12 @@ class Quests
unset($x1, $x3, $x4, $i7);
}
//Убить игроков
//Убить игроков
if (isset($d['kill_user'])) {
$r += $d['kill_user'];
}
//Убить ботов
//Убить ботов
if (isset($d['kill_bot'])) {
$x = '';
$ex = explode(',', $d['kill_bot']);
@@ -221,7 +221,7 @@ class Quests
unset($x, $ex, $x2, $bot2, $ex2);
}
//Собрать ресурсы
//Собрать ресурсы
if (isset($d['tk_itm'])) {
$ex = explode(',', $d['tk_itm']);
$i = 0;
@@ -237,7 +237,7 @@ class Quests
}
}
//Собрать трофеи
//Собрать трофеи
if (isset($d['tkill_itm'])) {
$ex = explode(',', $d['tkill_itm']);
$i = 0;
@@ -263,27 +263,27 @@ class Quests
$xrz = $r;
}
$r = '<table style="display:inline-block;" border="0" cellspacing="0" cellpadding="0" height="10"><tr><td valign="middle" width="120" style="padding-top:12px">
<div style="position:relative;"><div id="vhp-1234500000' . $pl['id'] . '" title="Выполнение задания" align="left" class="seehp" style="position:absolute; top:-10px; width:120px; height:10px; z-index:12;"> ' . $xrz . '/' . $r . '</div>
<div title="Выполнение задания" class="hpborder" style="position:absolute; top:-10px; width:120px; height:9px; z-index:13;"><img src="https://img.new-combats.com/1x1.gif" height="9" width="1"></div>
<div style="position:relative;"><div id="vhp-1234500000' . $pl['id'] . '" title="Выполнение задания" align="left" class="seehp" style="position:absolute; top:-10px; width:120px; height:10px; z-index:12;"> ' . $xrz . '/' . $r . '</div>
<div title="Выполнение задания" class="hpborder" style="position:absolute; top:-10px; width:120px; height:9px; z-index:13;"><img src="https://img.new-combats.com/1x1.gif" height="9" width="1"></div>
<div class="hp_3 senohp" style="height:9px; width:120px; position:absolute; top:-10px; z-index:11;" id="lhp-1234500000' . $pl['id'] . '"><img src="https://img.new-combats.com/1x1.gif" height="9" width="1"></div>
<div title="Выполнение задания" class="hp_none" style="position:absolute; top:-10px; width:120px; height:10px; z-index:10;"><img src="https://img.new-combats.com/1x1.gif" height="10"></div>
<div title="Выполнение задания" class="hp_none" style="position:absolute; top:-10px; width:120px; height:10px; z-index:10;"><img src="https://img.new-combats.com/1x1.gif" height="10"></div>
</div></td></tr></table><br><script>top.startHpRegen("main",-1234500000' . $pl['id'] . ',' . $xrz . ',' . $r . ',0,0,0,0,0,0,1);</script>';
}
return $r;
}
/* Информация о квесте */
/* Информация о квесте */
public function info($pl)
{
global $u;
$r = '';
$t = '';
$qst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" AND `vals` = "go" LIMIT 1'));
//Условия задания которые должны удовлетворять текущим характеристикам
//Условия задания которые должны удовлетворять текущим характеристикам
$d = $this->expl($pl['tr_date']);
//Завершить квесты [ 1,2,3,4,5 ...
//Завершить квесты [ 1,2,3,4,5 ...
if (isset($d['tr_endq'])) {
$t .= 'Завершить квесты: ';
$t .= 'Завершить квесты: ';
$i = 0;
$e = explode(',', $d['tr_endq']);
while ($i <= count($e)) {
@@ -299,26 +299,26 @@ class Quests
$t .= '<br>';
unset($qn);
}
//Из ботов падают предметы [ idbot-itm1=%,itm2=%|
//Из ботов падают предметы [ idbot-itm1=%,itm2=%|
if (isset($d['tr_botitm'])) {
$t .= 'Из ботов выпадают предметы:<ul>';
$t .= 'Из ботов выпадают предметы:<ul>';
$e = explode('|', $d['tr_botitm']);
$i = 0;
while ($i < count($e)) {
$j = 0;
$e2 = explode('-', $e[$i]);
//$e2[0] - id бота
//$e2[0] - id бота
if ($e2[0] > 0) {
$qn = mysql_fetch_array(mysql_query('SELECT `login` FROM `test_bot` WHERE `id` = "' . $e2[0] . '" LIMIT 1'));
$t .= '&nbsp; &nbsp; &bull; Из &quot;' . $qn['login'] . '&quot; выпадает: ';
$t .= '&nbsp; &nbsp; &bull; Из &quot;' . $qn['login'] . '&quot; выпадает: ';
} else {
$t .= '&nbsp; &nbsp; &bull; Из любых ботов выпадает: ';
$t .= '&nbsp; &nbsp; &bull; Из любых ботов выпадает: ';
}
//$e2[1] - предметы
//$e2[1] - предметы
$e3 = explode(',', $e2[1]);
while ($j < count($e3)) {
$e4 = explode('=', $e3[$j]);
//$e4[0] - предмет , $e4[1] - шанс
//$e4[0] - предмет , $e4[1] - шанс
$qi = mysql_fetch_array(mysql_query('SELECT `id`,`name`,`img` FROM `items_main` WHERE `id` = "' . $e4[0] . '" LIMIT 1'));
$t .= '<img src="https://img.new-combats.com/i/items/' . $qi['img'] . '" style="max-height:12px"> <a href="items_info.php?id=' . $qi['id'] . '" target="_blank">' . $qi['name'] . '</a>, ';
$j++;
@@ -329,26 +329,26 @@ class Quests
$t .= '<br>';
unset($qn, $qi, $e2, $e3, $e4);
}
//При выйгрыше падают предметы [ type-itm1=%,itm2=%|
//При выйгрыше падают предметы [ type-itm1=%,itm2=%|
if (isset($d['tr_winitm'])) {
$t .= 'После победы выпадают предметы:<br>';
$t .= 'После победы выпадают предметы:<br>';
$e = explode('|', $d['tr_winitm']);
$i = 0;
while ($i < count($e)) {
$e2 = explode('-', $e[$i]);
$t .= '&nbsp; &nbsp; &bull; ';
//$e2[0] - id бота
//$e2[0] - id бота
if ($e2[0] > 0) {
$t .= 'Из людей выпадает: ';
$t .= 'Из людей выпадает: ';
} else {
$t .= 'Из ботов выпадает: ';
$t .= 'Из ботов выпадает: ';
}
//$e2[1] - предметы
//$e2[1] - предметы
$j = 0;
$e3 = explode(',', $e2[1]);
while ($j < count($e3)) {
$e4 = explode('=', $e3[$j]);
//$e4[0] - предмет , $e4[1] - шанс
//$e4[0] - предмет , $e4[1] - шанс
$qi = mysql_fetch_array(mysql_query('SELECT `id`,`name`,`img` FROM `items_main` WHERE `id` = "' . $e4[0] . '" LIMIT 1'));
$t .= '<img src="https://img.new-combats.com/i/items/' . $qi['img'] . '" style="max-height:12px"> <a href="items_info.php?id=' . $qi['id'] . '" target="_blank">' . $qi['name'] . '</a>, ';
$j++;
@@ -359,17 +359,17 @@ class Quests
}
unset($qn, $qi, $e2, $e3, $e4);
}
//Задержка между выполнением квеста
//Задержка между выполнением квеста
if (isset($d['tr_zdr'])) {
$qlst = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" AND `vals` != "go" LIMIT 1'));
$t .= 'Задержка между выполнением задания: ' . $u->timeOut($d['tr_zdr'] * 60 * 60);
$t .= 'Задержка между выполнением задания: ' . $u->timeOut($d['tr_zdr'] * 60 * 60);
if ($qlst['time'] + ($d['tr_zdr'] * 60 * 60) - time() > 0) {
$t .= '<small>(Осталось: ' . $u->timeOut($qlst['time'] + ($d['tr_zdr'] * 60 * 60) - time()) . ' ч.)</small>';
$t .= '<small>(Осталось: ' . $u->timeOut($qlst['time'] + ($d['tr_zdr'] * 60 * 60) - time()) . ' ч.)</small>';
}
$t .= '<br>';
unset($qlst);
}
//Переодичность квеста
//Переодичность квеста
if (isset($d['tr_tm1'])) {
$d['tr_tm1'] = str_replace('d', date('d'), $d['tr_tm1']);
$d['tr_tm1'] = str_replace('m', date('m'), $d['tr_tm1']);
@@ -379,31 +379,31 @@ class Quests
$d['tr_tm2'] = str_replace('m', date('m'), $d['tr_tm2']);
$d['tr_tm2'] = str_replace('y', date('y'), $d['tr_tm2']);
$t .= 'Период квеста: ' . $d['tr_tm1'] . ' - ' . $d['tr_tm2'] . '<br>';
$t .= 'Период квеста: ' . $d['tr_tm1'] . ' - ' . $d['tr_tm2'] . '<br>';
}
//Сколько раз можно пройти квест
//Сколько раз можно пройти квест
if (isset($d['tr_raz'])) {
if ($d['tr_raz'] == -1) {
$t .= 'Сколько еще раз можно выполнить задание: <b><small>бесконечно</small></b><br>';
$t .= 'Сколько еще раз можно выполнить задание: <b><small>бесконечно</small></b><br>';
} else {
$qlst = $u->testAction('SELECT `id` FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" LIMIT ' . $d['tr_raz'], 2);
$t .= 'Сколько раз можно выполнить задание: ' . ($d['tr_raz'] - $qlst[0]) . '<br>';
$t .= 'Сколько раз можно выполнить задание: ' . ($d['tr_raz'] - $qlst[0]) . '<br>';
}
unset($qlst);
}
//Попыток пройти квест
//Попыток пройти квест
if (isset($d['tr_raz2'])) {
$qlst = $u->testAction('SELECT `id` FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" AND `vals` != "go" AND `vals` != "win" LIMIT ' . $d['tr_raz2'], 2);
$t .= 'Осталось попыток выполнить задание: ' . ($d['tr_raz2'] - $qlst[0]) . '<br>';
$t .= 'Осталось попыток выполнить задание: ' . ($d['tr_raz2'] - $qlst[0]) . '<br>';
unset($qlst);
}
if ($t != '') {
$r .= '<b>Условия задания:</b><br>' . $t . '<br>';
$r .= '<b>Условия задания:</b><br>' . $t . '<br>';
$t = '';
}
//Награда за квест
//Награда за квест
$d = $this->expl($pl['win_date']);
if (isset($d['add_eff'])) {
@@ -415,7 +415,7 @@ class Quests
$x6 = mysql_fetch_array(mysql_query('SELECT `id2`,`mname`,`img` FROM `eff_main` WHERE `id2` = "' . $x7[0] . '" LIMIT 1'));
if (isset($x6['id2'])) {
$x5 .= '<img width="40" height="25" src="https://img.new-combats.com/i/eff/' . $x6['img'] . '" title="' . $x6['mname'] . '
Время действия: ' . $u->timeOut($x7[1]) . '"> ';
Время действия: ' . $u->timeOut($x7[1]) . '"> ';
}
$x4++;
}
@@ -426,25 +426,25 @@ class Quests
}
if (isset($d['add_rep'])) {
$t .= 'Репутация ' . $u->city_name[$pl['city']] . ': ' . $d['add_rep'] . '<br>';
$t .= 'Репутация ' . $u->city_name[$pl['city']] . ': ' . $d['add_rep'] . '<br>';
}
if (isset($d['add_repizlom'])) {
$t .= 'Репутация Излом Хаоса: ' . $d['add_repizlom'] . '<br>';
$t .= 'Репутация Излом Хаоса: ' . $d['add_repizlom'] . '<br>';
}
if (isset($d['add_cr'])) {
$t .= 'Деньги: ' . $d['add_cr'] . ' кр.<br>';
$t .= 'Деньги: ' . $d['add_cr'] . ' кр.<br>';
}
if ($t != '') {
$r = '<b>Награда:</b><br>' . $t . '<br>' . $r;
$r = '<b>Награда:</b><br>' . $t . '<br>' . $r;
$t = '';
}
//Действия квеста
//Действия квеста
$d = $this->expl($pl['act_date']);
//Поговорить с NPS
//Поговорить с NPS
if (isset($d['dlg_nps'])) {
$i7 = 0;
$x3 = explode(',', $d['dlg_nps']);
@@ -453,30 +453,30 @@ class Quests
if ($x4[0] > 0) {
$x1 = mysql_fetch_array(mysql_query('SELECT `text` FROM `dungeon_dialog` WHERE `id` = "' . $x4[0] . '" LIMIT 1'));
if (!isset($x1['text'])) {
$x1 = '<i>незивестно</i>';
$x1 = '<i>незивестно</i>';
} else {
$x1 = $x1['text'];
}
$x = 0;
$t .= 'Поговорить с <b>' . $x1 . '</b>: ' . $x . '/1<br>';
$t .= 'Поговорить с <b>' . $x1 . '</b>: ' . $x . '/1<br>';
}
$i7++;
}
unset($x1, $x3, $x4, $i7);
}
//Убить игроков
//Убить игроков
if (isset($d['kill_user'])) {
$t .= 'Убить игроков: 0/' . $d['kill_user'] . '<br>';
$t .= 'Убить игроков: 0/' . $d['kill_user'] . '<br>';
}
//Убить ботов
//Убить ботов
if (isset($d['kill_bot'])) {
if (isset($d['all_kill']) && (int)$d['all_kill'] > 0) {
$x = '';
$ex = explode(',', $d['kill_bot']);
$i = 0; # Количество циклов для каждого типа бота.
$i = 0; # Количество циклов для каждого типа бота.
$q = '';
while ($i < count($ex)) {
$ex2 = explode('=', $ex[$i]);
@@ -516,12 +516,12 @@ class Quests
if ($x != '') {
$x = trim($x, ', ');
$t .= 'Убить ботов: <br>' . $x;
$t .= 'Убить ботов: <br>' . $x;
}
unset($x, $ex, $x2, $bot2, $ex2);
}
//Собрать ресурсы
//Собрать ресурсы
if (isset($d['tk_itm'])) {
$ex = explode(',', $d['tk_itm']);
$i = 0;
@@ -538,11 +538,11 @@ class Quests
}
if ($x != '') {
$x = trim($x, ', ');
$t .= 'Собрать ресурсы: <br>' . $x;
$t .= 'Собрать ресурсы: <br>' . $x;
}
}
//Собирание трофеев
//Собирание трофеев
if (isset($d['tkill_itm'])) {
$ex = explode(',', $d['tkill_itm']);
$i = 0;
@@ -559,17 +559,17 @@ class Quests
}
if ($x != '') {
$x = trim($x, ', ');
$t .= 'Собрать трофеи: <br>' . $x;
$t .= 'Собрать трофеи: <br>' . $x;
}
}
if ($t != '') {
$r = '<br><b>Действия задания:</b><br>' . $t . '<br>' . $r;
$r = '<br><b>Действия задания:</b><br>' . $t . '<br>' . $r;
$t = '';
}
if ($r == '') {
$r = 'Дополнительная информация по заданию отсутствует';
$r = 'Дополнительная информация по заданию отсутствует';
}
return $r;
}
@@ -577,35 +577,35 @@ class Quests
public function testquest()
{
global $u;
if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') {
if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') {
$sp = mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` LIKE "%start_quest%" AND `vals` = "go" LIMIT 100');
while ($pl2 = mysql_fetch_array($sp)) {
$pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `id` = "' . (str_replace('start_quest', '', $pl2['vars'])) . '" LIMIT 1'));
$g = 1;
//Действия квеста
//Действия квеста
$d = $this->expl($pl['act_date']);
//Поговорить с NPS
//Поговорить с NPS
if (isset($d['dlg_nps'])) {
$g = 0;
unset($x);
}
//Убить игроков
//Убить игроков
if (isset($d['kill_user'])) {
$x = 0;
if ($x < $d['kill_user']) {
$g = 0;
}
//$d['kill_user'] - стольких нужно убить
//$d['kill_user'] - стольких нужно убить
unset($x);
}
//Убить ботов
//Убить ботов
if (isset($d['kill_bot'])) {
$ex = explode(',', $d['kill_bot']);
$ii = 0; // Количество циклов для каждого типа бота.
$ii = 0; // Количество циклов для каждого типа бота.
$q = '';
while ($ii < count($ex)) {
$ex2 = explode('=', $ex[$ii]);
@@ -629,11 +629,11 @@ class Quests
unset($x, $ex, $x2, $x3, $bot2, $ex2);
}
//Собрать ресурсы
//Собрать ресурсы
if (isset($d['tk_itm'])) {
$g = $this->collect_01(explode(',', $d['tk_itm']), $u);
}
//Собирание трофеев
//Собирание трофеев
if (isset($d['tkill_itm'])) {
$g = $this->collect_01(explode(',', $d['tkill_itm']), $u);
}
@@ -647,7 +647,7 @@ class Quests
}
}
private function collect_01($arr, $u){ // убираю дублирование. хер пойми что проверяем, хз как назвать.
private function collect_01($arr, $u){ // убираю дублирование. хер пойми что проверяем, хз как назвать.
$i = 0;
while ($i < count($arr)) {
$ex2 = explode('=', $arr[$i]);
@@ -660,7 +660,7 @@ class Quests
return 1;
}
private function collect_02($ex, $u, $pl) { // убираю дублирование. хер пойми что проверяем, хз как назвать.
private function collect_02($ex, $u, $pl) { // убираю дублирование. хер пойми что проверяем, хз как назвать.
$i = 0;
while ($i < count($ex)) {
$ex2 = explode('=', $ex[$i]);
@@ -680,25 +680,25 @@ class Quests
return 1;
}
# Функция отвечает за ПРОВЕРКУ на ЗАВЕРШЕНИЕ квестов для ПОДЗЕМОК
# Функция отвечает за ПРОВЕРКУ на ЗАВЕРШЕНИЕ квестов для ПОДЗЕМОК
public function questCheckEnd($pl)
{
global $u;
$quest = mysql_fetch_array(mysql_query('SELECT * FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" ORDER BY `time` DESC LIMIT 1'));
#Проверяем квест, завершен = 0 нет, 1 да.
#Проверяем квест, завершен = 0 нет, 1 да.
$r = 0;
if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') {
if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') {
$g = 1;
# Действия квеста
# Действия квеста
$d = $this->expl($pl['act_date']);
# Поговорить с NPS
# Поговорить с NPS
if (isset($d['dlg_nps'])) {
$g = 0;
unset($x);
}
# Убить игроков
# Убить игроков
if (isset($d['kill_user'])) {
$x = 0;
if ($x < $d['kill_user']) {
@@ -707,10 +707,10 @@ class Quests
unset($x);
}
# Убить ботов
# Убить ботов
if (isset($d['kill_bot'])) {
$ex = explode(',', $d['kill_bot']);
$i = 0; # Количество циклов для каждого типа бота.
$i = 0; # Количество циклов для каждого типа бота.
$q = '';
while ($i < count($ex)) {
$ex2 = explode('=', $ex[$i]);
@@ -740,11 +740,11 @@ class Quests
unset($x, $ex, $x2, $x3, $bot2, $ex2);
}
# Собрать ресурсы
# Собрать ресурсы
if (isset($d['tk_itm'])) {
$g = $this->collect_02(explode(',', $d['tk_itm']), $u, $pl);
}
# Собирание трофеев
# Собирание трофеев
if (isset($d['tkill_itm'])) {
$g = $this->collect_02(explode(',', $d['tkill_itm']), $u, $pl);
}
@@ -753,7 +753,7 @@ class Quests
return $r;
}
/** Выдача наград за пещеры */
/** Выдача наград за пещеры */
public function questSuccesEnd($quest, $action)
{
global $u, $c, $magic;
@@ -765,7 +765,7 @@ class Quests
$d = $this->expl($quest['act_date']);
$d = array_merge($d, $this->expl($quest['win_date']));
// Забираем ресурсы или трофеи
// Забираем ресурсы или трофеи
if (isset($d['tk_itm']) || isset($d['tkill_itm'])) {
$ex = [];
if (isset($d['tk_itm'])) {
@@ -793,9 +793,9 @@ class Quests
}
$t = '';
# Получаем репутацию за квест,
# Получаем репутацию за квест,
if (isset($d['add_rep'])) {
# если это убийства ботов.
# если это убийства ботов.
if (isset($d['kill_bot']) && isset($d['all_kill']) && $d['add_rep'] > 0) {
$ex = explode(',', $d['kill_bot']);
$ii = 0;
@@ -825,7 +825,7 @@ class Quests
if ($this->stats['more_awards'] >= 0) {
$d['add_rep'] += $d['add_rep'] / 100 * 50;
}
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $u->city_name[$quest['city']] . ', ';
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $u->city_name[$quest['city']] . ', ';
if (
$rep['rep' . $quest['city']] < 24999 &&
$rep['rep' . $quest['city']] + $d['add_rep'] >= 24999 &&
@@ -840,7 +840,7 @@ class Quests
}
}
if (isset($d['add_repizlom'])) {
$t .= '' . $d['add_repizlom'] . ' ед. репутации Излома Хаоса, ';
$t .= '' . $d['add_repizlom'] . ' ед. репутации Излома Хаоса, ';
$rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'));
$rep['repizlom'] += $d['add_repizlom'];
if ($rep['repizlom'] > 24999) {
@@ -859,18 +859,18 @@ class Quests
}
}
if (isset($d['add_cr'])) {
$t .= '' . $d['add_cr'] . ' кр., ';
$t .= '' . $d['add_cr'] . ' кр., ';
mysql_query('UPDATE `users` SET `money` = `money`+' . $d['add_cr'] . ' WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
}
if ($t != '') {
$t = rtrim($t, ', ');
$r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.';
$r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.';
unset($t);
} else {
$r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено!';
$r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено!';
}
$r = '<small>' . $r . '</small>';
//Отправляем сообщение в чат
//Отправляем сообщение в чат
mysql_query('UPDATE `actions` SET `vals` = "win" , `time` = "' . time() . '" WHERE `id` = "' . $action['id'] . '" AND `vals` = "go" LIMIT 1');
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','" . $u->info['city'] . "','" . $u->info['room'] . "','','" . $u->info['login'] . "','" . $r . "','-1','5','0')");
@@ -894,7 +894,7 @@ class Quests
die();
}
// Забираем ресурсы
// Забираем ресурсы
if (isset($d['tk_itm'])) {
$ex = explode(',', $d['tk_itm']);
$i = 0;
@@ -906,7 +906,7 @@ class Quests
$i++;
}
}
// Забираем трофеи
// Забираем трофеи
if (isset($d['tkill_itm'])) {
$ex = explode(',', $d['tkill_itm']);
$i = 0;
@@ -920,7 +920,7 @@ class Quests
}
$t = '';
if (isset($d['add_rep'])) { // Получаем репутацию за квест, если это убийства ботов.
if (isset($d['add_rep'])) { // Получаем репутацию за квест, если это убийства ботов.
if (isset($d['kill_bot']) && isset($d['all_kill']) && $d['add_rep'] > 0) {
$ex = explode(',', $d['kill_bot']);
$ii = 0;
@@ -939,9 +939,9 @@ class Quests
}
unset($x, $i, $ii, $ex, $x2, $bot2, $ex2);
if ($pl['city'] != '') {
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $u->city_name[$pl['city']] . ', ';
$t .= '' . $d['add_rep'] . ' ед. репутации ' . $u->city_name[$pl['city']] . ', ';
$rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'));
// Рыцарки
// Рыцарки
/*if($rep['rep'.$pl['city']] < 10000 && $rep['rep'.$pl['city']] + $d['add_rep'] >= 10000 && $pl['kin'] != 1) {
$rep['rep'.$pl['city']] = 9999;
} else*/
@@ -955,7 +955,7 @@ class Quests
}
if (isset($d['add_repizlom'])) {
$t .= '' . $d['add_repizlom'] . ' ед. репутации Излома Хаоса, ';
$t .= '' . $d['add_repizlom'] . ' ед. репутации Излома Хаоса, ';
$rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'));
$rep['repizlom'] += $d['add_repizlom'];
if ($rep['repizlom'] > 24999) {
@@ -976,19 +976,19 @@ class Quests
}
if (isset($d['add_cr'])) {
$t .= '' . $d['add_cr'] . ' кр., ';
$t .= '' . $d['add_cr'] . ' кр., ';
mysql_query('UPDATE `users` SET `money` = `money`+' . $d['add_cr'] . ' WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
}
if ($t != '') {
$t = rtrim($t, ', ');
$r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.';
$r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.';
unset($t);
} else {
$r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено!';
$r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено!';
}
$r = '<small>' . $r . '</small>';
//Отправляем сообщение в чат
//Отправляем сообщение в чат
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','" . $u->info['city'] . "','" . $u->info['room'] . "','','" . $u->info['login'] . "','" . $r . "','-1','5','0')");
}
}
+13 -13
View File
@@ -1,22 +1,22 @@
<?php
use Insallah\Db;
use Core\Db;
class Season
{
public static $yy = [
1 => [1, '01', 'ίνβΰπό', 'ίνβΰπόρκθι'],
2 => [2, '02', 'Τεβπΰλό', 'Τεβπΰλόρκθι'],
3 => [3, '03', 'Μΰπς', 'Μΰπςξβρκθι'],
4 => [4, '04', 'ΐοπελό', 'ΐοπελόρκθι'],
5 => [5, '05', 'Μΰι', 'Μΰιρκθι'],
6 => [6, '06', 'Θώνό', 'Θώνόρκθι'],
7 => [7, '07', 'Θώλό', 'Θώλόρκθι'],
8 => [8, '08', 'ΐβγσρς', 'ΐβγσρςξβρκθι'],
9 => [9, '09', 'Ρενςαπό', 'Ρενςαπόρκθι'],
10 => [10, '10', 'Ξκςαπό', 'Ξκςαπόρκθι'],
11 => [11, '11', 'Νξαπό', 'Νξαπόρκθι'],
12 => [12, '12', 'Δεκΰαπό', 'Δεκΰαπόρκθι'],
1 => [1, '01', 'Январь', 'Январьский'],
2 => [2, '02', 'Февраль', 'Февральский'],
3 => [3, '03', 'Март', 'Мартовский'],
4 => [4, '04', 'Апрель', 'Апрельский'],
5 => [5, '05', 'Май', 'Майский'],
6 => [6, '06', 'Июнь', 'Июньский'],
7 => [7, '07', 'Июль', 'Июльский'],
8 => [8, '08', 'Август', 'Августовский'],
9 => [9, '09', 'Сентябрь', 'Сентябрьский'],
10 => [10, '10', 'Октябрь', 'Октябрьский'],
11 => [11, '11', 'Ноябрь', 'Ноябрьский'],
12 => [12, '12', 'Декабрь', 'Декабрьский'],
];
public static $date = [];
public static $m = [];
+13 -13
View File
@@ -16,7 +16,7 @@ class Telegram
private function send($to, $from, $text, $fromType)
{
mysql_query('START TRANSACTION');
$ins = mysql_query("INSERT INTO `telegram` (`uid`,`from`,`fromType`,`text`,`time`) VALUES ('" . $to . "','" . $from . "','" . $fromType . "','" . mysql_real_escape_string(AddSlashes(HtmlSpecialChars($text, null, 'cp1251'))) . "','" . time() . "')");
$ins = mysql_query("INSERT INTO `telegram` (`uid`,`from`,`fromType`,`text`,`time`) VALUES ('" . $to . "','" . $from . "','" . $fromType . "','" . mysql_real_escape_string(AddSlashes(HtmlSpecialChars($text, null))) . "','" . time() . "')");
mysql_query('COMMIT');
if ($ins) {
return mysql_insert_id();
@@ -89,7 +89,7 @@ class Telegram
}
if ($fromType == 1) {
$from = '<a href="info/login=' . $from . '" target="_blank" title="Èíô. î ' . $from . '">' . $from . '</a>';
$from = '<a href="info/login=' . $from . '" target="_blank" title="Инф. о ' . $from . '">' . $from . '</a>';
} elseif ($read == 0) {
$from = '<b id="tablePostTxtB' . $id . '">' . $from . '</b>';
}
@@ -98,10 +98,10 @@ class Telegram
<tr>
<td width="30" class="underLine2"><div align="center">' . $i1 . '</div></td>
<td width="200" id="tablePostTxt' . $id . '" class="underLine2">' . $from . '</td>
<td width="290" class="underLine2"><a onClick="openPost(' . $id . '); return false;" href="#read' . $id . '" title="Ïðî÷èòàòü ñîîáùåíèå">' . substr($ttl, 0, 30) . '...</a></td>
<td width="290" class="underLine2"><a onClick="openPost(' . $id . '); return false;" href="#read' . $id . '" title="Прочитать сообщение">' . substr($ttl, 0, 30) . '...</a></td>
<td width="120" class="underLine2">' . date('d.m.y H:i', $time) . '</td>
<td width="30" class="underLine2"><div align="center"><IMG style="cursor:pointer;" onClick="lockPost(' . $id . ');" title="Áëîêèðîâêà ñîîáùåíèÿ" src="https://img.new-combats.com/i/locked.gif"></div></td>
<td width="30" class="underLine2"><div align="center"><IMG style="cursor:pointer;" onClick="deletePost(' . $id . ',' . $pg . ');" title="Óäàëèòü ñîîáùåíèå" src="https://img.new-combats.com/i/clear.gif" width="11" height="11"></div></td>
<td width="30" class="underLine2"><div align="center"><IMG style="cursor:pointer;" onClick="lockPost(' . $id . ');" title="Блокировка сообщения" src="https://img.new-combats.com/i/locked.gif"></div></td>
<td width="30" class="underLine2"><div align="center"><IMG style="cursor:pointer;" onClick="deletePost(' . $id . ',' . $pg . ');" title="Удалить сообщение" src="https://img.new-combats.com/i/clear.gif" width="11" height="11"></div></td>
</tr>
</table>
<div id="readMSG' . $id . '" style="display:none;" class="unreadMSG">' . $ttl . '</div>';
@@ -114,11 +114,11 @@ class Telegram
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="30" class="underLine"><div align="center"></div></td>
<td width="200" class="underLine"><b>Îò êîãî</b></td>
<td width="290" class="underLine"><b>Çàãîëîâîê ñîîáùåíèÿ</b></td>
<td width="120" class="underLine"><b>Êîãäà</b></td>
<td width="30" class="underLine"><div align="center"><IMG alt="Áëîêèðîâêà ñîîáùåíèé" src="https://img.new-combats.com/i/lock_message.gif"></div></td>
<td width="30" class="underLine"><div align="center"><IMG style="cursor:pointer;" onClick="deletePostAll(' . $page . ');" alt="Óäàëèòü âñå ïðî÷èòàííûå ñîîáùåíèÿ" src="https://img.new-combats.com/i/clear.gif" width="11" height="11"></div></td>
<td width="200" class="underLine"><b>От кого</b></td>
<td width="290" class="underLine"><b>Заголовок сообщения</b></td>
<td width="120" class="underLine"><b>Когда</b></td>
<td width="30" class="underLine"><div align="center"><IMG alt="Блокировка сообщений" src="https://img.new-combats.com/i/lock_message.gif"></div></td>
<td width="30" class="underLine"><div align="center"><IMG style="cursor:pointer;" onClick="deletePostAll(' . $page . ');" alt="Удалить все прочитанные сообщения" src="https://img.new-combats.com/i/clear.gif" width="11" height="11"></div></td>
</tr>
</table>';
@@ -138,7 +138,7 @@ class Telegram
}
if ($i[0] == 0) {
echo '<div class="noMsg" align="center">Ñîîáùåíèé íåò</div>';
echo '<div class="noMsg" align="center">Сообщений нет</div>';
} elseif ($i[0] > $maxPages) {
$pages = '';
$i = 1;
@@ -153,7 +153,7 @@ class Telegram
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="30"><div align="center"></div></td>
<td width="200">Ñòðàíèöû: ' . $pages . '</td>
<td width="200">Страницы: ' . $pages . '</td>
<td width="240"></td>
<td width="170"></td>
<td width="30"></td>
@@ -165,6 +165,6 @@ class Telegram
public function __clone()
{
trigger_error('Äóáëèðîâàíèå íå äîïóñêàåòñÿ.', E_USER_ERROR);
trigger_error('Дублирование не допускается.', E_USER_ERROR);
}
}
+48 -55
View File
@@ -1,14 +1,13 @@
<?php
if (!defined('GAME')) {
die();
}
use Core\Db;
class Tournir
{
private $u;
private $info;
private $user;
private $name = [0 => 'Âûæèòü ëþáîé öåíîé', 1 => 'Êàæäûé ñàì çà ñåáÿ', 2 => 'Çàõâàò êëþ÷à',];
private User $u;
private array $info;
private array $user;
private array $name = [0 => 'Выжить любой ценой', 1 => 'Каждый сам за себя', 2 => 'Захват ключа',];
public function __construct()
{
@@ -19,26 +18,26 @@ class Tournir
private function start()
{
$this->info = mysql_fetch_array(mysql_query('SELECT * FROM `turnirs` WHERE `id` = "' . $this->u->info['inTurnirnew'] . '" LIMIT 1'));
$this->user = mysql_fetch_array(mysql_query('SELECT * FROM `users_turnirs` WHERE `turnir` = "' . $this->u->info['inTurnirnew'] . '" AND `bot` = "' . $this->u->info['id'] . '" LIMIT 1'));
$this->info = Db::getRow('select * from turnirs where id = ?', [$this->u->info['inTurnirnew']]);
$this->user = Db::getRow('select * from users_turnirs where turnir = ? and bot = ?', [$this->u->info['inTurnirnew'], $this->u->info['id']]);
}
private function startTurnir()
{
$row = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `users` WHERE `win` = "0" AND `lose` = "0" AND `nich` = "0"'));
if ($row[0] <= 0 || $this->info['status'] == 3) {
$row = Db::getValue('select count(*) from users where win = 0 and lose = 0 and nich = 0');
if (!$row || $this->info['status'] == 3) {
if ($this->info['status'] == 3) {
$this->finishTurnir();
}
} else {
mysql_query('UPDATE `turnirs` SET `status` = "3" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1');
//Ñîçäàíèå ïîåäèíêà
mysql_query('INSERT INTO `battle` (`city`,`time_start`,`timeout`,`type`,`turnir`) VALUES ("' . $this->u->info['city'] . '","' . time() . '","60","1","' . $this->info['id'] . '")');
$uri = mysql_insert_id();
//Çàêèäûâàåì ïåðñîíàæåé â ïîåäèíîê
mysql_query('UPDATE `users` SET `battle` = "' . $uri . '" WHERE `inUser` = "0" AND `inTurnirnew` = "' . $this->info['id'] . '"');
//Îáîçíà÷àåì çàâåðøåíèå òóðíèðà ïðè âûõîäå
die('Ïåðåéòèäå â ðàçäåë "ïîåäèíêè"...');
Db::sql('update turnirs set status = 3 where id = ?', [$this->info['id']]);
//Создание поединка
Db::sql('insert into battle (city, time_start, timeout, type, turnir) values (?,unix_timestamp(),60,1,?)', [$this->u->info['city'], $this->info['id']]);
$uri = Db::lastInsertId();
//Закидываем персонажей в поединок
Db::sql('update users set battle = ? where inUser = 0 and inTurnirnew = ?', [$uri, $this->info['id']]);
//Обозначаем завершение турнира при выходе
die('Перейтиде в раздел "поединки"...');
}
}
@@ -54,7 +53,7 @@ class Tournir
$inf = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "' . $pl['uid'] . '" LIMIT 1'));
$bot = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "' . $pl['bot'] . '" LIMIT 1'));
if (isset($inf['id'], $bot['id'])) {
//âûäàåì ïðèçû è ò.ä
//выдаем призы и т.д
mysql_query('DELETE FROM `users` WHERE `id` = "' . $bot['id'] . '" LIMIT 1');
mysql_query('DELETE FROM `stats` WHERE `id` = "' . $bot['id'] . '" LIMIT 1');
mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . $bot['id'] . '" LIMIT 1000');
@@ -62,12 +61,9 @@ class Tournir
}
if ($pl['team'] == $this->info['winner'] && $this->info['winner'] != 0) {
$inf['add_expn'] = 3000;
$inf['add_expp'] = [0, 1, 5, 10, 15, 25, 35, 70, 100, 150, 200, 300, 500, 700, 1000];
//ïîëó÷àåì îïûò (ñ 0 ïî 12 ëâë)
//получаем опыт (с 0 по 12 лвл)
$inf['add_expn'] = [10, 30, 55, 62, 92, 180, 350, 1350, 4500, 7000, 21000, 30000, 35000];
$inf['add_expn'] = $inf['add_expn'][$inf['level']];
@@ -75,14 +71,13 @@ class Tournir
mysql_query('UPDATE `stats` SET `exp` = `exp` + ' . $inf['add_expn'] . ' WHERE `id` = "' . $inf['id'] . '" LIMIT 1');
$win .= '<b>' . $inf['login'] . '</b>, ';
$r = 'Òóðíèð çàâåðøåí. Âû ÿâëÿåòåñü ïîáåäèòåëåì òóðíèðà, ïîëó÷åíî îïûòà: <b>' . $inf['add_expn'] . '</b>.';
$r = 'Турнир завершен. Вы являетесь победителем турнира, получено опыта: <b>' . $inf['add_expn'] . '</b>.';
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','capitalcity','" . $inf['room'] . "','','" . $inf['login'] . "','" . $r . "','" . time() . "','6','0')");
} elseif ($pl['team'] != $this->info['winner'] && $this->info['winner'] != 0) {
mysql_query('UPDATE `users` SET `lose` = `lose` + 1,`lose_t` = `lose_t` + 1 WHERE `id` = "' . $inf['id'] . '" LIMIT 1');
$lose .= '<b>' . $inf['login'] . '</b>, ';
} else {
mysql_query('UPDATE `users` SET `nich` = `nich` + 1 WHERE `id` = "' . $inf['id'] . '" LIMIT 1');
}
@@ -94,11 +89,11 @@ class Tournir
if ($win != '') {
$win = rtrim($win, ', ');
$lose = rtrim($lose, ', ');
$win = 'Ïîáåäèòåëè òóðíèðà: ' . $win . '. Ïðîèãðàâøàÿ ñòîðîíà: ' . $lose . '. Ñëåäóþùèé òóðíèð íà÷íåòñÿ ÷åðåç ' . $this->u->timeOut($this->info['time2']) . ' (' . date('d.m.Y H:i', (time() + $this->info['time2'])) . ').';
$win = 'Победители турнира: ' . $win . '. Проигравшая сторона: ' . $lose . '. Следующий турнир начнется через ' . $this->u->timeOut($this->info['time2']) . ' (' . date('d.m.Y H:i', (time() + $this->info['time2'])) . ').';
} else {
$win = 'Ïîáåäèòåëè òóðíèðà îòñóòñòâóåò. Ñëåäóþùèé òóðíèð íà÷íåòñÿ ÷åðåç ' . $this->u->timeOut($this->info['time2']) . ' (' . date('d.m.Y H:i', (time() + $this->info['time2'])) . ').';
$win = 'Победители турнира отсутствует. Следующий турнир начнется через ' . $this->u->timeOut($this->info['time2']) . ' (' . date('d.m.Y H:i', (time() + $this->info['time2'])) . ').';
}
$r = '<font color=black><b>Òóðíèð çàâåðøåí.</b></font> ' . $win;
$r = '<font color=black><b>Турнир завершен.</b></font> ' . $win;
mysql_query("INSERT INTO `chat` (`new`,`city`,`room`,`login`,`to`,`text`,`time`,`type`,`toChat`) VALUES ('1','capitalcity','','','','" . $r . "','" . time() . "','6','0')");
}
}
@@ -110,7 +105,7 @@ class Tournir
$tm2 = '';
$noitm = [869 => 1, 1246 => 1, 155 => 1, 1245 => 1, 678 => 1];
//ïîëó÷åíèå êîìïëåêòà
//получение комплекта
if ($this->info['step'] != 3 && $this->info['step'] != 0 && isset($_GET['gocomplect']) && $this->user['points'] < 2) {
$aso = explode(',', $this->user['items']);
$ast = explode('-', $_GET['gocomplect']);
@@ -155,24 +150,23 @@ class Tournir
}
if ($noitm > 0) {
echo 'Èñïîëüçîâàíèå áàãîâ êàðàåòñÿ çàêîíîì!';
echo 'Использование багов карается законом!';
$addi = 0;
} elseif (count($asg[3]) > 2) {
echo 'Âû âûáðàëè ñëèøêîì ìíîãî ïðåäìåòîâ, âûáåðèòå òîëüêî äâà îðóæèÿ è îäèí ùèò';
echo 'Вы выбрали слишком много предметов, выберите только два оружия и один щит';
$addi = 0;
} elseif (count($asg[10]) > 3) {
echo 'Âû âûáðàëè ñëèøêîì ìíîãî ïðåäìåòîâ, âûáåðèòå òîëüêî òðè êîëüöà';
echo 'Вы выбрали слишком много предметов, выберите только три кольца';
$addi = 0;
} elseif ($j > 16) {
echo 'Âû âûáðàëè ñëèøêîì ìíîãî ïðåäìåòîâ';
echo 'Вы выбрали слишком много предметов';
$addi = 0;
} elseif ($j < 1) {
echo 'Âûáåðèòå õîòÿ áû îäèí ïðåäìåò';
echo 'Выберите хотя бы один предмет';
$addi = 0;
}
if ($addi == 1) {
$i = 0;
while ($i <= 17) {
if ($i == 10) {
@@ -217,7 +211,7 @@ class Tournir
if ($this->info['step'] == 3) {
$this->finishTurnir();
} elseif ($this->info['step'] == 0) {
//ðàñïðåäåëÿåì êîìàíäû
//распределяем команды
$po = [0, 0];
$sp = mysql_query('SELECT * FROM `users_turnirs` WHERE `turnir` = "' . $this->info['id'] . '" AND `points` > 3 ORDER BY `points` DESC LIMIT ' . $this->info['users_in']);
$tmr = rand(1, 2);
@@ -258,7 +252,7 @@ class Tournir
${'tm' . $bot['team']} .= $this->u->microLogin($bot, 2) . '<br>';
}
}
$r .= '<style>/* öâåòà êîìàíä */
$r .= '<style>/* цвета команд */
.CSSteam0 { font-weight: bold; cursor:pointer; }
.CSSteam1 { font-weight: bold; color: #6666CC; cursor:pointer; }
.CSSteam2 { font-weight: bold; color: #B06A00; cursor:pointer; }
@@ -270,33 +264,33 @@ class Tournir
.CSSteam8 { font-weight: bold; color: #842B61; cursor:pointer; }
.CSSteam9 { font-weight: bold; color: navy; cursor:pointer; }
.CSSvs { font-weight: bold; }</style>';
$r .= '<h3>&laquo;' . $this->name[$this->info['type']] . '&raquo;</h3><br>Íà÷àëî òóðíèðà ÷åðåç ' . $this->u->timeOut($this->info['time'] - time()) . '! ';
$r .= '<h3>&laquo;' . $this->name[$this->info['type']] . '&raquo;</h3><br>Начало турнира через ' . $this->u->timeOut($this->info['time'] - time()) . '! ';
if (isset($_GET['hpregenNowTurnir']) && ($this->u->stats['hpNow'] < $this->u->stats['hpAll'] || $this->u->stats['mpNow'] < $this->u->stats['mpAll'])) {
mysql_query('UPDATE `stats` SET `hpNow` = "' . $this->u->stats['hpAll'] . '",`mpNow` = "' . $this->u->stats['mpAll'] . '" WHERE `id` = "' . $this->u->info['id'] . '" LIMIT 1');
}
if ($this->user['points'] < 3) {
//Åùå íå ïîëó÷èëè îáìóíäèðîâàíèå
//Еще не получили обмундирование
if ($this->user['points'] < 2) {
$r .= '<INPUT class=\'btn_grey\' onClick="selectItmSave()" TYPE=button name=tmp value="Ïîëó÷èòü îáìóíäèðîâàíèå">';
$r .= '<INPUT class=\'btn_grey\' onClick="selectItmSave()" TYPE=button name=tmp value="Получить обмундирование">';
} else {
$r .= ' <INPUT class=\'btn_grey\' onClick="location=\'main.php\';" TYPE=button name=tmp value="ß ãîòîâ';
$r .= ' <INPUT class=\'btn_grey\' onClick="location=\'main.php\';" TYPE=button name=tmp value="Я готов';
if ($this->u->info['sex'] == 1) {
$r .= 'à';
$r .= 'а';
}
$r .= '!">';
}
} else {
$r .= '<small><b>Âû ó÷àñòâóåòå â òóðíèðå!</b></small>';
$r .= ' &nbsp; <INPUT class=\'btn_grey\' onClick="location.href=\'main.php?hpregenNowTurnir=1\'" TYPE=button name=tmp value="Âîññòàíîâèòü HP è MP">';
$r .= '<small><b>Вы участвуете в турнире!</b></small>';
$r .= ' &nbsp; <INPUT class=\'btn_grey\' onClick="location.href=\'main.php?hpregenNowTurnir=1\'" TYPE=button name=tmp value="Восстановить HP и MP">';
}
$r .= '<div style="float:right"><INPUT onClick="location=\'main.php\';" TYPE=button name=tmp value="Îáíîâèòü"></div>';
$r .= '<div style="float:right"><INPUT onClick="location=\'main.php\';" TYPE=button name=tmp value="Обновить"></div>';
if ($this->user['points'] < 3 && $this->user['items'] != '0') {
$r .= '<div align="left" style="height:1px; width:100%; margin:10px 0 10px 0; border-top:1px solid #999999;"></div>';
if ($this->user['items'] == '') {
//Âûäàåì ïðåäìåòû äëÿ âûáîðà
//Выдаем предметы для выбора
$ai = '';
$sp = mysql_query('SELECT `a`.*,`b`.* FROM `items_shop` AS `a` LEFT JOIN `items_main` AS `b` ON (`a`.`item_id` = `b`.`id`) WHERE `a`.`sid` = 1 AND
@@ -317,10 +311,10 @@ class Tournir
//
$com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)];
} elseif ($i == 14) {
//ïðàâàÿ ðóêà
//правая рука
$com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)];
} else {
//îáìóíäèðîâàíèå
//обмундирование
$com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)];
if ($i == 10) {
$ai .= $com[$i]['id'] . ',';
@@ -344,7 +338,7 @@ class Tournir
mysql_query('UPDATE `users_turnirs` SET `items` = "' . $ai . '" WHERE `id` = "' . $this->user['id'] . '" LIMIT 1');
}
//Âûâîäèì ïðåäìåòû ÷òîáû íàäåòü èõ
//Выводим предметы чтобы надеть их
$ai = explode(',', $this->user['items']);
$i = 0;
$ia = [];
@@ -358,7 +352,7 @@ class Tournir
}
unset($ai);
$r .= '<b>Âûáåðèòå ïðåäìåòû äëÿ òóðíèðà:</b><br>';
$r .= '<b>Выберите предметы для турнира:</b><br>';
?>
<style>
.its0 {
@@ -468,13 +462,12 @@ class Tournir
}
$i++;
}
}
$r .= '<div align="left" style="height:1px; width:100%; margin:10px 0 10px 0; border-top:1px solid #999999;"></div>';
$r .= '<table style="border:1px solid #99cccc" width="700" bgcolor="#bbdddd" border="0" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="350" align="center" bgcolor="#99cccc"><b class="CSSteam1">Êîìàíäà 1</b></td>
<td align="center" bgcolor="#99cccc"><b class="CSSteam2">Êîìàíäà 2</b></td>
<td width="350" align="center" bgcolor="#99cccc"><b class="CSSteam1">Команда 1</b></td>
<td align="center" bgcolor="#99cccc"><b class="CSSteam2">Команда 2</b></td>
</tr>
<tr>
<td align="center" style="border-right:1px solid #99cccc">' . rtrim($tm1, ', ') . '</td>
@@ -483,7 +476,7 @@ class Tournir
</table>';
if (($this->info['time'] - time() < 0) && $this->info['step'] == 1) {
//íà÷èíàåì òóðíèð
//начинаем турнир
$this->startTurnir();
}
echo $r;
+23 -20
View File
@@ -1,10 +1,10 @@
<?php
/**
* Åäèíàÿ ôóíêöèÿ äëÿ çàëèâêè ôàéëîâ íà ñåðâåð.
* Единая функция для заливки файлов на сервер.
*
* @version 1
* @author Ivor Barhansky <me@lopar.space>
* @version 1
*/
class Uploader
@@ -16,15 +16,15 @@ class Uploader
private $extensions = 'jpg|png|jpeg|gif';
private $extMatches = [];
private $FILE;
private $cnm = null;
private $cnm;
public static $error;
public function __construct($name, $cnm = null)
{
$this->FILE = $_FILES;
if (!$this->FILE[$name]) {
if (!isset($_FILES[$name])) {
return;
}
$this->FILE = $_FILES[$name];
$this->cnm = $cnm;
}
@@ -56,16 +56,16 @@ class Uploader
*/
public function setMaxFileSize($megabytes)
{
$this->maxFileSizeMb = $megabytes * (1024 * 1024);
$this->maxFileSizeMb = $megabytes;
}
/**
* @param string $path ïóòü îò êîðíÿ äî êîíå÷íîé ïàïêè áåç îòêðûâàþùåãî ñëåøà.
* @param string $path путь от корня до конечной папки без открывающего слеша.
* @return void
*/
public function setSavePath($path)
{
$this->savePath = __DIR__ . '/' . $path;
$this->savePath = $_SERVER['DOCUMENT_ROOT'] . '/' . $path;
}
/**
@@ -99,17 +99,20 @@ class Uploader
private function hasNormalDimensions()
{
list($width, $height) = getimagesize($this->FILE['tmp_name']);
if (!$width || !$height) {
self::$error = 'Не подтянулись размеры файла.';
return false;
}
if (
$width < $this->width['min'] ||
$width > $this->width['max'] ||
$height < $this->height['min'] ||
$height > $this->height['max']
($width < $this->width['min'] || $width > $this->width['max']) ||
($height < $this->height['min'] || $height > $this->height['max'])
) {
self::$error = "Òðåáîâàíèÿ ê ðàçìåðó [{$this->width['max']}x{$this->height['max']}] íå ñîáëþäåíû.";
self::$error = 'Требования к размеру: ';
if ($this->width['min'] !== $this->width['max'] || $this->height['min'] !== $this->height['max']) {
self::$error .= " Ìèíèìóì [{$this->width['min']}x{$this->height['min']}].";
self::$error .= "от [{$this->width['min']} x {$this->height['min']}] до ";
}
self::$error .= " <span style='color:red;'>[{$width}x$height]</span>";
self::$error .= "[{$this->width['max']} x {$this->height['max']}].";
self::$error .= " Текущий размер [$width x $height]";
return false;
}
return true;
@@ -120,8 +123,8 @@ class Uploader
if (!$this->maxFileSizeMb) {
$this->setMaxFileSize(2);
}
if ($this->FILE['size'] > $this->maxFileSizeMb || $this->FILE['size'] <=0) {
self::$error = 'Íåâåðíûé ðàçìåð ôàéëà. Ìàêñèìàëüíûé ðàçìåð ôàéëà ' . $this->maxFileSizeMb . ' ÌÁ';
if ($this->FILE['size'] > $this->maxFileSizeMb * (1024 * 1024) || $this->FILE['size'] <= 0) {
self::$error = 'Неверный размер файла. Максимальный размер файла ' . $this->maxFileSizeMb . ' МБ';
return false;
}
return true;
@@ -133,7 +136,7 @@ class Uploader
!preg_match('/\.(' . $this->extensions . ')$/i', $this->FILE['name'], $this->extMatches) ||
!preg_match('/image/i', $this->FILE['type'])
) {
self::$error = 'Íåâåðíûé òèï ôàéëà. Äîïóñòèìûå òèïû : ' . $this->extensions;
self::$error = 'Неверный тип файла. Допустимые типы : ' . $this->extensions;
return false;
}
return true;
@@ -142,7 +145,7 @@ class Uploader
private function hasNormalFilePath()
{
if (!$this->savePath || !is_dir($this->savePath)) {
self::$error = 'Îøèáêà çàãðóçêè: íåò òàêîé ïàïêè.';
self::$error = 'Ошибка загрузки: нет такой папки.';
return false;
}
return true;
@@ -158,7 +161,7 @@ class Uploader
$fn2 = $this->cnm;
}
if (!move_uploaded_file($this->FILE['tmp_name'], $this->savePath . $fn)) {
self::$error = 'Îøèáêà çàãðóçêè ôàéëà';
self::$error = 'Ошибка загрузки файла';
return false;
}
return [$fn2, $fn, $this->savePath . $fn];
+4535 -3325
View File
File diff suppressed because it is too large Load Diff
+132
View File
@@ -0,0 +1,132 @@
<?php
namespace User;
use Core\Config;
use Core\Db;
use Core\Mail;
use PassGen;
use UserIp;
class Confirmation
{
/**
* Для однотипных писем с подтверждением.
* @param array $userinfo Данные из (User)->info.
* @param mixed $value Новое значение
* @param ?int $code Проверочный код
* @param string $type Тип меняемого значения. С маленькой буквы, именительный падеж.
* @return void
*/
public static function byEmail(array $userinfo, string $type, $value, ?int $code = null)
{
if ($type === 'pass2' && is_null($code)) {
self::pass2ByEmailCustom($userinfo, $value);
return;
}
$ip = UserIp::get();
$date = date('d.m.y H:i');
$https = Config::get('https');
$support = Config::get('support');
$activationLink = 'https://' . $userinfo['city'] . Config::get('host') .
"/confirm.php?id={$userinfo['id']}&code=$code";
$fulllogin = $userinfo['login'] . "[{$userinfo['level']}]";
Mail::send(
$userinfo['mail'],
<<<HTML
<html lang="ru">
<head><title>Сменить $type</title></head>
<body>
$date<br>
Кто-то с IP: $ip пытается сменить $type к персонажу $fulllogin.<br>
Т.к. в анкете у этого персонажа указан email: {$userinfo['mail']}, то вы и получили это письмо.<br>
login: {$userinfo['login']}<br>
Новый $type: <span style="background-color: wheat; font-family: Consolas, monospace;">$value</span><br><br>
Для того чтобы сменить $type, перейдите по ссылке:<br>
$activationLink<br>
<br>--<br>
Бойцовский Клуб $https<br>
Администрация Бойцовского Клуба: $support<br>
P.S. Данное письмо сгенерировано автоматически, отвечать на него не нужно.
</body>
</html>
HTML,
"Смена $type у персонажа $fulllogin"
);
}
private static function pass2ByEmailCustom(array $userinfo, string $pass2)
{
$ip = UserIp::get();
$fulllogin = $userinfo['login'] . "[{$userinfo['level']}]";
Mail::send(
$userinfo['mail'],
<<<HTML
<html lang="ru">
<head><title>Второй пароль от персонажа $fulllogin.</title></head>
<body>
Вами, с IP адреса - $ip, был установлен второй пароль в игре Бойцовский Клуб.<br>
Если это были не Вы, свяжитесь с администрацией сайта.<br><br>
------------------------------------------------------------------<br>
Ваш логин | {$userinfo['login']}<br>
Второй пароль | ' . $pass2 . '<br>
------------------------------------------------------------------<br>
<br><br>Желаем Вам приятной игры.<br><br><i>Администрация</i>
</body>
HTML,
"Второй пароль от персонажа $fulllogin"
);
}
public static function userRegistrationCodeByEmail(string $email, string $login)
{
$code = PassGen::intCode(4);
Db::sql('insert into secure_code (email, code, time) values (?,?,unix_timestamp())', [$email, $code]);
Mail::send(
$email,
'Секретный Код: ' . $code,
'Код подтверждения регистрации персонажа ' . $login
);
}
public static function byCode(int $uid, int $code): string
{
$status = '';
if ($uid <= 0 || $code <= 0) {
return $status;
}
$codes = Db::getRow(
'select * from emailconfirmation where id = ? and code = ? and (active = 1 or pass = 1 or email = 1)',
[$uid, $code]
);
if (!$codes['id']) {
$status = 'Ссылка устарела!';
} elseif ($codes['active'] === 1) {
Db::sql(
'update users set emailconfirmation = 1, securetime = unix_timestamp() + 259200 where id = ?',
[$codes['id']]
);
$status = "Подтверждение смены пароля/email через почту включено";
} elseif ($codes['pass'] === 1) {
Db::sql(
'update users as u inner join emailconfirmation as e on u.id = e.id set u.pass = e.pa_em, u.securetime = unix_timestamp() + 259200 where u.id = ?',
[$codes['id']]
);
$status = "Удачно сменили пароль<";
} elseif ($codes['email'] === 1) {
Db::sql(
'update users as u inner join emailconfirmation as e on u.id = e.id set u.mail = e.pa_em, u.securetime = unix_timestamp() + 259200 where u.id = ?',
[$codes['id']]
);
$status = "Удачно сменили email";
}
Db::sql('delete from emailconfirmation where id = ? and code = ?', [$_GET['id'], $_GET['code']]);
if ($status) {
$status = "<h3>$status</h3>";
}
return $status;
}
}
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace User;
use Core\Db;
use PassGen;
use User;
class Email
{
private array $info = [];
public function __construct(array $userinfo)
{
$this->info = $userinfo ?? User::start()->info;
}
public function change(string $old, string $new): string
{
if ($old === $new) {
return $this->info['mail'];
}
if ($this->info['emailconfirmation'] === 1) {
$query = 'insert into emailconfirmation (id, code, pa_em, pass) values (?,?,?,1)';
$args = [
$this->info['id'],
PassGen::intCode(10),
$new
];
Confirmation::byEmail($this->info, 'email', $new, $args[1]);
} else {
$query = 'update users set mail = ?, securetime = unix_timestamp() + 259200 where id = ?';
$args = [
$new,
$this->info['id']
];
}
Db::sql($query, $args);
return $new;
}
}
+67
View File
@@ -0,0 +1,67 @@
<?php
namespace User;
use Core\Db;
use PassGen;
use User;
class Password
{
private array $info = [];
public function __construct(array $userinfo)
{
$this->info = $userinfo ?? User::start()->info;
}
public function changeFirst(string $old, string $new): string
{
if ($old === $new && password_verify($old, $this->info['pass'])) {
if ($this->info['emailconfirmation'] === 1) {
$query = 'insert into emailconfirmation (id, code, pa_em, pass) values (?,?,?,1)';
$args = [
$this->info['id'],
PassGen::intCode(10),
password_hash($new, PASSWORD_DEFAULT)
];
Confirmation::byEmail($this->info, 'пароль', $new, $args[1]);
$hashedPass = $args[2];
} else {
$query = 'update users set pass = ?, repass = 0, securetime = unix_timestamp() + 259200 where id = ?';
$args = [
password_hash($new, PASSWORD_DEFAULT),
$this->info['id']
];
$hashedPass = $args[0];
}
Db::sql($query, $args);
return $hashedPass;
}
return $this->info['pass'];
}
public function changeSecond(?int $passLength): array
{
if (in_array($passLength, [4,6,8])) {
$query = 'update users set pass2 = ? where id = ?';
$pass2 = PassGen::intCode($passLength);
$args = [
password_hash($pass2, PASSWORD_DEFAULT),
$this->info['id']
];
Confirmation::byEmail($this->info, 'pass2', $pass2);
$hash = $args[0];
} else {
$query = 'update users set pass2 = default where id = ?';
$args = [$this->info['id']];
}
Db::sql($query, $args);
return [
'pass2' => $pass2 ?? '',
'hash' => $hash ?? null,
];
}
}
+16
View File
@@ -0,0 +1,16 @@
<?php
class UserIp
{
public static function get()
{
return $_SERVER['HTTP_CLIENT_IP']
?? $_SERVER["HTTP_CF_CONNECTING_IP"] # when behind cloudflare
?? $_SERVER['HTTP_X_FORWARDED']
?? $_SERVER['HTTP_X_FORWARDED_FOR']
?? $_SERVER['HTTP_FORWARDED']
?? $_SERVER['HTTP_FORWARDED_FOR']
?? $_SERVER['REMOTE_ADDR']
?? '0.0.0.0';
}
}
+235 -17
View File
@@ -1,28 +1,246 @@
<?php
use Core\Config;
use Core\Db;
class UserRegister
{
private string $error = '';
private int $class = 0;
private array $classBonuses = [
1 => [
's1=62|s2=3|s3=3|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=9|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6433],
'effects' => [1, 20, 25, 37, 38, 283, 296, 412, 472],
],
2 => [
's1=21|s2=31|s3=16|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=9|a2=0|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0',
'items' => [6431],
'effects' => [8, 20, 25, 37, 38, 283, 296, 412, 472],
],
3 => [
's1=42|s2=3|s3=3|s4=50|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=9|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6432],
'effects' => [1, 20, 25, 37, 38, 283, 296, 412, 472],
],
4 => [
's1=24|s2=15|s3=29|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=9|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6430],
'effects' => [7, 20, 25, 37, 38, 283, 296, 412, 472],
],
5 => [
's1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=0|mg2=6|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6435],
'effects' => [9, 32, 53, 439, 25, 37, 38, 283, 296, 412, 472],
],
6 => [
's1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=6|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6447],
'effects' => [9, 32, 51, 439, 25, 37, 38, 283, 296, 412, 472],
],
7 => [
's1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=0|mg2=0|mg3=0|mg4=6|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6436],
'effects' => [9, 32, 54, 439, 25, 37, 38, 283, 296, 412, 472],
],
8 => [
's1=14|s2=3|s3=3|s4=25|rinv=40|m9=5|m6=10|s7=0|a1=0|a2=0|a3=0|a4=0|a5=3|mg1=0|mg2=0|mg3=6|mg4=0|mg5=0|mg6=0|mg7=0|s5=13|s6=40|a6=0|s8=0|s9=0|s10=0|s11=0|s12=0|s13=0|s14=0|s15=0',
'items' => [6448],
'effects' => [9, 32, 52, 439, 25, 37, 38, 283, 296, 412, 472],
],
9 => [
's1=15|s2=23|s3=30|s4=30|rinv=40|m9=5|m6=10|s7=0|a1=9|a2=0|a3=0|a4=0|a5=0|mg1=0|mg2=0|mg3=0|mg4=0|mg5=0|mg6=0|mg7=0|s5=0|s6=0',
'items' => [6530],
'effects' => [8, 20, 25, 37, 38, 283, 296, 412, 472],
],
];
private array $restrictedLogins = [
'ангел', 'angel', 'администрация', 'administration', 'Комментатор',
'Мироздатель', 'Мусорщик', 'Падальщик', 'Повелитель',
'Архивариус', 'Пересмешник', 'Волынщик', 'Лорд Разрушитель',
'Милосердие', 'Справедливость', 'Искушение', 'Вознесение',
];
public function __construct()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
define('IP', $ip);
if ($_SERVER['HTTP_REFERER'] == 'https://new-combats.com/' && $_COOKIE['acomb1'] != '2') {
setcookie('acomb1', '1', time() + 60 * 60 * 24 * 3);
}
}
public function en_ru($txt)
public function hasMixedLatCur(string $txt): bool
{
$en = preg_match("/^(([0-9A-z _-])+)$/i", $txt);
$ru = preg_match("/^(([0-9À-ÿ _-])+)$/i", $txt);
$en = preg_match("/^(([0-9A-z -])+)$/iu", $txt);
$ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $txt);
return ($ru && $en) || (!$ru && !$en);
}
public function hasGoodLogin(string $login): bool
{
$isRestricted = in_array($login, $this->restrictedLogins);
$isRegistered = Db::getValue('select count(*) from users where login = ?', [$login]);
//Бывшие в употреблении логины. Дичь, но ладно.
$wasRegistered = Db::getValue('select count(*) from lastnames where login = ?', [$login]);
$login = str_replace(' ', ' ', $login);
if (mb_strlen($login) > 20) {
$this->error = 'Логин должен содержать не более 20 символов.';
}
if (mb_strlen($login) < 4) {
$this->error = 'Логин должен содержать не менее 4 символов.';
}
if ($this->hasMixedLatCur($login)) {
$this->error = 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.';
}
if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) {
$this->error = 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).';
}
if (!empty($this->error)) {
$this->error .= '<br>Пример правильного никнейма: Петя Убиватор, Коля, xalop.<br>Пример неправильного никнейма: )))), kolя)=-/.';
}
if ($isRegistered || $wasRegistered || $isRestricted) {
$this->error = 'Логин ' . $login . ' уже занят, выберите другой.';
}
return !$this->error;
}
public function hasGoodEmail(string $email): bool
{
$isRegistered = Db::getValue('select count(*) from users where mail = ?', [$email]);
$isBlocked = Db::getValue('select count(*) from ban_email where email = ?', [$email]);
$allowedDomains = Db::getColumn('select email from trust_email');
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || $isRegistered) {
$this->error = 'Неправильный email.';
}
if ($isBlocked) {
$this->error = 'Адрес заблокирован.';
}
if (!in_array(explode('@', $email)[1], $allowedDomains)) {
$this->error = 'Данный почтовый сервис использовать нельзя.';
}
return !$this->error;
}
public function hasGoodEmailCode(string $email, int $code): bool
{
$check = Db::getValue('select code from secure_code where email = ? order by time desc limit 1', [$email]);
if ($code !== $check) {
$this->error = 'Неверный проверочный код.';
} else {
Db::sql('delete from secure_code where email = ?', [$email]);
}
return !$this->error;
}
public function hasGoodPassword(string $password1, string $password2): bool
{
if ($password1 !== $password2) {
$this->error = 'Пароли не совпадают';
}
if (strlen($password1) < 8) {
$this->error = 'Пароль должен быть больше 8 символов';
}
return !$this->error;
}
public function new(string $login, string $password, string $email, $ref, $birthday, int $sex, int $class): string
{
if (!$this->hasGoodLogin($login)) { //fixme: грязный хак, но лучше не придумывается с этой пошаговостью.
return 0;
}
if ($email === 'dnf123123@gmail.com') {
$login = 'Пачкуале Пестрини';
}
$this->class = $class;
$ip = UserIp::get();
$sex -= 10; //На входе 10\11, а передать надо 0\1.
Db::sql(
'insert into users
(`real`,login,host_reg,pass,ip,ipreg,room,timereg,mail,bithday,sex,fnq,molch2,level,clan_zv,money,online)
values (1,?,?,?,?,?,9,unix_timestamp(),?,?,?,0,unix_timestamp() + 86400,8,0,200,unix_timestamp())',
[
$login,
$ref ?? '',
password_hash($password, PASSWORD_DEFAULT),
$ip,
$ip,
$email,
date('d.m.Y', strtotime($birthday)),
$sex,
]
);
$uid = Db::lastInsertId();
trigger_error('Db::lastInsertId= ' .$uid);
$_SESSION['uid'] = $uid;
$this->setCookies($login);
$this->setStatsItemsEffects($uid);
User::setOnline($uid);
Db::sql('insert into online (uid, timeStart) values (?,unix_timestamp())', [$uid]);
return $uid;
}
private function setCookies($login)
{
setcookie('login', 1, 1, '/', Config::get('host'), true);
setcookie('registrationModal', 1, 1, '/', Config::get('host'), true);
setcookie('login', $login, strtotime('+7 days'), '/', Config::get('host'), true);
setcookie('registrationModal', 'true', strtotime('+7 days'), '/', Config::get('host'), true);
}
private function setStatsItemsEffects($uid)
{
$u = User::start();
if ($_SESSION['ref'] === 1) {
$this->classBonuses[$this->class]['items'][] = 4811;
}
Db::sql(
'insert into stats (id,stats,ability,skills,exp) values (?,?,-75,-9,100000)',
[
$uid,
$this->classBonuses[$this->class][0],
]
);
foreach ($this->classBonuses[$this->class]['items'] as $item) {
$itemId = $u->addItem($item, $uid);
Db::sql(
'update items_users
set `1price` = (select price_1 from items_shop where items_shop.item_id = ? and sid = 1)
where id = ?',
[$item, $itemId]
);
}
$this->addEffects($uid, implode(',',$this->classBonuses[$this->class]['effects']));
}
private function addEffects(int $uid, int ...$eids)
{
$in = implode(',', $eids);
$q =
"insert into eff_users (
overType,
id_eff,
uid,
name,
timeUse,
data
)
select
oneType,
id2,
$uid,
mname,
unix_timestamp(),
mdata
from
eff_main
where
id2 in ($in)";
Db::sql($q);
}
/**
* @return string
*/
public function getError(): string
{
return $this->error;
}
}
+7 -9
View File
@@ -1,27 +1,25 @@
<?php
use Insallah\Db;
use Core\Db;
class UserStats
{
/**
* Ñîáèðàåò ñóììû âñåõ áîíóñîâ ñ îäåòûõ ïðåäìåòîâ è àêòèâíûõ ýôåêòîâ.
* @param $userId
* Собирает суммы всех бонусов с одетых предметов и активных эфектов.
* @param int $userId
* @param bool $showAll
* @return array
*/
public static function getAllBonuses($userId, $showAll = false)
public static function getAllBonuses(int $userId, bool $showAll = false): array
{
require_once '_incl_data/class/Insallah/Core/Db.php';
$db = new Db();
$q = 'select data from items_users where uid = ? and inOdet > 0 and `delete` = 0
union all select data from eff_users where uid = ? and `delete` = 0';
$iData = $db::getColumn($q, [$userId, $userId]);
$iData = Db::getColumn($q, [$userId, $userId]);
$params = [];
$params2 = json_decode(str_replace(['=', '|'], ['":', ',"'], '{"' . $iData . '}'), true);
foreach ($iData as $datum) {
foreach (explode('|', $datum) as $inner) {
list($a, $b) = explode('=', $inner);
[$a, $b] = explode('=', $inner);
if (strpos($a, 'add') !== false || strpos($a, 'sv') !== false || $showAll) {
if (isset($params[$a])) {
$params[$a] += $b;
File diff suppressed because it is too large Load Diff
+6 -26
View File
@@ -5,34 +5,14 @@ if (!defined('GAME')) {
$db = [
's' => 'localhost', // server
'd' => 'newcom1_abk', // database
'u' => 'newcom1_abk', // user
'p' => '4nWYsIM[c?}P' // password
'd' => 'game_production', // database
'u' => 'prod1', // user
'p' => 'Bz@fGaZjFU2206Ua' // password
];
$dsn = 'mysql:host=' . $db['s'] . ';dbname=' . $db['d'];
if (function_exists('date_default_timezone_set')) {
date_default_timezone_set('Europe/Moscow');
}
include_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'mysql_override.php';
$dbgo = mysql_pconnect($db['s'], $db['u'], $db['p']);
$dbgo = mysql_connect($db['s'], $db['u'], $db['p']);
mysql_select_db($db['d'], $dbgo);
mysql_query('SET NAMES cp1251');
if (!function_exists('GetRealIp')) {
function GetRealIpTest()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return $_SERVER['REMOTE_ADDR'];
}
$ipban = GetRealIpTest();
} else {
$ipban = GetRealIp();
}
$pdo = new PDO($dsn, $db['u'], $db['p'], [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES cp1251"]);
mysql_query('set names utf8mb4');
+6 -6
View File
@@ -1,22 +1,22 @@
<?
if( isset($s[1]) && $s[1] == '1/hramstok1' ) {
/*
Сундук: Водосток для сбора проб
* Заменяет предмет Пустая склянка (4693) на (4694) Склянка с пробами
Сундук: Водосток для сбора проб
* Заменяет предмет Пустая склянка (4693) на (4694) Склянка с пробами
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
$vad['itm'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_users` WHERE `item_id` = 4693 AND `uid` = "'.$u->info['id'].'" AND `delete` = 0 AND `inShop` = 0 AND `inTransfer` = 0 LIMIT 1'));
if(!isset($vad['itm']['id'])) {
$r = 'У вас нет подходящего предмета для хранения проб... Все руки в каком-то говне...';
$r = 'У вас нет подходящего предмета для хранения проб... Все руки в каком-то говне...';
$vad['go'] = false;
}
@@ -25,7 +25,7 @@ if( isset($s[1]) && $s[1] == '1/hramstok1' ) {
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)');
mysql_query('UPDATE `items_users` SET `item_id` = 4694 WHERE `id` = "'.$vad['itm']['id'].'" LIMIT 1');
$r = 'Вы успешно взяли пробы с водостока! Набранную склянку нужно отнести обратно, к Арквиерро в Храм Знаний.';
$r = 'Вы успешно взяли пробы с водостока! Набранную склянку нужно отнести обратно, к Арквиерро в Храм Знаний.';
}
unset($vad);
+5 -5
View File
@@ -1,16 +1,16 @@
<?
if( isset($s[1]) && $s[1] == '1/podogrevatel' ) {
/*
Сундук: Обогреватель
* падает гайка
Сундук: Обогреватель
* падает гайка
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
@@ -23,7 +23,7 @@ if( isset($s[1]) && $s[1] == '1/podogrevatel' ) {
$vad['itm'] = $vad['itm'][rand(0,count($vad['itm'])-1)];
$vad['itm'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['itm'].'" LIMIT 1'));
$this->pickitem($obj,$vad['itm']['id'],0,'',false);
$r = 'Вы обнаружили предмет &quot;'.$vad['itm']['name'].'&quot;.';
$r = 'Вы обнаружили предмет &quot;'.$vad['itm']['name'].'&quot;.';
}
unset($vad);
+6 -6
View File
@@ -1,22 +1,22 @@
<?
if( isset($s[1]) && $s[1] == '1/rjav' ) {
/*
Сундук: Ржавые трубы
* Обмен ключчиииика на вентиль
Сундук: Ржавые трубы
* Обмен ключчиииика на вентиль
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
$vad['itm'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_users` WHERE `item_id` = 1004 AND `uid` = "'.$u->info['id'].'" AND `delete` = 0 AND `inShop` = 0 AND `inTransfer` = 0 LIMIT 1'));
if(!isset($vad['itm']['id'])) {
$r = 'У вас нет подходящего предмета чтобы открутить вентиль...';
$r = 'У вас нет подходящего предмета чтобы открутить вентиль...';
$vad['go'] = false;
}
@@ -26,7 +26,7 @@ if( isset($s[1]) && $s[1] == '1/rjav' ) {
)');
mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `id` = "'.$vad['itm']['id'].'" LIMIT 1');
$this->pickitem($obj,1005,$u->info['id'],'',false);
$r = 'Вы успешно открутили вентиль! (Предмет &quot;Ключииик&quot; был изьят)';
$r = 'Вы успешно открутили вентиль! (Предмет &quot;Ключииик&quot; был изьят)';
}
unset($vad);
+5 -5
View File
@@ -1,16 +1,16 @@
<?
if( isset($s[1]) && $s[1] == '1/vods1' ) {
/*
Сундук: Водосток
* падает гайка
Сундук: Водосток
* падает гайка
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
@@ -20,7 +20,7 @@ if( isset($s[1]) && $s[1] == '1/vods1' ) {
)');
//mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `id` = "'.$vad['itm']['id'].'" LIMIT 1');
$this->pickitem($obj,1002,0,'',false);
$r = 'Вы обнаружили предмет &quot;Гайка&quot;.';
$r = 'Вы обнаружили предмет &quot;Гайка&quot;.';
}
unset($vad);
+10 -10
View File
@@ -1,34 +1,34 @@
<?
if( isset($s[1]) && $s[1] == '101/altar' ) {
/*
Алтарь
* Телепортирует на необходимую клетку х -3 , у 7
* Для прохода требуется 1 камень типа 881 или 878
Алтарь
* Телепортирует на необходимую клетку х -3 , у 7
* Для прохода требуется 1 камень типа 881 или 878
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => false
);
//Проверяем камни
//Проверяем камни
$vad['sp'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_users` WHERE (`item_id` = "881" OR `item_id` = "878") AND `uid` = "'.$u->info['id'].'" AND `delete` = "0" AND `inOdet` = "0" AND `inShop` = "0" AND `inTransfer` = "0" LIMIT 1'));
if( isset($vad['sp']['id']) ) {
// Удалена проверка на группировку предметов 13.10.2015
// Удалена проверка на группировку предметов 13.10.2015
$vad['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1'));
$vad['go'] = true;
}
if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "-3",`y` = "7",`s` = "1" WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
// $u->deleteItem(,$u->info['id'],1); // Убрано 14.10.2015
// $u->deleteItem(,$u->info['id'],1); // Убрано 14.10.2015
$upd = mysql_query('UPDATE `items_users` SET `lastUPD`="'.time().'",`delete`="'.time().'" WHERE `id`="'.$vad['sp']['id'].'" LIMIT 1');
if($upd){
$r = 'Вы растворили &quot;'.$vad['pl']['name'].'&quot; в алтаре и произошел взрыв. Алтарь переместил вас в тайную комнату';
$r = 'Вы растворили &quot;'.$vad['pl']['name'].'&quot; в алтаре и произошел взрыв. Алтарь переместил вас в тайную комнату';
echo '<script>location.href="main.php"</script>';
} else {
$r = 'Что-то пошло не так, попробуйте позже.';
$r = 'Что-то пошло не так, попробуйте позже.';
}
}elseif( !isset($vad['sp']['id']) ) {
$r = 'Для перемещения требуется один из драгоценных камней';
$r = 'Для перемещения требуется один из драгоценных камней';
}
unset($vad);
}
+7 -7
View File
@@ -1,10 +1,10 @@
<?
if( isset($s[1]) && $s[1] == '101/i9' ) {
/*
Ñóíäóê: ëîâóøêà
* Ñíèìàåò äî 1000 ÍÐ îäèí ðàç
Сундук: ловушка
* Снимает до 1000 НР один раз
*/
//Âñå ïåðåìåííûå ñîõðàíÿòü â ìàññèâå $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => false
);
@@ -13,23 +13,23 @@ if( isset($s[1]) && $s[1] == '101/i9' ) {
if( !isset($vad['test']['id']) ) {
$vad['go'] = true;
}else{
$r = ' ñóíäóêå áûëà ëîâóøêà, å¸ àêòèâèðîâàë ïåðñîíàæ '.$u->microLogin($vad['test']['uid'],1);
$r = 'В сундуке была ловушка, её активировал персонаж '.$u->microLogin($vad['test']['uid'],1);
}
if( $vad['go'] == true ) {
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)');
$r = 'Â ñóíäóêå áûëà ëîâóøêà óñòàíîâëåííàÿ îäíèì èç îáèòàòåëåé ïîäçåìåëüÿ!';
$r = 'В сундуке была ловушка установленная одним из обитателей подземелья!';
$vad['min_hp'] = rand(100,1000);
$u->stats['hpNow'] -= $vad['min_hp'];
if( $u->stats['hpNow'] < 0 ) {
$u->stats['hpNow'] = 0;
}
if($u->info['sex'] == 0) {
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> óãîäèë â ëîâóøêó îñòàâëåííóþ â &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> угодил в ловушку оставленную в &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
}else{
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> óãîäèëà â ëîâóøêó îñòàâëåííóþ â &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> угодила в ловушку оставленную в &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
}
$this->sys_chat($vad['text']);
$u->info['hpNow'] = $u->stats['hpNow'];
+7 -7
View File
@@ -1,17 +1,17 @@
<?
if( isset($s[1]) && $s[1] == '101/kotel' ) {
/*
Сундук: Котел
* Можно найти Сущность щита
* Может отнять 100-1000 НР
Сундук: Котел
* Можно найти Сущность щита
* Может отнять 100-1000 НР
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то перевернул котел...';
$r = 'Кто-то перевернул котел...';
$vad['go'] = false;
}
@@ -19,9 +19,9 @@ if( isset($s[1]) && $s[1] == '101/kotel' ) {
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)');
//Награда
//Награда
$this->pickitem($obj,5239,$u->info['id']);
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили предмет &quot;Амброзия подмастерья Владык&quot;';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили предмет &quot;Амброзия подмастерья Владык&quot;';
}
unset($vad);
}
+5 -5
View File
@@ -1,16 +1,16 @@
<?
if( isset($s[1]) && $s[1] == '101/krovat' ) {
/*
Сундук: Кровать
* Можно получить один из двух ресурсов
Сундук: Кровать
* Можно получить один из двух ресурсов
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
@@ -20,7 +20,7 @@ if( isset($s[1]) && $s[1] == '101/krovat' ) {
)');
$vad['items'] = array(472,473,474,475,476,477,478,479,481,485,486,487,692,693,1153,1179,2079,2177,2090);
$vad['items'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.mysql_real_escape_string($vad['items'][rand(0,count($vad['items'])-1)]).'" LIMIT 1'));
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;'.$vad['items']['name'].'&quot;';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;'.$vad['items']['name'].'&quot;';
$this->pickitem($obj,$vad['items']['id'],$u->info['id'],'',$vad['dn_delete'][$vad['items']['id']]);
}
+66 -66
View File
@@ -1,90 +1,90 @@
<?
if( isset($s[1]) && $s[1] == '101/laba1' ) {
/*
Сундук: Лаболатория
* Можно собрать случайную тактику, но не более 3 на человека за поход и не более 10 на команду
* 897 - Слиток пустынной руды
* 903 - Тысячелетний камень
* 888 - Шепот гор
* 892 - Эссенция чистоты
* 950 - Кожа Общего Врага
* 904 - Кристалл времен
* 878 - Лучистый топаз
* 880 - Эссенция глубины
* 879 - Ралиэль
* 899 - Корень змеиного дерева
* 882 - Глубинный камень
* 908 - Камень затаенного солнца
* 909 - Эссенция праведного гнева
* 902 - Плод змеиного дерева
* 881 - Лучистый Рубин
* 893 - Эссенция лунного света
* 898 - Троекорень
* 890 - Сгусток астрала
* 907 - Кристалл стабильности
* 905 - Стихиалия
-- Боя
4243 - 897 х3
4244 - 903 х2
4245 - 888 х2
4246 - 892 х1
4247 - 879 х1 , 892 х1
-- Защиты
4248 - 950 х3
4249 - 904 х2
4250 - 878 х2
4251 - 880 х1
4252 - 880 х1 , 892 х1
-- Крови
4253 - 899 х3
4254 - 882 х2
4255 - 908 х2
4256 - 909 х1
4257 - 909 х1 , 892 х1
-- Ответа
4258 - 899 х3
4259 - 902 х2
4260 - 881 х2
4261 - 893 х1
4262 - 893 х1 , 892 х1
-- Отражения
4263 - 898 х3
4264 - 890 х2
4265 - 907 х2
4266 - 905 х1
4267 - 905 х1 , 892 х1
Сундук: Лаболатория
* Можно собрать случайную тактику, но не более 3 на человека за поход и не более 10 на команду
* 897 - Слиток пустынной руды
* 903 - Тысячелетний камень
* 888 - Шепот гор
* 892 - Эссенция чистоты
* 950 - Кожа Общего Врага
* 904 - Кристалл времен
* 878 - Лучистый топаз
* 880 - Эссенция глубины
* 879 - Ралиэль
* 899 - Корень змеиного дерева
* 882 - Глубинный камень
* 908 - Камень затаенного солнца
* 909 - Эссенция праведного гнева
* 902 - Плод змеиного дерева
* 881 - Лучистый Рубин
* 893 - Эссенция лунного света
* 898 - Троекорень
* 890 - Сгусток астрала
* 907 - Кристалл стабильности
* 905 - Стихиалия
-- Боя
4243 - 897 х3
4244 - 903 х2
4245 - 888 х2
4246 - 892 х1
4247 - 879 х1 , 892 х1
-- Защиты
4248 - 950 х3
4249 - 904 х2
4250 - 878 х2
4251 - 880 х1
4252 - 880 х1 , 892 х1
-- Крови
4253 - 899 х3
4254 - 882 х2
4255 - 908 х2
4256 - 909 х1
4257 - 909 х1 , 892 х1
-- Ответа
4258 - 899 х3
4259 - 902 х2
4260 - 881 х2
4261 - 893 х1
4262 - 893 х1 , 892 х1
-- Отражения
4263 - 898 х3
4264 - 890 х2
4265 - 907 х2
4266 - 905 х1
4267 - 905 х1 , 892 х1
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['recept'] = array(
//Б
//Б
array( 897, 3 ),
array( 903, 2 ),
array( 888, 2 ),
array( 892, 1 ),
array( 892, 1, 892, 1 ),
//З
//З
array( 950, 3 ),
array( 904, 2 ),
array( 878, 2 ),
array( 880, 1 ),
array( 880, 1, 892, 1 ),
//К
//К
array( 899, 3 ),
array( 882, 2 ),
array( 908, 2 ),
array( 909, 1 ),
array( 909, 1, 892, 1 ),
//Ответа
//Ответа
array( 899, 3 ),
array( 902, 2 ),
array( 881, 2 ),
array( 893, 1 ),
array( 893, 1, 892, 1 ),
//Отражения
//Отражения
array( 898, 3 ),
array( 890, 2 ),
array( 907, 2 ),
@@ -110,7 +110,7 @@ if( isset($s[1]) && $s[1] == '101/laba1' ) {
if( $vad['recept'][$vad['i']][2] > 0 && $vad['tr_itm'] == true ) {
$vad['tr_itm'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `items_users` WHERE `item_id` = "'.$vad['recept'][$vad['i']][2].'" AND (`delete` = "0" OR `delete` = "1000") AND `inShop` = "0" AND `inTransfer` = "0" AND `uid` = "'.$u->info['id'].'" LIMIT 1'));
if( $vad['tr_itm'][2] >= $vad['recept'][$vad['i']][3] ) {
//все ок
//все ок
}else{
$vad['tr_itm'] = false;
}
@@ -125,20 +125,20 @@ if( isset($s[1]) && $s[1] == '101/laba1' ) {
$vad['itm'] = $vad['itm'][rand(0,count($vad['itm'])-1)];
if( $vad['test2'][0] >= 10 ) {
$r = 'Не удалось воспользоваться лабораторией, не более 10 раз на команду за один поход';
$r = 'Не удалось воспользоваться лабораторией, не более 10 раз на команду за один поход';
$vad['go'] = false;
}elseif( $vad['test1'][0] >= 3 ) {
$r = 'Не удалось воспользоваться лабораторией, не более 3 раз на персонажа за один поход';
$r = 'Не удалось воспользоваться лабораторией, не более 3 раз на персонажа за один поход';
$vad['go'] = false;
}elseif(!isset($vad['itm']['id'])) {
$r = 'Недостаточно ингридиентов...';
$r = 'Недостаточно ингридиентов...';
$vad['go'] = false;
}
if( $vad['go'] == true ) {
//Выдаем предмет
//Выдаем предмет
if( $vad['tr'][$vad['itm']['id']][1] > 0 ) {
$u->deleteItemID($vad['tr'][$vad['itm']['id']][0],$u->info['id'],$vad['tr'][$vad['itm']['id']][1]);
}
@@ -149,11 +149,11 @@ if( isset($s[1]) && $s[1] == '101/laba1' ) {
"'.$u->info['dnow'].'","'.$u->info['id'].'","'.time().'","obj_act'.$obj['id'].'_lab","'.$obj['x'].'","'.$obj['y'].'"
)');
$u->addItem($vad['itm']['id'],$u->info['id'],'|frompisher=101');
$r = 'Вы создали предмет &quot;'.$vad['itm']['name'].'&quot;! Расплавив ресурсы ...';
$r = 'Вы создали предмет &quot;'.$vad['itm']['name'].'&quot;! Расплавив ресурсы ...';
if($u->info['sex'] == 0) {
$vad['text'] = '<b>'.$u->info['login'].'</b> создал предмет &quot;'.$vad['itm']['name'].'&quot; при помощи &quot;'.$obj['name'].'&quot;.';
$vad['text'] = '<b>'.$u->info['login'].'</b> создал предмет &quot;'.$vad['itm']['name'].'&quot; при помощи &quot;'.$obj['name'].'&quot;.';
}else{
$vad['text'] = '<b>'.$u->info['login'].'</b> создала предмет &quot;'.$vad['itm']['name'].'&quot; при помощи &quot;'.$obj['name'].'&quot;.';
$vad['text'] = '<b>'.$u->info['login'].'</b> создала предмет &quot;'.$vad['itm']['name'].'&quot; при помощи &quot;'.$obj['name'].'&quot;.';
}
$this->sys_chat($vad['text']);
}
+7 -7
View File
@@ -1,16 +1,16 @@
<?
if( isset($s[1]) && $s[1] == '101/nakova' ) {
/*
Сундук: Наковальня
* Можно создать сущность х2 с судьбой
Сундук: Наковальня
* Можно создать сущность х2 с судьбой
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то уже разбил сущность за этот поход, наковальня сломана...';
$r = 'Кто-то уже разбил сущность за этот поход, наковальня сломана...';
$vad['go'] = false;
}
@@ -25,14 +25,14 @@ if( isset($s[1]) && $s[1] == '101/nakova' ) {
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)');
//Награда
//Награда
$u->deleteItem($vad['sp']['id'],$u->info['id'],1);
mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `id` = "'.$vad['sp']['id'].'" LIMIT 1');
$this->pickitem($obj,1035,$u->info['id'],'|sudba=-1');
$this->pickitem($obj,1035,$u->info['id'],'|sudba=-1');
$r = 'Вы использовали &quot;'.$obj['name'].'&quot; и разбили &quot;Сущность&quot; на две части';
$r = 'Вы использовали &quot;'.$obj['name'].'&quot; и разбили &quot;Сущность&quot; на две части';
}elseif( !isset($vad['sp']['id']) ) {
$r = 'Для использования необходим предмет &quot;Сущность Ресурса&quot;';
$r = 'Для использования необходим предмет &quot;Сущность Ресурса&quot;';
}
}
+4 -4
View File
@@ -1,17 +1,17 @@
<?
if( isset($s[1]) && $s[1] == '101/nakova2' ) {
/*
Наковальня 2
* Телепортирует на необходимую клетку х 3 , у 42
Наковальня 2
* Телепортирует на необходимую клетку х 3 , у 42
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "3",`y` = "42",`s` = "3" WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
$r = 'Вы подошли к наковальне...';
$r = 'Вы подошли к наковальне...';
echo '<script>location.href="main.php"</script>';
}
unset($vad);
+6 -6
View File
@@ -1,18 +1,18 @@
<?
if( isset($s[1]) && $s[1] == '101/reshetka1' ) {
/*
Решетка
* Телепортирует на необходимую клетку
Решетка
* Телепортирует на необходимую клетку
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => false
);
//Проверяем камни
//Проверяем камни
$vad['sp'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_users` WHERE `item_id` = "1189" AND `uid` = "'.$u->info['id'].'" AND `delete` = "0" AND `inOdet` = "0" AND `inShop` = "0" AND `inTransfer` = "0" LIMIT 1'));
if( isset($vad['sp']['id']) ) {
// Удалена проверка на группировку предметов 14.10.2015
// Удалена проверка на группировку предметов 14.10.2015
// $vad['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1'));
$vad['go'] = true;
}
@@ -21,7 +21,7 @@ if( isset($s[1]) && $s[1] == '101/reshetka1' ) {
//$u->deleteItem($vad['sp']['id'],$u->info['id'],1);
echo '<script>location.href="main.php"</script>';
}elseif( !isset($vad['sp']['id']) ) {
$r = 'Для прохода требуется предмет &quot;Мерцающий ключ №3&quot;';
$r = 'Для прохода требуется предмет &quot;Мерцающий ключ №3&quot;';
}
unset($vad);
}
+9 -9
View File
@@ -1,9 +1,9 @@
<?
if( isset($s[1]) && $s[1] == '101/sunduk0' ) {
/*
Сундук: Сундук
Сундук: Сундук
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -11,20 +11,20 @@ if( isset($s[1]) && $s[1] == '101/sunduk0' ) {
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" LIMIT 1'));
$vad['test2'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" AND `uid` = "'.$u->info['id'].'" LIMIT 1'));
if( $vad['test2'][0] > 0 ) {
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false;
}elseif( $vad['test1'][0] > 1 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false;
}
if( $vad['go'] == true ) {
//Выкидываем Лучистый топаз
//Выкидываем Лучистый топаз
$vad['items'] = array(878);
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 ) {
//Выбрасываем предмет
//Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)');
@@ -32,12 +32,12 @@ if( isset($s[1]) && $s[1] == '101/sunduk0' ) {
$vad['dn_delete'][$vad['items']] = false;
}
if( $this->pickitem($obj,$vad['items'],$u->info['id'],'',$vad['dn_delete'][$vad['items']]) ) {
$r = 'Вы обнаружили предметы...';
$r = 'Вы обнаружили предметы...';
}else{
$r = 'Что-то пошло не так, предметы растворились...';
$r = 'Что-то пошло не так, предметы растворились...';
}
}else{
$r = 'Вы не нашли ничего полезного...';
$r = 'Вы не нашли ничего полезного...';
}
}
+10 -10
View File
@@ -1,10 +1,10 @@
<?
if( isset($s[1]) && $s[1] == '101/sunduk1' ) {
/*
Сундук: Сундук
* Можно найти Сталь , Мифрил , Пустые бутылки
Сундук: Сундук
* Можно найти Сталь , Мифрил , Пустые бутылки
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -12,15 +12,15 @@ if( isset($s[1]) && $s[1] == '101/sunduk1' ) {
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" LIMIT 1'));
$vad['test2'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" AND `uid` = "'.$u->info['id'].'" LIMIT 1'));
if( $vad['test2'][0] > 0 ) {
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false;
}elseif( $vad['test1'][0] > 1 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false;
}
if( $vad['go'] == true ) {
//Выкидываем бутылку, мифрил, либо сталь
//Выкидываем бутылку, мифрил, либо сталь
$vad['items'] = array(4272,1189);
$vad['dn_delete'] = array(
1189 => true
@@ -28,7 +28,7 @@ if( isset($s[1]) && $s[1] == '101/sunduk1' ) {
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 ) {
//Выбрасываем предмет
//Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)');
@@ -36,12 +36,12 @@ if( isset($s[1]) && $s[1] == '101/sunduk1' ) {
$vad['dn_delete'][$vad['items']] = false;
}
if( $this->pickitem($obj,$vad['items'],$u->info['id'],'',$vad['dn_delete'][$vad['items']]) ) {
$r = 'Вы обнаружили предметы...';
$r = 'Вы обнаружили предметы...';
}else{
$r = 'Что-то пошло не так, предметы растворились...';
$r = 'Что-то пошло не так, предметы растворились...';
}
}else{
$r = 'Вы не нашли ничего полезного...';
$r = 'Вы не нашли ничего полезного...';
}
}
+12 -12
View File
@@ -1,52 +1,52 @@
<?
if( isset($s[1]) && $s[1] == '101/sunduk2' ) {
/*
Сундук: Сундук
* Можно найти Отворяющая печать №3 1175
Сундук: Сундук
* Можно найти Отворяющая печать №3 1175
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false;
}
if( $vad['go'] == true ) {
//Выкидываем Отворяющая печать №3
//Выкидываем Отворяющая печать №3
$vad['items'] = array(1175);
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 && rand(1,100) < 80) {
// Выбрасываем предмет
// Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)');
/*
//откуда тут сущности? обломятся!
//откуда тут сущности? обломятся!
if( rand(0,100) < 10 ) {
//Сущность сапог
//Сущность сапог
$this->pickitem($obj,4279,0);
}
if( rand(0,100) < 10 ) {
//Сущность щита
//Сущность щита
$this->pickitem($obj,4269,0);
}
*/
if( $this->pickitem($obj,$vad['items'],0) ) {
$r = 'Вы обнаружили предметы...';
$r = 'Вы обнаружили предметы...';
}else{
$r = 'Что-то пошло не так, предметы растворились...';
$r = 'Что-то пошло не так, предметы растворились...';
}
} else {
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","false"
)');
$r = 'Вы не нашли ничего полезного...';
$r = 'Вы не нашли ничего полезного...';
}
}
+5 -5
View File
@@ -1,15 +1,15 @@
<?
if( isset($s[1]) && $s[1] == '101/sunduk3' ) {
/*
Сундук: Сундук
Сундук: Сундук
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
@@ -18,7 +18,7 @@ if( isset($s[1]) && $s[1] == '101/sunduk3' ) {
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)');
if( rand(1,100) > 20 ) {
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...';
}else{
$vad['items'] = array(4279,4269);
if( rand(1,100) < 9 ) {
@@ -28,7 +28,7 @@ if( isset($s[1]) && $s[1] == '101/sunduk3' ) {
if( !isset($vad['dn_delete'][$vad['items']['id']]) ) {
$vad['dn_delete'][$vad['items']['id']] = false;
}
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;'.$vad['items']['name'].'&quot;';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;'.$vad['items']['name'].'&quot;';
$this->pickitem($obj,$vad['items']['id'],0,'',$vad['dn_delete'][$vad['items']['id']]);
}
}
+5 -5
View File
@@ -1,15 +1,15 @@
<?
if( isset($s[1]) && $s[1] == '101/sunduk4' ) {
/*
Сундук: Сундук
Сундук: Сундук
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
@@ -18,7 +18,7 @@ if( isset($s[1]) && $s[1] == '101/sunduk4' ) {
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)');
if( rand(1,100) > 50 ) {
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...';
}else{
$vad['items'] = array(882);
if( rand(1,40) < 16 ) {
@@ -28,7 +28,7 @@ if( isset($s[1]) && $s[1] == '101/sunduk4' ) {
if( !isset($vad['dn_delete'][$vad['items']['id']]) ) {
$vad['dn_delete'][$vad['items']['id']] = false;
}
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;'.$vad['items']['name'].'&quot;';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;'.$vad['items']['name'].'&quot;';
$this->pickitem($obj,$vad['items']['id'],0,'',$vad['dn_delete'][$vad['items']['id']]);
}
}
+7 -7
View File
@@ -1,16 +1,16 @@
<?
if( isset($s[1]) && $s[1] == '101/telejka' ) {
/*
Сундук: Тележка
* Можно получить один из двух ресурсов
Сундук: Тележка
* Можно получить один из двух ресурсов
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" AND `uid` = "'.$u->info['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false;
}
@@ -20,14 +20,14 @@ if( isset($s[1]) && $s[1] == '101/telejka' ) {
)');
if( rand(0,100) < 80 ) {
if( rand(0,100) < 51 ) {
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;Лучистое серебро&quot;';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;Лучистое серебро&quot;';
$this->pickitem($obj,895,$u->info['id']);
}else{
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;Серебро&quot;';
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;Серебро&quot;';
$this->pickitem($obj,875,$u->info['id']);
}
}else{
$r = 'Вы ничего не смогли найти...';
$r = 'Вы ничего не смогли найти...';
}
}
+19 -19
View File
@@ -1,12 +1,12 @@
<?
if( isset($s[1]) && $s[1] == '101/viboina' ) {
/*
Сундук: Выбоина
* Можно найти Сталь , Мифрил , Пустые бутылки
* Может отнять 100-1000 НР
* Могут использовать только 2 человека из команды
Сундук: Выбоина
* Можно найти Сталь , Мифрил , Пустые бутылки
* Может отнять 100-1000 НР
* Могут использовать только 2 человека из команды
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -18,7 +18,7 @@ if( isset($s[1]) && $s[1] == '101/viboina' ) {
$vad['test5'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'_bad_use" AND `uid` != "'.$u->info['id'].'" LIMIT 1'));
if( !isset($vad['test3']['id']) ) {
//Определяем ловушка или нет
//Определяем ловушка или нет
if( rand(0,100) < 50 ) {
$vad['bad'] = 1;
}else{
@@ -32,33 +32,33 @@ if( isset($s[1]) && $s[1] == '101/viboina' ) {
}
if( $vad['test2'][0] > 0 ) {
//$r = 'Вы уже обыскали здесь все...';
$r = 'Кажется, вы здесь побывали раньше...';
//$r = 'Вы уже обыскали здесь все...';
$r = 'Кажется, вы здесь побывали раньше...';
$vad['go'] = false;
}elseif( $vad['test1'][0] > 1 || ( $vad['test4'] == 0 && $vad['test5'] >= 2 ) ) {
$r = 'Кажется, кто-то здесь побывал раньше вас...';
$r = 'Кажется, кто-то здесь побывал раньше вас...';
$vad['go'] = false;
}
if( $vad['bad'] == 1 && $vad['go'] == true ) {
//Вы угодили в ловушку
//Вы угодили в ловушку
$vad['test3'] = mysql_fetch_array(mysql_query('SELECT `id`,`vals` FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'_bad_use" AND `uid` = "'.$u->info['id'].'" LIMIT 1'));
if( !isset($vad['test3']['id']) ) {
//Ловушка на 50% НР , Если НР баольше 2 ед.
//Ловушка на 50% НР , Если НР баольше 2 ед.
$vad['go'] = false;
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'_bad_use",""
)');
$r = 'В сундуке была ловушка установленная одним из обитателей подземелья!';
$r = 'В сундуке была ловушка установленная одним из обитателей подземелья!';
$vad['min_hp'] = round(2+$u->stats['hpNow']/4);
$u->stats['hpNow'] -= $vad['min_hp'];
if( $u->stats['hpNow'] < 0 ) {
$u->stats['hpNow'] = 0;
}
if($u->info['sex'] == 0) {
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> угодил в ловушку оставленную в &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> угодил в ловушку оставленную в &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
}else{
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> угодила в ловушку оставленную в &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
$vad['text'] = '[img[items/trap.gif]] <b>'.$u->info['login'].'</b> угодила в ловушку оставленную в &quot;'.$obj['name'].'&quot;. <b>-'.$vad['min_hp'].'</b> ['.floor($u->stats['hpNow']).'/'.round($u->stats['hpAll']).']';
}
$this->sys_chat($vad['text']);
$u->info['hpNow'] = $u->stats['hpNow'];
@@ -69,22 +69,22 @@ if( isset($s[1]) && $s[1] == '101/viboina' ) {
}
if( $vad['go'] == true ) {
//Выкидываем бутылку, мифрил, либо сталь
//Выкидываем бутылку, мифрил, либо сталь
$vad['items'] = array(2,877,896);
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 ) {
//Выбрасываем предмет
//Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)');
if( $this->pickitem($obj,$vad['items'],$u->info['id']) ) {
$r = 'Вы обнаружили предметы...';
$r = 'Вы обнаружили предметы...';
}else{
$r = 'Что-то пошло не так, предметы растворились...';
$r = 'Что-то пошло не так, предметы растворились...';
}
}else{
$r = 'Вы не нашли ничего полезного...';
$r = 'Вы не нашли ничего полезного...';
}
}
+11 -11
View File
@@ -1,34 +1,34 @@
<?
if( isset($s[1]) && $s[1] == '101/viboina2' ) {
/*
Выбоина
* Телепортирует на необходимую клетку х 4 , у 26
* Для прохода требуется 1 Линза Портала - 4298
Выбоина
* Телепортирует на необходимую клетку х 4 , у 26
* Для прохода требуется 1 Линза Портала - 4298
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => false
);
//Проверяем камни
//Проверяем камни
$vad['sp'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_users` WHERE `item_id` = "4298" AND `uid` = "'.$u->info['id'].'" AND `delete` = "0" AND `inOdet` = "0" AND `inShop` = "0" AND `inTransfer` = "0" LIMIT 1'));
if( isset($vad['sp']['id']) ) {
// Удалена проверка на группировку предметов 14.10.2015
// $vad['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1')); // Берем название "Линза Портала" и все.. смысл запроса... статика.
// Удалена проверка на группировку предметов 14.10.2015
// $vad['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1')); // Берем название "Линза Портала" и все.. смысл запроса... статика.
$vad['go'] = true;
}
if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "4",`y` = "26",`s` = "4" WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
//$u->deleteItem($vad['sp']['id'],$u->info['id'],1);// Убрано 14.10.2015
//$u->deleteItem($vad['sp']['id'],$u->info['id'],1);// Убрано 14.10.2015
$upd = mysql_query('UPDATE `items_users` SET `lastUPD`="'.time().'",`delete`="'.time().'" WHERE `id`="'.$vad['sp']['id'].'" LIMIT 1');
if($upd){
$r = 'Вы переместились при помощи &quot;Линза Портала&quot; на другую сторону';
$r = 'Вы переместились при помощи &quot;Линза Портала&quot; на другую сторону';
echo '<script>location.href="main.php"</script>';
} else {
$r = 'Что-то пошло не так, попробуйте позже.';
$r = 'Что-то пошло не так, попробуйте позже.';
}
}elseif( !isset($vad['sp']['id']) ) {
$r = 'Для перемещения требуется &quot;Линза Портала&quot;';
$r = 'Для перемещения требуется &quot;Линза Портала&quot;';
}
unset($vad);
}
+4 -4
View File
@@ -1,17 +1,17 @@
<?
if( isset($s[1]) && $s[1] == '101/viboina3' ) {
/*
Выбоина
* Телепортирует на необходимую клетку х 4 , у 25
Выбоина
* Телепортирует на необходимую клетку х 4 , у 25
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "4",`y` = "25",`s` = "2" WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
$r = 'Вы перешли на другую сторону завала';
$r = 'Вы перешли на другую сторону завала';
echo '<script>location.href="main.php"</script>';
}
unset($vad);
+4 -4
View File
@@ -1,17 +1,17 @@
<?
if( isset($s[1]) && $s[1] == '101/viboina4' ) {
/*
Выбоина
* Телепортирует на необходимую клетку х 4 , у 27
Выбоина
* Телепортирует на необходимую клетку х 4 , у 27
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "4",`y` = "27",`s` = "2" WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
$r = 'Вы перешли на другую сторону завала';
$r = 'Вы перешли на другую сторону завала';
echo '<script>location.href="main.php"</script>';
}
unset($vad);
+10 -10
View File
@@ -1,10 +1,10 @@
<?
if( isset($s[1]) && $s[1] == '104/sunduk1' ) {
/*
Сундук: Сундук
* Можно найти Сталь , Мифрил , Пустые бутылки
Сундук: Сундук
* Можно найти Сталь , Мифрил , Пустые бутылки
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -12,15 +12,15 @@ if( isset($s[1]) && $s[1] == '104/sunduk1' ) {
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" LIMIT 1'));
$vad['test2'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `vars` = "obj_act'.$obj['id'].'" AND `dn` = "'.$u->info['dnow'].'" AND `uid` = "'.$u->info['id'].'" LIMIT 1'));
if( $vad['test2'][0] > 0 ) {
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false;
}elseif( $vad['test1'][0] > 1 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false;
}
if( $vad['go'] == true ) {
//Выкидываем бутылку, мифрил, либо сталь
//Выкидываем бутылку, мифрил, либо сталь
$vad['items'] = array(
724,724,724,724,724,724,724,724,724,724,724,724,724,724,
2390,2390,2390,2390,2390,2390,2390,2390,2390,2390,2390,2390,2390,2390,
@@ -37,7 +37,7 @@ if( isset($s[1]) && $s[1] == '104/sunduk1' ) {
$vad['items'] = 724;
}
if( $vad['items'] != 0 ) {
//Выбрасываем предмет
//Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES (
"'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)');
@@ -45,12 +45,12 @@ if( isset($s[1]) && $s[1] == '104/sunduk1' ) {
$vad['dn_delete'][$vad['items']] = false;
}
if( $this->pickitem($obj,$vad['items'],$u->info['id'],'') ) {
$r = 'Вы обнаружили предметы...';
$r = 'Вы обнаружили предметы...';
}else{
$r = 'Что-то пошло не так, предметы растворились...';
$r = 'Что-то пошло не так, предметы растворились...';
}
}else{
$r = 'Вы не нашли ничего полезного...';
$r = 'Вы не нашли ничего полезного...';
}
}
+4 -4
View File
@@ -1,15 +1,15 @@
<?
if( isset($s[1]) && $s[1] == '106/btn1' ) {
/*
Сундук: Кровавый подземник (4561)
Сундук: Кровавый подземник (4561)
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
$vad['test1'] = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "'.$u->info['dnow'].'" AND `vars` = "obj_act'.$obj['id'].'" LIMIT 1'));
if( $vad['test1'][0] > 0 ) {
$r = 'Вы уже нажали на &quot;'.$obj['name'].'&quot;...';
$r = 'Вы уже нажали на &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false;
}
@@ -22,7 +22,7 @@ if( isset($s[1]) && $s[1] == '106/btn1' ) {
if( !isset($vad['dn_delete'][$vad['items']['id']]) ) {
$vad['dn_delete'][$vad['items']['id']] = false;
}
$r = 'Нажав на &quot;'.$obj['name'].'&quot; вы получили &quot;'.$vad['items']['name'].'&quot;.';
$r = 'Нажав на &quot;'.$obj['name'].'&quot; вы получили &quot;'.$vad['items']['name'].'&quot;.';
$this->pickitem($obj,$vad['items']['id'],0,'',$vad['dn_delete'][$vad['items']['id']]);
}
+3 -3
View File
@@ -1,9 +1,9 @@
<?
if( isset($s[1]) && $s[1] == '106/door1' ) {
/*
Сундук: Кровавый подземник (4561)
Сундук: Кровавый подземник (4561)
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -14,7 +14,7 @@ if( isset($s[1]) && $s[1] == '106/door1' ) {
)');
$vad['qst'] = mysql_fetch_array(mysql_query('SELECT * FROM `dialog_act` WHERE `uid` = "'.$u->info['id'].'" AND `var` = "noobqst1" AND `val` = 1 LIMIT 1'));
if(!isset($vad['qst']['id'])) {
$r = 'Дверь закрыта. Сначала выполните задания Учителя.';
$r = 'Дверь закрыта. Сначала выполните задания Учителя.';
}else{
mysql_query('UPDATE `stats` SET `x` = -2,`y` = 6,`s` = 1 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
header('location: main.php');
+3 -3
View File
@@ -1,9 +1,9 @@
<?
if( isset($s[1]) && $s[1] == '106/door2' ) {
/*
Сундук: Кровавый подземник (4561)
Сундук: Кровавый подземник (4561)
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -14,7 +14,7 @@ if( isset($s[1]) && $s[1] == '106/door2' ) {
)');
$vad['qst'] = mysql_fetch_array(mysql_query('SELECT * FROM `dialog_act` WHERE `uid` = "'.$u->info['id'].'" AND `var` = "noobqst1" AND `val` = 1 LIMIT 1'));
if(!isset($vad['qst']['id'])) {
$r = 'Дверь закрыта. Сначала выполните задания Учителя.';
$r = 'Дверь закрыта. Сначала выполните задания Учителя.';
}else{
mysql_query('UPDATE `stats` SET `x` = -2,`y` = 1,`s` = 3 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
header('location: main.php');
+12 -12
View File
@@ -1,9 +1,9 @@
<?
if( isset($s[1]) && $s[1] == '106/door3' ) {
/*
Сундук: Кровавый подземник (4561)
Сундук: Кровавый подземник (4561)
*/
//Все переменные сохранять в массиве $vad !
//Все переменные сохранять в массиве $vad !
$vad = array(
'go' => true
);
@@ -17,29 +17,29 @@ if( isset($s[1]) && $s[1] == '106/door3' ) {
$vad['itm'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_users` WHERE `uid` = "'.$u->info['id'].'" AND (`item_id` = 724 OR `item_id` = 4704) LIMIT 1'));
if(!isset($vad['qst']['id']) || !isset($vad['itm']['id'])) {
$r = 'Дверь закрыта. Сначала выполните задания Учителя и купите Футболку с Эликсиром.';
$r = 'Дверь закрыта. Сначала выполните задания Учителя и купите Футболку с Эликсиром.';
}else{
//Начало обучения
//Начало обучения
$humor = array(
0 => array(
':maniac: Сильно не бейте ;)',':beggar: Будет попрошайничать - бейте!',':pal: Возможно светлый!',
':vamp: Возможно темный!',':susel: Судя по здоровенному бицепсу - это мужик!',':duel: И сразу же кинулся в бой!',
':friday: Не долго думав он начал искать собутыльника!',':doc: Лекарь: Новичок! Да, да! Ты! Если тебя сломают - у знахаря тебя соберут обратно!'
':maniac: Сильно не бейте ;)',':beggar: Будет попрошайничать - бейте!',':pal: Возможно светлый!',
':vamp: Возможно темный!',':susel: Судя по здоровенному бицепсу - это мужик!',':duel: И сразу же кинулся в бой!',
':friday: Не долго думав он начал искать собутыльника!',':doc: Лекарь: Новичок! Да, да! Ты! Если тебя сломают - у знахаря тебя соберут обратно!'
),
1 => array(
':maniac: Помните! Девочек не бьем ;)',':nail: Она красит ногти, не отвлекайте все сразу ;)',':pal: Возможно светлая!',
':vamp: Возможно темная!',':rev: Судя по красивой одежде - это женщина!',':hug: И сразу же кинулась всех целовать!',
':angel2: Ангел сошел с небес...'
':maniac: Помните! Девочек не бьем ;)',':nail: Она красит ногти, не отвлекайте все сразу ;)',':pal: Возможно светлая!',
':vamp: Возможно темная!',':rev: Судя по красивой одежде - это женщина!',':hug: И сразу же кинулась всех целовать!',
':angel2: Ангел сошел с небес...'
)
);
$humor = $humor[$u->info['sex']];
//$u->info['fnq'] = 1;
//mysql_query('UPDATE `users` SET `fnq` = "'.$u->info['fnq'].'" WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
//Отправляем сообщение в чат о новичке
//Отправляем сообщение в чат о новичке
mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `uid` = "'.$u->info['id'].'" AND `delete` = 0 AND `item_id` = 4703');
mysql_query('UPDATE `users` SET `room` = 4 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
mysql_query('UPDATE `stats` SET `hpNow` = 1000,`mpNow` = 1000,`dn` = 0 , `dnow` = 0 , `x` = 0 , `y` = 0 , `s` = 0 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
$u->send('','','','','','В нашем мире появился новый игрок &quot;<b>' . $u->info['login'] . '</b>&quot;! '.$humor[rand(0,count($humor)-1)].'',time(),6,0,0,0,1,0);
$u->send('','','','','','В нашем мире появился новый игрок &quot;<b>' . $u->info['login'] . '</b>&quot;! '.$humor[rand(0,count($humor)-1)].'',time(),6,0,0,0,1,0);
//mysql_query('UPDATE `stats` SET `x` = 0,`y` = 5 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
header('location: main.php');
die();

Some files were not shown because too many files have changed in this diff Show More