/**
  * Muestra el arbol de habilidades completo 
  *
  * @route  jugadorNum12/habilidades
  * @return void
  */
 public function actionIndex()
 {
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     //Sacar una lista de las acciones desbloqueadas de un usuario
     //$accionesDesbloqueadas = Desbloqueadas::model()->findAllByAttributes(array('usuarios_id_usuario'=>Yii::app()->user->usIdent));
     //Sacar una lista con los recursos del usuario
     $recursosUsuario = Recursos::model()->findByAttributes(array('usuarios_id_usuario' => Yii::app()->user->usIdent));
     //Sacar el nivel del usuario
     $usuario = Usuarios::model()->findByPK(Yii::app()->user->usIdent);
     $accionesGrupales = AccionesGrupales::model()->findAllByAttributes(array('usuarios_id_usuario' => Yii::app()->user->usIdent));
     $accionesIndividuales = AccionesIndividuales::model()->findAllByAttributes(array('usuarios_id_usuario' => Yii::app()->user->usIdent));
     //Comprobaciones de seguridad
     /*if (($accionesDesbloqueadas === null) || ($recursosUsuario === null)) {
     			Yii::app()->user->setFlash('error', 'Acciones o recursos no encontrados. (actionIndex, AccionesController).');
     		} */
     //A partir de las acciones sacamos las habilidades para poder mostrarlas
     /* $acciones = array();
     		foreach ($accionesDesbloqueadas as $habilidad)
     		{
     			$hab = Habilidades::model()->findByPK($habilidad['habilidades_id_habilidad']);
     
     			//Comprobación de seguridad
     			if ($hab === null) {
     				Yii::app()->user->setFlash('habilidad', 'Habilidad no encontrada. (actionIndex,AccionesController).');
     			}	
     				
     			$acciones[] = $hab;
     		} */
     $acciones = Habilidades::model()->findAll();
     //Envía los datos para que los muestre la vista
     $this->render('index', array('acciones' => $acciones, 'recursosUsuario' => $recursosUsuario, 'usuario' => $usuario, 'accionesGrupales' => $accionesGrupales, 'accionesIndividuales' => $accionesIndividuales));
 }
 /**
  * Devuelve los recursos de las acciones individuales
  *
  * Selecciona las acciones individuales pendientes de devolución
  * de recursos (finalización) y ejecuta el método oportuno de cada 
  * una de ellas.
  *
  * @route JugadorNum12/scripts/finalizaIndividuales
  *
  * @throws \Exception excepcion interna
  * @return void
  */
 public function actionFinalizaIndividuales()
 {
     Yii::import('application.components.Acciones.*');
     $tiempo = time();
     $busqueda = new CDbCriteria();
     $busqueda->addCondition(':bTiempo >= cooldown');
     $busqueda->addCondition('devuelto = :bDevuelto');
     $busqueda->params = array(':bTiempo' => $tiempo, ':bDevuelto' => 0);
     $individuales = AccionesIndividuales::model()->findAll($busqueda);
     //Iterar sobre cada individual y finalizarla
     foreach ($individuales as $ind) {
         $transaction = Yii::app()->db->beginTransaction();
         try {
             //Tomar nombre de habilidad para instanciación dinámica
             $hab = Habilidades::model()->findByPk($ind->habilidades_id_habilidad);
             if ($hab === null) {
                 Yii::app()->user->setFlash('habilidad', 'Error: habilidad no encontrada. (actionFinalizaIndividuales,ScriptsController).');
                 //throw new CHttpException(404,"Error: habilidad no encontrada. (actionFinalizaIndividuales,ScriptsController)");
             }
             $nombreHabilidad = $hab->codigo;
             //Llamar al singleton correspondiente y finalizar dicha acción
             $nombreHabilidad::getInstance()->finalizar($ind->usuarios_id_usuario, $ind->habilidades_id_habilidad);
             //Actualizar la base de datos para permitir un nuevo uso de la acción
             $ind->devuelto = 1;
             if (!$ind->save()) {
                 Yii::app()->user->setFlash('guardar', 'Error: no se ha podido guardar el modelo de acciones individuales. (actionFinalizaIndividuales,ScriptsController).');
                 //throw new CHttpException(404,"Error: no se ha podido guardar el modelo de acciones individuales. (actionFinalizaIndividuales,ScriptsController)");
             }
             //Finalizar correctamente la transacción
             $transaction->commit();
         } catch (Exception $ex) {
             //Rollback de la transacción en caso de error
             $transaction->rollback();
             throw $ex;
         }
     }
 }
