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

namespace AppHttpControllers;

use 
IlluminateHttpRequest;
use 
AppModelsUserModel;
use 
Auth;
use 
AppModelsTournamentBattleModel;
use 
AppModelsTournamentPlayerModel;
use 
AppServicesServices;

class 
TournamentController extends Controller
{
    public function 
index()
    {
        
$result = Auth::user()->tournament_result;
        if(
$result != '')
        {
            
$user = UserModel::find(Auth::user()->id);
            
$user->tournament_result = '';
            
$user->save();
        }
        if(
Auth::user()->tournament_battle != 0)
        {
            
$battle = TournamentBattleModel::findOrFail(Auth::user()->tournament_battle);
            if(
$battle->status == 'start' && $battle->time <= time())
            {
                
$players = TournamentPlayerModel::where('battle', $battle->id)->get();
                
$team1 = 0;
                
$team2 = 0;
                foreach(
$players as $pl)
                {
                    
$pl->team = $team1 == 3 ? 2 : 1;
                    if(
$team1 == 3) $team2++;
                    else 
$team1++;
                    
$pl->save();
                }
                
$battle->status = 'battle';
                
$battle->time = time()+120;
                
$battle->save();
                return 
redirect('/tournament/battle')->with('ok', 'Турнир начался!');
            }
            if(
$battle->status == 'battle') return redirect('/tournament/battle');
            
$players = TournamentPlayerModel::where('battle', $battle->id)->count();
            return 
view('game.battles.tournament.index', ['battle' => $battle, 'players' => $players, 'result' => $result]);
        }
        else return 
view('game.battles.tournament.index', ['result' => $result]);
    }

    public function 
enterBattle()
    {
        if(
Auth::user()->tournament_battle != 0) return back();
        if(
Auth::user()->tournament_cooldown > time()) return back();
        if(
Services::getAllParameters('health', Auth::user()->id) == 0) return back()->with('error', 'Выберите карты в колоду!');
        
$battle = TournamentBattleModel::find(Auth::user()->tournament_battle);
        if(
$battle != null && $battle->status == 'battle') return redirect('/tournament/battle');
        
$issetBattle = TournamentBattleModel::where('players', '<', 6)->first();
        if(
$issetBattle == null)
        {
            
$btl = TournamentBattleModel::create([
                
'status' => 'prepare',
                
'players' => 1
            
]);
        }
        else
        {
            
$btl = $issetBattle;
            
$btl->players++;
            if(
$btl->players == 6)
            {
                
$btl->time = time()+30;
                
$btl->status = 'start';
            }
            
$btl->save();
        }
        
TournamentPlayerModel::create([
            
'battle' => $btl->id,
            
'user' => Auth::user()->id,
            
'health' => Services::getAllParameters('health', Auth::user()->id)
        ]);
        
$user = UserModel::find(Auth::user()->id);
        
$user->tournament_battle = $btl->id;
        
$user->save();
        return 
back()->with('ok', 'Вы в очереди!');
    }

    public function 
leaveBattle()
    {
        if(
Auth::user()->tournament_battle == 0) return back();
        
$battle = TournamentBattleModel::find(Auth::user()->tournament_battle);
        if(
$battle->status == 'battle') return redirect('/tournament/battle');
        
TournamentPlayerModel::where('user', Auth::user()->id)->where('battle', $battle->id)->delete();
        
$user = UserModel::find(Auth::user()->id);
        
$user->tournament_battle = 0;
        
$user->save();
        if(
$battle->players == 1) $battle->delete();
        else
        {
            
$battle->players--;
            if(
$battle->players < 6)
            {
                
$battle->time = 0;
                
$battle->status = 'prepare';
            }
            
$battle->save();
        }
        return 
back()->with('ok', 'Вы вышли из очереди!');
    }

    public function 
battle()
    {
        if(
Auth::user()->tournament_battle == 0) return redirect('/tournament');;
        
$battle = TournamentBattleModel::where('id', Auth::user()->tournament_battle)->first();
        if(
$battle->status == 'prepare' && $battle->status == 'start') return redirect('/tournament');
        
$my = TournamentPlayerModel::where('user', Auth::user()->id)->where('battle', $battle->id)->first();
        
$players = TournamentPlayerModel::where('battle', $battle->id)->where('health', '<', 1)->get();
        foreach(
$players as $pl)
        {
            if(
$pl->respawn_time <= time())
            {
                
$pl->health = Services::getAllParameters('health', $pl->user);
        
$pl->respawn_time = 0;
                
$pl->save();
            }
        }
        if(
$battle->time <= time()) return self::result();
        
$team1Alive = TournamentPlayerModel::where('battle', $battle->id)->where('team', $my->team)->where('health', '>', 0)->count();
        
$team2Alive = TournamentPlayerModel::where('battle', $battle->id)->where('team', '<>', $my->team)->where('health', '>', 0)->count();
        if(
$my->opponent == 0)
        {
            
$opponent = TournamentPlayerModel::with('getUserInfo')->where('user', '<>', Auth::user()->id)->where('battle', $battle->id)->where('health', '>', 0)->where('team', '<>', $my->team)->inRandomOrder()->first();
            if(
$opponent != null)
            {
                
$my->opponent = $opponent->id;
                
$my->save();
                return 
redirect('/tournament/battle');
            }
            else return 
view('game.battles.tournament.battle', ['battle' => $battle, 'my' => $my, 't1a' => $team1Alive, 't2a' => $team2Alive]);
        }
        else
        {
            
$opponent = TournamentPlayerModel::with('getUserInfo')->find($my->opponent);
            if(
$opponent->health <= 0)
            {
                
$my->opponent = 0;
                
$my->save();
                return 
redirect('/tournament/battle');
            }
        }
        return 
view('game.battles.tournament.battle', ['battle' => $battle, 'my' => $my, 'opponent' => $opponent, 't1a' => $team1Alive, 't2a' => $team2Alive]);
    }

    public function 
attack()
    {
        if(
Auth::user()->tournament_battle == 0) return redirect('/tournament');;
        
$battle = TournamentBattleModel::where('id', Auth::user()->tournament_battle)->first();
        if(
$battle->status == 'prepare' && $battle->status == 'start') return redirect('/tournament');
        
$my = TournamentPlayerModel::where('user', Auth::user()->id)->where('battle', $battle->id)->first();
        if(
$my->opponent == 0) return redirect('/tournament/battle');
        if(
$my->attack_cooldown > time()) return back()->with('error', 'Откат удара!');
        
$opponent = TournamentPlayerModel::with('getUserInfo')->find($my->opponent);
        
$attack = Services::getAllParameters('attack', Auth::user()->id);
        
$armor = 0;//Services::getAllParameters('armor', $opponent->user)
        
$damage = Services::getCardDamage($attack, $attack, $armor);
        if(
$damage >= $opponent->health)
        {
            
$damage = $opponent->health;
            
$opponent->health = 0;
            
$opponent->respawn_time = time()+5;
            
$opponent->save();
            if(
$my->team == 1) $battle->team1_points++;
            else 
$battle->team2_points++;
            
$battle->save();
            
$my->points++;
        }
        else
        {
            
$opponent->health -= $damage;
            
$opponent->save();
        }
        
$my->attack_cooldown = time()+rand(3,5);
        
$my->damage += $damage;
        
$my->save();
        return 
redirect('/tournament/battle');
    }

    public function 
change()
    {
        if(
Auth::user()->tournament_battle == 0) return redirect('/tournament');;
        
$battle = TournamentBattleModel::where('id', Auth::user()->tournament_battle)->first();
        if(
$battle->status == 'prepare' && $battle->status == 'start') return redirect('/tournament');
        
$my = TournamentPlayerModel::where('user', Auth::user()->id)->where('battle', $battle->id)->first();
        
$opponent = TournamentPlayerModel::with('getUserInfo')->where('user', '<>', Auth::user()->id)->where('battle', $battle->id)->where('health', '>', 0)->where('team', '<>', $my->team)->where('id', '<>', $my->opponent)->inRandomOrder()->first();
        
$my->opponent = $opponent->id;
        
$my->save();
        return 
redirect('/tournament/battle');
    }

    public function 
result()
    {
        
$battle = TournamentBattleModel::where('id', Auth::user()->tournament_battle)->first();
        if(
$battle == null) return redirect('/tournament');
        if(
Auth::user()->tournament_battle == 0) return redirect('/tournament');
        if(
$battle->team1_points > $battle->team2_points) $winner = 1;
        elseif(
$battle->team1_points < $battle->team2_points) $winner = 2;
        else 
$winner = 0;
        
$players = TournamentPlayerModel::where('battle', $battle->id)->get();
        foreach(
$players as $pl)
        {
            
$winner_coeff = $pl->team == $winner ? 2 : 1;
            
$exp = round(($pl->damage/100)*$pl->points*$winner_coeff);
            
$result = $winner_coeff == 2 ? 'Ваша команда победила!<br>' : 'Ваша команда проиграла!<br>';
            
$result .= 'Награда: '.$exp.' монет и '.$pl->points.' вальмер!<br>';
            
$user = UserModel::find($pl->user);
            
$user->valmers += $pl->points;
            
$user->exp += $exp;
            
$user->tournament_battle = 0;
            
$user->tournament_result = $result;
            
$user->tournament_cooldown = time()+1800;
            
$user->save();
            
$pl->delete();
        }
        
$battle->delete();
        return 
redirect('/tournament');
    }
}
Онлайн: 2
Реклама