Вход Регистрация
Файл: 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');
    }
}
Онлайн: 1
Реклама