Example #3
0
 /**
  * Funcion que se encarga de actualizar recursos y acciones del usuario
  *
  * Datos que se actualizan:
  *
  *  - generar recursos
  *  - finalizar acciones individuales
  *  - finalizar acciones grupales
  *
  * @param int $id_usuario   id del usuario que se va a actualizar
  * @return void
  */
 public function actualizaDatos($id_usuario)
 {
     AccionesIndividuales::model()->finalizaIndividuales($id_usuario);
     AccionesGrupales::model()->finalizaGrupales();
     Recursos::model()->actualizaRecursos($id_usuario);
 }
 /**
  * Función empleada para usar una habilidad individual
  * 
  * @param int $id_usuario   id del usuario
  * @param int $id_accion
  * @param $res
  * @param $habilidad
  * @throws \Exception   'La habilidad no se ha regenerado todavía.'
  * @return void
  */
 public static function usarIndividual($id_usuario, $id_accion, $res, $habilidad)
 {
     // Importar acciones
     Yii::import('application.components.Acciones.*');
     // Crear criteria de búsqueda
     $criteria = new CDbCriteria();
     $criteria->addCondition('usuarios_id_usuario=:bid_usuario');
     $criteria->addCondition('habilidades_id_habilidad=:bid_accion');
     $criteria->params = array(':bid_usuario' => $id_usuario, ':bid_accion' => $id_accion);
     $accion_ind = AccionesIndividuales::model()->find($criteria);
     $tiempo_reg = $habilidad['cooldown_fin'];
     if ($accion_ind === null) {
         $accion_ind = new AccionesIndividuales();
         $accion_ind->setAttributes(array('usuarios_id_usuario' => $id_usuario, 'habilidades_id_habilidad' => $id_accion, 'cooldown' => 0, 'devuelto' => 0));
         $res['dinero'] -= $habilidad['dinero'];
         $res['animo'] -= $habilidad['animo'];
         $res['influencias'] -= $habilidad['influencias'];
         $res->save();
         //actualizar la hora en que acaba de regenerarse la accion
         $accion_ind->cooldown = time() + $tiempo_reg;
         $accion_ind->devuelto = 0;
         //guardar en los modelo
         $accion_ind->save();
         //Tomar nombre de habilidad para instanciación dinámica
         $nombreHabilidad = $habilidad->codigo;
         //Llamar al singleton correspondiente y ejecutar dicha acción
         $nombreHabilidad::getInstance()->ejecutar($id_usuario);
     } elseif ($accion_ind->devuelto == 1) {
         $res['dinero'] -= $habilidad['dinero'];
         $res['animo'] -= $habilidad['animo'];
         $res['influencias'] -= $habilidad['influencias'];
         $res->save();
         //actualizar la hora en que acaba de regenerarse la accion
         $accion_ind->cooldown = time() + $tiempo_reg;
         $accion_ind->devuelto = 0;
         //guardar en los modelo
         $accion_ind->save();
         //Tomar nombre de habilidad para instanciación dinámica
         $nombreHabilidad = $habilidad->codigo;
         //Llamar al singleton correspondiente y ejecutar dicha acción
         $nombreHabilidad::getInstance()->ejecutar($id_usuario);
     } else {
         Yii::app()->user->setFlash('regen', 'La habilidad no se ha regenerado todavía.');
         //$this-> redirect(array('acciones/index'));
         throw new Exception('La habilidad no se ha regenerado todavía.');
     }
 }
 /**
  * Ejecuta la accion (individual o grupal) pulsada. Significa bajarse la carta de habilidad 
  *
  * Cualquier habilidad resta los recursos iniciales al jugador, además,
  *
  * - Si es una accion grupal muestra un formulario para recoger la cantidad inicial de recursos
  * que aporta el jugador (podría no aportar recursos).
  * Los datos del formulario se recogen por $_POST y se crea una nueva accion grupal en el equipo
  * al que pertenece el usuario
  * 
  * - Si es una accion individual se ejecuta al momento
  * 
  * > El id del jugador y la aficion a la que pertence se recogen de la variable de sesion
  *
  * > No se le pasaran acciones individuales ni de partido
  *
  * @param int $id_accion 	id de la habilidad que se ejecuta
  * 
  * @route jugadorNum12/acciones/usar/{$id_accion}
  * @redirect jugadorNum12/equipos/ver/{$id_equipo} 	si es accion grupal
  * @redirect jugadorNum12/usuarios/perfil 			si es accion individual
  *
  * @return void
  */
 public function actionUsar($id_accion)
 {
     // TODO : pasar la logica al modelo
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     //Comenzar transaccion
     $trans = Yii::app()->db->beginTransaction();
     try {
         // Importar acciones
         Yii::import('application.components.Acciones.*');
         //Cojo el id_usuario
         $id_usuario = Yii::app()->user->usIdent;
         //Obtener modelo de Habilidades
         $habilidad = Habilidades::model()->findByPk($id_accion);
         //Habilidad no encontrada
         if ($habilidad === null) {
             $trans->rollback();
             Yii::app()->user->setFlash('inexistente', 'Acción inexistente.');
             $this->redirect(array('acciones/index'));
         }
         //Habilidad encontrada
         //Obtener modelo de Desbloqueadas
         $desbloqueada = Desbloqueadas::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario, 'habilidades_id_habilidad' => $id_accion));
         //Si no esta desbloqueada para el usuario, error
         if ($desbloqueada === null) {
             $trans->rollback();
             Yii::app()->user->setFlash('bloqueada', 'No tienes desbloqueada la acción.');
             $this->redirect(array('acciones/index'));
         }
         //Si esta desbloqueada
         //Obtener modelo de Recursos
         $res = Recursos::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario));
         //Si no son suficientes recursos cancelar transaccion y notificar al usuario
         if ($res['dinero'] < $habilidad['dinero'] || $res['animo'] < $habilidad['animo'] || $res['influencias'] < $habilidad['influencias']) {
             $trans->rollback();
             Yii::app()->user->setFlash('recursos', 'No tienes suficientes recursos.');
             $this->redirect(array('acciones/index'));
         }
         $usuario = Usuarios::model()->findByPk($id_usuario);
         //Si tenemos suficientes recursos miramos si es individual o grupal
         if ($habilidad['tipo'] == Habilidades::TIPO_INDIVIDUAL) {
             AccionesIndividuales::usarIndividual($id_usuario, $id_accion, $res, $habilidad);
         } else {
             if ($habilidad['tipo'] == Habilidades::TIPO_GRUPAL) {
                 //Sacar la accion grupal
                 //$accion_grupal = AccionesGrupales::model()->findByPk($id_accion);
                 $id_usuario = Yii::app()->user->usIdent;
                 $id_equipo = Yii::app()->user->usAfic;
                 $accion_grupal = AccionesGrupales::model()->findByAttributes(array('equipos_id_equipo' => $id_equipo, 'habilidades_id_habilidad' => $id_accion, 'usuarios_id_usuario' => $id_usuario));
                 //Si no esta creada
                 if ($accion_grupal === null) {
                     $nuevo_id = AccionesGrupales::usarGrupal($usuario, $id_accion, $id_equipo, $res, $habilidad);
                 } else {
                     //Si esta creada
                     //sacar el id de accion grupal (pk) y redirigir a participar($id_accion_grupal)
                     Yii::app()->user->setFlash('recursos', 'La acción ya existe. Participa en ella.');
                     $this->redirect(array('acciones/participar', 'id_accion' => $accion_grupal['id_accion_grupal']));
                 }
             } else {
                 // Tipo inválido
                 $trans->rollback();
                 Yii::app()->user->setFlash('error', 'No puedes usar esa acción.');
                 $this->redirect(array('acciones/index'));
             }
         }
         // Finalizar transacción
         $trans->commit();
         //Redireccionar acción individual
         if ($habilidad['tipo'] == Habilidades::TIPO_INDIVIDUAL) {
             /* 	como no está definido el id_accion_grupal, le damos cualquier valor
             				porque en la vista no se usa si es de tipo individual, pero necesita ser != null */
             $id_acc = -1;
             Yii::app()->user->setFlash('error', 'Exito al usar la accion');
             $this->redirect(array('habilidades/index/'));
         } else {
             if ($habilidad['tipo'] == Habilidades::TIPO_GRUPAL) {
                 //redireccionar acción grupal participar
                 Yii::app()->user->setFlash('error', 'La accion grupal se ha creado con exito');
                 $this->redirect(array('acciones/participar/', 'id_accion' => $nuevo_id));
             } else {
                 Yii::app()->user->setFlash('error', 'No puedes forzar el uso de acciones de partido');
                 $this->redirect(array('habilidades/index', 'id_partido' => $id_partido));
             }
         }
     } catch (Exception $e) {
         $this->redirect(array('habilidades/index'));
     }
 }