Обучение #39

Merged
lopar merged 15 commits from maksym into dev 2023-01-23 11:45:10 +00:00
21 changed files with 643 additions and 283 deletions
Showing only changes of commit 3f579afaed - Show all commits

View File

@ -4,22 +4,17 @@ namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory; use DarksLight2\Training\StepFactory;
class SecondStep extends StepFactory class ChatFirstQuest extends StepFactory
{ {
public function getTitle(): string public function getTitle(): string
{ {
return 'Тест'; return 'Начало.';
} }
public function getMessage(): string public function getMessage(): string
{ {
return 'Тест'; return 'Отправьте сообщение в общий чат.';
}
public function getShortName(): string
{
return 'second_step';
} }
public function getRewards(): array public function getRewards(): array
@ -27,4 +22,13 @@ class SecondStep extends StepFactory
return []; return [];
} }
public function getShortName(): string
Review

Это методы, возвращающие.. константу?

Это методы, возвращающие.. константу?
Review

Это добавляет гибкости. Захочешь ты для определённого задания сделать логику отличную от других, сможешь спокойно это сделать, плюс я уже убедился что это хорошое решение, когда решил переписать логику трейнинга.

Это добавляет гибкости. Захочешь ты для определённого задания сделать логику отличную от других, сможешь спокойно это сделать, плюс я уже убедился что это хорошое решение, когда решил переписать логику трейнинга.
{
return 'chat_first_quest';
}
public function isInfo(): bool
{
return false;
}
} }

View File

@ -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 [];
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -1,34 +0,0 @@
<?php
namespace DarksLight2\Training\Steps;
use DarksLight2\Training\StepFactory;
class FirstStep extends StepFactory
{
public function getTitle(): string
{
return 'Добро пожаловать в игру!';
}
public function getMessage(): string
{
return 'Мы поможем Вам адаптироваться в нашей браузерной онлайн игре.<br>
Суть игры, заключается стремлении стать непобедимым бойцом в игре среди других персонажей!<br>
Сделать это сможет каждый игрок, путём усиления своего персонажа, предметов улучшенного качества, интеграции рун и чарок в предметы и других, интересных усилений.<br>
На общем фоне слева, Вы можете наблюдать своего персонажа ( слева ), на котором показаны пустые слоты под предметы, его параметры, ваши деньги, победы/поражения, а с права, общее окно разных локаций, таких как: Магазин, Ремонтная Мастерская, Здание лото, Здание Бойцовского Клуба где проходят поединки, Почта, Переход на Страшилкину Улицу и т.д.<br>
Далее, мы подскажем Вам, для чего служит нижний фрейм.';
}
public function getRewards(): array
{
return [];
}
public function getShortName(): string
{
return 'first_step';
}
}

View File

@ -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';
}
}

View File

@ -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 [];
}
}

View File

@ -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;
}
}

View File

@ -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 '';
}
}

View File

@ -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 'Уворотов и Силачей';
}
}

View File

@ -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 [];
}
}

View File

@ -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'];
}
}

View File

@ -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'];
}
}

View File

