Файл: app/Http/Controllers/TutorialController.php
Строк: 280
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUserModel;
use AppModelsCardModel;
use AppModelsCardUserModel;
use AppModelsBattleLogModel;
use Auth;
use AppModelsTutorialTempModel;
use Services;
use Mail;
use AppMailEmailConfirmation;
use Cache;
class TutorialController extends Controller
{
public function tutorial1()
{
return view('tutorial.1');
}
public function tutorial1Confirm($sex)
{
if(!in_array($sex, ['m','w'])) return redirect('/tutorial/1');
$user = UserModel::find(Auth::user()->id);
$user->tutorial_stage = 2;
$user->sex = $sex;
$user->save();
return redirect('/tutorial/2');
}
public function tutorial2()
{
return view('tutorial.2');
}
public function tutorial2Confirm($action)
{
if($action == 'yes')
{
Services::setTutorialStage(3);
return redirect('/tutorial/3');
}
else
{
UserModel::destroy(Auth::user()->id);
Auth::logout();
return redirect('/');
}
}
public function tutorial3()
{
return view('tutorial.3');
}
public function tutorial3Confirm(Request $request)
{
$messages = [
'login.required' => 'Введите ник!',
'login.between' => 'Длина ника должна быть в пределах :min-:max символов!',
'login.alpha_num' => 'Ник должен содержать только латинские символы, кириллицу и цифры!',
'login.unique' => 'Игрок с таким ником уже существует!'
];
$this->validate($request, [
'login' => 'string|required|between:5,32|alpha_num|unique:users'
], $messages);
$user = UserModel::find(Auth::user()->id);
$user->login = $request->input('login');
$user->tutorial_stage = 4;
$user->save();
return redirect('/tutorial/4');
}
public function tutorial4()
{
$cards = CardModel::where('type', '=', 'tutorial-common')->get();
return view('tutorial.4')->with('cards', $cards);
}
public function tutorial4Confirm($card)
{
if(CardUserModel::where('user', '=', Auth::user()->id)->where('card', '=', $card)->count() == 0)
{
$userCard = new CardUserModel;
$userCard->user = Auth::user()->id;
$userCard->card = $card;
$userCard->status = 'redeemed';
$userCard->learn_time = 0;
$userCard->save();
}
else $userCard = CardUserModel::where('user', '=', Auth::user()->id)->where('card', '=', $card)->first();
Services::addTutorialMob($userCard->card, 180);
Services::setTutorialStage(5);
return redirect('/tutorial/5');
}
public function tutorial5()
{
$userCard = CardUserModel::with('getCardInfo')->where('user', '=', Auth::user()->id)->first();
if($userCard == null)
{
Services::setTutorialStage(4);
return redirect('/tutorial/4');
}
$tutorialInfo = TutorialTempModel::where('user', '=', Auth::user()->id)->first();
if($tutorialInfo->cardCooldown <= time() && $tutorialInfo->cardAttackCount == 0)
{
$tutorialInfo->cardCooldown = 0;
$tutorialInfo->cardAttackCount = $userCard->getCardInfo->attack_count;
$tutorialInfo->save();
}
$expProgressBars = (object) [
'my' => round($tutorialInfo->cardHealth*100/$userCard->getCardInfo->health),
'mob' => round($tutorialInfo->mobCardHealth*100/180)
];
$cardCooldown = $tutorialInfo->cardCooldown > time() ? $tutorialInfo->cardCooldown-time() : -2;
$battleLog = BattleLogModel::where('battle', '=', $tutorialInfo->id)->where('type', '=', 'tutorial')->orderBy('created_at', 'DESC')->take(10);
return view('tutorial.5', ["info" => $tutorialInfo, "userCard" => $userCard->getCardInfo, "log" => $battleLog, "cardCD" => $cardCooldown, "exp" => $expProgressBars]);
}
public function tutorial5Attack()
{
$userCard = CardUserModel::with('getCardInfo')->where('user', '=', Auth::user()->id)->first();
if($userCard == null)
{
Services::setTutorialStage(4);
return redirect('/tutorial/4');
}
$tutorialInfo = TutorialTempModel::where('user', '=', Auth::user()->id)->first();
$mobDamage = Services::getCardDamage(5, 10, $userCard->getCardInfo->armor);
$myDamage = 60;
if($tutorialInfo->cardCooldown > time()) return redirect('/tutorial/5')->with('error', 'До отката удара '.($tutorialInfo->cardCooldown-time().' секунд!'));
if($tutorialInfo->cardAttackCount == 0) return redirect('/tutorial/5');
if($tutorialInfo->tiredness == 0) return redirect('/tutorial/5')->with('error', 'Вы устали! Используйте усиление!');
if($myDamage >= $tutorialInfo->mobCardHealth)
{
TutorialTempModel::destroy($tutorialInfo->id);
$user = UserModel::find(Auth::user()->id);
$user->wins++;
$user->save();
Services::setTutorialStage(6);
return redirect('/tutorial/6');
}
else
{
$tutorialInfo->cardHealth -= $myDamage;
if($tutorialInfo->cardAttackCount-1 == 0) $tutorialInfo->cardCooldown = time()+$userCard->getCardInfo->cooldown;
$tutorialInfo->cardAttackCount -= 1;
if($tutorialInfo->tiredness >= 20) $tutorialInfo->tiredness -= 20;
$tutorialInfo->mobCardHealth -= $myDamage;
$tutorialInfo->save();
BattleLogModel::create([
'battle' => $tutorialInfo->id,
'type' => 'tutorial',
'message' => 'Вы нанесли '.$myDamage.' урона, получив '.$mobDamage.' урона'
]);
}
return redirect('/tutorial/5')->with('my', $myDamage)->with('mob', $mobDamage);
}
public function tutorial5Up()
{
$tutorialInfo = TutorialTempModel::where('user', '=', Auth::user()->id)->first();
if($tutorialInfo->tiredness == 0)
{
$tutorialInfo->tiredness = -1;
$tutorialInfo->save();
return redirect('/tutorial/5');
}
else return redirect('/tutorial/5')->with('error', 'Вы ещё не устали!');
}
public function tutorial6()
{
$cards = CardModel::where('type', '=', 'tutorial-premium')->get();
return view('tutorial.6')->with('cards', $cards);
}
public function tutorial6Confirm($card)
{
if(CardUserModel::where('user', '=', Auth::user()->id)->where('card', '=', $card)->count() == 0)
{
$userCard = new CardUserModel;
$userCard->user = Auth::user()->id;
$userCard->card = $card;
$userCard->status = 'redeemed';
$userCard->learn_time = 0;
$userCard->save();
}
else $userCard = CardUserModel::where('user', '=', Auth::user()->id)->where('card', '=', $card)->first();
Services::addMoney(1000, 150);
Services::setTutorialStage(7);
return redirect('/tutorial/5')->with('ok', 'Поздравляем вас с победой! Получено: 150 вальмер, 1000 монет и премиум-карта!');
}
public function tutorial7()
{
return view('tutorial.7');
}
public function tutorial7Confirm(Request $request)
{
$messages = [
'password.between' => 'Длина пароля должна быть в пределах :min-:max символов!',
'password.required' => 'Введите пароль!',
'password.alpha_num' => 'Пароль содержит недопустимые символы!'
];
$this->validate($request, [
'password' => 'string|between:6,64|required|alpha_num'
], $messages);
$user = UserModel::find(Auth::user()->id);
$user->password = bcrypt($request->input('password'));
$user->save();
Services::setTutorialStage(8);
return redirect('/tutorial/8');
}
public function tutorial8()
{
return view('tutorial.8');
}
public function tutorial8Confirm(Request $request)
{
$messages = [
'email.required' => 'Введите электронную почту!',
'email.email' => 'Недопустимый формат электронной почты!',
'email.unique' => 'Игрок с данной электронной почтой уже существует!'
];
$this->validate($request, [
'email' => 'email|required|unique:users,email'
], $messages);
$user = UserModel::find(Auth::user()->id);
$user->email = $request->input('email');
$user->save();
Services::addMoney(0, 200);
Services::setTutorialStage(11);
return redirect('/tutorial/11')->with('ok', 'Получено: 200 вальмер!');
}
public function tutorial11()
{
return view('tutorial.11');
}
public function tutorial11Confirm()
{
Services::setTutorialStage(12);
return redirect('/tutorial/12');
}
public function tutorial12()
{
return view('tutorial.12');
}
public function tutorial12Confirm()
{
Services::setTutorialStage(13);
return redirect('/tutorial/13');
}
public function tutorial13()
{
$userCards = CardUserModel::with('getCardInfo')->where('user', '=', Auth::user()->id)->get();
return view('tutorial.13')->with('userCards', $userCards);
}
public function tutorial13Confirm($card)
{
$userCard = CardUserModel::where('user', '=', Auth::user()->id)->where('id', '=', $card)->first();
if($userCard == null) return redirect('/tutorial/13');
Services::addTutorialMob($userCard->card, 250);
Services::setTutorialStage(14);
return redirect('/tutorial/14');
}
public function tutorial14()
{
if(Auth::user()->tutorial_stage == 15) return redirect('/');
$tutorialInfo = TutorialTempModel::where('user', '=', Auth::user()->id)->first();
$userCard = CardUserModel::with('getCardInfo')->where('user', '=', Auth::user()->id)->where('card', '=', $tutorialInfo->card)->first();
if($userCard == null)
{
Services::setTutorialStage(13);
return redirect('/tutorial/13');
}
if($tutorialInfo->cardCooldown <= time() && $tutorialInfo->cardAttackCount == 0)
{
$tutorialInfo->cardCooldown = 0;
$tutorialInfo->cardAttackCount = $userCard->getCardInfo->attack_count;
$tutorialInfo->save();
}
$expProgressBars = (object) [
'my' => round($tutorialInfo->cardHealth*100/$userCard->getCardInfo->health),
'mob' => round($tutorialInfo->mobCardHealth*100/250)
];
$cardCooldown = $tutorialInfo->cardCooldown > time() ? $tutorialInfo->cardCooldown-time() : -2;
$battleLog = BattleLogModel::where('battle', '=', $tutorialInfo->id)->where('type', '=', 'tutorial')->orderBy('created_at', 'DESC')->take(10);
return view('tutorial.14', ["info" => $tutorialInfo, "userCard" => $userCard->getCardInfo, "log" => $battleLog, "cardCD" => $cardCooldown, "exp" => $expProgressBars]);
}
public function tutorial14Attack()
{
if(Auth::user()->tutorial_stage == 15) return redirect('/');
$tutorialInfo = TutorialTempModel::where('user', '=', Auth::user()->id)->first();
$userCard = CardUserModel::with('getCardInfo')->where('user', '=', Auth::user()->id)->where('card', '=', $tutorialInfo->card)->first();
if($userCard == null)
{
Services::setTutorialStage(13);
return redirect('/tutorial/13');
}
$myDamage = 50;
$mobDamage = Services::getCardDamage(10, 25, $userCard->getCardInfo->armor);
if($tutorialInfo->cardCooldown > time()) return redirect('/tutorial/5')->with('error', 'До отката удара '.($tutorialInfo->cardCooldown-time().' секунд!'));
if($tutorialInfo->cardAttackCount == 0) return redirect('/tutorial/5');
if($myDamage >= $tutorialInfo->mobCardHealth)
{
TutorialTempModel::destroy($tutorialInfo->id);
$user = UserModel::find(Auth::user()->id);
$user->wins++;
$user->save();
Services::setTutorialStage(15);
Services::addMoney(1000, 100);
return redirect('/game')->with('ok', 'Противник повержен! Получено: 1000 монет и 100 вальмер!');
}
else
{
$tutorialInfo->cardHealth -= $mobDamage;
if($tutorialInfo->cardAttackCount-1 == 0) $tutorialInfo->cardCooldown = time()+$userCard->getCardInfo->cooldown;
$tutorialInfo->cardAttackCount -= 1;
$tutorialInfo->mobCardHealth -= $myDamage;
$tutorialInfo->save();
BattleLogModel::create([
'battle' => $tutorialInfo->id,
'type' => 'tutorial',
'message' => 'Вы нанесли '.$myDamage.' урона, получив '.$mobDamage.' урона'
]);
}
return redirect('/tutorial/14');
}
}