/**
  * Muestra los datos del personaje 
  *
  *  - Nick del jugador 
  *  - Tipo del personaje
  *  - Nivel del personaje
  *  - Aficion a la que pertenece
  *  - Recursos del personaje
  *  - Valores de control de recursos
  *  - Habilidades pasivas desbloqueadas 
  *
  * Nota: Los datos del usuario se recogen de la variable de sesion
  *
  * @route jugadorNum12/usuarios/perfil
  * @return void
  */
 public function actionPerfil()
 {
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     //Busco el id del usuario actual y saco los datos el usuario
     $id = Yii::app()->user->usIdent;
     $modeloUsuario = Usuarios::model()->findByPk($id);
     //Saca la lista de las acciones desbloqueadas por el usuario
     $modeloDesbloqueadas = Desbloqueadas::model()->findAllByAttributes(array('usuarios_id_usuario' => $id));
     //Prepara los datos de las acciones. Solo queremos enseñar las habilidades pasivas y las de partido
     $accionesPas = array();
     $accionesPar = array();
     foreach ($modeloDesbloqueadas as $desbloqueada) {
         $infoDesbloqueada = Habilidades::model()->findAllByAttributes(array('id_habilidad' => $desbloqueada->habilidades_id_habilidad));
         if ($infoDesbloqueada[0]['tipo'] == Habilidades::TIPO_PASIVA) {
             $accionesPas[] = $infoDesbloqueada[0];
         }
         if ($infoDesbloqueada[0]['tipo'] == Habilidades::TIPO_PARTIDO) {
             $accionesPar[] = $infoDesbloqueada[0];
         }
     }
     //Saco los recursos disponibles del usuario
     $recursos = Recursos::model()->findByPk($id);
     // Cargar css de ver perfil
     //$uri = Yii::app()->request->baseUrl.'/less/infoperfil.less';
     //Yii::app()->clientScript->registerLinkTag('stylesheet/less', 'text/css', $uri);
     $this->render('perfil', array('modeloU' => $modeloUsuario, 'accionesPas' => $accionesPas, 'accionesPar' => $accionesPar, 'recursos' => $recursos));
 }
