Ejemplo n.º 1
0
 public function finalizar($id_usuario, $id_habilidad)
 {
     //Validar usuario
     $us = Usuarios::model()->findByPk($id_usuario);
     if ($us === null) {
         throw new Exception("Usuario incorrecto.", 404);
     }
     //Tomar y validar habilidad
     $hab = Habilidades::model()->findByPk($id_habilidad);
     if ($hab === null) {
         throw new Exception("Habilidad incorrecta.", 404);
     }
     //Coger influencias a devolver
     $influencias = $hab->influencias;
     //Aumentar ánimo
     if (Recursos::aumentar_recursos($id_usuario, "influencias", $influencias) == 0) {
         return 0;
     } else {
         return -1;
     }
 }
Ejemplo n.º 2
0
 /**
  * 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));
 }
Ejemplo n.º 3
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;
 }
Ejemplo n.º 4
0
 /**
  * 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'));
                             }
                         */
         }
     }
 }
Ejemplo n.º 5
0
 /**
  * Usar una accion grupal
  *
  * @static
  * @param $usuario
  * @param $id_accion
  * @param $id_equipo
  * @param $res : recursos del jugador
  * @param $habilidad
  * @return int id de la nueva accion grupal
  */
 public static function usarGrupal($usuario, $id_accion, $id_equipo, $res, $habilidad)
 {
     $id_usuario = $usuario->id_usuario;
     /*
         Se deberia obtener la accion grupal mediante su PK (id_accion_grupal)
         Como $id_accion equivale $id_habilidad por como se redirige desde acciones/index
         para obtener la accion grupal debo buscar por id_equipo y id_habilidad
         NOTA: no se contempla la posibilidad de en un mismo equipo haya varias acciones iguales
         pero con distinto creador (aunque dicha posibilidad existe) ya que debe arreglarse la redireccion
     */
     $res['dinero'] -= $habilidad['dinero'];
     $res['animo'] -= $habilidad['animo'];
     $res['influencias'] -= $habilidad['influencias'];
     $res['influencias_bloqueadas'] += $habilidad['influencias'];
     //sumarselos al crear nueva accion grupal
     $accion_grupal = new AccionesGrupales();
     $accion_grupal->setAttributes(array('usuarios_id_usuario' => $id_usuario, 'habilidades_id_habilidad' => $id_accion, 'equipos_id_equipo' => $id_equipo, 'influencias_acc' => $habilidad['influencias'], 'animo_acc' => $habilidad['animo'], 'dinero_acc' => $habilidad['dinero'], 'jugadores_acc' => 1, 'finalizacion' => $habilidad['cooldown_fin'] + time(), 'completada' => 0));
     //guardar en los modelos
     $res->save();
     $accion_grupal->save();
     //Crear participación del creador
     $participacion = new Participaciones();
     $participacion->acciones_grupales_id_accion_grupal = $accion_grupal->id_accion_grupal;
     $participacion->usuarios_id_usuario = $id_usuario;
     $participacion->dinero_aportado = $habilidad['dinero'];
     $participacion->influencias_aportadas = $habilidad['influencias'];
     $participacion->animo_aportado = $habilidad['animo'];
     if (!$participacion->save()) {
         Yii::app()->user->setFlash('error', 'Participación no creada. (AccionesController,actionUsar.');
         throw new Exception("Participación no creada. (AccionesController,actionUsar)");
     }
     //Enviamos la notificación correspondiente
     $notificacion = new Notificaciones();
     $notificacion->fecha = time();
     $notificacion->mensaje = Usuarios::model()->findByPk($id_usuario)->nick . " ha abierto la acción " . Habilidades::model()->findByPk($id_accion)->nombre;
     $notificacion->imagen = "images/iconos/notificaciones/nueva_grupal.png";
     $notificacion->save();
     //Enviamos la notificación a la afición
     $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $id_equipo));
     foreach ($componentes as $componente) {
         $usrnotif = new Usrnotif();
         $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
         $usrnotif->usuarios_id_usuario = $componente->id_usuario;
         $usrnotif->save();
     }
     // EXP: sumar experencia al usuario
     $usuario->sumarExp(Usuarios::MEDIA_EXP);
     return $accion_grupal['id_accion_grupal'];
 }
