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

namespace AppHttpControllersApi;

use 
IlluminateHttpRequest;
use 
AppModelsUserModel;
use 
AppModelsArenaBattleModel;
use 
AppModelsArenaCardsModel;
use 
Auth;
use 
AppServicesServices;
use 
AppHttpControllersController;

class 
ArenaController extends Controller
{
    public function 
getIndexPage()
    {
        
$issetBattle = ArenaBattleModel::where('user1', Auth::user()->id)->orWhere('user2', Auth::user()->id)->count();
        if(
$issetBattle == 0)
        {
            
$result = 'Начать подбор противника!<br>
            <a href="/arena/find"  class="btn btn-games2 btn-block">Искать</a>'
;
            
$redirect = 0;
        }
        else
        {
            
$battle = ArenaBattleModel::where('user1', Auth::user()->id)->orWhere('user2', Auth::user()->id)->first();
            if(
$battle->user1 == Auth::user()->id) $opponent = $battle->user2;
            else 
$opponent = $battle->user1;
            if(
$opponent == 0)
            {
                
$result = 'Идёт поиск противника!<br>
                <a href="/arena/cancel" class="btn btn-games2 btn-block">Отменить поиск</a>'
;
                
$redirect = 0;
            }
            else
            {
                if(
$battle->start_time < time())
                {
                    
$battle->status = 'card1_pick';
                    
$battle->save();
                    
$redirect = '/arena/pick/1';
                }
                else 
$redirect = 0;
                
$result = 'Противник найден!<br>
                '
.($battle->start_time-time() > 0 ? 'До начала боя: '.Services::timer($battle->start_time-time()).'<br>' : 'Бой начался!<br>').'
                <a href="/arena/cancel" class="btn btn-games2 btn-block">Отменить поиск</a>'
;
            }
        }
        return 
response()->json(["result" => $result, "redirect" => $redirect]);
    }

    public function 
getPickStatus($pick, $battle, $user)
    {
        
$status = Services::getPickStatus($pick, $battle, $user);
        return 
response()->json(['status' => $status]);
    }

    public function 
redirectIfPicked($pick, $battle, $user1, $user2)
    {
        
$user1Pick = Services::getPickStatus($pick, $battle, $user1);
        
$user2Pick = Services::getPickStatus($pick, $battle, $user2);
        return 
response()->json(['status' => (integer) $user1Pick && $user2Pick]);
    }

    public function 
attack($battle_id, $card1, $card2)
    {
        
$battle = ArenaBattleModel::findOrFail($battle_id);
        if(
$battle->user1 != Auth::user()->id && $battle->user2 != Auth::user()->id) return response()->json(['status' => 'error', 'message' => 'Ошибка!']);
        
$myCard = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->findOrFail($card1);
        
$opponentCard = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->findOrFail($card2);
        if(
$myCard->user != Auth::user()->id) return response()->json(['status' => 'error', 'message' => 'Ошибка!']);
        if(
$battle->move != Auth::user()->id) return response()->json(['status' => 'error', 'message' => 'Ходит оппонент!']);
        if(
$battle->move == Auth::user()->id && $battle->move_time < time()) return response()->json(['status' => 'error', 'message' => 'Ход завершён!']);
        if(
$opponentCard->health < 0) return response()->json(['status' => 'error', 'message' => 'Карта уничтожена!']);
        if(
$myCard->health < 0) return response()->json(['status' => 'error', 'message' => 'Карта уничтожена!']);
        if(
$myCard->moved == 1) return response()->json(['status' => 'error', 'message' => 'Ход этой картой уже сделан!']);
        
$damage = 0;
        for(
$i=1;$i<=$myCard->getCardUserInfo->getCardInfo->attack_count;$i++)
        {
            
$damage += Services::getCardDamage(
                
$myCard->getCardUserInfo->getCardInfo->min_attack+Services::getUpgradeBonus($myCard->getCardUserInfo->getCardInfo->min_attack, $myCard->getCardUserInfo->upgrade_level),
                
$myCard->getCardUserInfo->getCardInfo->max_attack+Services::getUpgradeBonus($myCard->getCardUserInfo->getCardInfo->max_attack, $myCard->getCardUserInfo->upgrade_level),
                
$opponentCard->getCardUserInfo->getCardInfo->armor+Services::getUpgradeBonus($opponentCard->getCardUserInfo->getCardInfo->armor, $opponentCard->getCardUserInfo->upgrade_level)
            );
        }
        
$opponentCard->health -= $damage;
        
$opponentCard->save();
        
$myCard->moved = 1;
        
$myCard->save();
        return 
response()->json(['status' => 'ok', 'damage' => $damage, 'opponentCard' => $opponentCard->pick, 'myCard' => $myCard->pick]);
    }

    public function 
getMoveStatus($battle_id)
    {
        
$battle = ArenaBattleModel::find($battle_id);
        if(
$battle == null) return response()->json(['status' => 5]);
        if(
$battle->user1 == Auth::user()->id)
        {
            
$opponent = $battle->user2;
            
$myColumn = 'user1_win';
            
$opponentColumn = 'user2_win';
        }
        else
        {
            
$opponent = $battle->user1;
            
$myColumn = 'user2_win';
            
$opponentColumn = 'user1_win';
        }
        
$myPick1 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle_id)->where('user', Auth::user()->id)->where('pick', 1)->first();
        
$myPick2 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle_id)->where('user', Auth::user()->id)->where('pick', 2)->first();
        