@ -1,6 +1,7 @@
<?php <?php
use Core\Db; use Core\Db;
use DarksLight2\Training\TrainingManager;
use Insallah\Math; use Insallah\Math;
/* /*
@ -2054,6 +2055,10 @@ class Priems
'UPDATE `stats` SET `priems` = "' . $p . '" WHERE `id` = "' . $this->u->info['id'] . '" LIMIT 1' 'UPDATE `stats` SET `priems` = "' . $p . '" WHERE `id` = "' . $this->u->info['id'] . '" LIMIT 1'
); );
if ($upd) { if ($upd) {
TrainingManager::getInstance()
->addPoint('my_user_fourth_quest', function (TrainingManager $manager) {
$manager->store();
});
$this->u->info['priems'] = $p; $this->u->info['priems'] = $p;
} }
} else { } else {

View File

@ -36,8 +36,11 @@ if (!defined('GAME_VERSION')) {
} }
use Core\{Config, Database, Db}; use Core\{Config, Database, Db};
use DarksLight2\Training\TrainingException;
use DarksLight2\Training\TrainingManager; use DarksLight2\Training\TrainingManager;
$training_manager = TrainingManager::getInstance(User::start()->info['id']);
function var_info($vars, $d = false) function var_info($vars, $d = false)
{ {
echo "<pre style='border: 1px solid gray;border-radius: 5px;padding: 3px 6px;background: #cecece;color: black;font-family: Arial;font-size: 12px;'>\n"; echo "<pre style='border: 1px solid gray;border-radius: 5px;padding: 3px 6px;background: #cecece;color: black;font-family: Arial;font-size: 12px;'>\n";
@ -559,11 +562,10 @@ $spl = $spl['exp'];
echo '<script>top.myexpLineTop27(' . $u->info['exp'] . ',' . $spl . ');' . $tjs . 'top.ctest("' . $u->info['city'] . '");top.sd4key="' . $u->info['nextAct'] . '"; var battle = ' . (0 + $u->info['battle']) . '; top.hic();</script></body> echo '<script>top.myexpLineTop27(' . $u->info['exp'] . ',' . $spl . ');' . $tjs . 'top.ctest("' . $u->info['city'] . '");top.sd4key="' . $u->info['nextAct'] . '"; var battle = ' . (0 + $u->info['battle']) . '; top.hic();</script></body>
</html>'; </html>';
$training_manager = TrainingManager::getInstance(); try {
$training_manager->render();
if($u->room['file']=='cp1') { } catch (TrainingException $e) {
$training_manager->first_step->render(); echo $e->getMessage();
$training_manager->second_step->render();
} }
?> ?>
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.2/modernizr.js"></script>--> <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.2/modernizr.js"></script>-->

View File

@ -139,6 +139,8 @@ function thisInfRm($id, $tp = null, $json = false)
} }
if (isset($_GET['loc'])) { if (isset($_GET['loc'])) {
$training_manager = \DarksLight2\Training\TrainingManager::getInstance();
$go = mysql_fetch_array( $go = mysql_fetch_array(
mysql_query( mysql_query(
'SELECT * FROM `room` WHERE `code` = "' . mysql_real_escape_string( 'SELECT * FROM `room` WHERE `code` = "' . mysql_real_escape_string(
@ -146,210 +148,228 @@ if (isset($_GET['loc'])) {
) . '" AND `city` = "' . $u->info['city'] . '" LIMIT 1' ) . '" AND `city` = "' . $u->info['city'] . '" LIMIT 1'
) )
); );
$tr_pl = mysql_fetch_array(
mysql_query(
'SELECT `id`,`v1` FROM `eff_users` WHERE `id_eff` = 4 AND `uid` = "' . $u->info['id'] . '" AND `delete` = "0" ORDER BY `v1` DESC LIMIT 1'
)
);
//Проверяем костыли if (in_array(
$kos1 = mysql_fetch_array( $go['file'],
mysql_query( $training_manager->getRegistered(
'SELECT `id`,`item_id` FROM `items_users` WHERE `inOdet` = 3 AND `uid` = "' . $u->info['id'] . '" AND `delete` = 0 LIMIT 1' )[$training_manager->getCurrentStepName()]->allowedToMove()
) )) {
);
$kos2 = mysql_fetch_array(
mysql_query(
'SELECT `id`,`item_id` FROM `items_users` WHERE `inOdet` = 14 AND `uid` = "' . $u->info['id'] . '" AND `delete` = 0 LIMIT 1'
)
);
if ($kos1['item_id'] == 630 || $kos1['item_id'] == 631) { $tr_pl = mysql_fetch_array(
$kos1['good'] = 1; mysql_query(
} else { 'SELECT `id`,`v1` FROM `eff_users` WHERE `id_eff` = 4 AND `uid` = "' . $u->info['id'] . '" AND `delete` = "0" ORDER BY `v1` DESC LIMIT 1'
$kos1['good'] = 0; )
} );
if ($kos2['item_id'] == 630 || $kos2['item_id'] == 631) {
$kos2['good'] = 1;
} else {
$kos2['good'] = 0;
}
if (isset($tr_pl['id'])) { //Проверяем костыли
$kos1 = mysql_fetch_array(
mysql_query(
'SELECT `id`,`item_id` FROM `items_users` WHERE `inOdet` = 3 AND `uid` = "' . $u->info['id'] . '" AND `delete` = 0 LIMIT 1'
)
);
$kos2 = mysql_fetch_array(
mysql_query(
'SELECT `id`,`item_id` FROM `items_users` WHERE `inOdet` = 14 AND `uid` = "' . $u->info['id'] . '" AND `delete` = 0 LIMIT 1'
)
);
$zadej = 0; if ($kos1['item_id'] == 630 || $kos1['item_id'] == 631) {
$kos1['good'] = 1;
if ($tr_pl['v1'] == 1) { } else {
//все ок $kos1['good'] = 0;
} elseif ($tr_pl['v1'] == 2) {
if ($kos1['good'] == 0 && $kos2['good'] == 0) {
$re = 'Вы травмированы. Не возможно с такими увечиями передвигаться без костылей.';
$zadej = -1;
} else {
$zadej = 20;
}
} elseif ($tr_pl['v1'] == 3 || $tr_pl['v1'] == 4) {
if ($kos1['good'] == 0 || $kos2['good'] == 0) {
$re = 'Вы травмированы. Не возможно с такими увечиями передвигаться без костылей.';
$zadej = -1;
} else {
$zadej = 30;
}
} }
} if ($kos2['item_id'] == 630 || $kos2['item_id'] == 631) {
if ($u->room['extdlg'] > 0) { $kos2['good'] = 1;
header('location: main.php?talk=' . $u->room['extdlg'] . ''); } else {
} elseif (isset($zadej) && $zadej == -1) { $kos2['good'] = 0;
if (!isset($re) || $re == '') {
$re = 'У вас травма, нельзя перемещаться...';
} }
//Травма...
} elseif ($u->info['align'] == 2 && $go['nochaos'] == 1) {
$re = 'Проход для хаосников закрыт!';
} elseif ($u->info['inTurnir'] > 0) {
$re = 'Вы не можете перемещаться, Вы приняли заявку на турнир ...';
} elseif (($kos1['good'] == 0 && $kos2['good'] == 0) && ((!isset($zadej) || $zadej == 0) && $u->aves['now'] >= $u->aves['max'] && $u->room['name'] != 'Общежитие' && $u->room['name'] != 'Общ. Этаж 1' && $u->room['name'] != 'Общ. Этаж 2' && $u->room['name'] != 'Общ. Этаж 3')) {
$re = 'Вы не можете перемещаться, рюкзак переполнен ...';
} elseif (isset($go['id'])) {
$rmgo = [];
$rg = explode(',', $u->room['roomGo']);
$mlvl = explode('-', $go['level']);
$i = 0;
while ($i < count($rg)) {
if ($rg[$i] >= 0) {
$rmgo[$rg[$i]] = 1;
} if (isset($tr_pl['id'])) {
$i++; $zadej = 0;
}
$sleep = $u->testAction('`vars` = "sleep" AND `uid` = "' . $u->info['id'] . '" LIMIT 1', 1);
if (isset($sleep['id']) && $sleep['vars'] == 'sleep' && $go['name'] != 'Общ. Этаж 1' && $go['name'] != 'Общ. Этаж 2' && $go['name'] != 'Общ. Этаж 3') {
$re = '<font color=red><b>Вы можете перемещаться только когда бодрствуете.</b></font>';
echo '&nbsp;' . $re;
} elseif ($u->info['timeGo'] >= time()) {
$re = 'Вы не можете перемещаться еще ' . ($u->info['timeGo'] - time()) . ' сек.';
} elseif ($rmgo[$go['id']] == 1) {
$alg = explode('-', $go['align']);
$ku = mysql_fetch_array(
mysql_query('SELECT `id` FROM `katok_zv` WHERE `uid` = "' . $u->info['id'] . '" LIMIT 1')
);
if (isset($ku['id'])) { if ($tr_pl['v1'] == 1) {
$re = 'Вы подали заявку на турнир и не можете перемещаться...'; //все ок
} elseif (($alg[0] > $u->info['align'] || $alg[1] < $u->info['align']) && $go['align'] != 0 && $u->info['admin'] == 0) { } elseif ($tr_pl['v1'] == 2) {
$re = 'Ты не ту склонность выбрал.. Дружок :)'; if ($kos1['good'] == 0 && $kos2['good'] == 0) {
} elseif ($u->info['zv'] > 0) { $re = 'Вы травмированы. Не возможно с такими увечиями передвигаться без костылей.';
$test_zv = mysql_fetch_array( $zadej = -1;
mysql_query(
'SELECT * FROM `zayvki` WHERE `id` = "' . $u->info['zv'] . '" AND `cancel` = 0 AND `start` = 0 AND `time` > "' . (time(
) - 60 * 60 * 2) . '" LIMIT 1'
)
);
if (isset($test_zv['id'])) {
$re = 'Подали заявку и убегаем?.. Не хорошо!';
} else { } else {
$re = 'Ваша заявка была удалена... Теперь вы можете перейти в другую локацию!'; $zadej = 20;
mysql_query('UPDATE `stats` SET `zv` = 0 WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
} }
} elseif ((($go['clan'] > 0 && $u->info['clan'] != $go['clan']) || ($go['clan'] == -1 && $u->info['clan'] == 0)) && $u->info['admin'] == 0) { } elseif ($tr_pl['v1'] == 3 || $tr_pl['v1'] == 4) {
$re = 'Вы не можете попасть в эту комнату'; if ($kos1['good'] == 0 || $kos2['good'] == 0) {
} elseif ($go['sex'] > 0 && $go['sex'] - 1 != $u->info['sex'] && $u->info['invis'] != 1 && $u->info['invis'] < time( $re = 'Вы травмированы. Не возможно с такими увечиями передвигаться без костылей.';
) && $u->info['admin'] == 0) { $zadej = -1;
$re = 'Вы не можете попасть в эту комнату'; } else {
} elseif ($mlvl[0] > $u->info['level'] && $u->info['admin'] == 0) { $zadej = 30;
$re = 'Вы не можете попасть в эту комнату, уровень маловат ;)'; }
} elseif ($mlvl[1] < $u->info['level'] && $u->info['admin'] == 0) { }
$re = 'Вы не можете попасть в эту комнату, уровень высоковат ;)'; }
} elseif ($go['close'] == 0 || $u->info['admin'] > 0) { if ($u->room['extdlg'] > 0) {
$travms = mysql_fetch_array( header('location: main.php?talk=' . $u->room['extdlg'] . '');
} elseif (isset($zadej) && $zadej == -1) {
if (!isset($re) || $re == '') {
$re = 'У вас травма, нельзя перемещаться...';
}
//Травма...
} elseif ($u->info['align'] == 2 && $go['nochaos'] == 1) {
$re = 'Проход для хаосников закрыт!';
} elseif ($u->info['inTurnir'] > 0) {
$re = 'Вы не можете перемещаться, Вы приняли заявку на турнир ...';
} elseif (($kos1['good'] == 0 && $kos2['good'] == 0) && ((!isset($zadej) || $zadej == 0) && $u->aves['now'] >= $u->aves['max'] && $u->room['name'] != 'Общежитие' && $u->room['name'] != 'Общ. Этаж 1' && $u->room['name'] != 'Общ. Этаж 2' && $u->room['name'] != 'Общ. Этаж 3')) {
$re = 'Вы не можете перемещаться, рюкзак переполнен ...';
} elseif (isset($go['id'])) {
$rmgo = [];
$rg = explode(',', $u->room['roomGo']);
$mlvl = explode('-', $go['level']);
$i = 0;
while ($i < count($rg)) {
if ($rg[$i] >= 0) {
$rmgo[$rg[$i]] = 1;
}
$i++;
}
$sleep = $u->testAction(
'`vars` = "sleep" AND `uid` = "' . $u->info['id'] . '" LIMIT 1',
1
);
if (isset($sleep['id']) && $sleep['vars'] == 'sleep' && $go['name'] != 'Общ. Этаж 1' && $go['name'] != 'Общ. Этаж 2' && $go['name'] != 'Общ. Этаж 3') {
$re = '<font color=red><b>Вы можете перемещаться только когда бодрствуете.</b></font>';
echo '&nbsp;' . $re;
} elseif ($u->info['timeGo'] >= time()) {
$re = 'Вы не можете перемещаться еще ' . ($u->info['timeGo'] - time(
)) . ' сек.';
} elseif ($rmgo[$go['id']] == 1) {
$alg = explode('-', $go['align']);
$ku = mysql_fetch_array(
mysql_query( mysql_query(
'SELECT * FROM `eff_users` WHERE `uid` = "' . $u->info['id'] . '" and (`v1`="2" or `v1`="3") and `delete`=0 ORDER by v1 DESC' 'SELECT `id` FROM `katok_zv` WHERE `uid` = "' . $u->info['id'] . '" LIMIT 1'
) )
); );
//замедление перемешения при травмах if (isset($ku['id'])) {
$plus_timeGo = 0 + $zadej; // добавочное время при травме $re = 'Вы подали заявку на турнир и не можете перемещаться...';
if ($plus_timeGo < 0) { } elseif (($alg[0] > $u->info['align'] || $alg[1] < $u->info['align']) && $go['align'] != 0 && $u->info['admin'] == 0) {
$plus_timeGo = 0; $re = 'Ты не ту склонность выбрал.. Дружок :)';
} } elseif ($u->info['zv'] > 0) {
$test_zv = mysql_fetch_array(
if (((!isset($zadej) || $zadej == 0) && $u->aves['now'] >= $u->aves['max'] && $u->room['name'] != 'Общежитие' && $u->room['name'] != 'Общ. Этаж 1' && $u->room['name'] != 'Общ. Этаж 2' && $u->room['name'] != 'Общ. Этаж 3')) { mysql_query(
$plus_timeGo += 2 * 60; 'SELECT * FROM `zayvki` WHERE `id` = "' . $u->info['zv'] . '" AND `cancel` = 0 AND `start` = 0 AND `time` > "' . (time(
if ($kos1['good'] == 0) { ) - 60 * 60 * 2) . '" LIMIT 1'
$plus_timeGo += 1.5 * 60; )
} elseif ($kos1['good'] == 0) { );
$plus_timeGo += 1.5 * 60; if (isset($test_zv['id'])) {
} $re = 'Подали заявку и убегаем?.. Не хорошо!';
} } else {
$re = 'Ваша заявка была удалена... Теперь вы можете перейти в другую локацию!';
//end freez time go mysql_query(
'UPDATE `stats` SET `zv` = 0 WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
if ($u->stats['silver'] >= 1) {//время перемещения -20% );
$go['timeGO'] = floor($go['timeGO'] / 100 * 80); }
$plus_timeGo = floor($plus_timeGo / 100 * 80); } elseif ((($go['clan'] > 0 && $u->info['clan'] != $go['clan']) || ($go['clan'] == -1 && $u->info['clan'] == 0)) && $u->info['admin'] == 0) {
} $re = 'Вы не можете попасть в эту комнату';
$u->info['timeGo'] = time() + $go['timeGO'] + $plus_timeGo; } elseif ($go['sex'] > 0 && $go['sex'] - 1 != $u->info['sex'] && $u->info['invis'] != 1 && $u->info['invis'] < time(
$u->info['timeGoL'] = time(); ) && $u->info['admin'] == 0) {
$upd = mysql_query( $re = 'Вы не можете попасть в эту комнату';
'UPDATE `stats` SET `timeGo` = "' . $u->info['timeGo'] . '",`timeGoL` = "' . $u->info['timeGoL'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1' } elseif ($mlvl[0] > $u->info['level'] && $u->info['admin'] == 0) {
); $re = 'Вы не можете попасть в эту комнату, уровень маловат ;)';
if ($upd) { } elseif ($mlvl[1] < $u->info['level'] && $u->info['admin'] == 0) {
$upd2 = mysql_query( $re = 'Вы не можете попасть в эту комнату, уровень высоковат ;)';
'UPDATE `users` SET `room` = "' . $go['id'] . '",`online` = "' . time( } elseif ($go['close'] == 0 || $u->info['admin'] > 0) {
) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1' $travms = mysql_fetch_array(
mysql_query(
'SELECT * FROM `eff_users` WHERE `uid` = "' . $u->info['id'] . '" and (`v1`="2" or `v1`="3") and `delete`=0 ORDER by v1 DESC'
)
); );
if ($upd2) {
if ($u->room['file'] == 'bsenter' && $go['file'] != 'bsenter') { //замедление перемешения при травмах
//Удаляем все ставки в БС $plus_timeGo = 0 + $zadej; // добавочное время при травме
$sp_bs = mysql_query( if ($plus_timeGo < 0) {
'SELECT `id`,`bsid`,`money` FROM `bs_zv` WHERE `uid` = "' . $u->info['id'] . '" AND `inBot` = "0" AND `finish` = "0"' $plus_timeGo = 0;
); }
while ($pl_bs = mysql_fetch_array($sp_bs)) {
if (((!isset($zadej) || $zadej == 0) && $u->aves['now'] >= $u->aves['max'] && $u->room['name'] != 'Общежитие' && $u->room['name'] != 'Общ. Этаж 1' && $u->room['name'] != 'Общ. Этаж 2' && $u->room['name'] != 'Общ. Этаж 3')) {
$plus_timeGo += 2 * 60;
if ($kos1['good'] == 0) {
$plus_timeGo += 1.5 * 60;
} elseif ($kos1['good'] == 0) {
$plus_timeGo += 1.5 * 60;
}
}
//end freez time go
if ($u->stats['silver'] >= 1) {//время перемещения -20%
$go['timeGO'] = floor($go['timeGO'] / 100 * 80);
$plus_timeGo = floor($plus_timeGo / 100 * 80);
}
$u->info['timeGo'] = time() + $go['timeGO'] + $plus_timeGo;
$u->info['timeGoL'] = time();
$upd = mysql_query(
'UPDATE `stats` SET `timeGo` = "' . $u->info['timeGo'] . '",`timeGoL` = "' . $u->info['timeGoL'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
if ($upd) {
$upd2 = mysql_query(
'UPDATE `users` SET `room` = "' . $go['id'] . '",`online` = "' . time(
) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
if ($upd2) {
if ($u->room['file'] == 'bsenter' && $go['file'] != 'bsenter') {
//Удаляем все ставки в БС
$sp_bs = mysql_query(
'SELECT `id`,`bsid`,`money` FROM `bs_zv` WHERE `uid` = "' . $u->info['id'] . '" AND `inBot` = "0" AND `finish` = "0"'
);
while ($pl_bs = mysql_fetch_array($sp_bs)) {
mysql_query(
'UPDATE `bs_turnirs` SET `users` = `users` - 1 WHERE `id` = "' . $pl_bs['bsid'] . '" LIMIT 1'
);
}
unset($sp_bs, $pl_bs);
mysql_query( mysql_query(
'UPDATE `bs_turnirs` SET `users` = `users` - 1 WHERE `id` = "' . $pl_bs['bsid'] . '" LIMIT 1' 'UPDATE `bs_zv` SET `finish` = "' . time(
) . '" WHERE `uid` = "' . $u->info['id'] . '" AND `inBot` = "0" AND `finish` = "0"'
); );
} }
unset($sp_bs, $pl_bs);
mysql_query( $smt = $u->testAction(
'UPDATE `bs_zv` SET `finish` = "' . time( '`uid` = "' . $u->info['id'] . '" AND `time`>=' . (time(
) . '" WHERE `uid` = "' . $u->info['id'] . '" AND `inBot` = "0" AND `finish` = "0"' ) - 600) . ' AND `vars` = "create_snowball_cp" LIMIT 1',
1
);
if (isset($smt['id'])) {
mysql_query(
'DELETE FROM `actions` WHERE `id` = "' . $smt['id'] . '" LIMIT 1'
);
}
mysql_query(
'UPDATE `eff_users` SET `delete` = "' . time(
) . '" WHERE `id_eff` = "24" AND `uid` = "' . $u->info['id'] . '" AND `delete` = "0" LIMIT 24'
); );
}
$smt = $u->testAction( $u->info['room'] = $go['id'];
'`uid` = "' . $u->info['id'] . '" AND `time`>=' . (time( $u->room = $go;
) - 600) . ' AND `vars` = "create_snowball_cp" LIMIT 1', 1 if (!isset($_GET['mAjax'])) {
); echo '<script>top.chat.reflesh();</script>';
if (isset($smt['id'])) { }
mysql_query('DELETE FROM `actions` WHERE `id` = "' . $smt['id'] . '" LIMIT 1'); } else {
} $re = 'Вы не смогли перейти в локацию, возможно она была разрушена';
mysql_query(
'UPDATE `eff_users` SET `delete` = "' . time(
) . '" WHERE `id_eff` = "24" AND `uid` = "' . $u->info['id'] . '" AND `delete` = "0" LIMIT 24'
);
$u->info['room'] = $go['id'];
$u->room = $go;
if (!isset($_GET['mAjax'])) {
echo '<script>top.chat.reflesh();</script>';
} }
} else { } else {
$re = 'Вы не смогли перейти в локацию, возможно она была разрушена'; $re = 'Вы не смогли перейти в локацию';
} }
} elseif ($go['destroy'] == 1) {
$re = 'Здание было разрушено, в данный момент оно реставрируется';
} else { } else {
$re = 'Вы не смогли перейти в локацию'; $re = 'Временно закрыто';
} }
} elseif ($go['destroy'] == 1) {
$re = 'Здание было разрушено, в данный момент оно реставрируется';
} else { } else {
$re = 'Временно закрыто'; $re = 'Проход не существует';
} }
} else { } else {
$re = 'Проход не существует'; $re = 'Проход не существует';
} }
} else { } else {
$re = 'Проход не существует'; $re = 'Вам запрещено передвигаться до окончания обучения!!!';
} }
} }

View File

@ -1,4 +1,7 @@
<?php <?php
use DarksLight2\Training\TrainingManager;
if (!defined('GAME')) { if (!defined('GAME')) {
die(); die();
} }
@ -441,6 +444,11 @@ $tma = '';
WHERE WHERE
`id` = '" . (int)$u->info['id'] . "';" `id` = '" . (int)$u->info['id'] . "';"
)) { )) {
TrainingManager::getInstance()
->addPoint('my_user_third_quest', function (TrainingManager $manager) {
$manager->store();
});
//if($_GET['energy']>0) {echo '&nbsp; &nbsp;<font color=red>Увеличение способности "<B>Энергия</B>" произведено удачно</font><br>';} //if($_GET['energy']>0) {echo '&nbsp; &nbsp;<font color=red>Увеличение способности "<B>Энергия</B>" произведено удачно</font><br>';}
if ($_GET['str'] > 0) { if ($_GET['str'] > 0) {
echo '&nbsp; &nbsp;<font color=red>Увеличение способности "<B>Сила</B>" произведено удачно</font><br>'; echo '&nbsp; &nbsp;<font color=red>Увеличение способности "<B>Сила</B>" произведено удачно</font><br>';

View File

@ -4,8 +4,6 @@ if(!defined('GAME'))
{ {
die(); die();
} }
require_once('/home/newcom1/public_html/_incl_data/__config.php');
require_once('/home/newcom1/public_html/_incl_data/class/__db_connect.php');
if($u->room['file']=='cp1') { if($u->room['file']=='cp1') {

View File

@ -1,31 +0,0 @@
<?php
/**
* @var string $token
* @var int $time
* @var string $button_text
* @var object $step
*/
$short_name = 'first_step';
require 'step.php';
?>
<script>
const training_data = () => {
return {
content: `<?=$step->message?>`,
title: `<?=$step->title?>`,
button_text: `<?=$button_text?>`,
time: <?=$time?>,
token: '<?=$token?>',
short_name: '<?=$short_name?>',
}
}
</script>
<script src="/js/training/modal.js"></script>
<script>
modal.show()
</script>