Beispiel #2
0
 /**
  * Comprueba que el usuario puede desbloquear la habilidad.
  *
  * Las restricciones actuales son:
  *
  * - Nivel del jugador
  * - Lista de habilidades requeridas 
  *
  * @param int $id_usuario      usuario que quiere desbloquear la habilidad
  * @param int $id_habilidad    habilidad que quiere ser desbloqueada
  * @return boolean             flag si la habilidad puede ser desbloqueada (true si es capaz, false cc)
  */
 public function puedeDesbloquear($id_usuario, $id_habilidad)
 {
     //Obtenemos los datos del usuario (para consultar el nivel)
     $usuario = Usuarios::model()->findByPk($id_usuario);
     //Obtenemos los datos de la habilidad (para consultar su codigo)
     $habilidad = Habilidades::model()->findByPk($id_habilidad);
     $puedeDesbloquear = true;
     $comentarioFlash = "";
     //1) comprobamos que el usario tenga un nivel igual o superior al requisito para desbloquear la habilidad y que tenga puntos de desbloqueo
     if ($usuario->nivel < RequisitosDesbloquearHabilidades::$datos_acciones[$habilidad->codigo]['nivel'] || $usuario->puntos_desbloqueo == 0) {
         $comentarioFlash .= "Nivel insuficiente. ";
         $puedeDesbloquear = false;
     }
     //2) Comprobamos que el usuario haya desbloqueado las habilidades requisito antes de intentar desbloquear esta
     //sacamos las habilidades requisito
     $habilidadesRequisito = RequisitosDesbloquearHabilidades::$datos_acciones[$habilidad->codigo]['desbloqueadas_previas'];
     if ($habilidadesRequisito !== null) {
         //Comprobamos que las haya desbloqueado
         foreach ($habilidadesRequisito as $habilidadReq) {
             //Con el codigo de la habilidad saco la habilidad requisito
             $habilidadAux = Habilidades::model()->findByAttributes(array('codigo' => $habilidadReq));
             //miro si el usuario tiene esa habilidad desbloqueada
             $desbloqueada = Desbloqueadas::model()->findByAttributes(array('habilidades_id_habilidad' => $habilidadAux->id_habilidad, 'usuarios_id_usuario' => $id_usuario));
             if ($desbloqueada === null) {
                 $puedeDesbloquear = false;
                 $comentarioFlash .= "Desbloquea antes " . $habilidadReq . ". ";
             }
         }
     }
     if ($puedeDesbloquear == false) {
         //Yii::app()->user->setFlash('desbloqueada', $comentarioFlash);
     }
     return $puedeDesbloquear;
 }
 /**
  * Muestra la pantalla para jugar un partido
  *
  * Comprobaciones realizadas:
  *
  * - acceso correcto al partido, equipos en la BD
  * - el partido esta jugandose (turnos €[1, 11])
  * - un usuario solo puede asistir al proximo partido de un equipo
  *
  * @param int $id_partido   id del partido al que se va a asistir
  * 
  * @route jugadorNum12/partidos/asistir/{$id_partido}
  * @return void
  */
 public function actionAsistir($id_partido)
 {
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     Yii::import('application.components.Partido');
     // Obtener el equipo del usuario
     $id_equipo_usuario = Yii::app()->user->usAfic;
     $equipoUsuario = Equipos::model()->findByPk($id_equipo_usuario);
     // Obtener la informacion del partido,
     // En $partido participan $equipo_local y $equipo_visitante
     $partido = Partidos::model()->findByPk($id_partido);
     $equipoLocal = Equipos::model()->findByPk($partido->equipos_id_equipo_1);
     $equipoVisitante = Equipos::model()->findByPk($partido->equipos_id_equipo_2);
     //Comprobacion de datos
     if ($partido === null || $equipoUsuario === null || $equipoLocal === null || $equipoVisitante === null) {
         Yii::app()->user->setFlash('datos', 'Datos suministrados incorrectos - partido/equipo/local/visitante -. (actionActPartido).');
         $this->redirect(array('partidos/index'));
     }
     if ($partido->turno <= Partido::PRIMER_TURNO || $partido->turno > Partido::ULTIMO_TURNO) {
         Yii::app()->user->setFlash('partido', 'El partido no está en juego.');
         $this->redirect(array('partidos/index'));
     }
     // Un usuario no puede asisitir a un partido en el que su equipo no participa
     // TODO eliminar esta restriccion
     if ($partido->equipos_id_equipo_1 != $id_equipo_usuario && $partido->equipos_id_equipo_2 != $id_equipo_usuario) {
         Yii::app()->user->setFlash('partido', 'No puedes acceder a un partido en el que no participe tu equipo.');
         $this->redirect(array('partidos/index'));
     } else {
         // Un usuario solo puede asistir al próximo partido de su equipo
         if ($equipoUsuario->partidos_id_partido != $id_partido) {
             Yii::app()->user->setFlash('partido', 'Este no es el próximo partido de tu equipo.');
             $this->redirect(array('partidos/index'));
         } else {
             //Saca la lista de las acciones desbloqueadas por el usuario
             $modeloDesbloqueadas = Desbloqueadas::model()->findAllByAttributes(array('usuarios_id_usuario' => Yii::app()->user->usIdent));
             //Prepara los datos de las acciones de partido
             $accionesPar = array();
             $desblPar = array();
             foreach ($modeloDesbloqueadas as $desbloqueada) {
                 $infoDesbloqueada = Habilidades::model()->findAllByAttributes(array('id_habilidad' => $desbloqueada->habilidades_id_habilidad));
                 if ($infoDesbloqueada[0]['tipo'] == Habilidades::TIPO_PARTIDO) {
                     $accionesPar[] = $infoDesbloqueada[0];
                     $desblPar[] = $desbloqueada;
                 }
             }
             //pasar los datos del partido y los equipos
             $datosVista = array('eqLoc' => $equipoLocal, 'eqVis' => $equipoVisitante, 'partido' => $partido, 'l_acciones' => $accionesPar, 'l_desbl' => $desblPar);
             $this->render('asistir', $datosVista);
             /* PARTE DE MASTER
                             // un usuario no puede asisitir a un partido en el que su equipo no participa
                             if ( ($equipoLocal->id_equipo != $id_equipo_usuario) && ($equipoVisitante->id_equipo != $id_equipo_usuario) ) {
             
                                 // TODO
                                 Yii::app()->user->setFlash('propio_equipo', 'No puedes asistir a un partido que no sea de tu propio equipo.');
                                 $this-> redirect(array('partidos/index'));
             
                             } 
                             // un usuario solo puede asistir al próximo partido de su equipo
                             else if( $equipoUsuario->partidos_id_partido != $partido->id_partido ) {
             
                                 // TODO 
                                 Yii::app()->user->setFlash('sig_partido', 'Ese no es el proximo partido de tu equipo.');
                                 $this-> redirect(array('partidos/index'));
                             }
                         */
         }
     }
 }
