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 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> <IfModule mod_rewrite.c>
#Options +FollowSymLinks -MultiViews #Options +FollowSymLinks -MultiViews
@@ -24,15 +16,6 @@ RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$ RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$
RewriteRule (.+) https://new-combats.com/proxy/ 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 RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://new-combats.com/$1 [R,L] 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 [L]
RewriteRule ^rating_clans/(.*)/?$ /reting_clans.php?$1 [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?$1 [L]
RewriteRule ^clan/?$ /clans_inf.php [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?$1 [L]
RewriteRule ^exp/?$ /exp.php [L] RewriteRule ^exp/?$ /exp.php [L]
#
#
RewriteRule ^news/(.*)/?$ /n/$1 [R=301,L] RewriteRule ^news/(.*)/?$ /n/$1 [R=301,L]
RewriteRule ^news/?$ /n [R=301,L] RewriteRule ^news/?$ /n [R=301,L]
RewriteRule ^n/(.*)/?$ /news_script/index.php?$1 [L] RewriteRule ^n/(.*)/?$ /news_script/index.php?$1 [L]
RewriteRule ^n/?$ /news_script/index.php [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?$1 [L]
RewriteRule ^forum/?$ /forum_script/index.php [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?$1 [L]
RewriteRule ^item/?$ /items_info.php [L] RewriteRule ^item/?$ /items_info.php [L]
RewriteRule ^repass/?$ /repass.php [L] RewriteRule ^repass/?$ /repass.php [L]
#
#
#
#
RewriteRule ^mail/(.*)/?$ /mailconf.php?$1 [L] RewriteRule ^mail/(.*)/?$ /mailconf.php?$1 [L]
RewriteRule ^register/?$ /register.php [L] RewriteRule ^register/?$ /register.php [L]
@@ -126,4 +97,3 @@ RewriteRule . /index.php [L]
Order Allow,Deny Order Allow,Deny
Allow from all Allow from all
+18 -17
View File
@@ -1,23 +1,24 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <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"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>404</title> <title>404</title>
<style> <style>
body{ body {
background-color:#444; background-color: #444;
font-size:14px; font-size: 14px;
} }
h3{
font-size:60px; h3 {
color:#eee; font-size: 60px;
text-align:center; color: #eee;
padding-top:30px; text-align: center;
font-weight:normal; padding-top: 30px;
} font-weight: normal;
</style> }
</style>
</head> </head>
<body> <body>
+15 -20
View File
@@ -2,15 +2,15 @@
/* /*
ßäðî äëÿ îáðàáîòêè äàííûõ. Ядро для обработки данных.
Îáðàáîòêà ïîåäèíêîâ, îáðàáîòêà çàÿâîê, îáðàáîòêà áîòîâ, îáðàáîòêà ïåùåð, îáðàáîòêà òóðíèðîâ, îáðàáîòêà âðåìåííûõ ãåíåðàöèé Обработка поединков, обработка заявок, обработка ботов, обработка пещер, обработка турниров, обработка временных генераций
*/ */
if (isset($_GET['m1'])) { if (isset($_GET['m1'])) {
define('GAME', true); define('GAME', true);
setlocale(LC_CTYPE, "ru_RU.CP1251");
include_once '_incl_data/__config.php'; include_once '_incl_data/__config.php';
include_once '_incl_data/class/__db_connect.php'; include_once '_incl_data/class/__db_connect.php';
@@ -22,13 +22,13 @@ if (isset($_GET['m1'])) {
} elseif (isset($_GET['bk1'])) { } elseif (isset($_GET['bk1'])) {
define('GAME', true); define('GAME', true);
setlocale(LC_CTYPE, "ru_RU.CP1251");
include('_incl_data/__config.php'); include('_incl_data/__config.php');
include('_incl_data/class/__db_connect.php'); include('_incl_data/class/__db_connect.php');
$u = User::start(); $u = User::start();
$ins = 'Âåùè ÁÊ-1:<hr>'; $ins = 'Вещи БК-1:<hr>';
$sp = mysql_query('SELECT * FROM `items_main` WHERE `geni` = 1'); $sp = mysql_query('SELECT * FROM `items_main` WHERE `geni` = 1');
while ($pl = mysql_fetch_array($sp)) { while ($pl = mysql_fetch_array($sp)) {
@@ -141,20 +141,15 @@ if (isset($_GET['test'])) {
die(); die();
} }
function getIP() if (!isset($_GET['robot']) && UserIp::get() != $_SERVER['SERVER_ADDR'] && UserIp::get() != '127.0.0.1' && UserIp::get(
{ ) != '' && UserIp::get() != '31.131.116.166') {
return isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : $_SERVER['REMOTE_ADDR']; die(UserIp::get() . '<br>' . $_SERVER['SERVER_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']);
} }
const GAME = true; const GAME = true;
setlocale(LC_CTYPE, "ru_RU.CP1251");
include('_incl_data/__config.php'); include('_incl_data/__config.php');
include('_incl_data/class/__db_connect.php'); include('_incl_data/class/__db_connect.php');
@@ -189,14 +184,14 @@ while ($pl = mysql_fetch_array($sp)) {
if ($pl['timereg'] == 0) { if ($pl['timereg'] == 0) {
mysql_query('UPDATE `users` SET `timereg` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); mysql_query('UPDATE `users` SET `timereg` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
} else { } else {
mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); User::setOnline($pl['id']);
} }
if ($pl['bot'] == 0) { if ($pl['bot'] == 0) {
mysql_query('UPDATE `stats` SET `bot` = "2" WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); 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']); BotLogic::start($pl['id']);
@@ -209,19 +204,19 @@ while ($pl = mysql_fetch_array($sp)) {
if ($pl['timereg'] == 0) { if ($pl['timereg'] == 0) {
mysql_query('UPDATE `users` SET `timereg` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); mysql_query('UPDATE `users` SET `timereg` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');
} else { } else {
mysql_query('UPDATE `users` SET `online` = "' . time() . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); User::setOnline($pl['id']);
} }
if ($pl['bot'] == 0) { if ($pl['bot'] == 0) {
mysql_query('UPDATE `stats` SET `bot` = "2" WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); 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 `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 '+'; echo '+';
echo '[' . $pl['login'] . '] -> Äåéñòâèå: ' . $pl['ipreg'] . ' , îæèäàåì: ' . ($pl['timeMain'] - time( echo '[' . $pl['login'] . '] -> Действие: ' . $pl['ipreg'] . ' , ожидаем: ' . ($pl['timeMain'] - time(
)) . ' ñåê., çàÿâêà: ' . $pl['zv'] . ', ïîåäèíîê: ' . $pl['battle'] . ''; )) . ' сек., заявка: ' . $pl['zv'] . ', поединок: ' . $pl['battle'] . '';
echo '<hr>'; echo '<hr>';
} }
+1 -1
View File
@@ -1 +1 @@
deny from all deny from all
+18 -72
View File
@@ -1,85 +1,24 @@
<?php <?php
use Core\Config;
use Insallah\Tournaments\Tournament;
error_reporting(E_ALL ^ E_NOTICE); error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 'Off'); ini_set('display_errors', 'Off');
setlocale(LC_CTYPE, "ru_RU.CP1251");
date_default_timezone_set('Europe/Moscow'); date_default_timezone_set('Europe/Moscow');
$c = [ header('Cache-Control: no-cache, no-store, must-revalidate');
'ver' => '1.8.3.7', header('Pragma: no-cache');
]; header('Expires: 0');
/* Конфигурации игры */
$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
//Сервера require_once 'mysql_override.php';
$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>';
//Валюта // Для всех доработок, пока нет автозагрузки классов.
$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'; require_once 'class/Insallah/Config.php';
// Попробуем в автозагрузку. // Попробуем в автозагрузку.
// Никогда не заработает с такими названиями классов и файлов! // Никогда не заработает с такими названиями классов и файлов!
// "На потом." // "На потом."
spl_autoload_register(function ($className) { spl_autoload_register(function ($className) {
# 1 with namespaces # 1 with namespaces
# 2 without # 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() static function battle_priems()
{ {
//èñïîëüçóåì ïðèåìû â áîþ //используем приемы в бою
if (self::$st['hpNow'] > 0 && self::$bot['battle'] > 0) { if (self::$st['hpNow'] > 0 && self::$bot['battle'] > 0) {
$pr = explode('|', self::$bot['priems']); $pr = explode('|', self::$bot['priems']);
@@ -36,7 +36,7 @@ class BotLogic
$i = 0; $i = 0;
while ($i < count($pr)) { while ($i < count($pr)) {
if ($rz[$i] < 1 && $pr[$i] > 0) { if ($rz[$i] < 1 && $pr[$i] > 0) {
//Ìîæíî èñïîëüçîâàòü ïðèåì, ïîäêëþ÷àåì ëîãèêó //Можно использовать прием, подключаем логику
BotPriemLogic::start($i, $pr[$i]); BotPriemLogic::start($i, $pr[$i]);
} }
$i++; $i++;
@@ -48,15 +48,15 @@ class BotLogic
static function clear_bot() static function clear_bot()
{ {
//Î÷èñòêà áîòà, îáíóëÿåì åãî äî [0], óäàëÿåì ýôôåêòû, ïðåäìåòû è ò.ä, à òåêóùåìó ñòàâèì ëîãèí delete //Очистка бота, обнуляем его до [0], удаляем эффекты, предметы и т.д, а текущему ставим логин delete
//Óäàëÿåì ñîîáùåíèÿ â ÷àòå //Удаляем сообщения в чате
mysql_query('DELETE FROM `chat` WHERE `to` = "' . self::$bot['login'] . '"'); 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 `items_users` WHERE `uid` = "' . self::$bot['id'] . '"');
mysql_query('DELETE FROM `eff_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 `users` WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('DELETE FROM `stats` 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'); 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') static function test_fr($id, $city = 'capitalcity')
{ {
return $city != 'capitalcity' || $id == 0 || $id == 2 || $id == 4 || $id == 5 || $id == 7 || $id == 377; return $city != 'capitalcity' || $id == 0 || $id == 2 || $id == 4 || $id == 5 || $id == 7 || $id == 377;
} }
//Äåéñòâèÿ áîòà âíå áîÿ //Действия бота вне боя
static function actions() static function actions()
{ {
@@ -94,9 +94,9 @@ class BotLogic
if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0 && self::$bot['pass'] == 'saintlucia') { 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']) { if (true == false && self::$bot['a1'] != 0 && self::$bot['a1'] != self::$bot['room']) {
self::_loc(self::$bot['a1']); 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'); 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) { 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')); $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'])) { if (!isset($cr['id'])) {
//Ïîêóïàåì êðèñòàëë //Покупаем кристалл
$u->addItem(1204, self::$bot['id']); $u->addItem(1204, self::$bot['id']);
} }
} }
//Ïåðåõîäèì â êîìíàòó äëÿ ñðàæåíèé //Переходим в комнату для сражений
self::_loc(self::_loc_zv()); self::_loc(self::_loc_zv());
} }
} }
//Åñëè áîò óæå íàáðàë îïûò äëÿ ïåðåõîäà íà 6-îé //Если бот уже набрал опыт для перехода на 6-ой
if (self::$bot['level'] == 5 && self::$bot['exp'] >= 12499) { 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')); $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'])) { if (!isset($cr['id'])) {
@@ -139,12 +139,12 @@ class BotLogic
} }
} }
//Ïîõîæå ÷òî áîòó ïîðà ñìåíèòü êîìïëåêò )) //Похоже что боту пора сменить комплект ))
if (self::$bot['clss'] == 0) { if (self::$bot['clss'] == 0) {
//Âûáèðàåì íîâûé êëàññ è øìîòêè :) //Выбираем новый класс и шмотки :)
//Ìåíÿåì êëàññ //Меняем класс
self::$bot['clss'] = rand(1, 4); self::$bot['clss'] = rand(1, 4);
$x = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" ')); $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) { if ($x[0] > 1) {
$x = rand(1, $x[0]); $x = rand(1, $x[0]);
//âûáèðàåì 1 èç íåñêîëüêèõ //выбираем 1 из нескольких
$da = ['ASC', 'DESC', 'DESC', 'ASC']; $da = ['ASC', 'DESC', 'DESC', 'ASC'];
$da = $da[rand(0, 5)]; $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')); $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 `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 `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 `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"'); mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
/* Îáíîâëÿåì ñòàòû è ïðèåìû */ /* Обновляем статы и приемы */
if ($com['pr'] == '') { if ($com['pr'] == '') {
$i = 1; $i = 1;
@@ -193,7 +193,7 @@ class BotLogic
$i = 1; $i = 1;
while ($i <= 20) { while ($i <= 20) {
if ($com['e' . $i] > 0) { if ($com['e' . $i] > 0) {
//Âûäàåì è íàäåâàåì ïðåäìåò //Выдаем и надеваем предмет
//$it = $u->addItem($com['e'.$i],self::$bot['id']); //$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')); $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'] . '")'); 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; $i = 1;
while ($i <= 20) { while ($i <= 20) {
if ($com['w' . $i] > 0) { if ($com['w' . $i] > 0) {
//Âûäàåì è íàäåâàåì ïðåäìåò //Выдаем и надеваем предмет
$it = $u->addItem($com['w' . $i], self::$bot['id']); $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')); $eff1 = mysql_fetch_array(mysql_query('SELECT * FROM `items_shop` WHERE `item_id` = "' . $com['w' . $i] . '" LIMIT 1'));
if ($it > 0) { 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) { if (self::$bot['city'] == 'capitalcity' && self::$bot['level'] < 2 && self::$bot['room'] == 0 && self::$bot['a1'] == 0) {
self::_loc(self::_loc_zv()); self::_loc(self::_loc_zv());
} }
@@ -226,7 +226,7 @@ class BotLogic
public $bot_last_action = []; public $bot_last_action = [];
//Âêëþ÷àåì ëîãèêó áîòà //Включаем логику бота
static function start($id) static function start($id)
{ {
if (!isset($bot_last_action[$id])) { if (!isset($bot_last_action[$id])) {
@@ -238,12 +238,12 @@ class BotLogic
self::$st = $u->getStats(self::$bot, 0); self::$st = $u->getStats(self::$bot, 0);
//Çàõîäèì áîòîì â îíëàéí //Заходим ботом в онлайн
self::_online(); self::_online();
if (self::$bot['battle'] > 0) { 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')); 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'])) { 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')); $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(); self::battle_priems();
//Áîò ñäåëàë óäàð, íî íèêòî íå îòâåòèë, ïðîâåðÿåì òàéìàóò è åñëè ÷òî çàõîäèì //Бот сделал удар, но никто не ответил, проверяем таймаут и если что заходим
if (isset($a1['id']) && $a1['time'] + self::$btl['timeout'] < time()) { if (isset($a1['id']) && $a1['time'] + self::$btl['timeout'] < time()) {
$go_bot = true; $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')); $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'])) { if (isset($a2['uid1'])) {
mysql_query('UPDATE `stats` SET `enemy` = "' . $a2['uid1'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1'); 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'])) { if (isset($a3['uid2'])) {
mysql_query('UPDATE `stats` SET `enemy` = "' . $a3['uid2'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1'); 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')); self::$enemy = mysql_fetch_array(mysql_query('SELECT * FROM `stats` WHERE `id` = "' . self::$bot['enemy'] . '" LIMIT 1'));
} else { } else {
//Çàõîäèì íà ïåðñîíàæà //Заходим на персонажа
self::inuser_go_btl(self::$bot); self::inuser_go_btl(self::$bot);
//Ïîåäèíîê óæå çàâåðøèëñÿ, âûêèäûâàåì èç áîÿ //Поединок уже завершился, выкидываем из боя
self::$bot['battle'] = 0; self::$bot['battle'] = 0;
mysql_query('UPDATE `users` SET `battle` = "' . self::$bot['battle'] . '" WHERE `id` = "' . mysql_real_escape_string(self::$bot['id']) . '" LIMIT 1 '); mysql_query('UPDATE `users` SET `battle` = "' . self::$bot['battle'] . '" WHERE `id` = "' . mysql_real_escape_string(self::$bot['id']) . '" LIMIT 1 ');
} }
} else { } else {
//Äåéñòâèÿ áîòà âíå ïîåäèíêà //Действия бота вне поединка
if (self::$bot['timeMain'] < time()) { if (self::$bot['timeMain'] < time()) {
mysql_query('UPDATE `chat` SET `time` = "' . time() . '" WHERE `to` = "' . self::$bot['login'] . '" AND `time` = "-1"'); 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) { if (self::$bot['ipreg'] == 1 || self::$bot['ipreg'] == 2 || self::$bot['ipreg'] == 4) {
//Ïðèíèìàåì òîëüêî õàîòû //Принимаем только хаоты
self::$bot['ipreg'] = 3; self::$bot['ipreg'] = 3;
} }
if (self::$bot['ipreg'] == 5) { if (self::$bot['ipreg'] == 5) {
//Ïîäàåì òîëüêî õàîòû //Подаем только хаоты
self::$bot['ipreg'] = 7; self::$bot['ipreg'] = 7;
} }
// //
if (self::$bot['ipreg'] == 0 || !self::test_fr(self::$bot['room'])) { 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')); $com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" LIMIT 1'));
if (isset($com['id'])) { 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')); $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; $i = 1;
while ($i <= 20) { while ($i <= 20) {
if ($com['e' . $i] > 0) { if ($com['e' . $i] > 0) {
//Âûäàåì è íàäåâàåì ïðåäìåò //Выдаем и надеваем предмет
//$it = $u->addItem($com['e'.$i],self::$bot['id']); //$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')); $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'] . '")'); 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) { if (self::$bot['level'] >= 13 && self::$bot['clan'] == 0 && self::$bot['align'] == 0) {
//îáíóëÿåì áîòà //обнуляем бота
self::clear_bot(); self::clear_bot();
} }
//Òîëüêî-÷òî èç ïîåäèíêà, õèëÿåòñÿ //Только-что из поединка, хиляется
if (!self::test_fr(self::$bot['room'])) { if (!self::test_fr(self::$bot['room'])) {
//Â êàêîé-òî ëîêàöèè, âèäèìî ÷òî-òî äåëàåì //В какой-то локации, видимо что-то делаем
} elseif (self::$st['hpNow'] >= self::$st['hpAll']) { } elseif (self::$st['hpNow'] >= self::$st['hpAll']) {
echo 1; 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 `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 { } 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 `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"'); 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'); $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 `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) { 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'); 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) { } elseif (self::$bot['ipreg'] == 1) {
//Ïðèíÿòü çàÿâêó íà áîé (ôèç.) //Принять заявку на бой (физ.)
if (self::$bot['zv'] == 0) { if (self::$bot['zv'] == 0) {
//Âûäåëÿåì ïîäõîäÿùóþ çàÿâêó â ôèç. ïîåäèíêå //Выделяем подходящую заявку в физ. поединке
$rz = 2; $rz = 2;
$zv = 0; $zv = 0;
$nozv = 0; $nozv = 0;
@@ -415,13 +415,13 @@ class BotLogic
if ($uz1st['reting'] <= floor(self::$st['reting'] * 1.27)) { if ($uz1st['reting'] <= floor(self::$st['reting'] * 1.27)) {
//Ïðèíèìàåì çàÿâêó //Принимаем заявку
$sa = ''; $sa = '';
if (self::$bot['sex'] == 2) { 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("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 `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'); 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) { } elseif (self::$bot['ipreg'] == 2) {
//Ïðèíÿòü çàÿâêó íà áîé (ãðóï.) //Принять заявку на бой (груп.)
self::bot_group_haot_zv(6); self::bot_group_haot_zv(6);
} elseif (self::$bot['ipreg'] == 3) { } elseif (self::$bot['ipreg'] == 3) {
//Ïðèíÿòü çàÿâêó íà áîé (õàîò.) //Принять заявку на бой (хаот.)
self::bot_group_haot_zv(7); self::bot_group_haot_zv(7);
} elseif (self::$bot['ipreg'] == 4) { } elseif (self::$bot['ipreg'] == 4) {
//Ïðèíÿòü çàÿâêó íà áîé (òóðíèð.) //Принять заявку на бой (турнир.)
self::e('' . self::$bot['login'] . ', ÿ õî÷ó ïðèíÿòü òóðíèð...'); self::e('' . self::$bot['login'] . ', я хочу принять турнир...');
} elseif (self::$bot['ipreg'] == 5) { } elseif (self::$bot['ipreg'] == 5) {
//Ïîäàòü çàÿâêó (ôèç.) //Подать заявку (физ.)
if (self::$bot['zv'] == 0) { if (self::$bot['zv'] == 0) {
$rz = 2; $rz = 2;
@@ -531,34 +531,34 @@ class BotLogic
} elseif (self::$bot['ipreg'] == 8) { } elseif (self::$bot['ipreg'] == 8) {
//Îæèäàíèå íà÷àëà ïîåäèíêà //Ожидание начала поединка
if (self::$bot['zv'] == 0) { if (self::$bot['zv'] == 0) {
//Ïîåäèíîê íå óäàëîñü íà÷àòü //Поединок не удалось начать
mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1'); mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} else { } else {
$zv = mysql_fetch_array(mysql_query('SELECT * FROM `zayvki` WHERE `id` = "' . self::$bot['zv'] . '" AND `cancel` = "0" AND `start` = "0" LIMIT 1')); $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'])) { if (!isset($zv['id'])) {
//Îáíóëÿåì äåéñòâèÿ //Обнуляем действия
mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1'); mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} elseif ($zv['razdel'] == 4 || $zv['razdel'] == 5) { } elseif ($zv['razdel'] == 4 || $zv['razdel'] == 5) {
//õàîò èëè ãðóïïà //хаот или группа
if ($zv['time_start'] + $zv['time'] <= time()) { if ($zv['time_start'] + $zv['time'] <= time()) {
self::inuser_go_zv(self::$bot); self::inuser_go_zv(self::$bot);
} }
} else { } else {
//ôèç //физ
if ($zv['creator'] == self::$bot['id']) { 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')); $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'])) { if (isset($uz2['id'])) {
//Çàÿâêó êòî-òî ïðèíÿë, ðåàãèðóåì! :) //Заявку кто-то принял, реагируем! :)
$pr = -1; $pr = -1;
$uz2st = $u->getStats($uz2, 0); $uz2st = $u->getStats($uz2, 0);
@@ -566,12 +566,12 @@ class BotLogic
//btl-cof //btl-cof
if ($uz2st['reting'] > floor(self::$st['reting'] * 1.27)) { if ($uz2st['reting'] > floor(self::$st['reting'] * 1.27)) {
//Îòêàçûâàåì, â 95% ñëó÷àåâ, ïðîòèâíèê ñëèøêîì ñèëåí //Отказываем, в 95% случаев, противник слишком силен
if (rand(0, 100) > 95) { if (rand(0, 100) > 95) {
//îòïðàâëÿåì áîòà íà èçáèåíèå :D //отправляем бота на избиение :D
$pr = 1; $pr = 1;
} else { } else {
//îòêàç //отказ
$pr = 0; $pr = 0;
} }
@@ -579,13 +579,13 @@ class BotLogic
$pr = 1; $pr = 1;
} }
//Ìîæíî ïðèíÿòü çàÿâêó //Можно принять заявку
//$pr = 0; //$pr = 0;
if ($pr == 1) { if ($pr == 1) {
//Ïðèåì çàÿâêè //Прием заявки
//ñîçäàåì ïîåäèíîê ñ áîòîì //создаем поединок с ботом
$expB = 0; $expB = 0;
$btl = ['players' => '', 'timeout' => $zv['timeout'], 'type' => $zv['type'], 'invis' => $zv['invis'], 'noinc' => 0, 'travmChance' => 0, 'typeBattle' => 0, 'addExp' => $expB, 'money' => 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 ( $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")'); "-1")');
if ($ins) { if ($ins) {
$btl_id = mysql_insert_id(); $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 . '" 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 `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`="1" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
mysql_query('UPDATE `stats` SET `zv` = "0",`team`="2" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1'); mysql_query('UPDATE `stats` SET `zv` = "0",`team`="2" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');
//Åñëè áîé êóëà÷íûé, òî ñíèìàåì âåùè //Если бой кулачный, то снимаем вещи
if ($btl['type'] == 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` = "' . self::$bot['id'] . '" AND `inOdet`!=0');
mysql_query('UPDATE `items_users` SET `inOdet`="0" WHERE `uid` = "' . $uz2['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'); mysql_query('UPDATE `zayvki` SET `start` = "' . time() . '",`btl_id` = "' . $btl_id . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1');
//îáíîâëÿåì çàÿâêó, ÷òî áîé íà÷àëñÿ //обновляем заявку, что бой начался
self::$bot['battle'] = $btl_id; 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')"); 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) { } elseif ($pr == 0) {
//Îòêàç //Отказ
$sa = ''; $sa = '';
if (self::$bot['sex'] == 2) { 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("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 `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'); 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 { } else {
//Çàÿâêó íèêòî íå ïðèíÿë, âîçìîæíî ñòîèò îòìåíèòü çàÿâêó âîîáùå! //Заявку никто не принял, возможно стоит отменить заявку вообще!
if (self::$bot['timeMain'] < time() - 30 - rand((7 / $zv['otk']), (3 * 49 / $zv['otk']))) { 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'); 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)) { 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')); $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 = ''; $sa = '';
if (self::$bot['sex'] == 2) { 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')"); 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 (self::$bot['level'] < 2) {
if ($r == 2 || $r == 3 || $r == 6 || $r == 7 || $r == 8) { if ($r == 2 || $r == 3 || $r == 6 || $r == 7 || $r == 8) {
if (rand(0, 1) == 1) { if (rand(0, 1) == 1) {
$r = 1; //ïðèíèìàåì ôèç $r = 1; //принимаем физ
} elseif (rand(0, 1) == 0) { } elseif (rand(0, 1) == 0) {
$r = 4; //ïðèíèìàåì òóðíèð $r = 4; //принимаем турнир
} else { } else {
$r = 5; //ïîäàåì ôèç $r = 5; //подаем физ
} }
} }
} elseif (self::$bot['level'] == 0) { } elseif (self::$bot['level'] == 0) {
if (rand(0, 1) == 1) { if (rand(0, 1) == 1) {
$r = 1; //ïðèíèìàåì ôèç $r = 1; //принимаем физ
} else { } else {
$r = 5; //ïîäàåì ôèç $r = 5; //подаем физ
} }
} }
@@ -734,9 +734,9 @@ class BotLogic
/*/ /*/
Áàçîâûå ôóíêöèè îáó÷åíèÿ áîòà Базовые функции обучения бота
/*/ /*/
//Áîò èùåò çàÿâêó â ãðóïïû èëè õàîò äëÿ ñâîåãî óðîâíÿ è ïîäõîäÿùóþ åìó //Бот ищет заявку в группы или хаот для своего уровня и подходящую ему
static function bot_group_haot_zv($id) static function bot_group_haot_zv($id)
{ {
$rz = 5; $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) { 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; $go = 0;
} }
@@ -840,7 +840,7 @@ class BotLogic
if ($tm > 0 || $rz == 5) { 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 `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'); mysql_query('UPDATE `users` SET `login2` = "' . self::$bot['login2'] . '",`ipreg` = "8" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
self::$bot['zv'] = $pl['id']; self::$bot['zv'] = $pl['id'];
@@ -856,7 +856,7 @@ class BotLogic
} }
//Äîáàâëÿåì íîâîãî áîòà //Добавляем нового бота
static function createNewBot($login, $sex) static function createNewBot($login, $sex)
{ {
if ($sex != 1) { if ($sex != 1) {
@@ -865,22 +865,20 @@ class BotLogic
$se = 1; $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', '0',
'real_bot_user', 'real_bot_user',
'0', '0',
'" . mysql_real_escape_string($login) . "', '" . mysql_real_escape_string($login) . "',
'" . md5('regnxt#$%^à0.' . time()) . "', '" . md5('regnxt#$%^а0.' . time()) . "',
'127.0.0.1', '127.0.0.1',
'127.0.0.1', '127.0.0.1',
'capitalcity', 'capitalcity',
'capitalcity', 'capitalcity',
'" . $r['name'] . "', '" . $r['name'] . "',
'" . mysql_real_escape_string($sex) . "', '" . mysql_real_escape_string($sex) . "',
'" . $r['city_real'] . "',
'" . $r['deviz'] . "',
'" . $r['chatColor'] . "', '" . $r['chatColor'] . "',
'" . time() . "')"); '" . time() . "')");
if ($ins) { if ($ins) {
@@ -892,11 +890,11 @@ class BotLogic
} }
//Áîò íàõîäèòñÿ â îíëàéíå //Бот находится в онлайне
static function _online() static function _online()
{ {
if (self::$bot['online'] < time() - 60) { if (self::$bot['online'] < time() - 60) {
//óðîâåíü/àïï //уровень/апп
if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0) { if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0) {
self::_level(); self::_level();
} }
@@ -905,7 +903,7 @@ class BotLogic
} }
} }
//Áîò ìåíÿåò ëîêàöèþ //Бот меняет локацию
static function _loc_A($a, $b) static function _loc_A($a, $b)
{ {
return $b; return $b;
@@ -920,28 +918,28 @@ class BotLogic
$r = rand(1, 4); $r = rand(1, 4);
} }
//áóäóàð //будуар
if ($r == 4 && self::$bot['sex'] != 1) { if ($r == 4 && self::$bot['sex'] != 1) {
$r = rand(1, 3); $r = rand(1, 3);
} }
if (self::$bot['city'] == 'capitalcity') { if (self::$bot['city'] == 'capitalcity') {
if ($r == 4) { if ($r == 4) {
//áóäóàð //будуар
$r = 7; $r = 7;
} elseif ($r == 3) { } elseif ($r == 3) {
//ÇÂ 3 //ЗВ 3
$r = 5; $r = 5;
} elseif ($r == 2) { } elseif ($r == 2) {
//ÇÂ 2 //ЗВ 2
$r = 2; $r = 2;
} else { } else {
//ÇÂ 1 //ЗВ 1
$r = 4; $r = 4;
} }
if (self::$bot['level'] == 0) { if (self::$bot['level'] == 0) {
//Íîâè÷êè //Новички
$r = 0; $r = 0;
} }
@@ -954,20 +952,20 @@ class BotLogic
{ {
if ($id == self::$bot['room']) { if ($id == self::$bot['room']) {
//íè÷åãî, óæå ïðèøëè //ничего, уже пришли
self::update('a1', 0); self::update('a1', 0);
} else { } else {
//Ïðîêëàäûâàåì ìàðøðóò èç òåêóùåé êîìíàòû //Прокладываем маршрут из текущей комнаты
$rid_next = self::_loc_A(self::$bot['room'], $id); $rid_next = self::_loc_A(self::$bot['room'], $id);
if ($rid_next > 0) { if ($rid_next > 0) {
//Èäåì òóäà //Идем туда
//$rid_next = 377; //$rid_next = 377;
mysql_query('UPDATE `users` SET `room` = "' . $rid_next . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1'); mysql_query('UPDATE `users` SET `room` = "' . $rid_next . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
return true; return true;
} else { } else {
//Íåâîçìîæíî äîéòè òóäà //Невозможно дойти туда
return false; return false;
} }
@@ -975,7 +973,7 @@ class BotLogic
} }
//Áîò ïîëó÷èë óðîâåíü, ëèáî àïï //Бот получил уровень, либо апп
static function _level() static function _level()
{ {
global $u; global $u;
@@ -1001,11 +999,11 @@ class BotLogic
} }
//Âñïîìîãàòåëüíûå ôóíêöèè //Вспомогательные функции
static function e($t) 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")'); "LEL","6","1","-1")');
} }
+57 -57
View File
@@ -13,85 +13,85 @@ class BotPriemLogic
$test = self::testpriem(self::$p); $test = self::testpriem(self::$p);
if (isset(self::$p['id']) && $test == 0) { if (isset(self::$p['id']) && $test == 0) {
//Èñïîëüçóåì ïðèåì ïîä íîìåðîì $id //Используем прием под номером $id
if ($id == 1) { if ($id == 1) {
self::priem1($i); 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) { elseif ($id == 2) {
self::priem2($i); self::priem2($i);
} //Âëîìèòü } //Вломить
elseif ($id == 3) { elseif ($id == 3) {
self::priem3($i); self::priem3($i);
} //Ñîáðàòü çóáû } //Собрать зубы
elseif ($id == 4) { elseif ($id == 4) {
self::priem4($i); self::priem4($i);
} //Ñèëüíûé óäàð } //Сильный удар
elseif ($id == 5) { elseif ($id == 5) {
self::priem5($i); self::priem5($i);
} //Óòåðåòü ïîò } //Утереть пот
elseif ($id == 6) { elseif ($id == 6) {
self::priem6($i); self::priem6($i);
} //Âîëÿ ê ïîáåäå } //Воля к победе
elseif ($id == 7) { elseif ($id == 7) {
self::priem7($i); self::priem7($i);
} //Àêòèâíàÿ çàùèòà } //Активная защита
elseif ($id == 8) { elseif ($id == 8) {
self::priem8($i); self::priem8($i);
} //Òàíåö âåòðà } //Танец ветра
elseif ($id == 9) { elseif ($id == 9) {
self::priem9($i); self::priem9($i);
} //Äèêàÿ óäà÷à } //Дикая удача
elseif ($id == 10) { elseif ($id == 10) {
self::priem10($i); self::priem10($i);
} //Ïðåäâèäèíèå } //Предвидиние
elseif ($id == 11) { elseif ($id == 11) {
self::priem11($i); self::priem11($i);
} //Óäà÷íûé óäàð } //Удачный удар
elseif ($id == 13) { elseif ($id == 13) {
self::priem13($i); self::priem13($i);
} //Ñòîéêîñòü } //Стойкость
elseif ($id == 14) { elseif ($id == 14) {
self::priem14($i); self::priem14($i);
} //ßðîñòü } //Ярость
elseif ($id == 45) { elseif ($id == 45) {
self::priem45($i); self::priem45($i);
} //Ïîëíàÿ çàùèòà } //Полная защита
elseif ($id == 47) { elseif ($id == 47) {
self::priem47($i); self::priem47($i);
} //Ñëåïàÿ óäà÷à } //Слепая удача
elseif ($id == 48) { elseif ($id == 48) {
self::priem48($i); self::priem48($i);
} //Òàíåö ëåçâèé } //Танец лезвий
elseif ($id == 49) { elseif ($id == 49) {
self::priem49($i); self::priem49($i);
} //Âòîðîå äûõàíèå } //Второе дыхание
elseif ($id == 188) { elseif ($id == 188) {
self::priem188($i); self::priem188($i);
} //Æàæäà êðîâè } //Жажда крови
elseif ($id == 204) { elseif ($id == 204) {
self::priem204($i); self::priem204($i);
} //Îáðå÷åííîñòü } //Обреченность
elseif ($id == 211) { elseif ($id == 211) {
self::priem211($i); self::priem211($i);
} //Àãðåññèâíàÿ çàùèòà } //Агрессивная защита
elseif ($id == 217) { elseif ($id == 217) {
self::priem217($i); self::priem217($i);
} //Ðàçãàäàòü òàêòèêó } //Разгадать тактику
elseif ($id == 220) { elseif ($id == 220) {
self::priem220($i); self::priem220($i);
} //Ñòàâêà íà îïåðåæåíèå } //Ставка на опережение
elseif ($id == 223) { elseif ($id == 223) {
self::priem223($i); self::priem223($i);
} //Ðûâîê } //Рывок
elseif ($id == 232) { elseif ($id == 232) {
self::priem232($i); self::priem232($i);
} //Âûæèòü } //Выжить
elseif ($id == 235) { elseif ($id == 235) {
self::priem235($i); self::priem235($i);
} //Øîêèðóþùèé óäàð } //Шокирующий удар
elseif ($id == 240) { elseif ($id == 240) {
self::priem240($i); self::priem240($i);
} //Õëåáíóòü êðîâè } //Хлебнуть крови
elseif ($id >= 175 && $id <= 179) { elseif ($id >= 175 && $id <= 179) {
self::priem175($i); self::priem175($i);
} }
@@ -110,7 +110,7 @@ class BotPriemLogic
BotLogic::inuser_go_btl(BotLogic::$bot, $go_txt); BotLogic::inuser_go_btl(BotLogic::$bot, $go_txt);
} }
//Ñòàâêà íà îïåðåæåíèå //Ставка на опережение
private static function priem220($i) private static function priem220($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -118,7 +118,7 @@ class BotPriemLogic
} }
} }
//Ðàçãàäàòü òàêòèêó //Разгадать тактику
private static function priem217($i) private static function priem217($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -126,7 +126,7 @@ class BotPriemLogic
} }
} }
//Îáðå÷åííîñòü //Обреченность
private static function priem204($i) private static function priem204($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -134,7 +134,7 @@ class BotPriemLogic
} }
} }
//Âûæèòü //Выжить
private static function priem232($i) private static function priem232($i)
{ {
if (self::hp() <= 30 && rand(0, 100) < 50) { if (self::hp() <= 30 && rand(0, 100) < 50) {
@@ -142,7 +142,7 @@ class BotPriemLogic
} }
} }
//Æàæäà êðîâè //Жажда крови
private static function priem188($i) private static function priem188($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -150,7 +150,7 @@ class BotPriemLogic
} }
} }
//Øîê óäàð //Шок удар
private static function priem235($i) private static function priem235($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -158,7 +158,7 @@ class BotPriemLogic
} }
} }
//Õëåáíóòü êðîâè //Хлебнуть крови
private static function priem240($i) private static function priem240($i)
{ {
if (self::hp() <= 70) { if (self::hp() <= 70) {
@@ -166,13 +166,13 @@ class BotPriemLogic
} }
} }
//Ñèëîâîå ïîëå //Силовое поле
private static function priem175($i) private static function priem175($i)
{ {
self::usePriem($i); self::usePriem($i);
} }
//Ïðèêðûòüñÿ //Прикрыться
private static function priem1($i) private static function priem1($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -180,7 +180,7 @@ class BotPriemLogic
} }
} }
//Âëîìèòü //Вломить
private static function priem2($i) private static function priem2($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -188,7 +188,7 @@ class BotPriemLogic
} }
} }
//Ñîáðàòü çóáû //Собрать зубы
private static function priem3($i) private static function priem3($i)
{ {
if (self::hp() <= 70 && rand(0, 100) < 50) { if (self::hp() <= 70 && rand(0, 100) < 50) {
@@ -196,7 +196,7 @@ class BotPriemLogic
} }
} }
//Âîëÿ ê ïîáåäå //Воля к победе
private static function priem6($i) private static function priem6($i)
{ {
if (self::hp() <= 40 && rand(0, 100) < 50) { if (self::hp() <= 40 && rand(0, 100) < 50) {
@@ -204,7 +204,7 @@ class BotPriemLogic
} }
} }
//Òàíåö âåòðà //Танец ветра
private static function priem8($i) private static function priem8($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -212,7 +212,7 @@ class BotPriemLogic
} }
} }
//Òàíåö ëåçâèé //Танец лезвий
private static function priem48($i) private static function priem48($i)
{ {
if (rand(0, 100) < 70) { if (rand(0, 100) < 70) {
@@ -220,7 +220,7 @@ class BotPriemLogic
} }
} }
//Äèêàÿ óäà÷à //Дикая удача
private static function priem9($i) private static function priem9($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -228,7 +228,7 @@ class BotPriemLogic
} }
} }
//Ñëåïàÿ óäà÷à //Слепая удача
private static function priem47($i) private static function priem47($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -236,7 +236,7 @@ class BotPriemLogic
} }
} }
//Ïðåäâèäåíüå //Предвиденье
private static function priem10($i) private static function priem10($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -244,7 +244,7 @@ class BotPriemLogic
} }
} }
//Âòîðîå äûõàíèå //Второе дыхание
private static function priem49($i) private static function priem49($i)
{ {
if (rand(0, 100) < 80 && self::hp() <= 60) { if (rand(0, 100) < 80 && self::hp() <= 60) {
@@ -252,7 +252,7 @@ class BotPriemLogic
} }
} }
//Ðûâîê //Рывок
private static function priem223($i) private static function priem223($i)
{ {
if (self::hp() <= 50 && rand(0, 100) < 50) { if (self::hp() <= 50 && rand(0, 100) < 50) {
@@ -260,7 +260,7 @@ class BotPriemLogic
} }
} }
//Óäà÷íûé óäàð //Удачный удар
private static function priem11($i) private static function priem11($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -268,7 +268,7 @@ class BotPriemLogic
} }
} }
//Ñòîéêîñòü //Стойкость
private static function priem13($i) private static function priem13($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -276,7 +276,7 @@ class BotPriemLogic
} }
} }
//ßðîñòü //Ярость
private static function priem14($i) private static function priem14($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -284,7 +284,7 @@ class BotPriemLogic
} }
} }
//Ñèëüíûé óäàð //Сильный удар
private static function priem4($i) private static function priem4($i)
{ {
if (rand(0, 100) < 60) { if (rand(0, 100) < 60) {
@@ -292,7 +292,7 @@ class BotPriemLogic
} }
} }
//Óòåðåòü ïîò //Утереть пот
private static function priem5($i) private static function priem5($i)
{ {
if (self::hp() <= 95) { if (self::hp() <= 95) {
@@ -301,7 +301,7 @@ class BotPriemLogic
} }
//Àãðåññèâíàÿ çàùèòà //Агрессивная защита
private static function priem211($i) private static function priem211($i)
{ {
if (rand(0, 100) < 80) { if (rand(0, 100) < 80) {
@@ -310,7 +310,7 @@ class BotPriemLogic
} }
//Ïîëíàÿ çàùèòà //Полная защита
private static function priem45($i) private static function priem45($i)
{ {
if (rand(0, 100) < 50) { if (rand(0, 100) < 50) {
@@ -319,7 +319,7 @@ class BotPriemLogic
} }
//Àêòèâíàÿ çàùèòà //Активная защита
private static function priem7($i) private static function priem7($i)
{ {
if (rand(0, 100) < 30) { if (rand(0, 100) < 30) {
@@ -333,7 +333,7 @@ class BotPriemLogic
return round((BotLogic::$st['hpNow'] / BotLogic::$st['hpAll'] * 100), 2); return round((BotLogic::$st['hpNow'] / BotLogic::$st['hpAll'] * 100), 2);
} }
//Òåñò íà âîçìîæíîñòü èñïîëüçîâàíèÿ //Тест на возможность использования
private static function testpriem($pl) private static function testpriem($pl)
{ {
global $u; global $u;
@@ -382,14 +382,14 @@ class BotPriemLogic
} }
if ($pl['trUser'] == 1) { 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')); $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'])) { if (isset($ga['id'])) {
$notr++; $notr++;
} }
} }
//Åñëè ïðèåì óæå èñïîëüçîâàëè //Если прием уже использовали
if (BotLogic::$st['prsu'][$pl['id']] > 0) { if (BotLogic::$st['prsu'][$pl['id']] > 0) {
$notr++; $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 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]]; ], $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() public function start()
{ {
global $u, $c, $code, $id; 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->id_dng = $this->info['id2'];
$this->gs = $u->info['psevdo_s']; $this->gs = $u->info['psevdo_s'];
@@ -18,24 +18,24 @@ class DungeonEditor
if ($this->info['bsid'] > 0) { 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')); $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) { if (isset($this->bs['id']) && $this->bs['users'] - $this->bs['users_finish'] < 2) {
$u->bsfinish($this->bs, false, null); $u->bsfinish($this->bs, false, null);
} }
} }
/* ãåíåðèðóåì âèä ïåðñîíàæà (òîëüêî êàðòà) /* генерируем вид персонажа (только карта)
$this->gs = 1; //ñìîòðèì ïðÿìî $this->gs = 1; //смотрим прямо
2; //ñìîòðèì ëåâî 2; //смотрим лево
3; //ñìîòðèì âíèç 3; //смотрим вниз
4; //ñìîòðèì ïðàâî 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).' ) ) ) ( ( ( `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) . ')) ', //ïðÿìî $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) . ')) ', //âíèç 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) . ')) ', //ëåâî 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) . ')) ' //ïðàâî 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; $i = 1;
@@ -44,7 +44,7 @@ class DungeonEditor
$this->map[0][$pl['y'] . '_' . $pl['x']] = $pl; $this->map[0][$pl['y'] . '_' . $pl['x']] = $pl;
$i++; $i++;
} }
$this->map['good'] = $i; //öåëûõ êëåòîê $this->map['good'] = $i; //целых клеток
$this->map[1] = $this->genMatix(); $this->map[1] = $this->genMatix();
$this->lookDungeon(); $this->lookDungeon();
} }
@@ -53,43 +53,43 @@ class DungeonEditor
{ {
global $u, $c; global $u, $c;
$r = ''; $r = '';
/* îòîáðàæåíèå áîòîâ (áåñïîëåçíî â äàííîì ðåäàêòîðå) */ /* отображение ботов (бесполезно в данном редакторе) */
} }
public function atack($id) public function atack($id)
{ {
global $u, $c, $code; global $u, $c, $code;
/* íàïàäåíèå, êàêîå íàïàäåíèå ìîæåò áûòü â ðåäàêòîðå? :) Íà ñàìîãî ñåáÿ, ñî ñòóëîì? :) */ /* нападение, какое нападение может быть в редакторе? :) На самого себя, со стулом? :) */
} }
public function takeinv($id) public function takeinv($id)
{ {
global $u, $c, $code; global $u, $c, $code;
/* Ýòî ðåäàêòîð, à íå ìàéíêðàôò, çäåñü íè÷åãî ñîáèðàòü íå íóæíî :) */ /* Это редактор, а не майнкрафт, здесь ничего собирать не нужно :) */
} }
public function takeit($id) public function takeit($id)
{ {
global $u, $c, $code, $magic; global $u, $c, $code, $magic;
/*  ðåäàêòîðå íè÷åãî íå ïàäàåò ;) */ /* В редакторе ничего не падает ;) */
} }
public function addItem($i) public function addItem($i)
{ {
//äîáàâëÿåì ïðåäìåò â ïåùåðó (âîçìîæíî âûïàë èç áîòà èëè èç ñóíäóêà) //добавляем предмет в пещеру (возможно выпал из бота или из сундука)
/* À ÷òî åùå? Ïóëüò ê óïðàâëåíèþ Çåìëåé?! */ /* А что еще? Пульт к управлению Землей?! */
} }
public function itemsMap() public function itemsMap()
{ {
global $u, $c, $code; global $u, $c, $code;
/* Äà íè÷åãî çäåñü íå ïàäàåò! Ãîâîðþ æå! */ /* Да ничего здесь не падает! Говорю же! */
} }
public function testLike($x1, $y1, $x2, $y2) public function testLike($x1, $y1, $x2, $y2)
{ {
//èç $x1,$y1 â $x2,$y2 //из $x1,$y1 в $x2,$y2
//äîñòóïíà-ëè ýòà êëåòêà äëÿ äåéñòâèé //доступна-ли эта клетка для действий
$r = 0; $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')); $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')); $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) { if ($x1 == $x2 && $y1 == $y2) {
$r = 1; $r = 1;
} elseif ( } elseif (
$x1 == $x2 - 1 && $c1['go_1'] == 1 || //ïðàâî $x1 == $x2 - 1 && $c1['go_1'] == 1 || //право
$x1 == $x2 + 1 && $c1['go_2'] == 1 || //ëåâî $x1 == $x2 + 1 && $c1['go_2'] == 1 || //лево
$y1 == $y2 - 1 && $c1['go_3'] == 1 || //âåðõ $y1 == $y2 - 1 && $c1['go_3'] == 1 || //верх
$y1 == $y2 + 1 && $c1['go_4'] == 1 //íèç $y1 == $y2 + 1 && $c1['go_4'] == 1 //низ
) )
{ {
$r = 1; $r = 1;
@@ -113,13 +113,13 @@ class DungeonEditor
{ {
global $u, $c, $code; global $u, $c, $code;
////i:{id,name,mapPoint,action,img,type}, ////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}, //'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- ñïðàâà //psition 0 - по центру , 1- сверху, 2- слева, 3- снизу, 4- справа
$r = ''; $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'] . ')) ', //ïðÿìî $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'] . ')) ', //âíèç 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'] . ')) ', //ëåâî 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'] . ')) ' //ïðàâî 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'); $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'); # 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]; $da[$dt2[$is][0]] = $dt2[$is][1];
$is++; $is++;
} }
#if(isset($da['rl2']))$da['rl2'] = -round((int)$da['rl2'] * 0.70); // Ñëåâà #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'] - 230); // Слева
if (isset($da['rl3'])) $da['rl3'] = round((int)$da['rl3'] + 160); if (isset($da['rl3'])) $da['rl3'] = round((int)$da['rl3'] + 160);
if (isset($da['rl4'])) $da['rl4'] = round((int)$da['rl4'] - 120); if (isset($da['rl4'])) $da['rl4'] = round((int)$da['rl4'] - 120);
$pl['date'] = str_replace('"', '', json_encode($da)); $pl['date'] = str_replace('"', '', json_encode($da));
@@ -165,8 +165,8 @@ class DungeonEditor
$da[$dt2[$is][0]] = $dt2[$is][1]; $da[$dt2[$is][0]] = $dt2[$is][1];
$is++; $is++;
} }
#if(isset($da['rl2']))$da['rl2'] = 355-round((int)$da['rl2'] * 0.30); // Ñïðàâà #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'] = round((int)$da['rl2'] + 230); // Справа
if (isset($da['rl3'])) $da['rl3'] = round((int)$da['rl3'] - 160); if (isset($da['rl3'])) $da['rl3'] = round((int)$da['rl3'] - 160);
if (isset($da['rl4'])) $da['rl4'] = round((int)$da['rl4'] + 120); if (isset($da['rl4'])) $da['rl4'] = round((int)$da['rl4'] + 120);
$pl['date'] = str_replace('"', '', json_encode($da)); $pl['date'] = str_replace('"', '', json_encode($da));
@@ -188,13 +188,13 @@ class DungeonEditor
////i:{id,login,mapPoint,sex,obraz,type,users_p}, ////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}, //'count':1,0:{0:1015,1:'Test1',2:5,3:0,4:'1',5:'user',6:1},
$r = ''; $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) . ')) ', //ïðÿìî $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) . ')) ', //âíèç 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) . ')) ', //ëåâî 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) . ')) ' //ïðàâî 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; $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'); $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)) { while ($pl = mysql_fetch_array($sp)) {
$i++; $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')); $btli = mysql_fetch_array(mysql_query('SELECT `id` FROM `battle` WHERE `id` = "' . $user['battle'] . '" AND `team_win` = "-1" LIMIT 1'));
} }
if (!isset($btli['id'])) { if (!isset($btli['id'])) {
//Ñîçäàåì ïîåäèíîê //Создаем поединок
$btl_id = 0; $btl_id = 0;
$expB = 0; $expB = 0;
$btl = ['players' => '', 'timeout' => 180, 'type' => 0, 'invis' => 0, 'noinc' => 0, 'travmChance' => 0, 'typeBattle' => 0, 'addExp' => $expB, 'money' => 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(); $btl_id = mysql_insert_id();
if ($btl_id > 0) { 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'); $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; $j = 0;
$logins_bot = []; $logins_bot = [];
@@ -279,16 +279,16 @@ class DungeonEditor
global $u, $c, $code; global $u, $c, $code;
$go = 0; $go = 0;
if ($id == 1) { if ($id == 1) {
//âïåðåä //вперед
$go = $this->sg[$this->gs][1]; $go = $this->sg[$this->gs][1];
} elseif ($id == 2) { } elseif ($id == 2) {
//íàçàä //назад
$go = $this->sg[$this->gs][3]; $go = $this->sg[$this->gs][3];
} elseif ($id == 3) { } elseif ($id == 3) {
//íà ïðàâî //на право
$go = $this->sg[$this->gs][4]; $go = $this->sg[$this->gs][4];
} elseif ($id == 4) { } elseif ($id == 4) {
//íà ëåâî //на лево
$go = $this->sg[$this->gs][2]; $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')); $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')); $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'] != '') { if ($tmap['tr_items'] != '') {
$ti = explode(',', $tmap['tr_items']); $ti = explode(',', $tmap['tr_items']);
$i = 0; $i = 0;
@@ -335,19 +335,19 @@ class DungeonEditor
} }
if ($trnit != '') { if ($trnit != '') {
$trnit = rtrim($trnit, ', '); $trnit = rtrim($trnit, ', ');
$this->error = 'Ó âàñ íåò ïîäõîäÿùåãî ïðåäìåòà. Òðåáóåòñÿ ' . $trnit; $this->error = 'У вас нет подходящего предмета. Требуется ' . $trnit;
} }
} }
$tmGo = $u->info['timeGo'] - time(); //ñêîëüêî ñåêóíä îñòàëîñü $tmGo = $u->info['timeGo'] - time(); //сколько секунд осталось
if ($tmGo > 0) { if ($tmGo > 0) {
$go = 0; $go = 0;
$this->error = 'Íå òàê áûñòðî...'; $this->error = 'Не так быстро...';
} }
if ($u->aves['now'] >= $u->aves['max']) { if ($u->aves['now'] >= $u->aves['max']) {
$go = 0; $go = 0;
$this->error = 'Âû íå ìîæåòå ïåðåìåùàòüñÿ, ðþêçàê ïåðåïîëíåí ...'; $this->error = 'Вы не можете перемещаться, рюкзак переполнен ...';
} }
if ($go > 0) { if ($go > 0) {
@@ -371,16 +371,16 @@ class DungeonEditor
global $u, $c, $code; global $u, $c, $code;
$go = 0; $go = 0;
if ($id == 1) { if ($id == 1) {
//âïåðåä //вперед
$go = $this->sg[$this->gs][1]; $go = $this->sg[$this->gs][1];
} elseif ($id == 2) { } elseif ($id == 2) {
//íàçàä //назад
$go = $this->sg[$this->gs][3]; $go = $this->sg[$this->gs][3];
} elseif ($id == 3) { } elseif ($id == 3) {
//íà ïðàâî //на право
$go = $this->sg[$this->gs][4]; $go = $this->sg[$this->gs][4];
} elseif ($id == 4) { } elseif ($id == 4) {
//íà ëåâî //на лево
$go = $this->sg[$this->gs][2]; $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')); $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) public function testSt($id, $s)
{ {
$r = 0; $r = 0;
//çàìåíÿåì îòîáðàæåíèå ñòåí â çàâèñèìîñòè îò óãëà îáçîðà //заменяем отображение стен в зависимости от угла обзора
$s = $this->sg[$this->gs][$s]; $s = $this->sg[$this->gs][$s];
if (isset($this->map[1][$id]['id'])) { if (isset($this->map[1][$id]['id'])) {
$r = $this->map[1][$id]['st'][($s - 1)]; $r = $this->map[1][$id]['st'][($s - 1)];
@@ -421,7 +421,7 @@ class DungeonEditor
public function lookDungeon() public function lookDungeon()
{ {
global $u, $c, $code, $pd; global $u, $c, $code, $pd;
/* Ãåíåðèðóåì èçîáðàæåíèå êàðòû */ /* Генерируем изображение карты */
/* LEVEL 1 */ /* LEVEL 1 */
if ($this->testSt(2, 4) > 0 || $this->testSt(3, 2) > 0) { if ($this->testSt(2, 4) > 0 || $this->testSt(3, 2) > 0) {
$pd[28] = 1; $pd[28] = 1;
@@ -502,9 +502,9 @@ class DungeonEditor
$pd[3] = 1; $pd[3] = 1;
} }
/* Ãåíåðèðóåì ïðåäìåòû íà êàðòå */ /* Генерируем предметы на карте */
/* Ãåíåðèðóåì ïåðñîíàæåé è áîòîâ íà êàðòå */ /* Генерируем персонажей и ботов на карте */
} }
@@ -520,7 +520,7 @@ class DungeonEditor
{ {
$r = []; $r = [];
if ($this->gs == 1) { if ($this->gs == 1) {
//1; //ñìîòðèì ïðÿìî //1; //смотрим прямо
$r[1] = $this->getMatrix(0, -1); $r[1] = $this->getMatrix(0, -1);
$r[2] = $this->getMatrix(0, 0); $r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(0, 1); $r[3] = $this->getMatrix(0, 1);
@@ -541,7 +541,7 @@ class DungeonEditor
$r[18] = $this->getMatrix(4, 2); $r[18] = $this->getMatrix(4, 2);
$r[19] = $this->getMatrix(4, -2); $r[19] = $this->getMatrix(4, -2);
} elseif ($this->gs == 2) { } elseif ($this->gs == 2) {
//2; //ñìîòðèì ëåâî //2; //смотрим лево
$r[1] = $this->getMatrix(-1, 0); $r[1] = $this->getMatrix(-1, 0);
$r[2] = $this->getMatrix(0, 0); $r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(1, 0); $r[3] = $this->getMatrix(1, 0);
@@ -562,7 +562,7 @@ class DungeonEditor
$r[18] = $this->getMatrix(2, -4); $r[18] = $this->getMatrix(2, -4);
$r[19] = $this->getMatrix(-2, -4); $r[19] = $this->getMatrix(-2, -4);
} elseif ($this->gs == 3) { } elseif ($this->gs == 3) {
//3; //ñìîòðèì âíèç //3; //смотрим вниз
$r[1] = $this->getMatrix(0, 1); $r[1] = $this->getMatrix(0, 1);
$r[2] = $this->getMatrix(0, 0); $r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(0, -1); $r[3] = $this->getMatrix(0, -1);
@@ -583,7 +583,7 @@ class DungeonEditor
$r[18] = $this->getMatrix(-4, -2); $r[18] = $this->getMatrix(-4, -2);
$r[19] = $this->getMatrix(-4, 2); $r[19] = $this->getMatrix(-4, 2);
} elseif ($this->gs == 4) { } elseif ($this->gs == 4) {
//4; //ñìîòðèì ïðàâî //4; //смотрим право
$r[1] = $this->getMatrix(1, 0); $r[1] = $this->getMatrix(1, 0);
$r[2] = $this->getMatrix(0, 0); $r[2] = $this->getMatrix(0, 0);
$r[3] = $this->getMatrix(-1, 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); 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]; 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) public function e($t)
@@ -18,7 +18,7 @@ class Filter
mysql_query( mysql_query(
'INSERT INTO `chat` (`text`,`city`,`to`,`type`,`new`,`time`) VALUES ("#' . date('d.m.Y') . ' %' . date( 'INSERT INTO `chat` (`text`,`city`,`to`,`type`,`new`,`time`) VALUES ("#' . date('d.m.Y') . ' %' . date(
'H:i:s' '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); $str = strtolower($string);
if (strtolower('S') != 's') { if (strtolower('S') != 's') {
$ru = 'ÀÁÂÃÄŨÆÇÈÉÊËÌÍÎÐÏÑÒÓÔÕÖרÙÚÜÛÝÞß'; $ru = 'АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ';
$ru2 = 'àáâãä叿çèéêëìíîðïñòóôõö÷øùúüûýþÿ'; $ru2 = 'абвгдеёжзийклмнорпстуфхцчшщъьыэюя';
$en = 'QWERTYUIOPASDFGHJKLZXCVBNM'; $en = 'QWERTYUIOPASDFGHJKLZXCVBNM';
$en2 = 'qwertyuiopasdfghjklzxcvbnm'; $en2 = 'qwertyuiopasdfghjklzxcvbnm';
$i = 0; $i = 0;
@@ -77,7 +77,7 @@ class Filter
public function spamFiltr($txt) public function spamFiltr($txt)
{ {
$txt = str_replace('¸', 'å', $txt); $txt = str_replace('ё', 'е', $txt);
$nospam = 0; $nospam = 0;
$txt = str_replace('&gt;', '', $txt); $txt = str_replace('&gt;', '', $txt);
@@ -91,7 +91,7 @@ class Filter
} }
$i++; $i++;
} }
/* ôèëüòð */ /* фильтр */
$spam = mysql_fetch_array(mysql_query('SELECT * FROM `spam_word` WHERE `id` = 1 LIMIT 1')); $spam = mysql_fetch_array(mysql_query('SELECT * FROM `spam_word` WHERE `id` = 1 LIMIT 1'));
$spam = $spam['data']; $spam = $spam['data'];
// //
@@ -100,45 +100,45 @@ class Filter
$testEN2 = str_replace('&quot;', '', $testEN2); $testEN2 = str_replace('&quot;', '', $testEN2);
$testEN2 = str_replace('&nbsp;', '', $testEN2); $testEN2 = str_replace('&nbsp;', '', $testEN2);
$testEN2 = str_replace('à', 'a', $testEN2); $testEN2 = str_replace('а', 'a', $testEN2);
$testEN2 = str_replace('á', 'b', $testEN2); $testEN2 = str_replace('б', 'b', $testEN2);
$testEN2 = str_replace('ñ', 'c', $testEN2); $testEN2 = str_replace('с', 'c', $testEN2);
$testEN2 = str_replace('â', 'b', $testEN2); $testEN2 = str_replace('в', 'b', $testEN2);
$testEN2 = str_replace('å', 'e', $testEN2); $testEN2 = str_replace('е', 'e', $testEN2);
$testEN2 = str_replace('ò', 't', $testEN2); $testEN2 = str_replace('т', 't', $testEN2);
$testEN2 = str_replace('î', 'o', $testEN2); $testEN2 = str_replace('о', 'o', $testEN2);
$testEN2 = str_replace('ð', 'p', $testEN2); $testEN2 = str_replace('р', 'p', $testEN2);
$testEN2 = str_replace('ì', 'm', $testEN2); $testEN2 = str_replace('м', 'm', $testEN2);
$testEN2 = str_replace('í', 'h', $testEN2); $testEN2 = str_replace('н', 'h', $testEN2);
$testEN2 = str_replace('ó', 'y', $testEN2); $testEN2 = str_replace('у', 'y', $testEN2);
$testEN2 = str_replace('ê', 'k', $testEN2); $testEN2 = str_replace('к', 'k', $testEN2);
$testEN2 = str_replace('è', 'u', $testEN2); $testEN2 = str_replace('и', 'u', $testEN2);
$testEN2 = str_replace('õ', 'x', $testEN2); $testEN2 = str_replace('х', 'x', $testEN2);
$testEN2 = str_replace('ÿ', '9', $testEN2); $testEN2 = str_replace('я', '9', $testEN2);
$testEN2 = str_replace('()', 'o', $testEN2); $testEN2 = str_replace('()', 'o', $testEN2);
$testEN2 = str_replace('0', 'o', $testEN2); $testEN2 = str_replace('0', 'o', $testEN2);
$testEN2 = preg_replace('/[^A-z]*/i', '', $testEN2); $testEN2 = preg_replace('/[^A-z]*/i', '', $testEN2);
$testRU = preg_replace('/[^À-ÿ]*/i', '', $txt); $testRU = preg_replace('/[^А]*/i', '', $txt);
$testRU2 = $txt; $testRU2 = $txt;
$testRU2 = str_replace('a', 'à', $testRU2); $testRU2 = str_replace('a', 'а', $testRU2);
$testRU2 = str_replace('b', 'á', $testRU2); $testRU2 = str_replace('b', 'б', $testRU2);
$testRU2 = str_replace('c', 'ñ', $testRU2); $testRU2 = str_replace('c', 'с', $testRU2);
$testRU2 = str_replace('b', 'â', $testRU2); $testRU2 = str_replace('b', 'в', $testRU2);
$testRU2 = str_replace('e', 'å', $testRU2); $testRU2 = str_replace('e', 'е', $testRU2);
$testRU2 = str_replace('t', 'ò', $testRU2); $testRU2 = str_replace('t', 'т', $testRU2);
$testRU2 = str_replace('o', 'î', $testRU2); $testRU2 = str_replace('o', 'о', $testRU2);
$testRU2 = str_replace('p', 'ð', $testRU2); $testRU2 = str_replace('p', 'р', $testRU2);
$testRU2 = str_replace('m', 'ì', $testRU2); $testRU2 = str_replace('m', 'м', $testRU2);
$testRU2 = str_replace('h', 'í', $testRU2); $testRU2 = str_replace('h', 'н', $testRU2);
$testRU2 = str_replace('y', 'ó', $testRU2); $testRU2 = str_replace('y', 'у', $testRU2);
$testRU2 = str_replace('k', 'ê', $testRU2); $testRU2 = str_replace('k', 'к', $testRU2);
$testRU2 = str_replace('x', 'õ', $testRU2); $testRU2 = str_replace('x', 'х', $testRU2);
$testRU2 = str_replace('u', 'è', $testRU2); $testRU2 = str_replace('u', 'и', $testRU2);
$testRU2 = str_replace('()', 'î', $testRU2); $testRU2 = str_replace('()', 'о', $testRU2);
$testRU2 = str_replace('0', 'î', $testRU2); $testRU2 = str_replace('0', 'о', $testRU2);
$testRU2 = preg_replace('/[^À-ÿ]*/i', ' ', $testRU2); $testRU2 = preg_replace('/[^А]*/i', ' ', $testRU2);
$testRU2 = preg_replace('/[^À-ß]*/i', ' ', $testRU2); $testRU2 = preg_replace('/[^А]*/i', ' ', $testRU2);
$i = 0; $i = 0;
$spe = explode('|', $spam); $spe = explode('|', $spam);
while ($i <= count($spe)) { while ($i <= count($spe)) {
@@ -154,6 +154,6 @@ class Filter
public function __clone() public function __clone()
{ {
trigger_error('Äóáëèðîâàíèå íå äîïóñêàåòñÿ.', E_USER_ERROR); trigger_error('Дублирование не допускается.', E_USER_ERROR);
} }
} }
+75 -64
View File
@@ -1,44 +1,55 @@
<?php <?php
/**@deprecated âðîäå íèãäå íå âûçûâàåòñÿ, íèêåì íå èñïîëüçóåòñÿ */ /**@deprecated вроде нигде не вызывается, никем не используется */
class GameDealer class GameDealer
{ {
//Êîíôèãóðàöèè //Конфигурации
private $c = [ private $c = [
'db_name' => 'pay_operations', //Òàáëèöà â êîòîðóþ çàíîñÿòñÿ äàííûå 'db_name' => 'pay_operations', //Таблица в которую заносятся данные
'db_host' => 'localhost', 'db_host' => 'localhost',
'db_user' => 'newcom1_abk', 'db_user' => 'newcom1_abk',
'db_pass' => '4nWYsIM[c?}P', 'db_pass' => '4nWYsIM[c?}P',
'db_base' => 'newcom1_abk', /* Íàñòðîéêè ïëàòåæåé */ '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) '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 'key' => 'qtzl0igb', //gamedealer key
'id' => '65643' //ID ïðîåêòà 'id' => '65643' //ID проекта
], $BACK = []; //Ðåçóëüòàò êîòîðûé âîçâðàùàåì â êîíöå ], $BACK = []; //Результат который возвращаем в конце
//Êîäèðóåì èç ÞÒÔ-8 â Êèðèëèöó //Кодируем из ЮТФ-8 в Кирилицу
/**
* @param $text
* @return mixed
* @deprecated
*/
public function in($text) public function in($text)
{ {
return iconv("UTF-8", "cp1251", $text); return $text;
} }
//Êîäèðóåì èç Êèðèëèöó â ÞÒÔ-8 //Кодируем из Кирилицу в ЮТФ-8
/**
* @param $text
* @return mixed
* @deprecated
*/
public function out($text) public function out($text)
{ {
return iconv("cp1251", "UTF-8", $text); return $text;
} }
//Äîáàâëÿåì äàííûå â áàçó äàííûõ //Добавляем данные в базу данных
public function add($type, $value, $money) 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) . '")'); 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() public function connect_db()
{ {
$db = mysql_connect($this->c['db_host'], $this->c['db_user'], $this->c['db_pass']) or die('Îøèáêà ïîäêëþ÷åíèÿ ê MySQL ñåðâåðó!'); $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_select_db($this->c['db_base'], $db) or die('Ошибка подключения к базе данных!');
mysql_query('SET NAMES cp1251'); mysql_query('SET NAMES utf8mb4');
} }
public function output($a, $v = null) public function output($a, $v = null)
@@ -69,7 +80,7 @@ class GameDealer
return $r; return $r;
} }
//Ãåíåðèðóåì XML-ôàéë //Генерируем XML-файл
public function backInformation() public function backInformation()
{ {
header('Content-Type: text/html/force-download'); header('Content-Type: text/html/force-download');
@@ -77,7 +88,7 @@ class GameDealer
echo $this->output($this->BACK, 1); echo $this->output($this->BACK, 1);
} }
//Ïðîâåðêà ñóùåñòâîâàíèÿ ïåðñîíàæà //Проверка существования персонажа
public function test_accaunt($nick) public function test_accaunt($nick)
{ {
$r = false; $r = false;
@@ -88,7 +99,7 @@ class GameDealer
return $r; return $r;
} }
//Ïîëó÷àåò ñ÷åò â áàíêå ïî ëîãèíó //Получает счет в банке по логину
public function getBank($nick) public function getBank($nick)
{ {
$nick = mysql_fetch_array(mysql_query('SELECT `id` FROM `users` WHERE `login` = "' . mysql_real_escape_string($nick) . '" LIMIT 1')); $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']; return $nick['id'];
} }
//Ïîèñê ëîãèíà //Поиск логина
public function bank_user($nick) 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')); $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']; return $nick['login'];
} }
//Íà÷èíàåì îáðàáîòêó çàïðîñîâ //Начинаем обработку запросов
public function start_session() public function start_session()
{ {
$ip = ''; $ip = '';
$ip = $_SERVER['HTTP_X_REAL_IP']; $ip = $_SERVER['HTTP_X_REAL_IP'];
//Ïîäêëþ÷àåìñÿ ê ÁÄ //Подключаемся к БД
$this->connect_db(); $this->connect_db();
//Ïîëó÷àåì äàííûå çàïðîñà //Получаем данные запроса
//$xml = file_get_contents('php://input'); //$xml = file_get_contents('php://input');
//Ïàðñèíã XML çàïðîñà //Парсинг XML запроса
if (function_exists('simplexml_load_string')) { if (function_exists('simplexml_load_string')) {
$xml = simplexml_load_string($xml); $xml = simplexml_load_string($xml);
} else { } else {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Íå óäàëîñü ïðîèçâåñòè îáðàáîòêó çàïðîñà']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Не удалось произвести обработку запроса']]]];
die($this->backInformation()); die($this->backInformation());
} }
$this->id = $xml->projectid; $this->id = $xml->projectid;
if (!in_array($ip, $this->c['ip_list'])) { 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()); die($this->backInformation());
} }
//Îáðàáîòêà çàïðîñîâ //Обработка запросов
if ($xml->method == 'check_balance') { if ($xml->method == 'check_balance') {
//<sign>MD5(method+MD5(gdKey))</sign> //<sign>MD5(method+MD5(gdKey))</sign>
$sign = md5($xml->method . md5($this->c['key'])); $sign = md5($xml->method . md5($this->c['key']));
if ($sign == $xml->sign) { if ($sign == $xml->sign) {
//Áàëàíñ äèëåðà //Баланс дилера
$balance = 1000000; $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); $this->add('4', 'check:' . $xml->nick . ':1' . $r, 0);
} }
} elseif ($xml->method == 'check') { } 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'])); $sign = md5($xml->nick . $xml->method . md5($this->c['key']));
if ($sign == $xml->sign) { if ($sign == $xml->sign) {
$xml->nick = $this->in($xml->nick); $xml->nick = $this->in($xml->nick);
if ($this->test_accaunt($xml->nick) == true) { 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); $this->add('3', 'check:' . $xml->nick . ':1' . $r, 0);
} else { } else {
//Ïåðñîíàæ íå íàéäåí //Персонаж не найден
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ïëàòåæ íå îáðàáîòàí. Áàíêîâñêèé ñ÷åò íå íàéäåí.']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Платеж не обработан. Банковский счет не найден.']]]];
$this->add('-1', 'Ïåðñîíàæ íå íàéäåí:pay:' . $xml->nick . ':0', 0); $this->add('-1', 'Персонаж не найден:pay:' . $xml->nick . ':0', 0);
} }
} }
} elseif ($xml->method == 'pay') { } 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'])); $sign = md5($xml->nick . $xml->projectid . $xml->amount . $xml->payid . $xml->method . md5($this->c['key']));
if ($sign == $xml->sign) { if ($sign == $xml->sign) {
$xml->nick = $this->in($xml->nick); $xml->nick = $this->in($xml->nick);
if ($this->test_accaunt($xml->nick)) { if ($this->test_accaunt($xml->nick)) {
//Ïåðñîíàæ íàéäåí è çà÷èñëÿåì åìó èãðîâóþ âàëþòó //Персонаж найден и зачисляем ему игровую валюту
$bank = $this->test_accaunt($xml->nick); $bank = $this->test_accaunt($xml->nick);
if ($bank > 0) { 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'); 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); $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')); $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'); 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) { if ($user['sex'] == 1) {
$r .= 'Óâàæàåìàÿ'; $r .= 'Уважаемая';
} else { } 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')"); 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 { } else {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ó ïîëüçîâàòåëÿ îòñóòñòâóåò áàíê'], ['id', $this->c['id']]]]]; $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->add('-1', 'У персонажа отсутствует банк:pay:' . $xml->nick . ':' . $xml->projectid . ':' . $xml->sign . ':' . $xml->amount . ':' . $xml->payid . ':' . $bank['id'], $xml->amount);
} }
} else { } else {
//Ïåðñîíàæ íå íàéäåí //Персонаж не найден
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ïëàòåæ íå îáðàáîòàí. Ïåðñîíàæ íå íàéäåí.']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Платеж не обработан. Персонаж не найден.']]]];
$this->add('-1', 'Ïåðñîíàæ íå íàéäåí:pay:' . $xml->nick . ':0', 0); $this->add('-1', 'Персонаж не найден:pay:' . $xml->nick . ':0', 0);
} }
} else { } else {
//Îøèáêà ñèãíàòóðû //Ошибка сигнатуры
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Îøèáêà ñèãíàòóðû']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ошибка сигнатуры']]]];
$this->add('-1', 'Îøèáêà ñèãíàòóðû:pay:' . $xml->nick . ':0', 0); $this->add('-1', 'Ошибка сигнатуры:pay:' . $xml->nick . ':0', 0);
} }
} elseif ($xml->method == 'check_login') { } elseif ($xml->method == 'check_login') {
/* Ïðîâåðêà àêêàóíòà /* Проверка аккаунта
nick - ëîãèí àêêàóíòà , projectid - id ïðîåêòà , sign */ nick - логин аккаунта , projectid - id проекта , sign */
$sign = md5($xml->nick . $xml->method . md5($this->c['key'])); $sign = md5($xml->nick . $xml->method . md5($this->c['key']));
if ($sign == $xml->sign) { if ($sign == $xml->sign) {
$xml->nick = $this->in($xml->nick); $xml->nick = $this->in($xml->nick);
if ($this->test_accaunt($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); $this->add('1', 'check_login:' . $xml->nick . ':1' . $r, 0);
} else { } else {
//Ïåðñîíàæ íå íàéäåí //Персонаж не найден
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ñ÷åò íå íàéäåí']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Счет не найден']]]];
$this->add('-1', 'Ïåðñîíàæ íå íàéäåí:check_login:' . $xml->nick . ':0', 0); $this->add('-1', 'Персонаж не найден:check_login:' . $xml->nick . ':0', 0);
} }
} else { } else {
//Îøèáêà ñèãíàòóðû //Ошибка сигнатуры
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Îøèáêà ñèãíàòóðû']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Ошибка сигнатуры']]]];
$this->add('-1', 'Îøèáêà ñèãíàòóðû:pay:' . $xml->nick . ':0', 0); $this->add('-1', 'Ошибка сигнатуры:pay:' . $xml->nick . ':0', 0);
} }
} else { } else {
$this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Íåèçâåñòíûé òèï çàïðîñà']]]]; $this->BACK = [['gdanswer', [['status', '-1'], ['desc', 'Неизвестный тип запроса']]]];
$this->add('-1', 'Íåèçâåñòíûé òèï çàïðîñà:error_method:gamedealer', 0); $this->add('-1', 'Неизвестный тип запроса:error_method:gamedealer', 0);
} }
//Âîçâðàùàåì ðåçóëüòàò //Возвращаем результат
$this->backInformation(); $this->backInformation();
} }
} }
+94 -76
View File
@@ -2,132 +2,145 @@
namespace Insallah; namespace Insallah;
use Core\Db;
use User;
class Achievements class Achievements
{ {
private $user; private User $user;
private $info; private $info;
private $data = [ private array $data = [
'zb' => [ 'zb' => [
'questname' => 'Åæåäí.Çàäàíèÿ', 'questname' => 'Ежедн.Задания',
'quest' => 'Âûïîëíèòü çàäàíèÿ áàáêè.', 'quest' => 'Выполнить задания бабки.',
'check' => ['Çàäàíèé', 5, 25, 50, 100, 250], 'check' => ['Заданий', 5, 25, 50, 100, 250],
'prize' => ['Æåòîí <br>óñïåõà <br>', 5, 20, 40, 60, 100], 'prize' => ['Жетон <br>успеха <br>', 5, 20, 40, 60, 100],
'startlink' => 11 'startlink' => 11
], ],
'vx' => [ 'vx' => [
'questname' => 'Õàîòè÷åñêèå áîè', 'questname' => 'Хаотические бои',
'quest' => 'Ïîáåäèòü â õàîòè÷åñêèõ áîÿõ.', 'quest' => 'Победить в хаотических боях.',
'check' => ['Ïîáåä', 50, 300, 400, 500, 1000], 'check' => ['Побед', 50, 300, 400, 500, 1000],
'prize' => ['åêð.', 25, 50, 75, 100, 200], 'prize' => ['екр.', 25, 50, 75, 100, 200],
'startlink' => 21 'startlink' => 21
], ],
'snt' => [ 'snt' => [
'questname' => 'Ñóíäóê òðóïîæîðà', 'questname' => 'Сундук трупожора',
'quest' => 'Îòêðûòü ñóíäóê òðóïîæîðà.', 'quest' => 'Открыть сундук трупожора.',
'check' => ['Îòêðûòèé', 5, 25, 50, 100, 250], 'check' => ['Открытий', 5, 25, 50, 100, 250],
'prize' => ['åêð.', 10, 25, 50, 75, 200], 'prize' => ['екр.', 10, 25, 50, 75, 200],
'startlink' => 31 'startlink' => 31
], ],
'rp' => [ 'rp' => [
'questname' => 'Ðóíû 8 ëâë.', 'questname' => 'Руны 8 лвл.',
'quest' => 'Ïîëó÷èòü ðóíó ïðè ïëàâêå ïëîõèõ çàãîòîâîê. [S]', 'quest' => 'Получить руну при плавке плохих заготовок. [S]',
'check' => ['Ðóí', 5, 10, 25, 50, 100], 'check' => ['Рун', 5, 10, 25, 50, 100],
'prize' => ['Ïëîõèå <br> çàãîòîâêè <br>', 5, 7, 10, 12, 15], 'prize' => ['Плохие <br> заготовки <br>', 5, 7, 10, 12, 15],
'startlink' => 41 'startlink' => 41
], ],
'rn' => [ 'rn' => [
'questname' => 'Ðóíû 9 ëâë.', 'questname' => 'Руны 9 лвл.',
'quest' => 'Ïîëó÷èòü ðóíó ïðè ïëàâêå íîðìàëüíûõ çàãîòîâîê. [M]', 'quest' => 'Получить руну при плавке нормальных заготовок. [M]',
'check' => ['Ðóí', 5, 10, 15, 25, 50], 'check' => ['Рун', 5, 10, 15, 25, 50],
'prize' => ['Íîðìàëüíûå <br> çàãîòîâêè <br>', 5, 7, 9, 12, 15], 'prize' => ['Нормальные <br> заготовки <br>', 5, 7, 9, 12, 15],
'startlink' => 51 'startlink' => 51
], ],
'rb' => [ 'rb' => [
'questname' => 'Ðóíû 10 ëâë.', 'questname' => 'Руны 10 лвл.',
'quest' => 'Ïîëó÷èòü ðóíó ïðè ïëàâêå èäåàëüíûõ çàãîòîâîê. [L]', 'quest' => 'Получить руну при плавке идеальных заготовок. [L]',
'check' => ['Ðóí', 2, 5, 8, 11, 15], 'check' => ['Рун', 2, 5, 8, 11, 15],
'prize' => ['Èäåàëüíûå <br> çàãîòîâêè <br>', 2, 4, 6, 10, 15], 'prize' => ['Идеальные <br> заготовки <br>', 2, 4, 6, 10, 15],
'startlink' => 61 'startlink' => 61
], ],
'pg' => [ 'pg' => [
'questname' => 'Ãåðîè÷. Ñðàæåíèÿ', 'questname' => 'Героич. Сражения',
'quest' => 'Ïîó÷àñòâîâàòü â ãåðîè÷åñêîì ñðàæåíèè.', 'quest' => 'Поучаствовать в героическом сражении.',
'check' => ['Ó÷àñòèé', 100, 200, 400, 600, 1000], 'check' => ['Участий', 100, 200, 400, 600, 1000],
'prize' => ['Æåòîí <br>óñïåõà <br>', 10, 20, 40, 60, 80], 'prize' => ['Жетон <br>успеха <br>', 10, 20, 40, 60, 80],
'startlink' => 71 'startlink' => 71
], ],
'bv' => [ 'bv' => [
'questname' => 'Ïðîäàæè Áàáóøêå', 'questname' => 'Продажи Бабушке',
'quest' => 'Ïðîäàòü áàáóøêå íàéäåííûå âåùè â ïåùåðå.', 'quest' => 'Продать бабушке найденные вещи в пещере.',
'check' => ['Ïðîäàæ', 5, 25, 50, 100, 250], 'check' => ['Продаж', 5, 25, 50, 100, 250],
'prize' => ['êð.', 500, 1000, 2000, 4000, 5000], 'prize' => ['кр.', 500, 1000, 2000, 4000, 5000],
'startlink' => 81 'startlink' => 81
], ],
'kw' => [ 'kw' => [
'questname' => 'Êëàí Ïîåäèíêè', 'questname' => 'Клан Поединки',
'quest' => 'Ïîáåäèòü â êëàíîâîé âîéíå.', 'quest' => 'Победить в клановой войне.',
'check' => ['Ïîáåä', 5, 10, 15, 20, 25], 'check' => ['Побед', 5, 10, 15, 20, 25],
'prize' => ['Ñâèòîê <br> êëàíîâîãî<br> îïûòà ', 1, 2, 5, 10, 15], 'prize' => ['Свиток <br> кланового<br> опыта ', 1, 2, 5, 10, 15],
'startlink' => 91 'startlink' => 91
], ],
'pa' => [ # not implemented! 'pa' => [ # not implemented!
'questname' => 'Ïîêðîâèòåëüñòâî', 'questname' => 'Покровительство',
'quest' => 'Ïîëó÷èòü ïîêðîâèòåëüñòâî Àíãåëà.', 'quest' => 'Получить покровительство Ангела.',
'check' => ['Ïîëó÷åíî', 5, 25, 50, 100, 250], 'check' => ['Получено', 5, 25, 50, 100, 250],
'prize' => null, 'prize' => null,
'startlink' => null 'startlink' => null
], ],
'bs' => [ 'bs' => [
'questname' => 'Áàøíÿ ñìåðòè', 'questname' => 'Башня смерти',
'quest' => 'Ïîáåäû â áàøíå ñìåðòè.', 'quest' => 'Победы в башне смерти.',
'check' => ['Ïîáåä', 1, 5, 10, 50, 500], 'check' => ['Побед', 1, 5, 10, 50, 500],
'prize' => ['åêð.', 1, 5, 10, 50, 200], 'prize' => ['екр.', 1, 5, 10, 50, 200],
'startlink' => 101 'startlink' => 101
], ],
'trn' => [ # not implemented! 'trn' => [ # not implemented!
'questname' => 'Òóðíèðû', 'questname' => 'Турниры',
'quest' => 'Ïîó÷àâñòâîâàòü â òóðíèðàõ.', 'quest' => 'Поучавствовать в турнирах.',
'check' => ['Ïîáåä', 25, 50, 100, 200, 500], 'check' => ['Побед', 25, 50, 100, 200, 500],
'prize' => ['åêð.', 25, 25, 25, 25, 50], 'prize' => ['екр.', 25, 25, 25, 25, 50],
'startlink' => 111 'startlink' => 111
], ],
]; ];
public function __construct(\User $user) public function __construct(User $user)
{ {
$this->user = $user; $this->user = $user;
$this->info = Db::getRow('select * from users_achiv where id = ?', [$user->info['id']]); $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'", "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();",
"top.hic();", "top.hic();",
"https://img.new-combats.com/i/titul/nagr$tier.gif" "https://img.new-combats.com/i/titul/nagr$tier.gif"
]); ]
);
} }
public function getList() public function getList(): string
{ {
$string = ''; $string = '';
$this->calculateCurrent(1); $this->calculateCurrent(1);
foreach ($this->data as $key => $value) { foreach ($this->data as $key => $value) {
//Áëÿ, êàêóþ õåðíþ ïðèõîäèòñÿ ãîðîäèòü!
//Ïåðâîå ÷èñëî = òðåáîâàíèå ñëåäóþùåãî òèðà ìèíóñ òðåáîâàíèå òåêóùåãî òèðà (íàäî íàáðàòü) //Бля, какую херню приходится городить!
//Âòîðîå ÷èñëî = êîëè÷åñòâî äîñòèæåíèé ìèíóñ òðåáîâàíèå òåêóùåãî òèðà (íàáðàë) //Первое число = требование следующего тира минус требование текущего тира (надо набрать)
//Òðåáîâàíèÿ òåêóùåãî òèðà îòíèìàþòñÿ ÷òîáû êàæäûé òèð íà÷èíàë ñ÷èòàòü ïðîöåíò ñ 0. //Второе число = количество достижений минус требование текущего тира (набрал)
//Ïèçäû äàòü òîìó, êòî òàê óåáàíñêè íàçûâàåò ïåðåìåííûå, ÷òî íóæíî ïîëäíÿ âúåçæàòü ÷òî ïðîèñõîäèò. //Требования текущего тира отнимаются чтобы каждый тир начинал считать процент с 0.
//È õåð ïîìåíÿåøü - âñ¸ ñëîìàåòñÿ. FFUUUUUUUUUUUUUU!!! Ins. //Пизды дать тому, кто так уебански называет переменные, что нужно полдня въезжать что происходит.
//И хер поменяешь - всё сломается. 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( $percentToSuccess = Math::get100Percentage(
$value['check'][$this->info['klas' . $key] + 1] - $value['check'][$this->info['klas' . $key]], $value['check'][$this->info['klas' . $key] + 1] - $value['check'][$this->info['klas' . $key]],
$this->info[$key] - $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']; $questname = empty($value['questname']) ? $value['quest'] : $value['questname'];
$string .= '<h4>' . $questname . '</h4>'; $string .= '<h4>' . $questname . '</h4>';
$string .= '<strong>' . $value['quest'] . '</strong><br>'; $string .= '<strong>' . $value['quest'] . '</strong><br>';
$string .= 'Òåêóùèé Ðàíã: <strong>' . $this->info['klas' . $key] . '</strong> '; $string .= 'Текущий Ранг: <strong>' . $this->info['klas' . $key] . '</strong> ';
$string .= 'Êîëè÷åñòâî ' . mb_strtolower($value['check'][0]) . ': <strong>' . $this->info[$key] . ' =' . $percentToSuccess . '%</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([ $string .= Table::get([
['Ðàíãè', 1, 2, 3, 4, 5], ['Ранги', 1, 2, 3, 4, 5],
$value['check'], $value['check'],
[ [
'Íàãðàäà', 'Награда',
$this->prizeName($value['prize'][1], $value['prize'][0]), $this->prizeName($value['prize'][1], $value['prize'][0]),
$this->prizeName($value['prize'][2], $value['prize'][0]), $this->prizeName($value['prize'][2], $value['prize'][0]),
$this->prizeName($value['prize'][3], $value['prize'][0]), $this->prizeName($value['prize'][3], $value['prize'][0]),
@@ -157,7 +171,7 @@ class Achievements
!empty($value['prize']) && !empty($value['prize']) &&
!empty($value['startlink']) !empty($value['startlink'])
) { ) {
$string .= '<br>Íàãðàäà:<br>'; $string .= '<br>Награда:<br>';
$string .= $this->drawSunduk( $string .= $this->drawSunduk(
$this->info[$key . '_n'] + $value['startlink'], $this->info[$key . '_n'] + $value['startlink'],
$this->prizeName($value['prize'][$this->info[$key . '_n'] + 1], $value['prize'][0]), $this->prizeName($value['prize'][$this->info[$key . '_n'] + 1], $value['prize'][0]),
@@ -182,6 +196,10 @@ class Achievements
continue; continue;
} }
if (is_null($this->info[$k])) {
$this->info[$k] = 0;
}
$this->info["klas$k"] = 0; $this->info["klas$k"] = 0;
$this->info["name$k"] = $this->data[$k]['questname']; $this->info["name$k"] = $this->data[$k]['questname'];
$this->info["klasP$k"] = Math::get100Percentage($this->data[$k]['check'][1], $this->info[$k]); $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]) { if ($this->info[$k] >= $this->data[$k]['check'][$i]) {
$this->info["klas$k"] = $i; $this->info["klas$k"] = $i;
if ($i === 5) { if ($i === 5) {
# Íà 5 ðàíãå äîëæíî îòäàâàòü ìàêñèìóì. # На 5 ранге должно отдавать максимум.
$this->info["klasP$k"] = 100; $this->info["klasP$k"] = 100;
} else { } else {
$this->info["klasP$k"] = Math::get100Percentage( $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)) { if (!is_null($uid)) {
$this->info = Db::getRow('select * from users_achiv where id = ?', [$user_id]); $this->info = \Core\Db::getRow('select * from users_achiv where id = ?', [$uid]);
} }
$this->calculateCurrent(); $this->calculateCurrent();
return $this->info; return $this->info;
@@ -220,7 +238,7 @@ class Achievements
private function addOne($name) 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) public function updateTier($name)
@@ -240,12 +258,12 @@ class Achievements
/** /**
* @return array[] * @return array[]
*/ */
public function getData() public function getData(): array
{ {
return $this->data; 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]); 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); return array_keys($this->data);
} }
+8 -8
View File
@@ -1,16 +1,16 @@
<?php <?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/Math.php';
require_once 'Core/Table.php'; require_once 'Core/Table.php';
require_once 'Runes/Runes.php'; require_once 'Runes/Runes.php';
require_once 'Tournament/Tournament.php'; //require_once 'Tournament/Tournament.php';
require_once 'Tournament/TournamentModel.php'; //require_once 'Tournament/TournamentModel.php';
require_once 'Achievements.php'; require_once 'Achievements.php';
//Âìåñòî êðîíà äëÿ òóðíèðà. //Вместо крона для турнира.
if (Tournament::IS_ENABLED) { //if (Tournament::IS_ENABLED) {
(new Tournament())->startAllBattles(); // (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. */ /** All raw mathematics in one place. */
class Math 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; 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); return min(self::getPercentage($total, $number), 100);
} }
/** Number-20% and Number+20% */ /** Number-20% and Number+20% */
public static function get20PercentRange($number) public static function get20PercentRange($number): array
{ {
return [ return [
'min' => $number * ((100 - 20) / 100), '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 class Runes
{ {
/** Создаём руну в зависимости от уровня. /** Создаём руну в зависимости от уровня.
*
* @param $level * @param $level
* *
* @return array * @return array
@@ -15,7 +14,7 @@ class Runes
if (!in_array($level, [8, 9, 10])) { if (!in_array($level, [8, 9, 10])) {
return []; return [];
} }
$power = [8 => 3, 9 => 5, 10 => 7]; $power = [8 => 3, 9 => 3, 10 => 5];
$stats = [8 => 1, 9 => 3, 10 => 3]; $stats = [8 => 1, 9 => 3, 10 => 3];
$rand9 = array_rand(array_flip(['hpAll', 'm2', 'm5'])); $rand9 = array_rand(array_flip(['hpAll', 'm2', 'm5']));
$runes = [ $runes = [
@@ -64,7 +63,7 @@ class Runes
$returnData = '|' . http_build_query($resultRune, '', '|'); $returnData = '|' . http_build_query($resultRune, '', '|');
$returnData = str_replace('|', '|add_', $returnData); $returnData = str_replace('|', '|add_', $returnData);
//Строчка человекопонятных параметров в статус. //Строчка человекопонятных параметров в статус.
$returnText = urldecode(http_build_query($resultText, '', ', ')); $returnText = urldecode(http_build_query($resultText, '', ', '));
$returnText = 'Характеристики Руны: ' . str_replace('=', ': +', $returnText) . '.'; $returnText = 'Характеристики Руны: ' . str_replace('=', ': +', $returnText) . '.';
return [$returnData, $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 class Tournament
{ {
const IS_ENABLED = true; const IS_ENABLED = true;
const SEND_CHAT_MESSAGE = 3; private const SEND_CHAT_MESSAGE = 3;
const START_TOURNAMENT = 5; private const START_TOURNAMENT = 5;
const PRIZE1 = 25; private const PRIZE1 = 25;
const PRIZE2 = 10; private const PRIZE2 = 10;
const PRIZE3 = 5; private const PRIZE3 = 5;
const MIN_EXP = 175000; const MIN_EXP = 175000;
const CHAT_MESSAGE = 'Âíèìàíèå! Òóðíèð äëÿ %d óðîâíÿ îòêðûò! Ïîñïåøèòå ïðèíÿòü ó÷àñòèå â Çàëå Âîèíîâ!'; private const CHAT_MESSAGE = 'Внимание! Турнир для %d уровня открыт! Поспешите принять участие в Зале Воинов!';
const VICTORY_MESSAGE = 'Òóðíèð äëÿ %d óðîâíåé çàâåðø¸í! Ïåðâîå ìåñòî: %s. Âòîðîå ìåñòî: %s. Òðåòüå ìåñòî: %s.'; private const VICTORY_MESSAGE = 'Турнир для %d уровней завершён! Первое место: %s. Второе место: %s. Третье место: %s.';
const DELAY1 = '+12hour'; private const DELAY1 = '+12hour';
const DELAY2 = '+6hour'; private const DELAY2 = '+6hour';
const DELAY3 = '+3hour'; private const DELAY3 = '+3hour';
/** Ôîðìóëà ðàññ÷¸òà ðàçðåø¸ííîé ñòîèìîñòè îäåòûõ ïðåäìåòîâ. /** Формула рассчёта разрешённой стоимости одетых предметов.
* *
* @param int $int * @param int $int
* *
* @return float|int * @return float|int
*/ */
public static function ekrOverpriceFormula($int) public static function ekrOverpriceFormula(int $int): int
{ {
return ($int - 7) * 151; return ($int - 7) * 151;
} }
/** /**
* Ïðîâåðÿåì ìîæåò ëè èãðîê ó÷àâñòâîâàòü â òóðíèðå è ëèáî ïðèñîåäèíÿåì åãî, ëèáî îáëàìûâàåì. * Проверяем может ли игрок учавствовать в турнире и либо присоединяем его, либо обламываем.
* *
* @param int $user_id * @param int $uid
* *
* @return void * @return void
*/ */
public function join($user_id) public function join(int $uid): void
{ {
/** Âîçâðàùàåò level, èëè 0 åñëè ïðîâàëåíû ïðîâåðêè. */ /** Возвращает level, или 0 если провалены проверки. */
$userLevel = TournamentModel::getUserLevel($user_id); $userLevel = TournamentModel::getUserLevel($uid);
if ( if (
$userLevel === 0 || $userLevel === 0 ||
TournamentModel::isEkrOverpriced($user_id, $userLevel) || TournamentModel::isEkrOverpriced($uid, $userLevel) ||
!TournamentModel::isEnoughExperience($user_id) || !TournamentModel::isEnoughExperience($uid) ||
TournamentModel::IsRestrictedToJoin($user_id) || TournamentModel::isRestrictedToJoin($uid) ||
TournamentModel::isStarted($user_id) TournamentModel::isStarted($uid)
) { ) {
return; return;
} }
@@ -54,7 +54,7 @@ class Tournament
TournamentModel::createTournament($userLevel); TournamentModel::createTournament($userLevel);
} }
TournamentModel::joinTournament($user_id, $userLevel); TournamentModel::joinTournament($uid, $userLevel);
$mq++; $mq++;
if ($mq == self::SEND_CHAT_MESSAGE) { if ($mq == self::SEND_CHAT_MESSAGE) {
@@ -67,37 +67,39 @@ class Tournament
} }
/** /**
* Ïðîâåðêà äëÿ êðîíà\êîíôèãà. Âûáèâàåò ïðîèãðàâøèõ è ïåðåçàïóñêàåò ïîåäèíêè âî âñåõ òóðíèðàõ. * Проверка для крона\конфига. Выбивает проигравших и перезапускает поединки во всех турнирах.
* @return void * @return void
*/ */
public function startAllBattles() public function startAllBattles(): void
{ {
$db = new Db(); $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()); TournamentModel::removeFighter(TournamentModel::getLooser());
$tournament_levels = $db::getColumn('select tid from tournaments where start_time = -1'); $tournamentLevels = $db::getColumn('select tid from tournaments where start_time = -1');
foreach ($tournament_levels as $level) { foreach ($tournamentLevels as $level) {
$alive_fighters = TournamentModel::getFreeFighters($level); $aliveFighters = TournamentModel::getFreeFighters($level);
if (count($alive_fighters) > 1) { if (count($aliveFighters) > 1) {
shuffle($alive_fighters); shuffle($aliveFighters);
$this->start_battle($alive_fighters); $this->startBattle($aliveFighters);
} elseif (count($alive_fighters) === 1) { } elseif (count($aliveFighters) === 1) {
TournamentModel::removeFighter($alive_fighters[0], true); TournamentModel::removeFighter($aliveFighters[0], true);
$this->victory($level); $this->victory($level);
} }
} }
} }
/** /**
* Ïîëó÷àåì ïàðû áîéöîâ è íà÷èíàåì èõ ïîåäèíêè. * Получаем пары бойцов и начинаем их поединки.
* *
* @param array $fighters_list * @param array $fightersList
* *
* @return void * @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) { foreach ($teams as $team) {
if (count($team) === 2) { if (count($team) === 2) {
TournamentModel::startBattle($team[0], $team[1]); TournamentModel::startBattle($team[0], $team[1]);
@@ -106,15 +108,15 @@ class Tournament
} }
/** /**
* Íàãðàæäàåì ïîáåäèòåëåé òóðíèðà, ÷èñòèì áàçó. * Награждаем победителей турнира, чистим базу.
* *
* @param int $tournament_id * @param int $tid
* *
* @return void * @return void
*/ */
private function victory($tournament_id) private function victory(int $tid): void
{ {
$winners = TournamentModel::getWinners($tournament_id); $winners = TournamentModel::getWinners($tid);
sleep(1); sleep(1);
TournamentModel::givePrizeItems($winners[1], self::PRIZE1); TournamentModel::givePrizeItems($winners[1], self::PRIZE1);
TournamentModel::givePrizeItems($winners[2], self::PRIZE2); TournamentModel::givePrizeItems($winners[2], self::PRIZE2);
@@ -124,12 +126,16 @@ class Tournament
TournamentModel::giveDelay($winners[2], strtotime(self::DELAY2)); TournamentModel::giveDelay($winners[2], strtotime(self::DELAY2));
TournamentModel::giveDelay($winners[3], strtotime(self::DELAY3)); TournamentModel::giveDelay($winners[3], strtotime(self::DELAY3));
sleep(1); sleep(1);
TournamentModel::sysMessage(sprintf(self::VICTORY_MESSAGE, TournamentModel::sysMessage(
$tournament_id, sprintf(
TournamentModel::uidToLogin($winners[1]), self::VICTORY_MESSAGE,
TournamentModel::uidToLogin($winners[2]), $tid,
TournamentModel::uidToLogin($winners[3]))); TournamentModel::uidToLogin($winners[1]),
TournamentModel::uidToLogin($winners[2]),
TournamentModel::uidToLogin($winners[3])
)
);
sleep(3); sleep(3);
TournamentModel::destroyTournament($tournament_id); TournamentModel::destroyTournament($tid);
} }
} }
@@ -6,14 +6,14 @@ class TournamentModel
{ {
/** /**
* ïðîâåðêà óðîâíÿ, ñòîèìîñòè ýêâèïà, ïðî÷èå ïðîâåðêè, ÷òî ïåðñîíàæ ñâîáîäåí * проверка уровня, стоимости эквипа, прочие проверки, что персонаж свободен
* òàéìåð îæèäàíèÿ 30 ìèíóò * таймер ожидания 30 минут
* *
* @param int $uid * @param int $uid
* *
* @return int * @return int
*/ */
public static function getUserLevel($uid) public static function getUserLevel(int $uid): int
{ {
$db = new Db(); $db = new Db();
$level = $db::getValue('select level from users where id = ? and level between 8 and 12 and battle = 0', [$uid]); $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 $uid
* @param int $level * @param int|null $level
* *
* @return bool * @return bool
*/ */
public static function isEkrOverpriced($uid, $level = null) public static function isEkrOverpriced(int $uid, ?int $level = null): bool
{ {
$db = new Db(); $db = new Db();
if (is_null($level)) { if (is_null($level)) {
@@ -41,7 +41,7 @@ class TournamentModel
* *
* @return bool * @return bool
*/ */
public static function isEnoughExperience($uid) public static function isEnoughExperience(int $uid): bool
{ {
$db = new Db(); $db = new Db();
return $db::getValue('select exp from stats where id = ?', [$uid]) >= Tournament::MIN_EXP; return $db::getValue('select exp from stats where id = ?', [$uid]) >= Tournament::MIN_EXP;
@@ -52,130 +52,128 @@ class TournamentModel
* *
* @return bool * @return bool
*/ */
public static function IsRestrictedToJoin($uid) public static function isRestrictedToJoin(int $uid): bool
{ {
$db = new Db(); $db = new Db();
$delayEffect = $db::getValue('select count(*) from eff_users where uid = ? and id_eff = 486 and `delete` = 0', [$uid]); return $db::getValue('select count(*) from eff_users where uid = ? and id_eff = 486 and `delete` = 0', [$uid]);
return (bool)$delayEffect;
} }
/** /**
* @param $tid * @param int $tid
* *
* @return bool * @return bool
*/ */
public static function isStarted($tid) public static function isStarted(int $tid): bool
{ {
$db = new Db(); $db = new Db();
$status = $db::getValue('select count(*) from tournaments where start_time = -1 and tid = ?', [$tid]); return $db::getValue('select count(*) from tournaments where start_time = -1 and tid = ?', [$tid]);
return (bool)$status;
} }
/** /**
* Ñ÷èòàåì ñêîëüêî èãðîêîâ æäóò â çàÿâêå íà òóðíèð. * Считаем сколько игроков ждут в заявке на турнир.
* *
* @param int $tid * @param int $tid
* *
* @return int * @return int
*/ */
public static function getWaitingMembersQuantity($tid) public static function getWaitingMembersQuantity(int $tid): int
{ {
$db = new Db(); $db = new Db();
return $db::getValue('select count(*) from tournaments_users where tid = ?', [$tid]); return $db::getValue('select count(*) from tournaments_users where tid = ?', [$tid]);
} }
/** /**
* Ñîçäàíèå íîâîãî òóðíèðà. * Создание нового турнира.
* *
* @param int $tid * @param int $tid
* *
* @return void * @return void
*/ */
public static function createTournament($tid) public static function createTournament(int $tid): void
{ {
$db = new Db(); $db = new Db();
$db::sql('insert into tournaments (tid) values (?)', [$tid]); $db::sql('insert into tournaments (tid) values (?)', [$tid]);
} }
/** /**
* Èãðîê ïðèñîåäèíÿåòñÿ ê òóðíèðó è òåëåïîðòèðóåòñÿ â òóðíèðíóþ êîìíàòó. * Игрок присоединяется к турниру и телепортируется в турнирную комнату.
* *
* @param int $uid * @param int $uid
* @param int $tid * @param int $tid
* *
* @return void * @return void
*/ */
public static function joinTournament($uid, $tid) public static function joinTournament(int $uid, int $tid): void
{ {
/** Êàñòîìíûå êîìíàòû 25008 - 25012. */ /** Кастомные комнаты 25008 - 25012. */
$room_id = 25000 + $tid; $roomId = 25000 + $tid;
$db = new Db(); $db = new Db();
$db::sql('insert into tournaments_users (tid, uid) values (?, ?)', [$tid, $uid]); $db::sql('insert into tournaments_users (tid, uid) values (?, ?)', [$tid, $uid]);
self::teleport($uid, $room_id); self::teleport($uid, $roomId);
} }
/** /**
* Ñòàðò òóðíèðà. * Старт турнира.
* *
* @param int $tid * @param int $tid
* *
* @return void * @return void
*/ */
public static function startTournament($tid) public static function startTournament(int $tid): void
{ {
$db = new Db(); $db = new Db();
$db::sql('update tournaments set start_time = -1 where tid = ?', [$tid]); $db::sql('update tournaments set start_time = -1 where tid = ?', [$tid]);
} }
/** /**
* ×èñòèì áàçû îò ïðîøåäøåãî òóðíèðà. * Чистим базы от прошедшего турнира.
* *
* @param int $tid * @param int $tid
* *
* @return void * @return void
*/ */
public static function destroyTournament($tid) public static function destroyTournament(int $tid): void
{ {
$db = new Db(); $db = new Db();
//Óáåäèòüñÿ ÷òî â áàçå íàñòðîåí foreign_keys è ïîñëåäóåò àâòîî÷èñòêà tournaments_users !!! //Убедиться что в базе настроен foreign_keys и последует автоочистка tournaments_users !!!
$db::sql('delete from tournaments where tid = ?', [$tid]); $db::sql('delete from tournaments where tid = ?', [$tid]);
} }
/** /**
* Ïîëó÷àåì ñïèñîê áîéöîâ è áü¸ì èõ íà ïàðû. Âîçâðàùàåì ñïèñêè ïàð + 1 ïîñëåäíèé áåç ïàðû åñëè åñòü. * Получаем список бойцов и бьём их на пары. Возвращаем списки пар + 1 последний без пары если есть.
* *
* @param array $fighters_list * @param array $fightersList
* *
* @return array * @return array
*/ */
public static function getFightersTeams(array $fighters_list) public static function getFightersTeams(array $fightersList): array
{ {
$db = new Db(); $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); return array_chunk($db::getColumn($query), 2);
} }
/** /**
* Âûáèðàåì æèâûõ áîéöîâ íå ñðàæàþùèõñÿ â äàííûé ìîìåíò. * Выбираем живых бойцов не сражающихся в данный момент.
* *
* @param int $tid * @param int $tid
* *
* @return array * @return array
*/ */
public static function getFreeFighters($tid) public static function getFreeFighters(int $tid): array
{ {
$db = new Db(); $db = new Db();
return $db::getColumn('select uid from tournaments_users where tid = ? and death_time = 0 order by uid', [$tid]); return $db::getColumn('select uid from tournaments_users where tid = ? and death_time = 0 order by uid', [$tid]);
} }
/** /**
* Âûáèðàåì ïîáåäèòåëåé. Ñìåùàåì ìàññèâ, ÷òîáû âîçâðàò ø¸ë ñ åäèíèöû. * Выбираем победителей. Смещаем массив, чтобы возврат шёл с единицы.
* *
* @param int $tid * @param int $tid
* *
* @return array * @return array
*/ */
public static function getWinners($tid) public static function getWinners(int $tid): array
{ {
$db = new Db(); $db = new Db();
$winners = $db::getColumn('select uid from tournaments_users where tid = ? order by death_time desc limit 3', [$tid]); $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 * @return mixed
*/ */
public static function getLooser() public static function getLooser()
{ {
$query = ' $query = '
select uid, battle select uid, battle
from from
battle_users, battle_users,
(select id, team_win (select id, team_win
from battle from battle
where where
team_win > 0 and team_win > 0 and
typeBattle = 25000 typeBattle = 25000
order by time_over desc order by time_over desc
limit 1) as last_battle limit 1) as last_battle
where where
battle_users.battle = last_battle.id and battle_users.battle = last_battle.id and
battle_users.team != last_battle.team_win and battle_users.team != last_battle.team_win and
battle_users.uid in (select uid from tournaments_users where death_time = 0)'; 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'; where typeBattle = 25000 and death_time = 0 order by b.time_start desc limit 1';
$db = new Db; $db = new Db;
$row = $db::getRow($query); $row = $db::getRow($query);
return $row['uid']; return $row['uid'] ?? 0;
} }
/** /**
* Âûáûâøèé èç òóðíèðà ïîêèäàåò êîìíàòó è ïîëó÷àåò âðåìÿ ñìåðòè. * Выбывший из турнира покидает комнату и получает время смерти.
*
* @param int $uid
* *
* @param int $uid
* @param bool $winner
* @return void * @return void
*/ */
public static function removeFighter($uid, $winner = false) public static function removeFighter(int $uid, bool $winner = false): void
{ {
if (!$uid) return; if (!$uid) {
//$winner_timer_add = $winner? 500 : 0; # Ïîñëåäíûé ÄÎËÆÅÍ áûòü ïîñëåäíèì. return;
}
//$winner_timer_add = $winner? 500 : 0; # Последный ДОЛЖЕН быть последним.
$db = new Db(); $db = new Db();
$db::sql('update tournaments_users set death_time = unix_timestamp() + 500 where death_time = 0 and uid = ?', [$uid]); $db::sql('update tournaments_users set death_time = unix_timestamp() + 500 where death_time = 0 and uid = ?', [$uid]);
self::teleport($uid, 9); self::teleport($uid, 9);
//fixme: Êëàññû íå ïîäêëþ÷àþòñÿ äðóã ê äðóãó. Íóæíî ìåíÿòü àðõèòåêòóðó èãðû. :( //fixme: Классы не подключаются друг к другу. Нужно менять архитектуру игры. :(
Db::sql("update users_achiv set trn = trn + 1 where id = ?", [$uid]); Db::sql("update users_achiv set trn = trn + 1 where id = ?", [$uid]);
//(new Achievements(\user::start()))->updateCounter('trn'); //(new Achievements(\user::start()))->updateCounter('trn');
} }
/** /**
* Óçíà¸ì id òóðíèðà ïî id èãðîêà. * Узнаём id турнира по id игрока.
* *
* @param int $uid * @param int $uid
* *
* @return mixed * @return mixed
*/ */
public static function getTournamentIdByUserId($uid) public static function getTournamentIdByUserId(int $uid)
{ {
$db = new Db(); $db = new Db();
return $db::getValue('select tid from tournaments_users where uid = ?', [$uid]); return $db::getValue('select tid from tournaments_users where uid = ?', [$uid]);
} }
/** /**
* Ïîïðîáóåì ñòàðòîíóòü ïîåäèíîê. * Попробуем стартонуть поединок.
* 25000 - Óíèêàëüíûé id ïîåäèíêà ïîä òóðíèðû. * 25000 - Уникальный id поединка под турниры.
* noinc - çàïðåò íà âìåøàòåëüñòâî * noinc - запрет на вмешательство
* invis - íåâèäèìûé áîé * invis - невидимый бой
* *
* @param int $uid1 * @param int $uid1
* @param int $uid2 * @param int $uid2
* *
* @return void * @return void
*/ */
public static function startBattle($uid1, $uid2) public static function startBattle(int $uid1, int $uid2): void
{ {
$db = new Db(); $db = new Db();
$check = Db::getValue('select count(*) from users where id in (?, ?) and battle = 0', [$uid1, $uid2]); $check = Db::getValue('select count(*) from users where id in (?, ?) and battle = 0', [$uid1, $uid2]);
if ((int)$check !== 2) { if ($check !== 2) {
return; 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)'); 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 = 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 stats set team = 2, hpNow = hpAll, mpNow = mpAll where id = ?', [$uid2]);
$db::sql('update users set battle = ? where id in (?, ?)', [$bid, $uid1, $uid2]); $db::sql('update users set battle = ? where id in (?, ?)', [$bid, $uid1, $uid2]);
} }
/** /**
* Óçíà¸ì ëîãèí ïåðñîíàæà ïî åãî id. * Узнаём логин персонажа по его id.
* *
* @param int $uid * @param int $uid
* *
* @return mixed * @return mixed
*/ */
public static function uidToLogin($uid) public static function uidToLogin(int $uid)
{ {
$db = new Db(); $db = new Db();
return $db::getValue('select login from users where id = ?', [$uid]); return $db::getValue('select login from users where id = ?', [$uid]);
} }
/** /**
* Òåëåïîðò ïî êîìíàòàì. * Телепорт по комнатам.
* *
* @param int $uid * @param int $uid
* @param int $room_id * @param int $roomId
* *
* @return void * @return void
*/ */
private static function teleport($uid, $room_id) private static function teleport(int $uid, int $roomId): void
{ {
$db = new Db(); $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 * @param string $message
* *
* @return void * @return void
*/ */
public static function sysMessage($message) public static function sysMessage(string $message): void
{ {
if (!empty($message)) { if (!empty($message)) {
$db = new Db(); $db = new Db();
@@ -320,16 +320,16 @@ class TournamentModel
} }
/** /**
* Ãåíåðèðóåò ìíîæåñòâåííûé çàïðîñ ñðàçó íà $quantity îäíîòèïíûõ ïðåäìåòîâ â èíâåíòàðü ïîëüçîâàòåëÿ $uid. * Генерирует множественный запрос сразу на $quantity однотипных предметов в инвентарь пользователя $uid.
* *
* @param int $uid * @param int $uid
* @param int $quantity * @param int $quantity
* *
* @return void * @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())'; values (4754, :uid, :data, 1, unix_timestamp(), unix_timestamp())';
$args = [ $args = [
'uid' => $uid, 'uid' => $uid,
@@ -342,17 +342,17 @@ class TournamentModel
} }
} }
/** Ýôôåêò-îãðàíè÷èòåëü íà ó÷àñòèå â òóðíèðå. /** Эффект-ограничитель на участие в турнире.
* @param $uid * @param int $uid
* @param $unix_time * @param int $unixtime
* *
* @return void * @return void
*/ */
public static function giveDelay($uid, $unix_time) public static function giveDelay(int $uid, int $unixtime): void
{ {
$db = new Db(); $db = new Db();
$query = 'insert into eff_users (id_eff, uid, name, timeUse) VALUES (?,?,?,?)'; $query = 'insert into eff_users (id_eff, uid, name, timeUse) VALUES (?,?,?,?)';
$args = [486, $uid, 'Ïðèç¸ð ãîðîäñêîãî òóðíèðà!', $unix_time]; $args = [486, $uid, 'Призёр городского турнира!', $unixtime];
$db::sql($query, $args); $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'], 'cityreg' => $u->info['cityreg'],
'name' => $u->info['name'], 'name' => $u->info['name'],
'sex' => $u->info['sex'], 'sex' => $u->info['sex'],
'deviz' => $u->info['deviz'],
'hobby' => $u->info['hobby'], 'hobby' => $u->info['hobby'],
'time_reg' => $u->info['time_reg'], 'time_reg' => $u->info['time_reg'],
'obraz' => $u->info['obraz'], 'obraz' => $u->info['obraz'],
@@ -1604,7 +1603,7 @@ class Magic
private static function getDressedEkrTotalPrice($uid) 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) 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; private $free_x = 28;
/* Проверка доступности квеста */ /* Проверка доступности квеста */
public function testGood($pl) public function testGood($pl)
{ {
global $u; global $u;
@@ -17,12 +17,12 @@ class Quests
$d1 = 0; $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')); $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]; $pl1 = $pl1[0];
//Если уже более 5 квестов взяли //Если уже более 5 квестов взяли
if ($d1 >= $this->free_x) { if ($d1 >= $this->free_x) {
$r = 0; $r = 0;
} }
unset($d1, $pl1, $sp1); 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')); $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') { if (isset($qlst['id']) && $qlst['vals'] != 'win' && $qlst['vals'] != 'end' && $qlst['vals'] != 'bad') {
$r = 0; $r = 0;
@@ -30,7 +30,7 @@ class Quests
unset($qlst, $qlst2); unset($qlst, $qlst2);
$d = $this->expl($pl['tr_date']); $d = $this->expl($pl['tr_date']);
//Завершить квесты [ 1,2,3,4,5 ... //Завершить квесты [ 1,2,3,4,5 ...
if (isset($d['tr_endq'])) { if (isset($d['tr_endq'])) {
$i = 0; $i = 0;
$e = explode(',', $d['tr_endq']); $e = explode(',', $d['tr_endq']);
@@ -43,7 +43,7 @@ class Quests
} }
unset($qn, $qlst, $qlst2); unset($qn, $qlst, $qlst2);
} }
//Задержка между выполнением квеста //Задержка между выполнением квеста
if (isset($d['tr_zdr'])) { 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')); $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) { if ($qlst['time'] + ($d['tr_zdr'] * 60 * 60) - time() > 0) {
@@ -51,7 +51,7 @@ class Quests
} }
unset($qlst); unset($qlst);
} }
//Переодичность квеста //Переодичность квеста
if (isset($d['tr_tm1'])) { if (isset($d['tr_tm1'])) {
$d['tr_tm1'] = str_replace('d', date('d'), $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']); $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('d', date('d'), $d['tr_tm2']);
$d['tr_tm2'] = str_replace('m', date('m'), $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']); $d['tr_tm2'] = str_replace('y', date('y'), $d['tr_tm2']);
//проверка интервалов //проверка интервалов
} }
//Сколько раз можно пройти квест //Сколько раз можно пройти квест
if (isset($d['tr_raz'])) { 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); $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) { if ($d['tr_raz'] > 0 && $d['tr_raz'] - $qlst[0] <= 0) {
@@ -69,7 +69,7 @@ class Quests
} }
unset($qlst); unset($qlst);
} }
//Попыток пройти квест //Попыток пройти квест
if (isset($d['tr_raz2'])) { 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); $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) { if ($d['tr_raz2'] - $qlst[0] <= 0) {
@@ -81,7 +81,7 @@ class Quests
} }
public function onlyOnceQuest($quests, $uid) public function onlyOnceQuest($quests, $uid)
{ // Отсеиваем одноразовые квесты { // Отсеиваем одноразовые квесты
$result = []; $result = [];
$rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $uid)); $rep = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $uid));
foreach ($quests as $quest) { foreach ($quests as $quest) {
@@ -117,20 +117,20 @@ class Quests
return $result; return $result;
} }
/* Взять квест */ /* Взять квест */
public function startq($id, $val = null) public function startq($id, $val = null)
{ {
global $c, $u; 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')); $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'])) { if (isset($pl['id'])) {
$u->addAction(time(), 'start_quest' . $pl['id'], 'go', null, $val); $u->addAction(time(), 'start_quest' . $pl['id'], 'go', null, $val);
$u->error = 'Вы успешно получили задание &quot;' . $pl['name'] . '&quot;'; $u->error = 'Вы успешно получили задание &quot;' . $pl['name'] . '&quot;';
} else { } else {
$u->error = 'Не удалось получить данное задание'; $u->error = 'Не удалось получить данное задание';
} }
} }
/* Взять квест в пещере */ /* Взять квест в пещере */
public function startq_dn($id, $val = null) public function startq_dn($id, $val = null)
{ {
global $c, $u; global $c, $u;
@@ -140,13 +140,13 @@ class Quests
$u->addAction(time(), 'start_quest' . $pl['id'], 'go'); $u->addAction(time(), 'start_quest' . $pl['id'], 'go');
else else
$u->addAction(time(), 'start_quest' . $pl['id'], 'go', $u->info['id'], $val); $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 { } else {
$u->error = 'Не удалось получить данное задание'; $u->error = 'Не удалось получить данное задание';
} }
} }
/* Отказаться от квеста */ /* Отказаться от квеста */
public function endq($id, $tp) public function endq($id, $tp)
{ {
global $u; global $u;
@@ -155,28 +155,28 @@ class Quests
if (isset($qlst['id'])) { if (isset($qlst['id'])) {
if ($tp == 'end') { if ($tp == 'end') {
mysql_query('UPDATE `actions` SET `vals` = "end" WHERE `id` = "' . $qlst['id'] . '" LIMIT 1'); 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') { } elseif ($tp == 'win') {
mysql_query('UPDATE `actions` SET `vals` = "win" ,`time` = "' . time() . '" WHERE `id` = "' . $qlst['id'] . '" LIMIT 1'); mysql_query('UPDATE `actions` SET `vals` = "win" ,`time` = "' . time() . '" WHERE `id` = "' . $qlst['id'] . '" LIMIT 1');
} }
} else { } else {
$u->error = 'Не удалось отказаться от задания '; $u->error = 'Не удалось отказаться от задания ';
} }
} }
/* Инфо о квесте в пещерах */ /* Инфо о квесте в пещерах */
public function infoDng($pl) public function infoDng($pl)
{ {
global $u; global $u;
$r = 0; $r = 0;
$xrz = 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')); $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['tr_date']);
//Действия квеста //Действия квеста
$d = $this->expl($pl['act_date']); $d = $this->expl($pl['act_date']);
//Поговорить с NPS //Поговорить с NPS
if (isset($d['dlg_nps'])) { if (isset($d['dlg_nps'])) {
$i7 = 0; $i7 = 0;
$x3 = explode(',', $d['dlg_nps']); $x3 = explode(',', $d['dlg_nps']);
@@ -190,12 +190,12 @@ class Quests
unset($x1, $x3, $x4, $i7); unset($x1, $x3, $x4, $i7);
} }
//Убить игроков //Убить игроков
if (isset($d['kill_user'])) { if (isset($d['kill_user'])) {
$r += $d['kill_user']; $r += $d['kill_user'];
} }
//Убить ботов //Убить ботов
if (isset($d['kill_bot'])) { if (isset($d['kill_bot'])) {
$x = ''; $x = '';
$ex = explode(',', $d['kill_bot']); $ex = explode(',', $d['kill_bot']);
@@ -221,7 +221,7 @@ class Quests
unset($x, $ex, $x2, $bot2, $ex2); unset($x, $ex, $x2, $bot2, $ex2);
} }
//Собрать ресурсы //Собрать ресурсы
if (isset($d['tk_itm'])) { if (isset($d['tk_itm'])) {
$ex = explode(',', $d['tk_itm']); $ex = explode(',', $d['tk_itm']);
$i = 0; $i = 0;
@@ -237,7 +237,7 @@ class Quests
} }
} }
//Собрать трофеи //Собрать трофеи
if (isset($d['tkill_itm'])) { if (isset($d['tkill_itm'])) {
$ex = explode(',', $d['tkill_itm']); $ex = explode(',', $d['tkill_itm']);
$i = 0; $i = 0;
@@ -263,27 +263,27 @@ class Quests
$xrz = $r; $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"> $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 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 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 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>'; </div></td></tr></table><br><script>top.startHpRegen("main",-1234500000' . $pl['id'] . ',' . $xrz . ',' . $r . ',0,0,0,0,0,0,1);</script>';
} }
return $r; return $r;
} }
/* Информация о квесте */ /* Информация о квесте */
public function info($pl) public function info($pl)
{ {
global $u; global $u;
$r = ''; $r = '';
$t = ''; $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')); $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['tr_date']);
//Завершить квесты [ 1,2,3,4,5 ... //Завершить квесты [ 1,2,3,4,5 ...
if (isset($d['tr_endq'])) { if (isset($d['tr_endq'])) {
$t .= 'Завершить квесты: '; $t .= 'Завершить квесты: ';
$i = 0; $i = 0;
$e = explode(',', $d['tr_endq']); $e = explode(',', $d['tr_endq']);
while ($i <= count($e)) { while ($i <= count($e)) {
@@ -299,26 +299,26 @@ class Quests
$t .= '<br>'; $t .= '<br>';
unset($qn); unset($qn);
} }
//Из ботов падают предметы [ idbot-itm1=%,itm2=%| //Из ботов падают предметы [ idbot-itm1=%,itm2=%|
if (isset($d['tr_botitm'])) { if (isset($d['tr_botitm'])) {
$t .= 'Из ботов выпадают предметы:<ul>'; $t .= 'Из ботов выпадают предметы:<ul>';
$e = explode('|', $d['tr_botitm']); $e = explode('|', $d['tr_botitm']);
$i = 0; $i = 0;
while ($i < count($e)) { while ($i < count($e)) {
$j = 0; $j = 0;
$e2 = explode('-', $e[$i]); $e2 = explode('-', $e[$i]);
//$e2[0] - id бота //$e2[0] - id бота
if ($e2[0] > 0) { if ($e2[0] > 0) {
$qn = mysql_fetch_array(mysql_query('SELECT `login` FROM `test_bot` WHERE `id` = "' . $e2[0] . '" LIMIT 1')); $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 { } else {
$t .= '&nbsp; &nbsp; &bull; Из любых ботов выпадает: '; $t .= '&nbsp; &nbsp; &bull; Из любых ботов выпадает: ';
} }
//$e2[1] - предметы //$e2[1] - предметы
$e3 = explode(',', $e2[1]); $e3 = explode(',', $e2[1]);
while ($j < count($e3)) { while ($j < count($e3)) {
$e4 = explode('=', $e3[$j]); $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')); $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>, '; $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++; $j++;
@@ -329,26 +329,26 @@ class Quests
$t .= '<br>'; $t .= '<br>';
unset($qn, $qi, $e2, $e3, $e4); unset($qn, $qi, $e2, $e3, $e4);
} }
//При выйгрыше падают предметы [ type-itm1=%,itm2=%| //При выйгрыше падают предметы [ type-itm1=%,itm2=%|
if (isset($d['tr_winitm'])) { if (isset($d['tr_winitm'])) {
$t .= 'После победы выпадают предметы:<br>'; $t .= 'После победы выпадают предметы:<br>';
$e = explode('|', $d['tr_winitm']); $e = explode('|', $d['tr_winitm']);
$i = 0; $i = 0;
while ($i < count($e)) { while ($i < count($e)) {
$e2 = explode('-', $e[$i]); $e2 = explode('-', $e[$i]);
$t .= '&nbsp; &nbsp; &bull; '; $t .= '&nbsp; &nbsp; &bull; ';
//$e2[0] - id бота //$e2[0] - id бота
if ($e2[0] > 0) { if ($e2[0] > 0) {
$t .= 'Из людей выпадает: '; $t .= 'Из людей выпадает: ';
} else { } else {
$t .= 'Из ботов выпадает: '; $t .= 'Из ботов выпадает: ';
} }
//$e2[1] - предметы //$e2[1] - предметы
$j = 0; $j = 0;
$e3 = explode(',', $e2[1]); $e3 = explode(',', $e2[1]);
while ($j < count($e3)) { while ($j < count($e3)) {
$e4 = explode('=', $e3[$j]); $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')); $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>, '; $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++; $j++;
@@ -359,17 +359,17 @@ class Quests
} }
unset($qn, $qi, $e2, $e3, $e4); unset($qn, $qi, $e2, $e3, $e4);
} }
//Задержка между выполнением квеста //Задержка между выполнением квеста
if (isset($d['tr_zdr'])) { 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')); $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) { 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>'; $t .= '<br>';
unset($qlst); unset($qlst);
} }
//Переодичность квеста //Переодичность квеста
if (isset($d['tr_tm1'])) { if (isset($d['tr_tm1'])) {
$d['tr_tm1'] = str_replace('d', date('d'), $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']); $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('m', date('m'), $d['tr_tm2']);
$d['tr_tm2'] = str_replace('y', date('y'), $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 (isset($d['tr_raz'])) {
if ($d['tr_raz'] == -1) { if ($d['tr_raz'] == -1) {
$t .= 'Сколько еще раз можно выполнить задание: <b><small>бесконечно</small></b><br>'; $t .= 'Сколько еще раз можно выполнить задание: <b><small>бесконечно</small></b><br>';
} else { } else {
$qlst = $u->testAction('SELECT `id` FROM `actions` WHERE `uid` = "' . $u->info['id'] . '" AND `vars` = "start_quest' . $pl['id'] . '" LIMIT ' . $d['tr_raz'], 2); $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); unset($qlst);
} }
//Попыток пройти квест //Попыток пройти квест
if (isset($d['tr_raz2'])) { 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); $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); unset($qlst);
} }
if ($t != '') { if ($t != '') {
$r .= '<b>Условия задания:</b><br>' . $t . '<br>'; $r .= '<b>Условия задания:</b><br>' . $t . '<br>';
$t = ''; $t = '';
} }
//Награда за квест //Награда за квест
$d = $this->expl($pl['win_date']); $d = $this->expl($pl['win_date']);
if (isset($d['add_eff'])) { 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')); $x6 = mysql_fetch_array(mysql_query('SELECT `id2`,`mname`,`img` FROM `eff_main` WHERE `id2` = "' . $x7[0] . '" LIMIT 1'));
if (isset($x6['id2'])) { if (isset($x6['id2'])) {
$x5 .= '<img width="40" height="25" src="https://img.new-combats.com/i/eff/' . $x6['img'] . '" title="' . $x6['mname'] . ' $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++; $x4++;
} }
@@ -426,25 +426,25 @@ class Quests
} }
if (isset($d['add_rep'])) { 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'])) { if (isset($d['add_repizlom'])) {
$t .= 'Репутация Излом Хаоса: ' . $d['add_repizlom'] . '<br>'; $t .= 'Репутация Излом Хаоса: ' . $d['add_repizlom'] . '<br>';
} }
if (isset($d['add_cr'])) { if (isset($d['add_cr'])) {
$t .= 'Деньги: ' . $d['add_cr'] . ' кр.<br>'; $t .= 'Деньги: ' . $d['add_cr'] . ' кр.<br>';
} }
if ($t != '') { if ($t != '') {
$r = '<b>Награда:</b><br>' . $t . '<br>' . $r; $r = '<b>Награда:</b><br>' . $t . '<br>' . $r;
$t = ''; $t = '';
} }
//Действия квеста //Действия квеста
$d = $this->expl($pl['act_date']); $d = $this->expl($pl['act_date']);
//Поговорить с NPS //Поговорить с NPS
if (isset($d['dlg_nps'])) { if (isset($d['dlg_nps'])) {
$i7 = 0; $i7 = 0;
$x3 = explode(',', $d['dlg_nps']); $x3 = explode(',', $d['dlg_nps']);
@@ -453,30 +453,30 @@ class Quests
if ($x4[0] > 0) { if ($x4[0] > 0) {
$x1 = mysql_fetch_array(mysql_query('SELECT `text` FROM `dungeon_dialog` WHERE `id` = "' . $x4[0] . '" LIMIT 1')); $x1 = mysql_fetch_array(mysql_query('SELECT `text` FROM `dungeon_dialog` WHERE `id` = "' . $x4[0] . '" LIMIT 1'));
if (!isset($x1['text'])) { if (!isset($x1['text'])) {
$x1 = '<i>незивестно</i>'; $x1 = '<i>незивестно</i>';
} else { } else {
$x1 = $x1['text']; $x1 = $x1['text'];
} }
$x = 0; $x = 0;
$t .= 'Поговорить с <b>' . $x1 . '</b>: ' . $x . '/1<br>'; $t .= 'Поговорить с <b>' . $x1 . '</b>: ' . $x . '/1<br>';
} }
$i7++; $i7++;
} }
unset($x1, $x3, $x4, $i7); unset($x1, $x3, $x4, $i7);
} }
//Убить игроков //Убить игроков
if (isset($d['kill_user'])) { 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['kill_bot'])) {
if (isset($d['all_kill']) && (int)$d['all_kill'] > 0) { if (isset($d['all_kill']) && (int)$d['all_kill'] > 0) {
$x = ''; $x = '';
$ex = explode(',', $d['kill_bot']); $ex = explode(',', $d['kill_bot']);
$i = 0; # Количество циклов для каждого типа бота. $i = 0; # Количество циклов для каждого типа бота.
$q = ''; $q = '';
while ($i < count($ex)) { while ($i < count($ex)) {
$ex2 = explode('=', $ex[$i]); $ex2 = explode('=', $ex[$i]);
@@ -516,12 +516,12 @@ class Quests
if ($x != '') { if ($x != '') {
$x = trim($x, ', '); $x = trim($x, ', ');
$t .= 'Убить ботов: <br>' . $x; $t .= 'Убить ботов: <br>' . $x;
} }
unset($x, $ex, $x2, $bot2, $ex2); unset($x, $ex, $x2, $bot2, $ex2);
} }
//Собрать ресурсы //Собрать ресурсы
if (isset($d['tk_itm'])) { if (isset($d['tk_itm'])) {
$ex = explode(',', $d['tk_itm']); $ex = explode(',', $d['tk_itm']);
$i = 0; $i = 0;
@@ -538,11 +538,11 @@ class Quests
} }
if ($x != '') { if ($x != '') {
$x = trim($x, ', '); $x = trim($x, ', ');
$t .= 'Собрать ресурсы: <br>' . $x; $t .= 'Собрать ресурсы: <br>' . $x;
} }
} }
//Собирание трофеев //Собирание трофеев
if (isset($d['tkill_itm'])) { if (isset($d['tkill_itm'])) {
$ex = explode(',', $d['tkill_itm']); $ex = explode(',', $d['tkill_itm']);
$i = 0; $i = 0;
@@ -559,17 +559,17 @@ class Quests
} }
if ($x != '') { if ($x != '') {
$x = trim($x, ', '); $x = trim($x, ', ');
$t .= 'Собрать трофеи: <br>' . $x; $t .= 'Собрать трофеи: <br>' . $x;
} }
} }
if ($t != '') { if ($t != '') {
$r = '<br><b>Действия задания:</b><br>' . $t . '<br>' . $r; $r = '<br><b>Действия задания:</b><br>' . $t . '<br>' . $r;
$t = ''; $t = '';
} }
if ($r == '') { if ($r == '') {
$r = 'Дополнительная информация по заданию отсутствует'; $r = 'Дополнительная информация по заданию отсутствует';
} }
return $r; return $r;
} }
@@ -577,35 +577,35 @@ class Quests
public function testquest() public function testquest()
{ {
global $u; 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'); $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)) { 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')); $pl = mysql_fetch_array(mysql_query('SELECT * FROM `quests` WHERE `id` = "' . (str_replace('start_quest', '', $pl2['vars'])) . '" LIMIT 1'));
$g = 1; $g = 1;
//Действия квеста //Действия квеста
$d = $this->expl($pl['act_date']); $d = $this->expl($pl['act_date']);
//Поговорить с NPS //Поговорить с NPS
if (isset($d['dlg_nps'])) { if (isset($d['dlg_nps'])) {
$g = 0; $g = 0;
unset($x); unset($x);
} }
//Убить игроков //Убить игроков
if (isset($d['kill_user'])) { if (isset($d['kill_user'])) {
$x = 0; $x = 0;
if ($x < $d['kill_user']) { if ($x < $d['kill_user']) {
$g = 0; $g = 0;
} }
//$d['kill_user'] - стольких нужно убить //$d['kill_user'] - стольких нужно убить
unset($x); unset($x);
} }
//Убить ботов //Убить ботов
if (isset($d['kill_bot'])) { if (isset($d['kill_bot'])) {
$ex = explode(',', $d['kill_bot']); $ex = explode(',', $d['kill_bot']);
$ii = 0; // Количество циклов для каждого типа бота. $ii = 0; // Количество циклов для каждого типа бота.
$q = ''; $q = '';
while ($ii < count($ex)) { while ($ii < count($ex)) {
$ex2 = explode('=', $ex[$ii]); $ex2 = explode('=', $ex[$ii]);
@@ -629,11 +629,11 @@ class Quests
unset($x, $ex, $x2, $x3, $bot2, $ex2); unset($x, $ex, $x2, $x3, $bot2, $ex2);
} }
//Собрать ресурсы //Собрать ресурсы
if (isset($d['tk_itm'])) { if (isset($d['tk_itm'])) {
$g = $this->collect_01(explode(',', $d['tk_itm']), $u); $g = $this->collect_01(explode(',', $d['tk_itm']), $u);
} }
//Собирание трофеев //Собирание трофеев
if (isset($d['tkill_itm'])) { if (isset($d['tkill_itm'])) {
$g = $this->collect_01(explode(',', $d['tkill_itm']), $u); $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; $i = 0;
while ($i < count($arr)) { while ($i < count($arr)) {
$ex2 = explode('=', $arr[$i]); $ex2 = explode('=', $arr[$i]);
@@ -660,7 +660,7 @@ class Quests
return 1; return 1;
} }
private function collect_02($ex, $u, $pl) { // убираю дублирование. хер пойми что проверяем, хз как назвать. private function collect_02($ex, $u, $pl) { // убираю дублирование. хер пойми что проверяем, хз как назвать.
$i = 0; $i = 0;
while ($i < count($ex)) { while ($i < count($ex)) {
$ex2 = explode('=', $ex[$i]); $ex2 = explode('=', $ex[$i]);
@@ -680,25 +680,25 @@ class Quests
return 1; return 1;
} }
# Функция отвечает за ПРОВЕРКУ на ЗАВЕРШЕНИЕ квестов для ПОДЗЕМОК # Функция отвечает за ПРОВЕРКУ на ЗАВЕРШЕНИЕ квестов для ПОДЗЕМОК
public function questCheckEnd($pl) public function questCheckEnd($pl)
{ {
global $u; 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')); $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; $r = 0;
if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') { if ($u->info['battle'] == 0 && $u->room['name'] != 'Башня Смерти') {
$g = 1; $g = 1;
# Действия квеста # Действия квеста
$d = $this->expl($pl['act_date']); $d = $this->expl($pl['act_date']);
# Поговорить с NPS # Поговорить с NPS
if (isset($d['dlg_nps'])) { if (isset($d['dlg_nps'])) {
$g = 0; $g = 0;
unset($x); unset($x);
} }
# Убить игроков # Убить игроков
if (isset($d['kill_user'])) { if (isset($d['kill_user'])) {
$x = 0; $x = 0;
if ($x < $d['kill_user']) { if ($x < $d['kill_user']) {
@@ -707,10 +707,10 @@ class Quests
unset($x); unset($x);
} }
# Убить ботов # Убить ботов
if (isset($d['kill_bot'])) { if (isset($d['kill_bot'])) {
$ex = explode(',', $d['kill_bot']); $ex = explode(',', $d['kill_bot']);
$i = 0; # Количество циклов для каждого типа бота. $i = 0; # Количество циклов для каждого типа бота.
$q = ''; $q = '';
while ($i < count($ex)) { while ($i < count($ex)) {
$ex2 = explode('=', $ex[$i]); $ex2 = explode('=', $ex[$i]);
@@ -740,11 +740,11 @@ class Quests
unset($x, $ex, $x2, $x3, $bot2, $ex2); unset($x, $ex, $x2, $x3, $bot2, $ex2);
} }
# Собрать ресурсы # Собрать ресурсы
if (isset($d['tk_itm'])) { if (isset($d['tk_itm'])) {
$g = $this->collect_02(explode(',', $d['tk_itm']), $u, $pl); $g = $this->collect_02(explode(',', $d['tk_itm']), $u, $pl);
} }
# Собирание трофеев # Собирание трофеев
if (isset($d['tkill_itm'])) { if (isset($d['tkill_itm'])) {
$g = $this->collect_02(explode(',', $d['tkill_itm']), $u, $pl); $g = $this->collect_02(explode(',', $d['tkill_itm']), $u, $pl);
} }
@@ -753,7 +753,7 @@ class Quests
return $r; return $r;
} }
/** Выдача наград за пещеры */ /** Выдача наград за пещеры */
public function questSuccesEnd($quest, $action) public function questSuccesEnd($quest, $action)
{ {
global $u, $c, $magic; global $u, $c, $magic;
@@ -765,7 +765,7 @@ class Quests
$d = $this->expl($quest['act_date']); $d = $this->expl($quest['act_date']);
$d = array_merge($d, $this->expl($quest['win_date'])); $d = array_merge($d, $this->expl($quest['win_date']));
// Забираем ресурсы или трофеи // Забираем ресурсы или трофеи
if (isset($d['tk_itm']) || isset($d['tkill_itm'])) { if (isset($d['tk_itm']) || isset($d['tkill_itm'])) {
$ex = []; $ex = [];
if (isset($d['tk_itm'])) { if (isset($d['tk_itm'])) {
@@ -793,9 +793,9 @@ class Quests
} }
$t = ''; $t = '';
# Получаем репутацию за квест, # Получаем репутацию за квест,
if (isset($d['add_rep'])) { if (isset($d['add_rep'])) {
# если это убийства ботов. # если это убийства ботов.
if (isset($d['kill_bot']) && isset($d['all_kill']) && $d['add_rep'] > 0) { if (isset($d['kill_bot']) && isset($d['all_kill']) && $d['add_rep'] > 0) {
$ex = explode(',', $d['kill_bot']); $ex = explode(',', $d['kill_bot']);
$ii = 0; $ii = 0;
@@ -825,7 +825,7 @@ class Quests
if ($this->stats['more_awards'] >= 0) { if ($this->stats['more_awards'] >= 0) {
$d['add_rep'] += $d['add_rep'] / 100 * 50; $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 ( if (
$rep['rep' . $quest['city']] < 24999 && $rep['rep' . $quest['city']] < 24999 &&
$rep['rep' . $quest['city']] + $d['add_rep'] >= 24999 && $rep['rep' . $quest['city']] + $d['add_rep'] >= 24999 &&
@@ -840,7 +840,7 @@ class Quests
} }
} }
if (isset($d['add_repizlom'])) { 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 = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'));
$rep['repizlom'] += $d['add_repizlom']; $rep['repizlom'] += $d['add_repizlom'];
if ($rep['repizlom'] > 24999) { if ($rep['repizlom'] > 24999) {
@@ -859,18 +859,18 @@ class Quests
} }
} }
if (isset($d['add_cr'])) { 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'); mysql_query('UPDATE `users` SET `money` = `money`+' . $d['add_cr'] . ' WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
} }
if ($t != '') { if ($t != '') {
$t = rtrim($t, ', '); $t = rtrim($t, ', ');
$r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.'; $r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.';
unset($t); unset($t);
} else { } else {
$r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено!'; $r = 'Задание <b>' . $quest['name'] . '</b> было успешно выполнено!';
} }
$r = '<small>' . $r . '</small>'; $r = '<small>' . $r . '</small>';
//Отправляем сообщение в чат //Отправляем сообщение в чат
mysql_query('UPDATE `actions` SET `vals` = "win" , `time` = "' . time() . '" WHERE `id` = "' . $action['id'] . '" AND `vals` = "go" LIMIT 1'); 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')"); 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(); die();
} }
// Забираем ресурсы // Забираем ресурсы
if (isset($d['tk_itm'])) { if (isset($d['tk_itm'])) {
$ex = explode(',', $d['tk_itm']); $ex = explode(',', $d['tk_itm']);
$i = 0; $i = 0;
@@ -906,7 +906,7 @@ class Quests
$i++; $i++;
} }
} }
// Забираем трофеи // Забираем трофеи
if (isset($d['tkill_itm'])) { if (isset($d['tkill_itm'])) {
$ex = explode(',', $d['tkill_itm']); $ex = explode(',', $d['tkill_itm']);
$i = 0; $i = 0;
@@ -920,7 +920,7 @@ class Quests
} }
$t = ''; $t = '';
if (isset($d['add_rep'])) { // Получаем репутацию за квест, если это убийства ботов. if (isset($d['add_rep'])) { // Получаем репутацию за квест, если это убийства ботов.
if (isset($d['kill_bot']) && isset($d['all_kill']) && $d['add_rep'] > 0) { if (isset($d['kill_bot']) && isset($d['all_kill']) && $d['add_rep'] > 0) {
$ex = explode(',', $d['kill_bot']); $ex = explode(',', $d['kill_bot']);
$ii = 0; $ii = 0;
@@ -939,9 +939,9 @@ class Quests
} }
unset($x, $i, $ii, $ex, $x2, $bot2, $ex2); unset($x, $i, $ii, $ex, $x2, $bot2, $ex2);
if ($pl['city'] != '') { 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')); $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) { /*if($rep['rep'.$pl['city']] < 10000 && $rep['rep'.$pl['city']] + $d['add_rep'] >= 10000 && $pl['kin'] != 1) {
$rep['rep'.$pl['city']] = 9999; $rep['rep'.$pl['city']] = 9999;
} else*/ } else*/
@@ -955,7 +955,7 @@ class Quests
} }
if (isset($d['add_repizlom'])) { 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 = mysql_fetch_array(mysql_query('SELECT * FROM `rep` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'));
$rep['repizlom'] += $d['add_repizlom']; $rep['repizlom'] += $d['add_repizlom'];
if ($rep['repizlom'] > 24999) { if ($rep['repizlom'] > 24999) {
@@ -976,19 +976,19 @@ class Quests
} }
if (isset($d['add_cr'])) { 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'); mysql_query('UPDATE `users` SET `money` = `money`+' . $d['add_cr'] . ' WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
} }
if ($t != '') { if ($t != '') {
$t = rtrim($t, ', '); $t = rtrim($t, ', ');
$r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.'; $r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено! Вы получили награду: ' . $t . '.';
unset($t); unset($t);
} else { } else {
$r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено!'; $r = 'Задание <b>' . $pl['name'] . '</b> было успешно выполнено!';
} }
$r = '<small>' . $r . '</small>'; $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')"); 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 <?php
use Insallah\Db; use Core\Db;
class Season class Season
{ {
public static $yy = [ public static $yy = [
1 => [1, '01', 'ίνβΰπό', 'ίνβΰπόρκθι'], 1 => [1, '01', 'Январь', 'Январьский'],
2 => [2, '02', 'Τεβπΰλό', 'Τεβπΰλόρκθι'], 2 => [2, '02', 'Февраль', 'Февральский'],
3 => [3, '03', 'Μΰπς', 'Μΰπςξβρκθι'], 3 => [3, '03', 'Март', 'Мартовский'],
4 => [4, '04', 'ΐοπελό', 'ΐοπελόρκθι'], 4 => [4, '04', 'Апрель', 'Апрельский'],
5 => [5, '05', 'Μΰι', 'Μΰιρκθι'], 5 => [5, '05', 'Май', 'Майский'],
6 => [6, '06', 'Θώνό', 'Θώνόρκθι'], 6 => [6, '06', 'Июнь', 'Июньский'],
7 => [7, '07', 'Θώλό', 'Θώλόρκθι'], 7 => [7, '07', 'Июль', 'Июльский'],
8 => [8, '08', 'ΐβγσρς', 'ΐβγσρςξβρκθι'], 8 => [8, '08', 'Август', 'Августовский'],
9 => [9, '09', 'Ρενςαπό', 'Ρενςαπόρκθι'], 9 => [9, '09', 'Сентябрь', 'Сентябрьский'],
10 => [10, '10', 'Ξκςαπό', 'Ξκςαπόρκθι'], 10 => [10, '10', 'Октябрь', 'Октябрьский'],
11 => [11, '11', 'Νξαπό', 'Νξαπόρκθι'], 11 => [11, '11', 'Ноябрь', 'Ноябрьский'],
12 => [12, '12', 'Δεκΰαπό', 'Δεκΰαπόρκθι'], 12 => [12, '12', 'Декабрь', 'Декабрьский'],
]; ];
public static $date = []; public static $date = [];
public static $m = []; public static $m = [];
+13 -13
View File
@@ -16,7 +16,7 @@ class Telegram
private function send($to, $from, $text, $fromType) private function send($to, $from, $text, $fromType)
{ {
mysql_query('START TRANSACTION'); 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'); mysql_query('COMMIT');
if ($ins) { if ($ins) {
return mysql_insert_id(); return mysql_insert_id();
@@ -89,7 +89,7 @@ class Telegram
} }
if ($fromType == 1) { 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) { } elseif ($read == 0) {
$from = '<b id="tablePostTxtB' . $id . '">' . $from . '</b>'; $from = '<b id="tablePostTxtB' . $id . '">' . $from . '</b>';
} }
@@ -98,10 +98,10 @@ class Telegram
<tr> <tr>
<td width="30" class="underLine2"><div align="center">' . $i1 . '</div></td> <td width="30" class="underLine2"><div align="center">' . $i1 . '</div></td>
<td width="200" id="tablePostTxt' . $id . '" class="underLine2">' . $from . '</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="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="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="deletePost(' . $id . ',' . $pg . ');" title="Удалить сообщение" src="https://img.new-combats.com/i/clear.gif" width="11" height="11"></div></td>
</tr> </tr>
</table> </table>
<div id="readMSG' . $id . '" style="display:none;" class="unreadMSG">' . $ttl . '</div>'; <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"> <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr> <tr>
<td width="30" class="underLine"><div align="center"></div></td> <td width="30" class="underLine"><div align="center"></div></td>
<td width="200" class="underLine"><b>Îò êîãî</b></td> <td width="200" class="underLine"><b>От кого</b></td>
<td width="290" class="underLine"><b>Çàãîëîâîê ñîîáùåíèÿ</b></td> <td width="290" class="underLine"><b>Заголовок сообщения</b></td>
<td width="120" 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 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="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> </tr>
</table>'; </table>';
@@ -138,7 +138,7 @@ class Telegram
} }
if ($i[0] == 0) { if ($i[0] == 0) {
echo '<div class="noMsg" align="center">Ñîîáùåíèé íåò</div>'; echo '<div class="noMsg" align="center">Сообщений нет</div>';
} elseif ($i[0] > $maxPages) { } elseif ($i[0] > $maxPages) {
$pages = ''; $pages = '';
$i = 1; $i = 1;
@@ -153,7 +153,7 @@ class Telegram
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0"> echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr> <tr>
<td width="30"><div align="center"></div></td> <td width="30"><div align="center"></div></td>
<td width="200">Ñòðàíèöû: ' . $pages . '</td> <td width="200">Страницы: ' . $pages . '</td>
<td width="240"></td> <td width="240"></td>
<td width="170"></td> <td width="170"></td>
<td width="30"></td> <td width="30"></td>
@@ -165,6 +165,6 @@ class Telegram
public function __clone() public function __clone()
{ {
trigger_error('Äóáëèðîâàíèå íå äîïóñêàåòñÿ.', E_USER_ERROR); trigger_error('Дублирование не допускается.', E_USER_ERROR);
} }
} }
+48 -55
View File
@@ -1,14 +1,13 @@
<?php <?php
if (!defined('GAME')) {
die(); use Core\Db;
}
class Tournir class Tournir
{ {
private $u; private User $u;
private $info; private array $info;
private $user; private array $user;
private $name = [0 => 'Âûæèòü ëþáîé öåíîé', 1 => 'Êàæäûé ñàì çà ñåáÿ', 2 => 'Çàõâàò êëþ÷à',]; private array $name = [0 => 'Выжить любой ценой', 1 => 'Каждый сам за себя', 2 => 'Захват ключа',];
public function __construct() public function __construct()
{ {
@@ -19,26 +18,26 @@ class Tournir
private function start() private function start()
{ {
$this->info = mysql_fetch_array(mysql_query('SELECT * FROM `turnirs` WHERE `id` = "' . $this->u->info['inTurnirnew'] . '" LIMIT 1')); $this->info = Db::getRow('select * from turnirs where id = ?', [$this->u->info['inTurnirnew']]);
$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->user = Db::getRow('select * from users_turnirs where turnir = ? and bot = ?', [$this->u->info['inTurnirnew'], $this->u->info['id']]);
} }
private function startTurnir() private function startTurnir()
{ {
$row = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `users` WHERE `win` = "0" AND `lose` = "0" AND `nich` = "0"')); $row = Db::getValue('select count(*) from users where win = 0 and lose = 0 and nich = 0');
if ($row[0] <= 0 || $this->info['status'] == 3) { if (!$row || $this->info['status'] == 3) {
if ($this->info['status'] == 3) { if ($this->info['status'] == 3) {
$this->finishTurnir(); $this->finishTurnir();
} }
} else { } else {
mysql_query('UPDATE `turnirs` SET `status` = "3" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1'); Db::sql('update turnirs set status = 3 where id = ?', [$this->info['id']]);
//Ñîçäàíèå ïîåäèíêà //Создание поединка
mysql_query('INSERT INTO `battle` (`city`,`time_start`,`timeout`,`type`,`turnir`) VALUES ("' . $this->u->info['city'] . '","' . time() . '","60","1","' . $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 = mysql_insert_id(); $uri = Db::lastInsertId();
//Çàêèäûâàåì ïåðñîíàæåé â ïîåäèíîê //Закидываем персонажей в поединок
mysql_query('UPDATE `users` SET `battle` = "' . $uri . '" WHERE `inUser` = "0" AND `inTurnirnew` = "' . $this->info['id'] . '"'); Db::sql('update users set battle = ? where inUser = 0 and inTurnirnew = ?', [$uri, $this->info['id']]);
//Îáîçíà÷àåì çàâåðøåíèå òóðíèðà ïðè âûõîäå //Обозначаем завершение турнира при выходе
die('Ïåðåéòèäå â ðàçäåë "ïîåäèíêè"...'); die('Перейтиде в раздел "поединки"...');
} }
} }
@@ -54,7 +53,7 @@ class Tournir
$inf = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "' . $pl['uid'] . '" LIMIT 1')); $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')); $bot = mysql_fetch_array(mysql_query('SELECT * FROM `users` WHERE `id` = "' . $pl['bot'] . '" LIMIT 1'));
if (isset($inf['id'], $bot['id'])) { if (isset($inf['id'], $bot['id'])) {
//âûäàåì ïðèçû è ò.ä //выдаем призы и т.д
mysql_query('DELETE FROM `users` WHERE `id` = "' . $bot['id'] . '" LIMIT 1'); 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 `stats` WHERE `id` = "' . $bot['id'] . '" LIMIT 1');
mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . $bot['id'] . '" LIMIT 1000'); 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) { 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]; $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'] = [10, 30, 55, 62, 92, 180, 350, 1350, 4500, 7000, 21000, 30000, 35000];
$inf['add_expn'] = $inf['add_expn'][$inf['level']]; $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'); mysql_query('UPDATE `stats` SET `exp` = `exp` + ' . $inf['add_expn'] . ' WHERE `id` = "' . $inf['id'] . '" LIMIT 1');
$win .= '<b>' . $inf['login'] . '</b>, '; $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')"); 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) { } 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'); mysql_query('UPDATE `users` SET `lose` = `lose` + 1,`lose_t` = `lose_t` + 1 WHERE `id` = "' . $inf['id'] . '" LIMIT 1');
$lose .= '<b>' . $inf['login'] . '</b>, '; $lose .= '<b>' . $inf['login'] . '</b>, ';
} else { } else {
mysql_query('UPDATE `users` SET `nich` = `nich` + 1 WHERE `id` = "' . $inf['id'] . '" LIMIT 1'); mysql_query('UPDATE `users` SET `nich` = `nich` + 1 WHERE `id` = "' . $inf['id'] . '" LIMIT 1');
} }
@@ -94,11 +89,11 @@ class Tournir
if ($win != '') { if ($win != '') {
$win = rtrim($win, ', '); $win = rtrim($win, ', ');
$lose = rtrim($lose, ', '); $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 { } 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')"); 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 = ''; $tm2 = '';
$noitm = [869 => 1, 1246 => 1, 155 => 1, 1245 => 1, 678 => 1]; $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) { if ($this->info['step'] != 3 && $this->info['step'] != 0 && isset($_GET['gocomplect']) && $this->user['points'] < 2) {
$aso = explode(',', $this->user['items']); $aso = explode(',', $this->user['items']);
$ast = explode('-', $_GET['gocomplect']); $ast = explode('-', $_GET['gocomplect']);
@@ -155,24 +150,23 @@ class Tournir
} }
if ($noitm > 0) { if ($noitm > 0) {
echo 'Èñïîëüçîâàíèå áàãîâ êàðàåòñÿ çàêîíîì!'; echo 'Использование багов карается законом!';
$addi = 0; $addi = 0;
} elseif (count($asg[3]) > 2) { } elseif (count($asg[3]) > 2) {
echo 'Âû âûáðàëè ñëèøêîì ìíîãî ïðåäìåòîâ, âûáåðèòå òîëüêî äâà îðóæèÿ è îäèí ùèò'; echo 'Вы выбрали слишком много предметов, выберите только два оружия и один щит';
$addi = 0; $addi = 0;
} elseif (count($asg[10]) > 3) { } elseif (count($asg[10]) > 3) {
echo 'Âû âûáðàëè ñëèøêîì ìíîãî ïðåäìåòîâ, âûáåðèòå òîëüêî òðè êîëüöà'; echo 'Вы выбрали слишком много предметов, выберите только три кольца';
$addi = 0; $addi = 0;
} elseif ($j > 16) { } elseif ($j > 16) {
echo 'Âû âûáðàëè ñëèøêîì ìíîãî ïðåäìåòîâ'; echo 'Вы выбрали слишком много предметов';
$addi = 0; $addi = 0;
} elseif ($j < 1) { } elseif ($j < 1) {
echo 'Âûáåðèòå õîòÿ áû îäèí ïðåäìåò'; echo 'Выберите хотя бы один предмет';
$addi = 0; $addi = 0;
} }
if ($addi == 1) { if ($addi == 1) {
$i = 0; $i = 0;
while ($i <= 17) { while ($i <= 17) {
if ($i == 10) { if ($i == 10) {
@@ -217,7 +211,7 @@ class Tournir
if ($this->info['step'] == 3) { if ($this->info['step'] == 3) {
$this->finishTurnir(); $this->finishTurnir();
} elseif ($this->info['step'] == 0) { } elseif ($this->info['step'] == 0) {
//ðàñïðåäåëÿåì êîìàíäû //распределяем команды
$po = [0, 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']); $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); $tmr = rand(1, 2);
@@ -258,7 +252,7 @@ class Tournir
${'tm' . $bot['team']} .= $this->u->microLogin($bot, 2) . '<br>'; ${'tm' . $bot['team']} .= $this->u->microLogin($bot, 2) . '<br>';
} }
} }
$r .= '<style>/* öâåòà êîìàíä */ $r .= '<style>/* цвета команд */
.CSSteam0 { font-weight: bold; cursor:pointer; } .CSSteam0 { font-weight: bold; cursor:pointer; }
.CSSteam1 { font-weight: bold; color: #6666CC; cursor:pointer; } .CSSteam1 { font-weight: bold; color: #6666CC; cursor:pointer; }
.CSSteam2 { font-weight: bold; color: #B06A00; cursor:pointer; } .CSSteam2 { font-weight: bold; color: #B06A00; cursor:pointer; }
@@ -270,33 +264,33 @@ class Tournir
.CSSteam8 { font-weight: bold; color: #842B61; cursor:pointer; } .CSSteam8 { font-weight: bold; color: #842B61; cursor:pointer; }
.CSSteam9 { font-weight: bold; color: navy; cursor:pointer; } .CSSteam9 { font-weight: bold; color: navy; cursor:pointer; }
.CSSvs { font-weight: bold; }</style>'; .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'])) { 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'); 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'] < 3) {
//Åùå íå ïîëó÷èëè îáìóíäèðîâàíèå //Еще не получили обмундирование
if ($this->user['points'] < 2) { 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 { } 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) { if ($this->u->info['sex'] == 1) {
$r .= 'à'; $r .= 'а';
} }
$r .= '!">'; $r .= '!">';
} }
} else { } else {
$r .= '<small><b>Âû ó÷àñòâóåòå â òóðíèðå!</b></small>'; $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 .= ' &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') { 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>'; $r .= '<div align="left" style="height:1px; width:100%; margin:10px 0 10px 0; border-top:1px solid #999999;"></div>';
if ($this->user['items'] == '') { if ($this->user['items'] == '') {
//Âûäàåì ïðåäìåòû äëÿ âûáîðà //Выдаем предметы для выбора
$ai = ''; $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 $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)]; $com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)];
} elseif ($i == 14) { } elseif ($i == 14) {
//ïðàâàÿ ðóêà //правая рука
$com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)]; $com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)];
} else { } else {
//îáìóíäèðîâàíèå //обмундирование
$com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)]; $com[$i] = $aso[$i][rand(0, count($aso[$i]) - 1)];
if ($i == 10) { if ($i == 10) {
$ai .= $com[$i]['id'] . ','; $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'); mysql_query('UPDATE `users_turnirs` SET `items` = "' . $ai . '" WHERE `id` = "' . $this->user['id'] . '" LIMIT 1');
} }
//Âûâîäèì ïðåäìåòû ÷òîáû íàäåòü èõ //Выводим предметы чтобы надеть их
$ai = explode(',', $this->user['items']); $ai = explode(',', $this->user['items']);
$i = 0; $i = 0;
$ia = []; $ia = [];
@@ -358,7 +352,7 @@ class Tournir
} }
unset($ai); unset($ai);
$r .= '<b>Âûáåðèòå ïðåäìåòû äëÿ òóðíèðà:</b><br>'; $r .= '<b>Выберите предметы для турнира:</b><br>';
?> ?>
<style> <style>
.its0 { .its0 {
@@ -468,13 +462,12 @@ class Tournir
} }
$i++; $i++;
} }
} }
$r .= '<div align="left" style="height:1px; width:100%; margin:10px 0 10px 0; border-top:1px solid #999999;"></div>'; $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"> $r .= '<table style="border:1px solid #99cccc" width="700" bgcolor="#bbdddd" border="0" align="center" cellpadding="5" cellspacing="0">
<tr> <tr>
<td width="350" align="center" bgcolor="#99cccc"><b class="CSSteam1">Êîìàíäà 1</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> <td align="center" bgcolor="#99cccc"><b class="CSSteam2">Команда 2</b></td>
</tr> </tr>
<tr> <tr>
<td align="center" style="border-right:1px solid #99cccc">' . rtrim($tm1, ', ') . '</td> <td align="center" style="border-right:1px solid #99cccc">' . rtrim($tm1, ', ') . '</td>
@@ -483,7 +476,7 @@ class Tournir
</table>'; </table>';
if (($this->info['time'] - time() < 0) && $this->info['step'] == 1) { if (($this->info['time'] - time() < 0) && $this->info['step'] == 1) {
//íà÷èíàåì òóðíèð //начинаем турнир
$this->startTurnir(); $this->startTurnir();
} }
echo $r; echo $r;
+23 -20
View File
@@ -1,10 +1,10 @@
<?php <?php
/** /**
* Åäèíàÿ ôóíêöèÿ äëÿ çàëèâêè ôàéëîâ íà ñåðâåð. * Единая функция для заливки файлов на сервер.
* *
* @version 1
* @author Ivor Barhansky <me@lopar.space> * @author Ivor Barhansky <me@lopar.space>
* @version 1
*/ */
class Uploader class Uploader
@@ -16,15 +16,15 @@ class Uploader
private $extensions = 'jpg|png|jpeg|gif'; private $extensions = 'jpg|png|jpeg|gif';
private $extMatches = []; private $extMatches = [];
private $FILE; private $FILE;
private $cnm = null; private $cnm;
public static $error; public static $error;
public function __construct($name, $cnm = null) public function __construct($name, $cnm = null)
{ {
$this->FILE = $_FILES; if (!isset($_FILES[$name])) {
if (!$this->FILE[$name]) {
return; return;
} }
$this->FILE = $_FILES[$name];
$this->cnm = $cnm; $this->cnm = $cnm;
} }
@@ -56,16 +56,16 @@ class Uploader
*/ */
public function setMaxFileSize($megabytes) public function setMaxFileSize($megabytes)
{ {
$this->maxFileSizeMb = $megabytes * (1024 * 1024); $this->maxFileSizeMb = $megabytes;
} }
/** /**
* @param string $path ïóòü îò êîðíÿ äî êîíå÷íîé ïàïêè áåç îòêðûâàþùåãî ñëåøà. * @param string $path путь от корня до конечной папки без открывающего слеша.
* @return void * @return void
*/ */
public function setSavePath($path) public function setSavePath($path)
{ {
$this->savePath = __DIR__ . '/' . $path; $this->savePath = $_SERVER['DOCUMENT_ROOT'] . '/' . $path;
} }
/** /**
@@ -99,17 +99,20 @@ class Uploader
private function hasNormalDimensions() private function hasNormalDimensions()
{ {
list($width, $height) = getimagesize($this->FILE['tmp_name']); list($width, $height) = getimagesize($this->FILE['tmp_name']);
if (!$width || !$height) {
self::$error = 'Не подтянулись размеры файла.';
return false;
}
if ( if (
$width < $this->width['min'] || ($width < $this->width['min'] || $width > $this->width['max']) ||
$width > $this->width['max'] || ($height < $this->height['min'] || $height > $this->height['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']) { 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 false;
} }
return true; return true;
@@ -120,8 +123,8 @@ class Uploader
if (!$this->maxFileSizeMb) { if (!$this->maxFileSizeMb) {
$this->setMaxFileSize(2); $this->setMaxFileSize(2);
} }
if ($this->FILE['size'] > $this->maxFileSizeMb || $this->FILE['size'] <=0) { if ($this->FILE['size'] > $this->maxFileSizeMb * (1024 * 1024) || $this->FILE['size'] <= 0) {
self::$error = 'Íåâåðíûé ðàçìåð ôàéëà. Ìàêñèìàëüíûé ðàçìåð ôàéëà ' . $this->maxFileSizeMb . ' ÌÁ'; self::$error = 'Неверный размер файла. Максимальный размер файла ' . $this->maxFileSizeMb . ' МБ';
return false; return false;
} }
return true; return true;
@@ -133,7 +136,7 @@ class Uploader
!preg_match('/\.(' . $this->extensions . ')$/i', $this->FILE['name'], $this->extMatches) || !preg_match('/\.(' . $this->extensions . ')$/i', $this->FILE['name'], $this->extMatches) ||
!preg_match('/image/i', $this->FILE['type']) !preg_match('/image/i', $this->FILE['type'])
) { ) {
self::$error = 'Íåâåðíûé òèï ôàéëà. Äîïóñòèìûå òèïû : ' . $this->extensions; self::$error = 'Неверный тип файла. Допустимые типы : ' . $this->extensions;
return false; return false;
} }
return true; return true;
@@ -142,7 +145,7 @@ class Uploader
private function hasNormalFilePath() private function hasNormalFilePath()
{ {
if (!$this->savePath || !is_dir($this->savePath)) { if (!$this->savePath || !is_dir($this->savePath)) {
self::$error = 'Îøèáêà çàãðóçêè: íåò òàêîé ïàïêè.'; self::$error = 'Ошибка загрузки: нет такой папки.';
return false; return false;
} }
return true; return true;
@@ -158,7 +161,7 @@ class Uploader
$fn2 = $this->cnm; $fn2 = $this->cnm;
} }
if (!move_uploaded_file($this->FILE['tmp_name'], $this->savePath . $fn)) { if (!move_uploaded_file($this->FILE['tmp_name'], $this->savePath . $fn)) {
self::$error = 'Îøèáêà çàãðóçêè ôàéëà'; self::$error = 'Ошибка загрузки файла';
return false; return false;
} }
return [$fn2, $fn, $this->savePath . $fn]; 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 <?php
use Core\Config;
use Core\Db;
class UserRegister 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); $en = preg_match("/^(([0-9A-z -])+)$/iu", $txt);
$ru = preg_match("/^(([0-9À-ÿ _-])+)$/i", $txt); $ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $txt);
return ($ru && $en) || (!$ru && !$en); 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 <?php
use Insallah\Db; use Core\Db;
class UserStats class UserStats
{ {
/** /**
* Ñîáèðàåò ñóììû âñåõ áîíóñîâ ñ îäåòûõ ïðåäìåòîâ è àêòèâíûõ ýôåêòîâ. * Собирает суммы всех бонусов с одетых предметов и активных эфектов.
* @param $userId * @param int $userId
* @param bool $showAll * @param bool $showAll
* @return array * @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 $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'; 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 = []; $params = [];
$params2 = json_decode(str_replace(['=', '|'], ['":', ',"'], '{"' . $iData . '}'), true);
foreach ($iData as $datum) { foreach ($iData as $datum) {
foreach (explode('|', $datum) as $inner) { 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 (strpos($a, 'add') !== false || strpos($a, 'sv') !== false || $showAll) {
if (isset($params[$a])) { if (isset($params[$a])) {
$params[$a] += $b; $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 = [ $db = [
's' => 'localhost', // server 's' => 'localhost', // server
'd' => 'newcom1_abk', // database 'd' => 'game_production', // database
'u' => 'newcom1_abk', // user 'u' => 'prod1', // user
'p' => '4nWYsIM[c?}P' // password 'p' => 'Bz@fGaZjFU2206Ua' // password
]; ];
$dsn = 'mysql:host=' . $db['s'] . ';dbname=' . $db['d']; $dsn = 'mysql:host=' . $db['s'] . ';dbname=' . $db['d'];
if (function_exists('date_default_timezone_set')) { include_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'mysql_override.php';
date_default_timezone_set('Europe/Moscow');
}
$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_select_db($db['d'], $dbgo);
mysql_query('SET NAMES cp1251'); mysql_query('set names utf8mb4');
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"]);
+6 -6
View File
@@ -1,22 +1,22 @@
<? <?
if( isset($s[1]) && $s[1] == '1/hramstok1' ) { if( isset($s[1]) && $s[1] == '1/hramstok1' ) {
/* /*
Сундук: Водосток для сбора проб Сундук: Водосток для сбора проб
* Заменяет предмет Пустая склянка (4693) на (4694) Склянка с пробами * Заменяет предмет Пустая склянка (4693) на (4694) Склянка с пробами
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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')); $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'])) { if(!isset($vad['itm']['id'])) {
$r = 'У вас нет подходящего предмета для хранения проб... Все руки в каком-то говне...'; $r = 'У вас нет подходящего предмета для хранения проб... Все руки в каком-то говне...';
$vad['go'] = false; $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'].'" "'.$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'); mysql_query('UPDATE `items_users` SET `item_id` = 4694 WHERE `id` = "'.$vad['itm']['id'].'" LIMIT 1');
$r = 'Вы успешно взяли пробы с водостока! Набранную склянку нужно отнести обратно, к Арквиерро в Храм Знаний.'; $r = 'Вы успешно взяли пробы с водостока! Набранную склянку нужно отнести обратно, к Арквиерро в Храм Знаний.';
} }
unset($vad); unset($vad);
+5 -5
View File
@@ -1,16 +1,16 @@
<? <?
if( isset($s[1]) && $s[1] == '1/podogrevatel' ) { if( isset($s[1]) && $s[1] == '1/podogrevatel' ) {
/* /*
Сундук: Обогреватель Сундук: Обогреватель
* падает гайка * падает гайка
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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'] = $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')); $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); $this->pickitem($obj,$vad['itm']['id'],0,'',false);
$r = 'Вы обнаружили предмет &quot;'.$vad['itm']['name'].'&quot;.'; $r = 'Вы обнаружили предмет &quot;'.$vad['itm']['name'].'&quot;.';
} }
unset($vad); unset($vad);
+6 -6
View File
@@ -1,22 +1,22 @@
<? <?
if( isset($s[1]) && $s[1] == '1/rjav' ) { if( isset($s[1]) && $s[1] == '1/rjav' ) {
/* /*
Сундук: Ржавые трубы Сундук: Ржавые трубы
* Обмен ключчиииика на вентиль * Обмен ключчиииика на вентиль
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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')); $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'])) { if(!isset($vad['itm']['id'])) {
$r = 'У вас нет подходящего предмета чтобы открутить вентиль...'; $r = 'У вас нет подходящего предмета чтобы открутить вентиль...';
$vad['go'] = false; $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'); mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `id` = "'.$vad['itm']['id'].'" LIMIT 1');
$this->pickitem($obj,1005,$u->info['id'],'',false); $this->pickitem($obj,1005,$u->info['id'],'',false);
$r = 'Вы успешно открутили вентиль! (Предмет &quot;Ключииик&quot; был изьят)'; $r = 'Вы успешно открутили вентиль! (Предмет &quot;Ключииик&quot; был изьят)';
} }
unset($vad); unset($vad);
+5 -5
View File
@@ -1,16 +1,16 @@
<? <?
if( isset($s[1]) && $s[1] == '1/vods1' ) { if( isset($s[1]) && $s[1] == '1/vods1' ) {
/* /*
Сундук: Водосток Сундук: Водосток
* падает гайка * падает гайка
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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'); //mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `id` = "'.$vad['itm']['id'].'" LIMIT 1');
$this->pickitem($obj,1002,0,'',false); $this->pickitem($obj,1002,0,'',false);
$r = 'Вы обнаружили предмет &quot;Гайка&quot;.'; $r = 'Вы обнаружили предмет &quot;Гайка&quot;.';
} }
unset($vad); unset($vad);
+10 -10
View File
@@ -1,34 +1,34 @@
<? <?
if( isset($s[1]) && $s[1] == '101/altar' ) { if( isset($s[1]) && $s[1] == '101/altar' ) {
/* /*
Алтарь Алтарь
* Телепортирует на необходимую клетку х -3 , у 7 * Телепортирует на необходимую клетку х -3 , у 7
* Для прохода требуется 1 камень типа 881 или 878 * Для прохода требуется 1 камень типа 881 или 878
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => false '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')); $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']) ) { 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['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1'));
$vad['go'] = true; $vad['go'] = true;
} }
if( $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'); 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'); $upd = mysql_query('UPDATE `items_users` SET `lastUPD`="'.time().'",`delete`="'.time().'" WHERE `id`="'.$vad['sp']['id'].'" LIMIT 1');
if($upd){ if($upd){
$r = 'Вы растворили &quot;'.$vad['pl']['name'].'&quot; в алтаре и произошел взрыв. Алтарь переместил вас в тайную комнату'; $r = 'Вы растворили &quot;'.$vad['pl']['name'].'&quot; в алтаре и произошел взрыв. Алтарь переместил вас в тайную комнату';
echo '<script>location.href="main.php"</script>'; echo '<script>location.href="main.php"</script>';
} else { } else {
$r = 'Что-то пошло не так, попробуйте позже.'; $r = 'Что-то пошло не так, попробуйте позже.';
} }
}elseif( !isset($vad['sp']['id']) ) { }elseif( !isset($vad['sp']['id']) ) {
$r = 'Для перемещения требуется один из драгоценных камней'; $r = 'Для перемещения требуется один из драгоценных камней';
} }
unset($vad); unset($vad);
} }
+7 -7
View File
@@ -1,10 +1,10 @@
<? <?
if( isset($s[1]) && $s[1] == '101/i9' ) { if( isset($s[1]) && $s[1] == '101/i9' ) {
/* /*
Ñóíäóê: ëîâóøêà Сундук: ловушка
* Ñíèìàåò äî 1000 ÍÐ îäèí ðàç * Снимает до 1000 НР один раз
*/ */
//Âñå ïåðåìåííûå ñîõðàíÿòü â ìàññèâå $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => false 'go' => false
); );
@@ -13,23 +13,23 @@ if( isset($s[1]) && $s[1] == '101/i9' ) {
if( !isset($vad['test']['id']) ) { if( !isset($vad['test']['id']) ) {
$vad['go'] = true; $vad['go'] = true;
}else{ }else{
$r = ' ñóíäóêå áûëà ëîâóøêà, å¸ àêòèâèðîâàë ïåðñîíàæ '.$u->microLogin($vad['test']['uid'],1); $r = 'В сундуке была ловушка, её активировал персонаж '.$u->microLogin($vad['test']['uid'],1);
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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'].'","" "'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)'); )');
$r = 'Â ñóíäóêå áûëà ëîâóøêà óñòàíîâëåííàÿ îäíèì èç îáèòàòåëåé ïîäçåìåëüÿ!'; $r = 'В сундуке была ловушка установленная одним из обитателей подземелья!';
$vad['min_hp'] = rand(100,1000); $vad['min_hp'] = rand(100,1000);
$u->stats['hpNow'] -= $vad['min_hp']; $u->stats['hpNow'] -= $vad['min_hp'];
if( $u->stats['hpNow'] < 0 ) { if( $u->stats['hpNow'] < 0 ) {
$u->stats['hpNow'] = 0; $u->stats['hpNow'] = 0;
} }
if($u->info['sex'] == 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{ }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']); $this->sys_chat($vad['text']);
$u->info['hpNow'] = $u->stats['hpNow']; $u->info['hpNow'] = $u->stats['hpNow'];
+7 -7
View File
@@ -1,17 +1,17 @@
<? <?
if( isset($s[1]) && $s[1] == '101/kotel' ) { if( isset($s[1]) && $s[1] == '101/kotel' ) {
/* /*
Сундук: Котел Сундук: Котел
* Можно найти Сущность щита * Можно найти Сущность щита
* Может отнять 100-1000 НР * Может отнять 100-1000 НР
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то перевернул котел...'; $r = 'Кто-то перевернул котел...';
$vad['go'] = false; $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 ( 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->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)'); )');
//Награда //Награда
$this->pickitem($obj,5239,$u->info['id']); $this->pickitem($obj,5239,$u->info['id']);
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили предмет &quot;Амброзия подмастерья Владык&quot;'; $r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили предмет &quot;Амброзия подмастерья Владык&quot;';
} }
unset($vad); unset($vad);
} }
+5 -5
View File
@@ -1,16 +1,16 @@
<? <?
if( isset($s[1]) && $s[1] == '101/krovat' ) { if( isset($s[1]) && $s[1] == '101/krovat' ) {
/* /*
Сундук: Кровать Сундук: Кровать
* Можно получить один из двух ресурсов * Можно получить один из двух ресурсов
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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'] = 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')); $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']]); $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' ) { if( isset($s[1]) && $s[1] == '101/laba1' ) {
/* /*
Сундук: Лаболатория Сундук: Лаболатория
* Можно собрать случайную тактику, но не более 3 на человека за поход и не более 10 на команду * Можно собрать случайную тактику, но не более 3 на человека за поход и не более 10 на команду
* 897 - Слиток пустынной руды * 897 - Слиток пустынной руды
* 903 - Тысячелетний камень * 903 - Тысячелетний камень
* 888 - Шепот гор * 888 - Шепот гор
* 892 - Эссенция чистоты * 892 - Эссенция чистоты
* 950 - Кожа Общего Врага * 950 - Кожа Общего Врага
* 904 - Кристалл времен * 904 - Кристалл времен
* 878 - Лучистый топаз * 878 - Лучистый топаз
* 880 - Эссенция глубины * 880 - Эссенция глубины
* 879 - Ралиэль * 879 - Ралиэль
* 899 - Корень змеиного дерева * 899 - Корень змеиного дерева
* 882 - Глубинный камень * 882 - Глубинный камень
* 908 - Камень затаенного солнца * 908 - Камень затаенного солнца
* 909 - Эссенция праведного гнева * 909 - Эссенция праведного гнева
* 902 - Плод змеиного дерева * 902 - Плод змеиного дерева
* 881 - Лучистый Рубин * 881 - Лучистый Рубин
* 893 - Эссенция лунного света * 893 - Эссенция лунного света
* 898 - Троекорень * 898 - Троекорень
* 890 - Сгусток астрала * 890 - Сгусток астрала
* 907 - Кристалл стабильности * 907 - Кристалл стабильности
* 905 - Стихиалия * 905 - Стихиалия
-- Боя -- Боя
4243 - 897 х3 4243 - 897 х3
4244 - 903 х2 4244 - 903 х2
4245 - 888 х2 4245 - 888 х2
4246 - 892 х1 4246 - 892 х1
4247 - 879 х1 , 892 х1 4247 - 879 х1 , 892 х1
-- Защиты -- Защиты
4248 - 950 х3 4248 - 950 х3
4249 - 904 х2 4249 - 904 х2
4250 - 878 х2 4250 - 878 х2
4251 - 880 х1 4251 - 880 х1
4252 - 880 х1 , 892 х1 4252 - 880 х1 , 892 х1
-- Крови -- Крови
4253 - 899 х3 4253 - 899 х3
4254 - 882 х2 4254 - 882 х2
4255 - 908 х2 4255 - 908 х2
4256 - 909 х1 4256 - 909 х1
4257 - 909 х1 , 892 х1 4257 - 909 х1 , 892 х1
-- Ответа -- Ответа
4258 - 899 х3 4258 - 899 х3
4259 - 902 х2 4259 - 902 х2
4260 - 881 х2 4260 - 881 х2
4261 - 893 х1 4261 - 893 х1
4262 - 893 х1 , 892 х1 4262 - 893 х1 , 892 х1
-- Отражения -- Отражения
4263 - 898 х3 4263 - 898 х3
4264 - 890 х2 4264 - 890 х2
4265 - 907 х2 4265 - 907 х2
4266 - 905 х1 4266 - 905 х1
4267 - 905 х1 , 892 х1 4267 - 905 х1 , 892 х1
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true 'go' => true
); );
$vad['recept'] = array( $vad['recept'] = array(
//Б //Б
array( 897, 3 ), array( 897, 3 ),
array( 903, 2 ), array( 903, 2 ),
array( 888, 2 ), array( 888, 2 ),
array( 892, 1 ), array( 892, 1 ),
array( 892, 1, 892, 1 ), array( 892, 1, 892, 1 ),
//З //З
array( 950, 3 ), array( 950, 3 ),
array( 904, 2 ), array( 904, 2 ),
array( 878, 2 ), array( 878, 2 ),
array( 880, 1 ), array( 880, 1 ),
array( 880, 1, 892, 1 ), array( 880, 1, 892, 1 ),
//К //К
array( 899, 3 ), array( 899, 3 ),
array( 882, 2 ), array( 882, 2 ),
array( 908, 2 ), array( 908, 2 ),
array( 909, 1 ), array( 909, 1 ),
array( 909, 1, 892, 1 ), array( 909, 1, 892, 1 ),
//Ответа //Ответа
array( 899, 3 ), array( 899, 3 ),
array( 902, 2 ), array( 902, 2 ),
array( 881, 2 ), array( 881, 2 ),
array( 893, 1 ), array( 893, 1 ),
array( 893, 1, 892, 1 ), array( 893, 1, 892, 1 ),
//Отражения //Отражения
array( 898, 3 ), array( 898, 3 ),
array( 890, 2 ), array( 890, 2 ),
array( 907, 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 ) { 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')); $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] ) { if( $vad['tr_itm'][2] >= $vad['recept'][$vad['i']][3] ) {
//все ок //все ок
}else{ }else{
$vad['tr_itm'] = false; $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)]; $vad['itm'] = $vad['itm'][rand(0,count($vad['itm'])-1)];
if( $vad['test2'][0] >= 10 ) { if( $vad['test2'][0] >= 10 ) {
$r = 'Не удалось воспользоваться лабораторией, не более 10 раз на команду за один поход'; $r = 'Не удалось воспользоваться лабораторией, не более 10 раз на команду за один поход';
$vad['go'] = false; $vad['go'] = false;
}elseif( $vad['test1'][0] >= 3 ) { }elseif( $vad['test1'][0] >= 3 ) {
$r = 'Не удалось воспользоваться лабораторией, не более 3 раз на персонажа за один поход'; $r = 'Не удалось воспользоваться лабораторией, не более 3 раз на персонажа за один поход';
$vad['go'] = false; $vad['go'] = false;
}elseif(!isset($vad['itm']['id'])) { }elseif(!isset($vad['itm']['id'])) {
$r = 'Недостаточно ингридиентов...'; $r = 'Недостаточно ингридиентов...';
$vad['go'] = false; $vad['go'] = false;
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
//Выдаем предмет //Выдаем предмет
if( $vad['tr'][$vad['itm']['id']][1] > 0 ) { 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]); $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->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'); $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) { 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{ }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']); $this->sys_chat($vad['text']);
} }
+7 -7
View File
@@ -1,16 +1,16 @@
<? <?
if( isset($s[1]) && $s[1] == '101/nakova' ) { if( isset($s[1]) && $s[1] == '101/nakova' ) {
/* /*
Сундук: Наковальня Сундук: Наковальня
* Можно создать сущность х2 с судьбой * Можно создать сущность х2 с судьбой
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то уже разбил сущность за этот поход, наковальня сломана...'; $r = 'Кто-то уже разбил сущность за этот поход, наковальня сломана...';
$vad['go'] = false; $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 ( 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->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); $u->deleteItem($vad['sp']['id'],$u->info['id'],1);
mysql_query('UPDATE `items_users` SET `delete` = "'.time().'" WHERE `id` = "'.$vad['sp']['id'].'" LIMIT 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');
$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']) ) { }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' ) { if( isset($s[1]) && $s[1] == '101/nakova2' ) {
/* /*
Наковальня 2 Наковальня 2
* Телепортирует на необходимую клетку х 3 , у 42 * Телепортирует на необходимую клетку х 3 , у 42
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true 'go' => true
); );
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "3",`y` = "42",`s` = "3" WHERE `id` = "'.$u->info['id'].'" LIMIT 1'); 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>'; echo '<script>location.href="main.php"</script>';
} }
unset($vad); unset($vad);
+6 -6
View File
@@ -1,18 +1,18 @@
<? <?
if( isset($s[1]) && $s[1] == '101/reshetka1' ) { if( isset($s[1]) && $s[1] == '101/reshetka1' ) {
/* /*
Решетка Решетка
* Телепортирует на необходимую клетку * Телепортирует на необходимую клетку
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => false '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')); $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']) ) { 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['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1'));
$vad['go'] = true; $vad['go'] = true;
} }
@@ -21,7 +21,7 @@ if( isset($s[1]) && $s[1] == '101/reshetka1' ) {
//$u->deleteItem($vad['sp']['id'],$u->info['id'],1); //$u->deleteItem($vad['sp']['id'],$u->info['id'],1);
echo '<script>location.href="main.php"</script>'; echo '<script>location.href="main.php"</script>';
}elseif( !isset($vad['sp']['id']) ) { }elseif( !isset($vad['sp']['id']) ) {
$r = 'Для прохода требуется предмет &quot;Мерцающий ключ №3&quot;'; $r = 'Для прохода требуется предмет &quot;Мерцающий ключ №3&quot;';
} }
unset($vad); unset($vad);
} }
+9 -9
View File
@@ -1,9 +1,9 @@
<? <?
if( isset($s[1]) && $s[1] == '101/sunduk0' ) { if( isset($s[1]) && $s[1] == '101/sunduk0' ) {
/* /*
Сундук: Сундук Сундук: Сундук
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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['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')); $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 ) { if( $vad['test2'][0] > 0 ) {
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...'; $r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false; $vad['go'] = false;
}elseif( $vad['test1'][0] > 1 ) { }elseif( $vad['test1'][0] > 1 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false; $vad['go'] = false;
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
//Выкидываем Лучистый топаз //Выкидываем Лучистый топаз
$vad['items'] = array(878); $vad['items'] = array(878);
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)]; $vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 ) { if( $vad['items'] != 0 ) {
//Выбрасываем предмет //Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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'].'","" "'.$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; $vad['dn_delete'][$vad['items']] = false;
} }
if( $this->pickitem($obj,$vad['items'],$u->info['id'],'',$vad['dn_delete'][$vad['items']]) ) { if( $this->pickitem($obj,$vad['items'],$u->info['id'],'',$vad['dn_delete'][$vad['items']]) ) {
$r = 'Вы обнаружили предметы...'; $r = 'Вы обнаружили предметы...';
}else{ }else{
$r = 'Что-то пошло не так, предметы растворились...'; $r = 'Что-то пошло не так, предметы растворились...';
} }
}else{ }else{
$r = 'Вы не нашли ничего полезного...'; $r = 'Вы не нашли ничего полезного...';
} }
} }
+10 -10
View File
@@ -1,10 +1,10 @@
<? <?
if( isset($s[1]) && $s[1] == '101/sunduk1' ) { if( isset($s[1]) && $s[1] == '101/sunduk1' ) {
/* /*
Сундук: Сундук Сундук: Сундук
* Можно найти Сталь , Мифрил , Пустые бутылки * Можно найти Сталь , Мифрил , Пустые бутылки
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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['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')); $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 ) { if( $vad['test2'][0] > 0 ) {
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...'; $r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false; $vad['go'] = false;
}elseif( $vad['test1'][0] > 1 ) { }elseif( $vad['test1'][0] > 1 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false; $vad['go'] = false;
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
//Выкидываем бутылку, мифрил, либо сталь //Выкидываем бутылку, мифрил, либо сталь
$vad['items'] = array(4272,1189); $vad['items'] = array(4272,1189);
$vad['dn_delete'] = array( $vad['dn_delete'] = array(
1189 => true 1189 => true
@@ -28,7 +28,7 @@ if( isset($s[1]) && $s[1] == '101/sunduk1' ) {
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)]; $vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 ) { if( $vad['items'] != 0 ) {
//Выбрасываем предмет //Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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'].'","" "'.$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; $vad['dn_delete'][$vad['items']] = false;
} }
if( $this->pickitem($obj,$vad['items'],$u->info['id'],'',$vad['dn_delete'][$vad['items']]) ) { if( $this->pickitem($obj,$vad['items'],$u->info['id'],'',$vad['dn_delete'][$vad['items']]) ) {
$r = 'Вы обнаружили предметы...'; $r = 'Вы обнаружили предметы...';
}else{ }else{
$r = 'Что-то пошло не так, предметы растворились...'; $r = 'Что-то пошло не так, предметы растворились...';
} }
}else{ }else{
$r = 'Вы не нашли ничего полезного...'; $r = 'Вы не нашли ничего полезного...';
} }
} }
+12 -12
View File
@@ -1,52 +1,52 @@
<? <?
if( isset($s[1]) && $s[1] == '101/sunduk2' ) { if( isset($s[1]) && $s[1] == '101/sunduk2' ) {
/* /*
Сундук: Сундук Сундук: Сундук
* Можно найти Отворяющая печать №3 1175 * Можно найти Отворяющая печать №3 1175
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false; $vad['go'] = false;
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
//Выкидываем Отворяющая печать №3 //Выкидываем Отворяющая печать №3
$vad['items'] = array(1175); $vad['items'] = array(1175);
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)]; $vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 && rand(1,100) < 80) { if( $vad['items'] != 0 && rand(1,100) < 80) {
// Выбрасываем предмет // Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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'].'","" "'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)'); )');
/* /*
//откуда тут сущности? обломятся! //откуда тут сущности? обломятся!
if( rand(0,100) < 10 ) { if( rand(0,100) < 10 ) {
//Сущность сапог //Сущность сапог
$this->pickitem($obj,4279,0); $this->pickitem($obj,4279,0);
} }
if( rand(0,100) < 10 ) { if( rand(0,100) < 10 ) {
//Сущность щита //Сущность щита
$this->pickitem($obj,4269,0); $this->pickitem($obj,4269,0);
} }
*/ */
if( $this->pickitem($obj,$vad['items'],0) ) { if( $this->pickitem($obj,$vad['items'],0) ) {
$r = 'Вы обнаружили предметы...'; $r = 'Вы обнаружили предметы...';
}else{ }else{
$r = 'Что-то пошло не так, предметы растворились...'; $r = 'Что-то пошло не так, предметы растворились...';
} }
} else { } else {
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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" "'.$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' ) { if( isset($s[1]) && $s[1] == '101/sunduk3' ) {
/* /*
Сундук: Сундук Сундук: Сундук
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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'].'" "'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)'); )');
if( rand(1,100) > 20 ) { if( rand(1,100) > 20 ) {
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...'; $r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...';
}else{ }else{
$vad['items'] = array(4279,4269); $vad['items'] = array(4279,4269);
if( rand(1,100) < 9 ) { 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']]) ) { if( !isset($vad['dn_delete'][$vad['items']['id']]) ) {
$vad['dn_delete'][$vad['items']['id']] = false; $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']]); $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' ) { if( isset($s[1]) && $s[1] == '101/sunduk4' ) {
/* /*
Сундук: Сундук Сундук: Сундук
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $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'].'" "'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'","'.$vad['bad'].'"
)'); )');
if( rand(1,100) > 50 ) { if( rand(1,100) > 50 ) {
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...'; $r = 'Обыскав &quot;'.$obj['name'].'&quot; вы ничего не обнаружили...';
}else{ }else{
$vad['items'] = array(882); $vad['items'] = array(882);
if( rand(1,40) < 16 ) { 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']]) ) { if( !isset($vad['dn_delete'][$vad['items']['id']]) ) {
$vad['dn_delete'][$vad['items']['id']] = false; $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']]); $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' ) { if( isset($s[1]) && $s[1] == '101/telejka' ) {
/* /*
Сундук: Тележка Сундук: Тележка
* Можно получить один из двух ресурсов * Можно получить один из двух ресурсов
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; до вас...';
$vad['go'] = false; $vad['go'] = false;
} }
@@ -20,14 +20,14 @@ if( isset($s[1]) && $s[1] == '101/telejka' ) {
)'); )');
if( rand(0,100) < 80 ) { if( rand(0,100) < 80 ) {
if( rand(0,100) < 51 ) { 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']); $this->pickitem($obj,895,$u->info['id']);
}else{ }else{
$r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;Серебро&quot;'; $r = 'Обыскав &quot;'.$obj['name'].'&quot; вы обнаружили &quot;Серебро&quot;';
$this->pickitem($obj,875,$u->info['id']); $this->pickitem($obj,875,$u->info['id']);
} }
}else{ }else{
$r = 'Вы ничего не смогли найти...'; $r = 'Вы ничего не смогли найти...';
} }
} }
+19 -19
View File
@@ -1,12 +1,12 @@
<? <?
if( isset($s[1]) && $s[1] == '101/viboina' ) { if( isset($s[1]) && $s[1] == '101/viboina' ) {
/* /*
Сундук: Выбоина Сундук: Выбоина
* Можно найти Сталь , Мифрил , Пустые бутылки * Можно найти Сталь , Мифрил , Пустые бутылки
* Может отнять 100-1000 НР * Может отнять 100-1000 НР
* Могут использовать только 2 человека из команды * Могут использовать только 2 человека из команды
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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( !isset($vad['test3']['id']) ) {
//Определяем ловушка или нет //Определяем ловушка или нет
if( rand(0,100) < 50 ) { if( rand(0,100) < 50 ) {
$vad['bad'] = 1; $vad['bad'] = 1;
}else{ }else{
@@ -32,33 +32,33 @@ if( isset($s[1]) && $s[1] == '101/viboina' ) {
} }
if( $vad['test2'][0] > 0 ) { if( $vad['test2'][0] > 0 ) {
//$r = 'Вы уже обыскали здесь все...'; //$r = 'Вы уже обыскали здесь все...';
$r = 'Кажется, вы здесь побывали раньше...'; $r = 'Кажется, вы здесь побывали раньше...';
$vad['go'] = false; $vad['go'] = false;
}elseif( $vad['test1'][0] > 1 || ( $vad['test4'] == 0 && $vad['test5'] >= 2 ) ) { }elseif( $vad['test1'][0] > 1 || ( $vad['test4'] == 0 && $vad['test5'] >= 2 ) ) {
$r = 'Кажется, кто-то здесь побывал раньше вас...'; $r = 'Кажется, кто-то здесь побывал раньше вас...';
$vad['go'] = false; $vad['go'] = false;
} }
if( $vad['bad'] == 1 && $vad['go'] == true ) { 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')); $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']) ) { if( !isset($vad['test3']['id']) ) {
//Ловушка на 50% НР , Если НР баольше 2 ед. //Ловушка на 50% НР , Если НР баольше 2 ед.
$vad['go'] = false; $vad['go'] = false;
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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","" "'.$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); $vad['min_hp'] = round(2+$u->stats['hpNow']/4);
$u->stats['hpNow'] -= $vad['min_hp']; $u->stats['hpNow'] -= $vad['min_hp'];
if( $u->stats['hpNow'] < 0 ) { if( $u->stats['hpNow'] < 0 ) {
$u->stats['hpNow'] = 0; $u->stats['hpNow'] = 0;
} }
if($u->info['sex'] == 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{ }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']); $this->sys_chat($vad['text']);
$u->info['hpNow'] = $u->stats['hpNow']; $u->info['hpNow'] = $u->stats['hpNow'];
@@ -69,22 +69,22 @@ if( isset($s[1]) && $s[1] == '101/viboina' ) {
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
//Выкидываем бутылку, мифрил, либо сталь //Выкидываем бутылку, мифрил, либо сталь
$vad['items'] = array(2,877,896); $vad['items'] = array(2,877,896);
$vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)]; $vad['items'] = $vad['items'][rand(0,count($vad['items'])-1)];
if( $vad['items'] != 0 ) { if( $vad['items'] != 0 ) {
//Выбрасываем предмет //Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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'].'","" "'.$u->info['dnow'].'","'.time().'","'.$obj['x'].'","'.$obj['y'].'","'.$u->info['id'].'","obj_act'.$obj['id'].'",""
)'); )');
if( $this->pickitem($obj,$vad['items'],$u->info['id']) ) { if( $this->pickitem($obj,$vad['items'],$u->info['id']) ) {
$r = 'Вы обнаружили предметы...'; $r = 'Вы обнаружили предметы...';
}else{ }else{
$r = 'Что-то пошло не так, предметы растворились...'; $r = 'Что-то пошло не так, предметы растворились...';
} }
}else{ }else{
$r = 'Вы не нашли ничего полезного...'; $r = 'Вы не нашли ничего полезного...';
} }
} }
+11 -11
View File
@@ -1,34 +1,34 @@
<? <?
if( isset($s[1]) && $s[1] == '101/viboina2' ) { if( isset($s[1]) && $s[1] == '101/viboina2' ) {
/* /*
Выбоина Выбоина
* Телепортирует на необходимую клетку х 4 , у 26 * Телепортирует на необходимую клетку х 4 , у 26
* Для прохода требуется 1 Линза Портала - 4298 * Для прохода требуется 1 Линза Портала - 4298
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => false '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')); $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']) ) { 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['pl'] = mysql_fetch_array(mysql_query('SELECT * FROM `items_main` WHERE `id` = "'.$vad['sp']['item_id'].'" LIMIT 1')); // Берем название "Линза Портала" и все.. смысл запроса... статика.
$vad['go'] = true; $vad['go'] = true;
} }
if( $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'); 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'); $upd = mysql_query('UPDATE `items_users` SET `lastUPD`="'.time().'",`delete`="'.time().'" WHERE `id`="'.$vad['sp']['id'].'" LIMIT 1');
if($upd){ if($upd){
$r = 'Вы переместились при помощи &quot;Линза Портала&quot; на другую сторону'; $r = 'Вы переместились при помощи &quot;Линза Портала&quot; на другую сторону';
echo '<script>location.href="main.php"</script>'; echo '<script>location.href="main.php"</script>';
} else { } else {
$r = 'Что-то пошло не так, попробуйте позже.'; $r = 'Что-то пошло не так, попробуйте позже.';
} }
}elseif( !isset($vad['sp']['id']) ) { }elseif( !isset($vad['sp']['id']) ) {
$r = 'Для перемещения требуется &quot;Линза Портала&quot;'; $r = 'Для перемещения требуется &quot;Линза Портала&quot;';
} }
unset($vad); unset($vad);
} }
+4 -4
View File
@@ -1,17 +1,17 @@
<? <?
if( isset($s[1]) && $s[1] == '101/viboina3' ) { if( isset($s[1]) && $s[1] == '101/viboina3' ) {
/* /*
Выбоина Выбоина
* Телепортирует на необходимую клетку х 4 , у 25 * Телепортирует на необходимую клетку х 4 , у 25
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true 'go' => true
); );
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "4",`y` = "25",`s` = "2" WHERE `id` = "'.$u->info['id'].'" LIMIT 1'); 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>'; echo '<script>location.href="main.php"</script>';
} }
unset($vad); unset($vad);
+4 -4
View File
@@ -1,17 +1,17 @@
<? <?
if( isset($s[1]) && $s[1] == '101/viboina4' ) { if( isset($s[1]) && $s[1] == '101/viboina4' ) {
/* /*
Выбоина Выбоина
* Телепортирует на необходимую клетку х 4 , у 27 * Телепортирует на необходимую клетку х 4 , у 27
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true 'go' => true
); );
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
mysql_query('UPDATE `stats` SET `x` = "4",`y` = "27",`s` = "2" WHERE `id` = "'.$u->info['id'].'" LIMIT 1'); 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>'; echo '<script>location.href="main.php"</script>';
} }
unset($vad); unset($vad);
+10 -10
View File
@@ -1,10 +1,10 @@
<? <?
if( isset($s[1]) && $s[1] == '104/sunduk1' ) { if( isset($s[1]) && $s[1] == '104/sunduk1' ) {
/* /*
Сундук: Сундук Сундук: Сундук
* Можно найти Сталь , Мифрил , Пустые бутылки * Можно найти Сталь , Мифрил , Пустые бутылки
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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['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')); $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 ) { if( $vad['test2'][0] > 0 ) {
$r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...'; $r = 'Вы уже обыскали &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false; $vad['go'] = false;
}elseif( $vad['test1'][0] > 1 ) { }elseif( $vad['test1'][0] > 1 ) {
$r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...'; $r = 'Кто-то обыскал &quot;'.$obj['name'].'&quot; раньше вас...';
$vad['go'] = false; $vad['go'] = false;
} }
if( $vad['go'] == true ) { if( $vad['go'] == true ) {
//Выкидываем бутылку, мифрил, либо сталь //Выкидываем бутылку, мифрил, либо сталь
$vad['items'] = array( $vad['items'] = array(
724,724,724,724,724,724,724,724,724,724,724,724,724,724, 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, 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; $vad['items'] = 724;
} }
if( $vad['items'] != 0 ) { if( $vad['items'] != 0 ) {
//Выбрасываем предмет //Выбрасываем предмет
mysql_query('INSERT INTO `dungeon_actions` (`dn`,`time`,`x`,`y`,`uid`,`vars`,`vals`) VALUES ( 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'].'","" "'.$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; $vad['dn_delete'][$vad['items']] = false;
} }
if( $this->pickitem($obj,$vad['items'],$u->info['id'],'') ) { if( $this->pickitem($obj,$vad['items'],$u->info['id'],'') ) {
$r = 'Вы обнаружили предметы...'; $r = 'Вы обнаружили предметы...';
}else{ }else{
$r = 'Что-то пошло не так, предметы растворились...'; $r = 'Что-то пошло не так, предметы растворились...';
} }
}else{ }else{
$r = 'Вы не нашли ничего полезного...'; $r = 'Вы не нашли ничего полезного...';
} }
} }
+4 -4
View File
@@ -1,15 +1,15 @@
<? <?
if( isset($s[1]) && $s[1] == '106/btn1' ) { if( isset($s[1]) && $s[1] == '106/btn1' ) {
/* /*
Сундук: Кровавый подземник (4561) Сундук: Кровавый подземник (4561)
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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 ) { if( $vad['test1'][0] > 0 ) {
$r = 'Вы уже нажали на &quot;'.$obj['name'].'&quot;...'; $r = 'Вы уже нажали на &quot;'.$obj['name'].'&quot;...';
$vad['go'] = false; $vad['go'] = false;
} }
@@ -22,7 +22,7 @@ if( isset($s[1]) && $s[1] == '106/btn1' ) {
if( !isset($vad['dn_delete'][$vad['items']['id']]) ) { if( !isset($vad['dn_delete'][$vad['items']['id']]) ) {
$vad['dn_delete'][$vad['items']['id']] = false; $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']]); $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' ) { if( isset($s[1]) && $s[1] == '106/door1' ) {
/* /*
Сундук: Кровавый подземник (4561) Сундук: Кровавый подземник (4561)
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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'])) { if(!isset($vad['qst']['id'])) {
$r = 'Дверь закрыта. Сначала выполните задания Учителя.'; $r = 'Дверь закрыта. Сначала выполните задания Учителя.';
}else{ }else{
mysql_query('UPDATE `stats` SET `x` = -2,`y` = 6,`s` = 1 WHERE `id` = "'.$u->info['id'].'" LIMIT 1'); mysql_query('UPDATE `stats` SET `x` = -2,`y` = 6,`s` = 1 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
header('location: main.php'); header('location: main.php');
+3 -3
View File
@@ -1,9 +1,9 @@
<? <?
if( isset($s[1]) && $s[1] == '106/door2' ) { if( isset($s[1]) && $s[1] == '106/door2' ) {
/* /*
Сундук: Кровавый подземник (4561) Сундук: Кровавый подземник (4561)
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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'])) { if(!isset($vad['qst']['id'])) {
$r = 'Дверь закрыта. Сначала выполните задания Учителя.'; $r = 'Дверь закрыта. Сначала выполните задания Учителя.';
}else{ }else{
mysql_query('UPDATE `stats` SET `x` = -2,`y` = 1,`s` = 3 WHERE `id` = "'.$u->info['id'].'" LIMIT 1'); mysql_query('UPDATE `stats` SET `x` = -2,`y` = 1,`s` = 3 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
header('location: main.php'); header('location: main.php');
+12 -12
View File
@@ -1,9 +1,9 @@
<? <?
if( isset($s[1]) && $s[1] == '106/door3' ) { if( isset($s[1]) && $s[1] == '106/door3' ) {
/* /*
Сундук: Кровавый подземник (4561) Сундук: Кровавый подземник (4561)
*/ */
//Все переменные сохранять в массиве $vad ! //Все переменные сохранять в массиве $vad !
$vad = array( $vad = array(
'go' => true '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')); $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'])) { if(!isset($vad['qst']['id']) || !isset($vad['itm']['id'])) {
$r = 'Дверь закрыта. Сначала выполните задания Учителя и купите Футболку с Эликсиром.'; $r = 'Дверь закрыта. Сначала выполните задания Учителя и купите Футболку с Эликсиром.';
}else{ }else{
//Начало обучения //Начало обучения
$humor = array( $humor = array(
0 => array( 0 => array(
':maniac: Сильно не бейте ;)',':beggar: Будет попрошайничать - бейте!',':pal: Возможно светлый!', ':maniac: Сильно не бейте ;)',':beggar: Будет попрошайничать - бейте!',':pal: Возможно светлый!',
':vamp: Возможно темный!',':susel: Судя по здоровенному бицепсу - это мужик!',':duel: И сразу же кинулся в бой!', ':vamp: Возможно темный!',':susel: Судя по здоровенному бицепсу - это мужик!',':duel: И сразу же кинулся в бой!',
':friday: Не долго думав он начал искать собутыльника!',':doc: Лекарь: Новичок! Да, да! Ты! Если тебя сломают - у знахаря тебя соберут обратно!' ':friday: Не долго думав он начал искать собутыльника!',':doc: Лекарь: Новичок! Да, да! Ты! Если тебя сломают - у знахаря тебя соберут обратно!'
), ),
1 => array( 1 => array(
':maniac: Помните! Девочек не бьем ;)',':nail: Она красит ногти, не отвлекайте все сразу ;)',':pal: Возможно светлая!', ':maniac: Помните! Девочек не бьем ;)',':nail: Она красит ногти, не отвлекайте все сразу ;)',':pal: Возможно светлая!',
':vamp: Возможно темная!',':rev: Судя по красивой одежде - это женщина!',':hug: И сразу же кинулась всех целовать!', ':vamp: Возможно темная!',':rev: Судя по красивой одежде - это женщина!',':hug: И сразу же кинулась всех целовать!',
':angel2: Ангел сошел с небес...' ':angel2: Ангел сошел с небес...'
) )
); );
$humor = $humor[$u->info['sex']]; $humor = $humor[$u->info['sex']];
//$u->info['fnq'] = 1; //$u->info['fnq'] = 1;
//mysql_query('UPDATE `users` SET `fnq` = "'.$u->info['fnq'].'" WHERE `id` = "'.$u->info['id'].'" LIMIT 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 `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 `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'); 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'); //mysql_query('UPDATE `stats` SET `x` = 0,`y` = 5 WHERE `id` = "'.$u->info['id'].'" LIMIT 1');
header('location: main.php'); header('location: main.php');
die(); die();

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