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

namespace AppHttpControllers;

use 
AppModelsCardUserModel;
use 
AppModelsCardModel;
use 
IlluminateHttpRequest;
use 
Auth;
use 
AppModelsMobTempModel;
use 
AppModelsUserModel;
use 
AppServicesServices;
use 
AppModelsMobRankModel;

class 
MobController extends Controller
{

    public function 
index()
    {
        if(!
in_array(Auth::user()->id, [1,2])) redirect('/');
        
$nextRank MobRankModel::where('rank', (Auth::user()->mobs_rank+1))->first();
        
$battle MobTempModel::where('user'Auth::user()->id)->first();
        if(
$battle != null) return redirect('/mobs/battle');
        
$selectedCard Auth::user()->mob_card Auth::user()->mob_card 0;
        if(
$selectedCard 0)
        {
            
$card CardUserModel::with('getCardInfo')->find($selectedCard);
            if(
$card == null)
            {
                
$user UserModel::find(Auth::user()->id);
                
$user->mob_card 0;
                
$user->save();
                return 
redirect('/mobs');
            }
            return 
view('game.battles.mobs.index', ['rank' => $nextRank'selectedCard' => $selectedCard'card' => $card]);
        }
        else return 
view('game.battles.mobs.index', ['rank' => $nextRank'selectedCard' => $selectedCard]);
    }

    public function 
start()
    {
        
$battle MobTempModel::where('user'Auth::user()->id)->first();
        if(
$battle != null) return redirect('/mobs/battle');
        if(
Auth::user()->mob_battles <= 0) return redirect('/mobs')->with('error''Недостаточно боёв!');
        if(
Auth::user()->mob_card == 0) return redirect('/mobs')->with('error''Выберите карту для битвы!');
        
$card CardUserModel::findOrFail(Auth::user()->mob_card);
        if(
$card->user != Auth::user()->id) return back();
        
$myStats = [
            
'card' => $card->id,
            
'health' => $card->getCardInfo->health+Services::getUpgradeBonus($card->getCardInfo->health$card->upgrade_level),
            
'cooldown' => 0
        
];
        
$mobHealth rand($card->getCardInfo->health+Services::getUpgradeBonus($card->getCardInfo->health$card->upgrade_level)-100$card->getCardInfo->health+Services::getUpgradeBonus($card->getCardInfo->health$card->upgrade_level)+10);
        
$mobStats = [
            
'card' => rand(1,29),
            
'health' => $mobHealth,
            
'max_health' => $mobHealth,
            
'attack' => rand($card->getCardInfo->max_attack+Services::getUpgradeBonus($card->getCardInfo->max_attack$card->upgrade_level)-50$card->getCardInfo->max_attack+Services::getUpgradeBonus($card->getCardInfo->max_attack$card->upgrade_level)+5),
            
'armor' => rand($card->getCardInfo->armor+Services::getUpgradeBonus($card->getCardInfo->armor$card->upgrade_level)-50$card->getCardInfo->armor+Services::getUpgradeBonus($card->getCardInfo->armor$card->upgrade_level)+5),
        ];
        
MobTempModel::create([
            
'user' => Auth::user()->id,
            
'status' => 'battle',
            
'myStats' => json_encode($myStats),
            
'mobStats' => json_encode($mobStats)
        ]);
        return 
redirect('/mobs/battle');
    }

    public function 
pick()
    {
        
$deck explode(';'Auth::user()->deck);
        
$cards CardUserModel::with('getCardInfo')->whereIn('id'$deck)->get();
        if(
count($cards) == 0) return redirect('/deck/my');
        return 
view('game.battles.mobs.pick', ['cards' => $cards]);
    }

    public function 
pickConfirm($card)
    {
        
$cardInfo CardUserModel::findOrFail($card);
        
$deck explode(';'Auth::user()->deck);
        if(!
in_array($card$deck)) return back()->with('error''Карты нет в колоде!');
        
$user UserModel::find(Auth::user()->id);
        
$user->mob_card $cardInfo->id;
        
$user->save();
        return 
redirect('/mobs')->with('ok''Карта выбрана!');
    }

    public function 
battle()
    {
        
$battle MobTempModel::where('user'Auth::user()->id)->first();
        if(
$battle == null) return redirect('/mobs');
        
$myStats json_decode($battle->myStats);
        
$mobStats json_decode($battle->mobStats);
        
$firstAttack session('first_attack');
        if(
$firstAttack != null)
        {
            if(
$myStats->health <= && $mobStats->health 0) return self::result($battle->id'lose');
            elseif(
$myStats->health && $mobStats->health <= 0) return self::result($battle->id'win');
            elseif(
$myStats->health <= && $mobStats->health <= 0) return self::result($battle->id'draw');
        }
        
$myCard CardUserModel::with('getCardInfo')->findOrFail($myStats->card);
        
$mobCard CardModel::findOrFail($mobStats->card);
        
$bars = [
            
'my' => round($myStats->health/($myCard->getCardInfo->health+Services::getUpgradeBonus($myCard->getCardInfo->health$myCard->upgrade_level))*100),
            
'mob' => round($mobStats->health/$mobStats->max_health*100)
        ];
        return 
view('game.battles.mobs.battle', ['battle' => $battle'bars' => (object) $bars'myStats' => $myStats'mobStats' => $mobStats'myCard' => $myCard'mobCard' => $mobCard]);
    }

    public function 
attack()
    {
        
$battle MobTempModel::where('user'Auth::user()->id)->first();
        if(
$battle == null) return redirect('/mobs');
        
$myStats json_decode($battle->myStats);
        if(
$myStats->cooldown time()) return back()->with('error''Откат карты!');
        
$mobStats json_decode($battle->mobStats);
        
$card CardUserModel::with('getCardInfo')->findOrFail($myStats->card);
        
$myDamage Services::getCardDamage($card->getCardInfo->min_attack+Services::getUpgradeBonus($card->getCardInfo->min_attack$card->upgrade_level), $card->getCardInfo->max_attack+Services::getUpgradeBonus($card->getCardInfo->max_attack$card->upgrade_level), $mobStats->armor);
        
$mobDamage Services::getCardDamage($mobStats->attack$mobStats->attack$card->getCardInfo->armor+Services::getUpgradeBonus($card->getCardInfo->armor$card->upgrade_level));
        
$firstAttack session('first_attack');
        if(
$myDamage >= $mobStats->health)
        {
            
$myDamage abs($mobStats->health);
            
$mobDamage 0;
        }
        elseif(
$mobDamage >= $myStats->health)
        {
            
$mobDamage abs($myStats->health);
            
$myDamage 0;
        }
        
$myStats->health -= $mobDamage;
        
$myStats->cooldown time()+$card->getCardInfo->cooldown;
        if(
$firstAttack == null)
        {
            
$myDamage $myDamage >= $mobStats->health round($mobStats->health/2) : $myDamage;
            
session(['first_attack' => 1]);
        }
        
$mobStats->health -= $myDamage;
        
$battle->myStats json_encode($myStats);
        
$battle->mobStats json_encode($mobStats);
        
$battle->save();
        return 
back();
    }

    public function 
result($battle$status)
    {
        
session(['first_attack' => null]);
        
$battle MobTempModel::findOrFail($battle);
        
$mobStats json_decode($battle->mobStats);
        if(
$status == 'win')
        {
            
$exp round($mobStats->attack/10) > round($mobStats->attack/10) : rand(1,100);
            
$exp *= 5;
            
$valmers rand(0,10) == rand(1,3) : 0;
            
$message 'Победа! Получено: '.$exp.' монет '.($valmers 'и '.$valmers.' вальмер' '').'!';
        }
        elseif(
$status == 'lose')
        {
            
$exp round($mobStats->attack/50) > round($mobStats->attack/50) : rand(1,100);
            
$exp *= 5;
            
$valmers 0;
            
$message 'Поражение! Получено: '.$exp.' монет!';
        }
        elseif(
$status == 'draw')
        {
            
$exp round($mobStats->attack/25) > round($mobStats->attack/25) : rand(1,100);
            
$exp *= 5;
            
$valmers rand(0,100) == 0;
            
$message 'Ничья! Получено: '.$exp.' монет '.($valmers 'и '.$valmers.' вальмер' '').'!';
        }
        elseif(
$status == 'surrender')
        {
            
$exp round($mobStats->attack/50) > round($mobStats->attack/50) : rand(1,100);
            
$exp *= 5;
            
$valmers 0;
            
$message 'Вы сдались! Получено: '.$exp.' монет!';
        }
        
$user UserModel::find(Auth::user()->id);
        
$user->mob_battles--;
        
$user->mobs_exp += rand(25,100);
        
$user->exp += $exp;
        
$user->valmers += $valmers;
        
$user->save();
        
$battle->delete();
        
session(['result' => $message]);
        return 
redirect('/mobs');
    }

    public function 
apiGetCooldown($battle)
    {
        
$battle MobTempModel::find($battle);
        if(
$battle == null) return response()->json(['result' => 0]);
        
$my json_decode($battle->myStats);
        if(
$my->cooldown >= time()) return response()->json(['result' => '1''cooldown' => Services::getChestTime($my->cooldown-time()), 'cooldown_sec' => ($my->cooldown-time())]);
        else return 
response()->json(['result' => 0]);
    }

    public function 
surrender()
    {
        
$battle MobTempModel::where('user'Auth::user()->id)->first();
        if(
$battle == null) return redirect('/mobs');
        return 
self::result($battle->id'surrender');
    }

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