Вход Регистрация
Файл: app/Http/Controllers/ArenaController.php
Строк: 319
<?php

namespace AppHttpControllers;

use 
AppModelsCardUserModel;
use 
IlluminateHttpRequest;
use 
AppModelsUserModel;
use 
AppModelsArenaBattleModel;
use 
AppModelsArenaCardsModel;
use 
Auth;
use 
Services;

class 
ArenaController extends Controller
{
    public function 
index()
    {
        
$issetBattle = ArenaBattleModel::where('user1', Auth::user()->id)->orWhere('user2', Auth::user()->id)->count();
        if(
$issetBattle == 0)
        {
            
$result = 'Начать подбор противника!<br>
            <a href="/arena/find" class="btn btn-games2 btn-block">Искать</a>'
;
        }
        else
        {
            
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->orWhere('user2', Auth::user()->id)->first();
            if(
$battle->status == 'card1_pick') return redirect('/arena/pick/1');
            if(
$battle->status == 'card2_pick') return redirect('/arena/pick/2');
            if(
$battle->status == 'battle') return redirect('/arena/battle');
            if(
$battle->status == 'result') return redirect('/arena/result');
            if(
$battle->user1 == Auth::user()->id) $opponent = $battle->user2;
            else 
$opponent = $battle->user1;
            if(
$opponent == 0) $result = 'Идёт поиск противника!<br>
            <a href="/arena/cancel" class="btn btn-games2 btn-block">Отменить поиск</a>'
;
            else
            {
                if(
$battle->start_time < time())
                {
                    
$battle->status = 'card1_pick';
                    
$battle->save();
                    return 
redirect('/arena/pick/1');
                }
                
$result = 'Противник найден!<br>
                '
.($battle->start_time-time() > 0 ? 'До начала боя: '.Services::timer($battle->start_time-time()).'<br>' : 'Бой начался!<br>').'
                <a href="/arena/cancel" class="btn btn-games2 btn-block">Отменить поиск</a>'
;
            }
        }
        return 
view('game.battles.arena.index', ['result' => $result]);
    }

    public function 
find()
    {
        
$issetBattle = ArenaBattleModel::where('user1', Auth::user()->id)->orWhere('user2', Auth::user()->id)->count();
        if(
$issetBattle > 0) return back()->with('error', 'Подбор уже начат!');
        
$battles = ArenaBattleModel::where('status', 'prepare')->where('user2', 0)->inRandomOrder();
        
$myMaxCardLevel = Services::getMaxCardLevel(Auth::user()->id);
        if(
$battles->count() == 0)
        {
            
ArenaBattleModel::create([
                
'user1' => Auth::user()->id,
                
'card_level' => $myMaxCardLevel+1
            
]);
            return 
back()->with('ok', 'Поиск противника начат!');
        }
        else
        {
            
$battles = $battles->first();
            if(
$battles->card_level-1 > $myMaxCardLevel) $battles->card_level = $myMaxCardLevel+1;
            
$battles->user2 = Auth::user()->id;
            
$battles->start_time = time()+30;
            
$battles->save();
            return 
back()->with('ok', 'Противник найден!');
        }
    }

    public function 
cancelFind()
    {
        
$issetBattle = ArenaBattleModel::where('user1', Auth::user()->id)->orWhere('user2', Auth::user()->id);
        if(
$issetBattle->count() == 0) return back()->with('error', 'Подбор ещё не начат!');
        
$foundBattle = $issetBattle->first();
        if(
$foundBattle->user1 == Auth::user()->id) $foundBattle->delete();
        else
        {
            
$opponentMaxCardLevel = Services::getMaxCardLevel($foundBattle->user1);
            if(
$opponentMaxCardLevel != $foundBattle->card_level) $foundBattle->card_level = $opponentMaxCardLevel+1;
            
$foundBattle->user2 = 0;
            
$foundBattle->save();
        }
        return 
back();
    }

    public function 
cardPick1()
    {
        
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->where('user2', '<>', 0)->orWhere('user1', '<>', 0)->where('user2', Auth::user()->id)->where('status', '<>', 'prepare')->first();
        if(
$battle == null) return redirect('/arena');
        if(
$battle->pick_time == 0)
        {
            
$battle->pick_time = time()+60;
            
$battle->save();
        }
        if(
$battle->status == 'prepare') return redirect('/arena');
        if(
$battle->status == 'card2_pick') return redirect('/arena/pick/2');
        if(
$battle->status == 'battle') return redirect('/arena/battle');
        if(
$battle->status == 'result') return redirect('/arena/result');
        if(
$battle->user1 == Auth::user()->id) $opponent = $battle->user2;
        else 
$opponent = $battle->user1;
        if(
Services::getPickStatus(1, $battle->id, $battle->user1) && Services::getPickStatus(1, $battle->id, $battle->user2))
        {
            
$battle->status = 'card2_pick';
            
$battle->pick_time = time()+60;
            
$battle->save();
            return 
redirect('/arena/pick/2');
        }
        else
        {
            if(
$battle->pick_time < time() && $battle->pick_time != 0) return $this->cancelBattle($battle->id);
        }
        
$cards = CardUserModel::with('getCardInfo')->where('user', Auth::user()->id)->where('status', 'redeemed')->get();
        return 
view('game.battles.arena.pick1', ['battle' => $battle, 'cards' => $cards, 'opponent' => $opponent]);
    }

    public function 
cardPick1Confirm($id)
    {
        
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->where('user2', '<>', 0)->orWhere('user1', '<>', 0)->where('user2', Auth::user()->id)->where('status', '<>', 'prepare')->first();
        if(
$battle == null) return redirect('/arena');
        if(
$battle->status == 'prepare') return redirect('/arena');
        if(
$battle->status == 'card2_pick') return redirect('/arena/pick/2');
        if(
$battle->status == 'battle') return redirect('/arena/battle');
        if(
$battle->status == 'result') return redirect('/arena/result');
        
$card = CardUserModel::with('getCardInfo')->find($id);
        if(
$card == null) return redirect('/arena');
        if(
$card->getCardInfo->level > $battle->card_level) return back();
        if(
$card->user != Auth::user()->id) return back();
        
$pickCount = ArenaCardsModel::where('battle', $battle->id)->where('user', Auth::user()->id)->where('pick', 1)->count();
        if(
$pickCount > 0) return back()->with('error', 'Карта уже выбрана!');
        
ArenaCardsModel::create([
            
'battle' => $battle->id,
            
'user' => Auth::user()->id,
            
'card' => $id,
            
'health' => $card->getCardInfo->health+Services::getUpgradeBonus($card->getCardInfo->health, $card->upgrade_level),
            
'pick' => 1
        
]);
        return 
back()->with('ok', 'Карта выбрана!');
    }

    public function 
cardPick2()
    {
        
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->where('user2', '<>', 0)->orWhere('user1', '<>', 0)->where('user2', Auth::user()->id)->where('status', '<>', 'prepare')->first();
        if(
$battle == null) return redirect('/arena');
        if(
$battle->status == 'prepare') return redirect('/arena');
        if(
$battle->status == 'card1_pick') return redirect('/arena/pick/1');
        if(
$battle->status == 'battle') return redirect('/arena/battle');
        if(
$battle->status == 'result') return redirect('/arena/result');
        if(
$battle->user1 == Auth::user()->id) $opponent = $battle->user2;
        else 
$opponent = $battle->user1;
        if(
Services::getPickStatus(2, $battle->id, $battle->user1) && Services::getPickStatus(2, $battle->id, $battle->user2))
        {
            
$players = [Auth::user()->id, $opponent];
            
$battle->status = 'battle';
            
$battle->move_time = time()+30;
            
$battle->move = $players[array_rand($players)];
            
$battle->save();
            return 
redirect('/arena/battle');
        }
        else
        {
            if(
$battle->pick_time < time()) return $this->cancelBattle($battle->id);
        }
        
$pick1 = ArenaCardsModel::where('battle', $battle->id)->where('user', Auth::user()->id)->where('pick', 1)->first();
        
$cards = CardUserModel::with('getCardInfo')->where('user', Auth::user()->id)->where('id', '<>', $pick1->card)->where('status', 'redeemed')->get();
        return 
view('game.battles.arena.pick2', ['battle' => $battle, 'cards' => $cards, 'opponent' => $opponent]);
    }

    public function 
cardPick2Confirm($id)
    {
        
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->where('user2', '<>', 0)->orWhere('user1', '<>', 0)->where('user2', Auth::user()->id)->where('status', '<>', 'prepare')->first();
        if(
$battle == null) return redirect('/arena');
        if(
$battle->status == 'prepare') return redirect('/arena');
        if(
$battle->status == 'card1_pick') return redirect('/arena/pick/1');
        if(
$battle->status == 'battle') return redirect('/arena/battle');
        if(
$battle->status == 'result') return redirect('/arena/result');
        
$pick1 = ArenaCardsModel::where('battle', $battle->id)->where('user', Auth::user()->id)->where('pick', 1)->first();
        if(
$id == $pick1->id) return back();
        
$pickCount = ArenaCardsModel::where('battle', $battle->id)->where('user', Auth::user()->id)->where('pick', 2)->count();
        if(
$pickCount > 0) return back()->with('error', 'Карта уже выбрана!');
        
$card = CardUserModel::with('getCardInfo')->find($id);
        if(
$card == null) return redirect('/arena');
        if(
$card->getCardInfo->level > $battle->card_level) return back();
        if(
$card->user != Auth::user()->id) return back();
        
ArenaCardsModel::create([
            
'battle' => $battle->id,
            
'user' => Auth::user()->id,
            
'card' => $id,
            
'health' => $card->getCardInfo->health+Services::getUpgradeBonus($card->getCardInfo->health, $card->upgrade_level),
            
'pick' => 2
        
]);
        return 
back()->with('ok', 'Карта выбрана!');
    }

    public function 
battle()
    {
        
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->where('user2', '<>', 0)->orWhere('user1', '<>', 0)->where('user2', Auth::user()->id)->where('status', '<>', 'prepare')->firstOrFail();
        if(
$battle->status == 'prepare') return redirect('/arena');
        if(
$battle->status == 'card1_pick') return redirect('/arena/pick/1');
        if(
$battle->status == 'card2_pick') return redirect('/arena/pick/2');
        if(
$battle->status == 'result') return redirect('/arena/result');
        if(
$battle->user1 == Auth::user()->id) $opponent = $battle->user2;
        else 
$opponent = $battle->user1;
        
$myCard1 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle->id)->where('user', Auth::user()->id)->where('pick', 1)->first();
        
$opponentCard1 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle->id)->where('user', $opponent)->where('pick', 1)->first();
        
