Вход Регистрация
Файл: silawar.ru/protected/controllers/BattlesController.php
Строк: 342
<?php

class BattlesController extends Controller {

    public function 
accessRules() {
        return array(
            array(
'deny',
                
'roles' => array('banned'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            ),
            array(
'allow',
                
'actions' => array('rise''index''captureTerritory''damageLastTarget''damageRandomEnemy''energyDamageLastTarget''energyDamageRandomEnemy''healLastTarget''healRandomFriend''healSelf''nearLocation''usePotion''maps''useAbility'),
                
'users' => array('@'),
            ),
            array(
'deny',
                
'users' => array('*'),
                
'deniedCallback' => array(Yii::app()->controller'redirectToHome'),
            )
        );
    }

    public function 
actionIndex() {
        
$user Users::findUser();
        
$criteria = new CDbCriteria();
        if (!
$user->battle_type) {
            
$user->battle_type 1;
            
$criteria->compare('type_location'1);
            
$criteria->compare('side_default'$user->side);
            
$current BattlesLocations::model()->find($criteria);
            
$user->battle_id $current->id_location;
            
Users::model()->updateByPk($user->id_user, ['battle_type' => 1'battle_id' => $current->id_location]);
        } elseif (
$user->battle_type == 1) {
            
$current BattlesLocations::model()->findByPk($user->battle_id);
            if (
$user->level $current->level_min || $user->level $current->level_max) {
                
Users::model()->updateByPk($user->id_user, ['battle_type' => null'battle_id' => null]);
                
Yii::app()->user->setFlash('error''У Вас слишком большой уровень для этой территории');
                
$this->redirect($this->createUrl('battles/index'));
                
Yii::app()->end();
            }
        } else {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        
$locations BattlesNavigator::getNearLocations($user->battle_id$user);
        
$ability UsersAbilities::model()->findByAttributes(['id_user' => Yii::app()->user->id], ['condition' => 'chosen = 3']);
        
$this->render('index', array(
            
'user' => $user,
            
'locations' => $locations,
            
'current' => $current,
            
'ability' => $ability
        
));
    }

    public function 
actionRise() {
        
$user Users::findUser();
        if (
$user->battle_type == && $user->health_now 1) {
            
$criteria = new CDbCriteria();
            
$criteria->compare('type_location'1);
            
$criteria->compare('side_default'$user->side);
            
$criteria->compare('status'1);
            
$current BattlesLocations::model()->find($criteria);
            
$user->battle_id $current->id_location;
            
$params Users::calcParam($user->id_user);
            
$user->health_now $params->totalHealth;
            
$user->energy_now $params->totalEnergy;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
            }
        }
        
$this->redirect(array('/battles/index'));
        
Yii::app()->end();
    }
    
    public function 
actionMaps($id null) {
        
$user Users::findUser();
        
$criteria = new CDbCriteria();
        
$criteria->addCondition('side_default = 0 OR side_default = ' $user->side);
        
$criteria->compare('type_location'2);
        
$criteria->compare('status'1);
        
$all BattlesLocations::model()->findAll($criteria);
        
$maps = array();
        foreach (
$all as $one) {
            
$maps[$one->id_location] = $one;
        }
        
$this->render('maps', array(
            
'maps' => $maps,
        ));
    }

    public function 
actionNearLocation($id) {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        
/* Если поле под контролем стороны игрока - продолжаем */
        
if (BattlesNavigator::checkAccessToLocation($id$user)) {
            
$user->battle_id $id;
            
$user->battle_target null;
            if (!
$user->save(false)) {
                throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении пользователя!'));
            }
            
$this->redirect($this->createUrl('battles/index'));
            
Yii::app()->end();
        }
        
/* Если контроль перешел на другую сторону */ elseif ($user->battle_type == 1) {
            
Yii::app()->user->setFlash('error''Для перехода сначала захватите территорию');
            
$this->redirect($this->createUrl('battles/index'));
            
Yii::app()->end();
        }
        
/* Скорее всего ввели не тот ID */ else {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
    }

    public function 
actionUsePotion() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now 0) {
            
BattleHelper::usePotion($user);
            if (
$user->class == 1) {
                
$this->actionDamageRandomEnemy();
            } else {
                
$this->actionHealRandomFriend();
            }
            
Yii::app()->end();
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }
    
    public function 
actionUseAbility($chosen) {
        
$user Users::findUser();
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now 0) {
            
$ability UsersAbilities::model()->findByAttributes(['id_user' => Yii::app()->user->id], ['condition' => 'chosen = 3 AND `time_cooldown` < unix_timestamp(NOW())']);
            if (!empty(
$ability)) {
                
$ability->time_active time() + $ability->idType->time_active;
                
$ability->time_cooldown time() + $ability->idType->time_cooldown;
                
$ability->save(false);
                
                
/* Проверяем на навык Уворот */
                
if ($ability->id_ability == 2) {
                    
Users::model()->updateAll(['battle_target' => null], 'battle_target = '.$user->id_user);
                }
                
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 7;
                
$log->info $ability->idAbility->name_ability;
                
$log->users Users::getUsersForLog($user->id_user);
                
$log->save(false);
                
                if (
$user->class == 1) {
                    
$this->actionDamageRandomEnemy();
                } else {
                    
$this->actionHealRandomFriend();
                }
                
Yii::app()->end();
            }
            
Yii::app()->user->setFlash('error''Навык ещё не готов');
        }
        
$this->redirect('/battles/');
        
Yii::app()->end();
    }

