Файл: 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);
}
}