View File

@ -1,31 +0,0 @@
<?php
/**
* @var string $token
* @var int $time
* @var string $button_text
* @var object $step
*/
$short_name = 'second_step';
require 'step.php';
?>
<script>
const training_data = () => {
return {
content: `<?=$step->message?>`,
title: `<?=$step->title?>`,
button_text: `<?=$button_text?>`,
time: <?=$time?>,
token: '<?=$token?>',
short_name: '<?=$short_name?>',
}
}
</script>
<script src="/js/training/modal.js"></script>
<script>
modal.show()
</script>

View File

@ -7,6 +7,7 @@ if (!defined('GAME_VERSION')) {
use Core\Config; use Core\Config;
use Core\Database; use Core\Database;
use Core\Db; use Core\Db;
use DarksLight2\Training\TrainingManager;
Config::init(); Config::init();
@ -265,6 +266,18 @@ if (isset($_POST['msg']) && str_replace(' ', '', $_POST['msg']) != '') {
mysql_query("UPDATE `chat` SET `delete` = 1 WHERE `login` = '" . $u->info['login'] . "' LIMIT 1000"); mysql_query("UPDATE `chat` SET `delete` = 1 WHERE `login` = '" . $u->info['login'] . "' LIMIT 1000");
$_POST['msg'] = 'Я спамер ' . $u->info['login'] . ' и меня нужно заблокировать https://new-combats.com/info/' . $u->info['id'] . ''; $_POST['msg'] = 'Я спамер ' . $u->info['login'] . ' и меня нужно заблокировать https://new-combats.com/info/' . $u->info['id'] . '';
$training_manager = TrainingManager::getInstance();
Review

И эта штука один раз отработала и дальше будет вхолостую колбаситься на каждое сообщение в чате?

И эта штука один раз отработала и дальше будет вхолостую колбаситься на каждое сообщение в чате?
Review

Я не знал как по другому, может не додумал

Я не знал как по другому, может не додумал
$training_manager->addPoint('chat_first_quest');
if(preg_match("/to\[(.*?)\]/", $_POST['msg'])) {
$training_manager->addPoint('chat_second_quest');
}
if(preg_match("/private\[(.*?)\]/", $_POST['msg'])) {
$training_manager->addPoint('chat_third_quest');
}
mysql_query( mysql_query(
'INSERT INTO `chat` (`nosee`,`invis`,`da`,`delete`,`molch`,`new`,`login`,`to`,`city`,`room`,`time`,`type`,`spam`,`text`,`toChat`,`color`,`typeTime`,`sound`,`global`) VALUES ( 'INSERT INTO `chat` (`nosee`,`invis`,`da`,`delete`,`molch`,`new`,`login`,`to`,`city`,`room`,`time`,`type`,`spam`,`text`,`toChat`,`color`,`typeTime`,`sound`,`global`) VALUES (
"0", "0",