Beispiel #4
0
 /**
  * Dado un id de una habilidad comprueba si esa habilidad está desbloqueada para el usuario
  *
  * @param int $habilidad               id de la habilidad
  * @return boolean $desbloqueada       true si la habilidad está desbloqueada por el usuario, false si no está desbloqueada
  */
 public function estaDesbloqueada($habilidad)
 {
     $habilidadesDesbloqueadas = Desbloqueadas::model()->findAllByAttributes(array('usuarios_id_usuario' => $this->id_usuario));
     $desbloqueada = false;
     foreach ($habilidadesDesbloqueadas as $d) {
         if ($d->habilidades_id_habilidad == $habilidad) {
             $desbloqueada = true;
         }
     }
     return $desbloqueada;
 }
 /**
  * Muestra un formulario de confirmacion para adquirir una habilidad
  * 
  * > Si hay datos en $_POST procesa el formulario y registra la habilidad como desbloqueada
  *
  * @param int $id_habilidad	id de la habilidad que se va a adquirir
  * 
  * @route jugadorNum12/habilidades/adquirir/{$id_habilidad}
  * @redirect jugadorNum12/acciones si la habilidad es una accion
  * @redirect jugadorNum12/usuarios/perfil si la habilidad es pasiva
  *
  * @throws \Exception Fallo al guardar la nueva habilidad en la BD
  * @return void
  */
 public function actionAdquirir($id_habilidad)
 {
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     //empezamos la transaccion
     $trans = Yii::app()->db->beginTransaction();
     //obtenemos la habilidad para pasarsela a la vista
     $habilidad = Habilidades::model()->findByPk($id_habilidad);
     //vemos si una habilidad esta desbloqueada para el usuario
     $desbloqueada = Desbloqueadas::model()->findByAttributes(array('usuarios_id_usuario' => Yii::app()->user->usIdent, 'habilidades_id_habilidad' => $id_habilidad));
     //realizar transaccion con la base de datos
     if ($habilidad === null) {
         //si la habilidad que quieres desbloquear existe como tal
         $trans->rollback();
         Yii::app()->user->setFlash('habilidad', 'Habilidad inexistente.');
     }
     if ($desbloqueada != null) {
         //si esta desbloqueada
         $trans->rollback();
         Yii::app()->user->setFlash('desbloqueada', 'La habilidad ya ha sido desbloqueada.');
         $this->redirect(array('habilidades/index'));
     } else {
         // comprobamos que pueda desbloquedar la habilidad. Nivel necesario, hab necesarias desbloqueadas etc
         if ($habilidad->puedeDesbloquear(Yii::app()->user->usIdent, $id_habilidad)) {
             //si no esta desbloqueada y existe
             //si el usuario acepta guardamos el id de la habilidad y el id de usuario en Desbloqueadas
             if (isset($_POST['aceptarBtn'])) {
                 try {
                     $desbloqueada = new Desbloqueadas();
                     $desbloqueada['habilidades_id_habilidad'] = $id_habilidad;
                     $desbloqueada['usuarios_id_usuario'] = Yii::app()->user->usIdent;
                     $desbloqueada->save();
                     //Al desbloquear la habilidad se gasta un punto de desbloqueo
                     $usuario = Usuarios::model()->findByPk(Yii::app()->user->usIdent);
                     $usuario->puntos_desbloqueo -= 1;
                     $usuario->save();
                     //Si es pasiva, debemos aplicar el beneficio de la misma
                     if ($habilidad->tipo == Habilidades::TIPO_PASIVA) {
                         Yii::import('application.components.Acciones.*');
                         //Tomar nombre de habilidad
                         $nombreHabilidad = $habilidad->codigo;
                         //Llamar al singleton correspondiente y ejecutar dicha acción
                         $nombreHabilidad::getInstance()->ejecutar(Yii::app()->user->usIdent);
                     }
                     $trans->commit();
                     $this->redirect(array('habilidades/'));
                 } catch (Exception $exc) {
                     $trans->rollback();
                     throw $exc;
                 }
             }
             //si el usuario cancela, rollback
             if (isset($_POST['cancelarBtn'])) {
                 $trans->rollback();
                 $this->redirect(array('habilidades/index'));
             }
             //pasar la habilidad a la vista para mostrar que habilidad se esta desboqueando
             $this->render('adquirir', array('habilidad' => $habilidad));
         } else {
             //el ususario, no puede desbloquear la habilidad
             Yii::app()->user->setFlash('desbloqueada', 'No cumples los requisitos para desbloquear la habilidad.');
             $this->redirect(array('habilidades/index'));
         }
     }
 }
 /**
  * Ejecuta la accion de partido pulsada. Este método será llamado por Ajax durante el partido,
  * de modo que lo único que hará será devolver los datos de éxito o fallo para informar al 
  * usuario.
  *
  * Cualquier habilidad resta los recursos iniciales al jugador, además,
  * 
  * - Por ser una habilidad de partido se ejecuta al momento
  * 
  * > El id del jugador y la aficion a la que pertence se recogen de la variable de sesion
  *
  * - CODIGOS DEVUELTOS -
  *
  * 0 -> Habilidad no encontrada
  * 1 -> Habilidad no desbloqueada
  * 2 -> Habilidad en cooldown
  * 3 -> Recursos insuficientes 
  * 4 -> Error de equipo
  * 5 -> Error de partido, puede ser que no esté en juego o que no sea el siguiente del equipo
  * 6 -> La acción no es de partido
  * 7 -> Acción ejecutada con éxito
  * 8 -> Error general
  *
  * @param int $id_accion 	id de la habilidad que se ejecuta
  *
  * @return void
  */
 public function actionUsarPartido($id_accion)
 {
     // Actualizar recursos de usuario
     Recursos::model()->actualizaRecursos(Yii::app()->user->usIdent);
     //Comenzar transaccion
     $trans = Yii::app()->db->beginTransaction();
     try {
         // Importar elementos necesarios
         Yii::import('application.components.Acciones.*');
         Yii::import('application.components.Partido');
         //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();
             // Devolver error de acción no encontrada
             $data = array('ok' => false, 'error' => 'Habilidad incorrecta');
             echo CJavaScript::jsonEncode($data);
             Yii::app()->end();
         }
         //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();
             // Devolver error de habilidad no desbloqueada
             $data = array('ok' => false, 'error' => 'Acci&oacute;n no desbloqueada');
             echo CJavaScript::jsonEncode($data);
             Yii::app()->end();
         }
         //Si esta desbloqueada
         //Comprovar que no esta en cooldown
         if ($desbloqueada['fin_del_cooldown'] > ($now = time())) {
             $trans->rollback();
             // Devolver error de cooldown
             $data = array('ok' => false, 'error' => 'Habilidad en cooldown', 'cooldownEnd' => $desbloqueada['fin_del_cooldown']);
             echo CJavaScript::jsonEncode($data);
             Yii::app()->end();
         } else {
             //se actualiza el cooldown
             $desbloqueada['fin_del_cooldown'] = $now + $habilidad['cooldown_fin'];
             $desbloqueada->save();
         }
         //Si esta disponible
         //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();
             // Devolver error de recursos insuficientes
             $data = array('ok' => false, 'error' => 'Recursos insuficientes');
             echo CJavaScript::jsonEncode($data);
             Yii::app()->end();
         }
         $usuario = Usuarios::model()->findByPk($id_usuario);
         //Si tenemos suficientes recursos comprobamos el tipo de acción
         if ($habilidad['tipo'] == Habilidades::TIPO_PARTIDO) {
             //Sacar id de equipo y partido para poder ejecutar la accion
             $id_equipo = Yii::app()->user->usAfic;
             $equipo = Equipos::model()->findByAttributes(array('id_equipo' => $id_equipo));
             if ($equipo === null) {
                 $trans->rollback();
                 // Devolver error de equipo incorrecto
                 $data = array('ok' => false, 'error' => 'Equipo incorrecto');
                 echo CJavaScript::jsonEncode($data);
                 Yii::app()->end();
             }
             $siguientepartido = $equipo->sigPartido;
             $id_partido = $siguientepartido->id_partido;
             // Comprobar si el partido está en juego
             if ($siguientepartido->turno <= Partido::PRIMER_TURNO || $siguientepartido->turno > Partido::ULTIMO_TURNO) {
                 $trans->rollback();
                 // Devolver error de partido incorrecto
                 $data = array('ok' => false, 'error' => 'Partido incorrecto');
                 echo CJavaScript::jsonEncode($data);
                 Yii::app()->end();
             }
             // Todo correcto, ejecutar acción de partido
             AccionesTurno::usarPartido($id_usuario, $id_equipo, $id_partido, $habilidad, $res);
             // EXP: sumar experencia al usuario
             $usuario->sumarExp(Usuarios::MEDIA_EXP);
         } else {
             // Tipo inválido
             $trans->rollback();
             // Devolver error de tipo inválido
             $data = array('ok' => false, 'error' => 'Acción incorrecta');
             echo CJavaScript::jsonEncode($data);
             Yii::app()->end();
         }
         // Finalizar transacción
         $trans->commit();
         // Todo correcto
         $data = array('ok' => true, 'message' => 'Acción ejecutada correctamente', 'cooldownEnd' => $desbloqueada['fin_del_cooldown']);
         echo CJavaScript::jsonEncode($data);
         Yii::app()->end();
     } catch (Exception $e) {
         $trans->rollback();
         // Devolver error general
         $data = array('ok' => false, 'error' => 'Error al ejecutar la acción ');
         echo CJavaScript::jsonEncode($data);
         Yii::app()->end();
     }
 }