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