    public function 
actionCaptureTerritory() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != || $user->class != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now 0) {
            
/* Если есть кого бить - бьем */
            
if ($user->idLocation->side_now != $user->side) {
                
$result BattleHelper::captureTerritory($user);
                
/* Если было удар - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['value']);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->type $user->class;
                    
$log->value $result['value'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users $user->id_user;
                    
$log->save(false);
                }
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionDamageRandomEnemy() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == 1) {
            
$enemy Users::getRandomEnemyForBattles($user->battle_id$user->side);
            
/* Если есть кого бить - бьем */
            
if ($enemy) {
                
$result BattleHelper::damageUser($user$enemy);
                
/* Если был удар - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['damage']);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->id_target $enemy->id_user;
                    
$log->type $user->class;
                    
$log->value $result['damage'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users Users::getUsersForLog($enemy->id_user);
                    
$log->save(false);
                }
            } else {
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 8;
                
$log->info 'Бить некого';
                
$log->users $user->id_user;
                
$log->save(false);
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionDamageLastTarget() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == 1) {
            
$enemy Users::getLastTargetForBattles($user);
            
/* Если есть кого бить - бьем */
            
if ($enemy) {
                
$result BattleHelper::damageUser($user$enemy);
                
/* Если был удар - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['damage']);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->id_target $enemy->id_user;
                    
$log->type $user->class;
                    
$log->value $result['damage'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users Users::getUsersForLog($enemy->id_user);
                    
$log->save(false);
                }
            } else {
                
$user->battle_target null;
                if (!
$user->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных пользователя!'));
                }
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 8;
                
$log->info 'Бить некого';
                
$log->users $user->id_user;
                
$log->save(false);
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionEnergyDamageRandomEnemy() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == 2) {
            
$enemy Users::getRandomEnemyForBattles($user->battle_id$user->sidefalsetrue);
            
/* Если есть у кого выжигать- выжигаем */
            
if ($enemy) {
                
$result BattleHelper::damageUser($user$enemytrue);
                
/* Если было выжигание - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['damage']);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->id_target $enemy->id_user;
                    
$log->type 3;
                    
$log->value $result['damage'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users Users::getUsersForLog($enemy->id_user);
                    
$log->save(false);
                }
            } else {
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 8;
                
$log->info 'Выжигать некого';
                
$log->users $user->id_user;
                
$log->save(false);
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionEnergyDamageLastTarget() {
        
$user Users::model()->findByPk(Yii::app()->user->id);
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == 2) {
            
$enemy Users::getLastTargetForBattles($usertrue);
            
/* Если есть у кого выжигать- выжигаем */
            
if ($enemy) {
                
$result BattleHelper::damageUser($user$enemytrue);
                
/* Если было выжигание - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['damage'], true);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->id_target $enemy->id_user;
                    
$log->type 3;
                    
$log->value $result['damage'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users Users::getUsersForLog($enemy->id_user);
                    
$log->save(false);
                }
            } else {
                
$user->battle_target null;
                if (!
$user->save(false)) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных пользователя!'));
                }
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 8;
                
$log->info 'Выжигать некого';
                
$log->users $user->id_user;
                
$log->save(false);
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionHealRandomFriend() {
        
$user Users::findUser();
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == 2) {
            
$friend Users::getRandomFriendForBattles($user->battle_id$user->side);
            
/* Если есть кого лечить - лечим */
            
if ($friend && $friend->health_now && $friend->health_now Users::calcParam($friend->id_user'health')*2) {
                
$result BattleHelper::healUser($user$friend);
                
/* Если было лечение - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['value']);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->id_target $friend->id_user;
                    
$log->type $user->class;
                    
$log->value $result['value'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users Users::getUsersForLog($friend->id_user);
                    
$log->save(false);
                }
            } else {
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 8;
                
$log->info 'Лечить некого';
                
$log->users $user->id_user;
                
$log->save(false);
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionHealSelf() {
        
$user Users::findUser();
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == && ($user->battle_target == Yii::app()->user->id && $user->health_now Users::calcParam($user->id_user'health') * || $user->health_now Users::calcParam($user->id_user'health'))) {
            
$result BattleHelper::healUser($user$user);
            
/* Если было лечение - идет кол-во в участие */
            
if ($result) {
                
BattleHelper::participation($user->battle_id$result['value']);
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->id_target $user->id_user;
                
$log->type $user->class;
                
$log->value $result['value'];
                
$log->info = ($result['isCritical'] ? 'крит' '');
                
$log->users Users::getUsersForLog($user->id_user);
                
$log->save(false);
            }
        } else {
            
$log = new BattleLog();
            
$log->battle_type $user->battle_type;
            
$log->battle_id $user->battle_id;
            
$log->id_user $user->id_user;
            
$log->type 8;
            
$log->info 'Лечить некого';
            
$log->users $user->id_user;
            
$log->save(false);
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

    public function 
actionHealLastTarget() {
        
$user Users::findUser();
        if (
$user->battle_type != 1) {
            
$this->redirect(Yii::app()->user->returnUrl);
            
Yii::app()->end();
        }
        if (
$user->health_now && $user->class == 2) {
            
$friend Users::getLastHealTargetForBattles($user);
            
/* Если есть кого лечить - лечим */
            
if ($friend && $friend->health_now && $friend->health_now Users::calcParam($friend->id_user'health') * 2) {
                
$result BattleHelper::healUser($user$friend);
                
/* Если было лечение - идет кол-во в участие */
                
if ($result) {
                    
BattleHelper::participation($user->battle_id$result['value']);
                    
$log = new BattleLog();
                    
$log->battle_type $user->battle_type;
                    
$log->battle_id $user->battle_id;
                    
$log->id_user $user->id_user;
                    
$log->id_target $friend->id_user;
                    
$log->type $user->class;
                    
$log->value $result['value'];
                    
$log->info = ($result['isCritical'] ? 'крит' '');
                    
$log->users Users::getUsersForLog($friend->id_user);
                    
$log->save(false);
                }
            } else {
                
$user->battle_target null;
                if (!
$user->update('battle_target')) {
                    throw new 
CHttpException(500Yii::t('layout''Ошибка при сохранении данных пользователя!'));
                }
                
$log = new BattleLog();
                
$log->battle_type $user->battle_type;
                
$log->battle_id $user->battle_id;
                
$log->id_user $user->id_user;
                
$log->type 8;
                
$log->info 'Лечить некого';
                
$log->users $user->id_user;
                
$log->save(false);
            }
        }
        
$this->redirect($this->createUrl('battles/index'));
        
Yii::app()->end();
    }

}
Онлайн: 2
Реклама