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

namespace AppHttpControllers;

use 
IlluminateHttpRequest;
use 
Auth;
use 
AppModelsUserModel;
use 
AppModelsWaveModel;
use 
AppModelsWaveRankModel;
use 
AppServicesServices;

class 
WavesController extends Controller
{
    public function 
index()
    {
        
$nextRank = WaveRankModel::where('rank', (Auth::user()->waves_rank+1))->first();
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        if(
$battle != null)
        {
            if(
$battle->status == 'tower') return redirect('/waves/tower');
            if(
$battle->status == 'enemies') return redirect('/waves/enemies');
            return 
view('game.battles.waves.index', ['battle' => $battle, "status" => 1, "rank" => $nextRank]);
        }
        else return 
view('game.battles.waves.index', ["status" => 0, "rank" => $nextRank]);
    }

    public function 
openBattle()
    {
        if(
Auth::user()->waves_cooldown <= time()) return back();
        if(
Auth::user()->valmers < 10) return back()->with('error', 'Недостаточно вальмер!');
        
$user = UserModel::find(Auth::user()->id);
        
$user->waves_cooldown = 0;
        
$user->valmers -= 10;
        
$user->save();
        return 
back()->with('ok', 'Битва открыта!');
    }

    public function 
startBattle()
    {
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        if(
$battle != null)
        {
            if(
$battle->status == 'tower') return redirect('/waves/tower');
            if(
$battle->status == 'enemies') return redirect('/waves/enemies');
        }
        
WaveModel::create([
            
'user' => Auth::user()->id,
            
'status' => 'prepare',
            
'attack' => Services::getAllParameters('attack', Auth::user()->id),
            
'time' => time()+15
        
]);
        return 
back();
    }

    public function 
startBattleTimer($battle)
    {
        
$btl = WaveModel::findOrFail($battle);
        if(
$btl == null) return response()->json(['status' => 0]);
        elseif(
$btl->status != 'prepare') return response()->json(['status' => 0]);
        else
        {
            if(
$btl->time <= time())
            {
                
$btl->status = 'tower';
                
$btl->time = time()+60;
                
$btl->tower_health = rand(10000,30000);
                
$btl->save();
            }
            return 
response()->json(['status' => 1, 'timer' => $btl->time-time()]);
        }
    }

    public function 
tower()
    {
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        if(
$battle == null) return redirect('/waves');
        if(
$battle->status == 'prepare') return redirect('/waves');
        if(
$battle->status == 'enemies') return redirect('/waves/enemies');
        if(
$battle->time < time() || $battle->tower_health <= 0)
        {
            
$battle->status = 'enemies';
            
$battle->time = time()+60;
            
$battle->attack_cooldown = 0;
            
$battle->save();
            return 
redirect('/waves/enemies');
        }
        return 
view('game.battles.waves.tower', ['battle' => $battle]);
    }

    public function 
towerAttack()
    {
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        if(
$battle == null) return redirect('/waves');
        if(
$battle->status == 'prepare') return redirect('/waves');
        if(
$battle->status == 'enemies') return redirect('/waves/enemies');
        if(
$battle->time < time())
        {
            
$battle->status = 'enemies';
            
$battle->time = time()+60;
            
$battle->attack_cooldown = 0;
            
$battle->save();
            return 
redirect('/waves/enemies');
        }
        if(
$battle->attack_cooldown > time()) return back()->with('error', 'Откат удара!');
        
$armor = (Services::getAllParameters('armor', Auth::user()->id)/2) < 200 ? (Services::getAllParameters('armor', Auth::user()->id)/2) : 200;
        
$battle->tower_health -= Services::getCardDamage($battle->attack, $battle->attack, $armor);
        
$battle->attack_cooldown = time()+5;
        
$battle->damage += Services::getCardDamage($battle->attack, $battle->attack, $armor);
        
$battle->save();
        return 
back();
    }

    public function 
enemies()
    {
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        if(
$battle == null) return redirect('/waves');
        if(
$battle->status == 'prepare') return redirect('/waves');
        if(
$battle->status == 'tower') return redirect('/waves/tower');
        if(
$battle->time < time()) return self::result();
        return 
view('game.battles.waves.enemies', ['battle' => $battle]);
    }

    public function 
enemiesAttack()
    {
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        if(
$battle == null) return redirect('/waves');
        if(
$battle->status == 'prepare') return redirect('/waves');
        if(
$battle->status == 'tower') return redirect('/waves/tower');
        if(
$battle->time < time()) return self::result();
        if(
$battle->attack_cooldown > time()) return back()->with('error', 'Откат удара!');
        
$armor = (Services::getAllParameters('armor', Auth::user()->id)/2) < 200 ? (Services::getAllParameters('armor', Auth::user()->id)/2) : 200;
        
$damage = Services::getCardDamage($battle->attack, $battle->attack, $armor);
        if(
$battle->lastMobHealth > 0)
        {
            
$battle->lastMobHealth = 0;
            
$battle->kills++;
        }
        else
        {
            if(
$damage >= 200) $battle->kills++;
            else 
$battle->lastMobHealth = 200-$damage;
        }
        
$battle->attack_cooldown = time()+5;
        
$battle->save();
        return 
back();
    }

    public function 
cooldown($battle)
    {
        
$btl = WaveModel::findOrFail($battle);
        if(
$btl == null) return response()->json(['status' => 0]);
        if(
$btl->attack_cooldown < time()) return response()->json(['status' => 0]);
        return 
response()->json(['status' => 1, 'timer' => $btl->attack_cooldown-time()]);
    }

    public function 
endtimer($battle)
    {
        
$btl = WaveModel::findOrFail($battle);
        if(
$btl == null) return response()->json(['status' => 0]);
        return 
response()->json(['status' => 1, 'timer' => $btl->time-time()]);
    }

    public function 
result()
    {
        
$battle = WaveModel::where('user', Auth::user()->id)->first();
        
$exp = round(abs($battle->damage*$battle->kills/200));
        
$rank_exp = round(abs($battle->damage*$battle->kills/400));
        if(
$battle->tower_health <= 0) $exp *= 2;
        
$user = UserModel::find(Auth::user()->id);
        
$exp *= 5;
        
$user->exp += $exp;
        
$user->waves_exp += $rank_exp;
        
$user->waves_cooldown = time()+1800;
        
$user->save();
        
$battle->delete();
        
session(['result' => 'Бой завершён! Получено: '.$exp.' монет и '.$rank_exp.' рангового опыта!']);
        return 
redirect('/waves');
    }

    public function 
up()
    {
        
$nextRank = WaveRankModel::where('rank', (Auth::user()->waves_rank+1))->first();
        if(
Auth::user()->waves_exp < $nextRank->exp) return back();
        
$message = 'Ранг повышен! Получено: '.$nextRank->reward.' вальмер!';
        
$user = UserModel::find(Auth::user()->id);
        
$user->valmers += $nextRank->reward;
        
$user->waves_exp = 0;
        
$user->waves_rank++;
        
$user->save();
        return 
back()->with('ok', $message);
    }
}
Онлайн: 1
Реклама