Ejemplo n.º 6
0
 /**
  * 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;
         }
     }
 }
Ejemplo n.º 7
0
 /**
  * Devuelve el modelo de datos basado en la clave primaria dada por la variable GET 
  *
  * > Funcion predeterminada de Yii
  * 
  * @param int $id            id del modelo que se va a cargar 
  * @throws \CHttpException   El modelo de datos no se encuentra 
  * @return \AccionesGrupales modelo de datos
  */
 public function loadModel($id)
 {
     $model = Habilidades::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }
Ejemplo n.º 8
0
 /**
  * Permite participar en una accion grupal abierta por tu aficion.
  *
  * Muestra el formulario que define que recursos va a aportar a la accion que se recogen por $_POST 
  *
  * > El id del jugador se recoge de la variable de sesion
  * 
  * @param int $id_accion   id de la accion en la que se va a participar
  *
  * @route jugadorNum12/acciones/participar/{$id}
  * @redirect jugadorNum12/accion/participar/{$id_accion}
  * 
  * @throws \Exception      accion inexistente
  * @throws \Exception      habilidad inexistente
  * @throws \Excepcion      la accion no permite mas participantes
  * @throws \Excepcion      fallo en la transaccion
  *  
  * @return void
  */
 public function actionParticipar($id_accion)
 {
     // TODO: pasar logica al modelo
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     // Saco el usuario
     $usuario = Yii::app()->user->usIdent;
     // Cojo la acción de la tabla acciones_grupales
     $accionGrupal = AccionesGrupales::model()->with('habilidades')->with('participaciones')->with('usuarios')->findByPk($id_accion);
     // Saco el propietario de la acción
     $propietarioAccion = $accionGrupal['usuarios_id_usuario'];
     //Iniciamos la transacción
     $transaccion = Yii::app()->db->beginTransaction();
     try {
         //Recojo los datos de la acción
         $accion = AccionesGrupales::model()->findByPK($id_accion);
         if ($accion === null) {
             Yii::app()->user->setFlash('accion', 'Acción inexistente.');
             throw new Exception('Acción inexistente.');
         }
         //Recojo los datos de la habilidad
         $habilidad = Habilidades::model()->findByPk($accion['habilidades_id_habilidad']);
         if ($habilidad == null) {
             Yii::app()->user->setFlash('habilidad', 'Habilidad inexistente.');
             throw new Exception('La habilidad no existe.');
         }
         //Saco el usuario que quiere participar en la acción
         $id_user = Yii::app()->user->usIdent;
         //Compuebo si el jugador ya ha participado en la acción
         $participacion = Participaciones::model()->findByAttributes(array('acciones_grupales_id_accion_grupal' => $id_accion, 'usuarios_id_usuario' => $id_user));
         $nuevo_participante = $participacion === null;
         if ($nuevo_participante) {
             //Compruebo que no se sobrepase el límite de jugadores
             if ($accion['jugadores_acc'] >= $habilidad['participantes_max']) {
                 Yii::app()->user->setFlash('participantes', 'La acción no permite más participantes.');
                 //$this-> redirect(array('acciones/index'));
                 throw new Exception('La acción no permite más participantes.');
             }
             //Saco el modelo que le voy a pasar a la vista
             $participacion = new Participaciones();
             $participacion['acciones_grupales_id_accion_grupal'] = $id_accion;
             $participacion['usuarios_id_usuario'] = $id_user;
         }
         $participacion->setScenario('participar');
         // Comprobar si hay recursos a aportar
         if (!isset($_POST['Participaciones'])) {
             $transaccion->rollback();
             //Petición GET: Muestro el formulario
             $this->render('participar', array('habilidad' => $habilidad, 'participacion' => $participacion, 'accion' => $accion, 'accionGrupal' => $accionGrupal, 'usuario' => $usuario, 'propietarioAccion' => $propietarioAccion));
             return;
         }
         //Petición POST
         $recursosAportados = $_POST['Participaciones'];
         // Llamar a función del modelo AccionesGrupales para participar en la misma
         AccionesGrupales::participar($id_accion, $recursosAportados, $accion, $habilidad, $participacion, $nuevo_participante);
         $transaccion->commit();
         $this->redirect(array('acciones/participar', 'id_accion' => $id_accion));
     } catch (Exception $exc) {
         $transaccion->rollback();
         $this->redirect(array('usuarios/index'));
         throw $exc;
     }
 }