$myCard2 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle->id)->where('user', Auth::user()->id)->where('pick', 2)->first();
        
$opponentCard2 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle->id)->where('user', $opponent)->where('pick', 2)->first();
return 
view('game.battles.arena.battle', ['battle' => $battle, 'myCard1' => $myCard1, 'myCard2' => $myCard2, 'opponent' => $opponent, "opponentCard1" => $opponentCard1, "opponentCard2" => $opponentCard2]);
    }

    public function 
result()
    {
        
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->where('user2', '<>', 0)->orWhere('user1', '<>', 0)->where('user2', Auth::user()->id)->where('status', '<>', 'prepare')->first();
        if(
$battle == null) return redirect('/arena');
        if(
$battle->status == 'prepare') return redirect('/arena');
        if(
$battle->status == 'card1_pick') return redirect('/arena/pick/1');
        if(
$battle->status == 'card2_pick') return redirect('/arena/pick/2');
        if(
$battle->status == 'battle') return redirect('/arena/battle');
        
$winner = $battle->user1_win >= 3 ? $battle->user1 : $battle->user2;
        
$loser = $battle->user1_win >= 3 ? $battle->user2 : $battle->user1;
        
$winnerExp = rand(10*$battle->card_level, 25*$battle->card_level);
        
$winnerValmers = rand(1*$battle->card_level, 2*$battle->card_level);
        
$loserExp = rand(2*$battle->card_level, 5*$battle->card_level);
        
$loserValmers = 1;
        
$winUser = UserModel::find($winner);
        
$winUser->wins += 1;
        
$winUser->exp += $winnerExp;
        
$winUser->valmers += $winnerValmers;
        
$winUser->save();
        
$loseUser = UserModel::find($loser);
        
$loseUser->loses += 1;
        
$loseUser->exp += $loserExp;
        
$loseUser->valmers += $loserValmers;
        
$loseUser->save();
        
ArenaCardsModel::where('battle', $battle->id)->delete();
        
$battle->delete();
        
$message = $winner == Auth::user()->id ? 'Вы победили! Получено: '.$winnerExp.' монет, '.$winnerValmers.' вальмер!' : 'Вы проиграли! Получено: '.$loserExp.' монет, '.$loserValmers.' вальмер!';
        return 
redirect('/arena')->with('ok', $message);
    }

    public function 
cancelBattle($battle)
    {
        
ArenaCardsModel::where('battle', $battle)->delete();
        
ArenaBattleModel::destroy($battle);
        return 
redirect('/arena')->with('error', 'Битва отменена!');
    }
}
Онлайн: 2
Реклама