$opponentPick1 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle_id)->where('user', $opponent)->where('pick', 1)->first();
        
$opponentPick2 = ArenaCardsModel::with('getCardUserInfo.getCardInfo')->where('battle', $battle_id)->where('user', $opponent)->where('pick', 2)->first();
        if(
$battle->move == Auth::user()->id)
        {
            if(((
$myPick1->moved == 1 || $myPick1->health <= 0) && ($myPick2->moved == 1 || $myPick2->health <= 0)) || $battle->move_time < time())
            {
                
$battle->move = $opponent;
                
$battle->move_time = time()+30;
                
$battle->save();
                
$myPick1->moved = 0;
                
$myPick1->save();
                
$myPick2->moved = 0;
                
$myPick2->save();
            }
        }
        else
        {
            if(((
$opponentPick1->moved == 1 || $opponentPick1->health <= 0) && ($opponentPick2->moved == 1 || $opponentPick2->health <= 0)) || $battle->move_time < time())
            {
                
$battle->move = Auth::user()->id;
                
$battle->move_time = time()+30;
                
$battle->save();
                
$opponentPick1->moved = 0;
                
$opponentPick1->save();
                
$opponentPick2->moved = 0;
                
$opponentPick2->save();
            }
        }
        
$myAliveCards = ArenaCardsModel::where('battle', $battle->id)->where('user', Auth::user()->id)->where('health', '>', '0')->count();
        
$opponentAliveCards = ArenaCardsModel::where('battle', $battle->id)->where('user', $opponent)->where('health', '>', '0')->count();
        if(
$battle->status == 'battle') {
            if (
$myAliveCards == 0 && $opponentAliveCards > 0)
            {
                if(
$battle->winner_count == 0)
                {
                    
$battle->$opponentColumn++;
                    
$battle->winner_count = 1;
                }
                
$battle->round++;
                
$battle->save();
                
Services::setArenaHealth($myPick1, $myPick2, $opponentPick1, $opponentPick2, $battle);
                return 
response()->json(['status' => 2, 'winner' => Services::userInfo($opponent)->login, 'roundNum' => $battle->round]);
            }
            elseif (
$myAliveCards > 0 && $opponentAliveCards == 0)
            {
                if(
$battle->winner_count == 0)
                {
                    
$battle->$myColumn++;
                    
$battle->winner_count = 1;
                }
                
$battle->round++;
                
$battle->save();
                
Services::setArenaHealth($myPick1, $myPick2, $opponentPick1, $opponentPick2, $battle);
                return 
response()->json(['status' => 2, 'winner' => Services::userInfo(Auth::user()->id)->login, 'roundNum' => $battle->round]);
            }
            elseif (
$myAliveCards == 0 && $opponentAliveCards == 0)
            {
                
$battle->round++;
                
$battle->save();
                
Services::setArenaHealth($myPick1, $myPick2, $opponentPick1, $opponentPick2, $battle);
                return 
response()->json(['status' => 3, 'roundNum' => $battle->round]);
            }
            else
            {
                if(
$battle->winner_count == 1)
                {
                    
$battle->winner_count = 0;
                    
$battle->save();
                }
            }
            if (
$battle->user1_win >= 3 || $battle->user2_win >= 3)
            {
                
$battle->status = 'result';
                
$battle->save();
                
$winner = $battle->user1_win >= 3 ? $battle->user1 : $battle->user2;
                return 
response()->json(['status' => 4, 'winner' => Services::userInfo($winner)->login, 'roundNum' => $battle->round]);
            }
        }
        if(
$battle->move != Auth::user()->id) return response()->json([
            
'status' => 0,
            
'health' => [
                 
'my1' => $myPick1->health > 0 ? $myPick1->health : 0,
                 
'my2' => $myPick2->health > 0 ? $myPick2->health : 0,
                 
'opp1' => $opponentPick1->health > 0 ? $opponentPick1->health : 0,
                 
'opp2' => $opponentPick2->health > 0 ? $opponentPick2->health : 0,
            ],
            
'moveTime' => (string) Services::timer($battle->move_time-time()),
            
'move' => Services::userInfo($battle->move)->login,
            
'roundNum' => $battle->round
        
]);
        return 
response()->json([
            
'status' => 1,
            
'pick1' => ($myPick1->health > 0 ? $myPick1->moved : 1),
            
'pick2' => ($myPick2->health > 0 ? $myPick2->moved : 1),
            
'health' => [
                 
'my1' => $myPick1->health > 0 ? $myPick1->health : 0,
                 
'my2' => $myPick2->health > 0 ? $myPick2->health : 0,
                 
'opp1' => $opponentPick1->health > 0 ? $opponentPick1->health : 0,
                 
'opp2' => $opponentPick2->health > 0 ? $opponentPick2->health : 0,
            ],
            
'moveTime' => (string) Services::timer($battle->move_time-time()),
            
'move' => Services::userInfo($battle->move)->login,
            
'roundNum' => $battle->round
        
]);
    }
}
Онлайн: 0
Реклама