Вход Регистрация
Файл: 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() > 'До начала боя: '.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-$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 >= $battle->user1 $battle->user2;
        
$loser $battle->user1_win >= $battle->user2 $battle->user1;
        
$winnerExp rand(10*$battle->card_level25*$battle->card_level);
        
$winnerValmers rand(1*$battle->card_level2*$battle->card_level);
        
$loserExp rand(2*$battle->card_level5*$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''Битва отменена!');
    }
}
Онлайн: 1
Реклама