/**
  * 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));
 }
 function run($args)
 {
     //no sé si debe comprobar si hay otro script ejecutandose o no
     $trans = Yii::app()->db->beginTransaction();
     try {
         $recursos = Recursos::model()->findAll();
         foreach ($recursos as $recurso) {
             //influencias
             Recursos::aumentar_recursos($recurso->usuarios_id_usuario, "influencias", $recurso->influencias_gen);
             //dinero
             Recursos::aumentar_recursos($recurso->usuarios_id_usuario, "dinero", $recurso->dinero_gen);
             //animo
             Recursos::aumentar_recursos($recurso->usuarios_id_usuario, "animo", $recurso->animo_gen);
             $trans->commit();
         }
     } catch (Exception $e) {
         $trans->rollback();
     }
 }
 /**
  * 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));
 }
Exemple #4
0
 public function actualizaRecursos($id_usuario)
 {
     try {
         $animo_nuevo = 0;
         $dinero_nuevo = 0;
         $influencias_nuevas = 0;
         $ahora = time();
         $transaction = Yii::app()->db->beginTransaction();
         $rec = Recursos::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario));
         if ($rec === null) {
             throw new Exception("Recursos inexistentes. ModeloRecursos (actualizaRecursos)", 404);
         }
         //Tomar diferencia de minutos
         $dif_minutos = floor(($ahora - $rec->ultima_act) / 60);
         if ($dif_minutos > 0) {
             //Solo actualizamos si han pasado ciertos minutos
             $animo_nuevo = round($rec->animo_gen * $dif_minutos);
             $dinero_nuevo = round($rec->dinero_gen * $dif_minutos);
             $influencias_nuevas = round($rec->influencias_gen * $dif_minutos);
             //Ultima actualización (para precisión total)
             //if ($rec->ultima_act == 0)
             //{
             $rec->ultima_act = $ahora;
             //}
             //else
             //{
             //	$rec->ultima_act + ($dif_minutos*60);
             //}
             if (!$rec->save()) {
                 throw new Exception("Imposible guardar modelo de recursos. (actualizaRecursos,RecusosModel)", 500);
             }
             //influencias
             self::aumentar_recursos($rec->usuarios_id_usuario, "influencias", $influencias_nuevas);
             //dinero
             self::aumentar_recursos($rec->usuarios_id_usuario, "dinero", $dinero_nuevo);
             //animo
             self::aumentar_recursos($rec->usuarios_id_usuario, "animo", $animo_nuevo);
         }
         //Finalizar transacción con éxito
         $transaction->commit();
     } catch (Exception $e) {
         $transaction->rollback();
         //throw $e;
     }
 }
 /**
  *
  * Incrementa los recursos durante el partido de forma asíncrona
  *
  * @param int $id_usuario id del usuario al que incrementar recursos
  * 
  * @route jugadorNum12/partidos/actRecursos/{$id_usuario}
  * @return JSON con los datos necesarios para llevar a cabo la actualización
  */
 public function actionActRecursos($id_usuario)
 {
     Recursos::model()->actualizaRecursos($id_usuario);
     $datos = Recursos::model()->findByPk($id_usuario);
     if ($datos !== null) {
         echo json_encode(array('codigo' => (int) 1, 'influencias' => (int) $datos->influencias, 'dinero' => (int) $datos->dinero, 'animo' => (int) $datos->animo, 'influencias_max' => (int) $datos->influencias_max, 'animo_max' => (int) $datos->animo_max));
         Yii::app()->end();
     } else {
         echo json_encode(array('codigo' => (int) 0, 'influencias' => (int) 0, 'dinero' => (int) 0, 'animo' => (int) 0, 'influencias_max' => (int) 0, 'animo_max' => (int) 0));
         Yii::app()->end();
     }
 }
Exemple #6
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);
 }
 /** 
  * Funcion que agrega una participacion a una accion grupal
  *
  *  -  actualiza los recursos del usuario
  *  -  suma exp al jugador en funcion de los recursos aportados
  *  -  actualiza los recursos de la accion
  *  -  agrega la participacion (o actualiza una ya existente)
  *  -  si se completa la accion, la ejecuta
  *
  * Comprobaciones de seguridad realizadas:
  *  1. la participacion es para el equipo del usuario
  *  2. la accion no ha terminado
  *  3. el jugador tiene suficientes recursos
  *  4. la participacion no es mayor que los recursos restantes de la accion
  *  5. error al actualizar la participacion en la base de datos
  *  6. la participacion es vacia (ignorarla)
  *
  * @static
  * @param $id_accion
  * @param $recursosAportados
  * @param $accion
  * @param $habilidad
  * @param $participacion
  * @param $nuevo_participante
  *
  * @throws \Exception 'No puedes participar en esta accion'
  * @throws \Exception 'La accion ya ha acabado'
  * @throws \Exception 'No se puede obtener el modelo de recursos'
  * @throws \Exception 'No tienes suficientes recursos.'
  * @throws \Exception 'Error en la BBDD.'
  * @throws \Exception 'El usuario se ha saltado una validación.'
  * @throws \Exception 'No has aportado nada a la acción.'
  * @return void
  */
 public static function participar($id_accion, $recursosAportados, $accion, $habilidad, $participacion, $nuevo_participante)
 {
     // 1) Comprobacion: la accion es del equipo del user
     if ($accion['equipos_id_equipo'] != Yii::app()->user->usAfic) {
         Yii::app()->user->setFlash('equipo', 'No puedes participar en esta acción. No es de tu equipo');
         throw new Exception('No puedes participar en esta acción.');
     }
     // 2) Comprobacion: la accion no ha terminado
     if ($accion['completada'] != 0) {
         Yii::app()->user->setFlash('acabada', 'La acción ya ha acabado.');
         throw new Exception('La acción ya ha acabado.');
     }
     // id_usuario y recursos
     $id_user = Yii::app()->user->usIdent;
     $recursosUsuario = Recursos::model()->findByAttributes(array('usuarios_id_usuario' => $id_user));
     if ($recursosUsuario === null) {
         //Comprobación de seguridad
         Yii::app()->user->setFlash('recursos', 'No se puede obtener el modelo de recursos. (actionParticipar,AccionesController).');
         throw new Exception('No se puede obtener el modelo de recursos.');
     }
     $dineroUsuario = $recursosUsuario['dinero'];
     $influenciasUsuario = $recursosUsuario['influencias'];
     $animoUsuario = $recursosUsuario['animo'];
     $dineroAportado = $recursosAportados['dinero_nuevo'];
     $animoAportado = $recursosAportados['animo_nuevo'];
     $influenciasAportadas = $recursosAportados['influencia_nueva'];
     // Se actualiza la participacion
     $participacion->setAttributes(array('dinero_nuevo' => $dineroAportado, 'animo_nuevo' => $animoAportado, 'influencia_nueva' => $influenciasAportadas));
     // 3) Comprobacion: el usuario tiene suficientes recursos
     if ($dineroAportado > $dineroUsuario || $animoAportado > $animoUsuario || $influenciasAportadas > $influenciasUsuario) {
         //No tiene suficientes recursos
         Yii::app()->user->setFlash('recursos', 'No tienes suficientes recursos.');
         throw new Exception('No tienes suficientes recursos.');
     }
     // 4) Comprobacion: los recursos aportados no sobrepasan los que faltan para terminar la acción
     $dineroAportado = min($dineroAportado, $habilidad['dinero_max'] - $accion['dinero_acc']);
     $animoAportado = min($animoAportado, $habilidad['animo_max'] - $accion['animo_acc']);
     $influenciasAportadas = min($influenciasAportadas, $habilidad['influencias_max'] - $accion['influencias_acc']);
     // 5) Comprobacion: error al actualizar la participacion en la base de datos
     if ($dineroAportado < 0 || $animoAportado < 0 || $influenciasAportadas < 0) {
         if ($habilidad['dinero_max'] < $accion['dinero_acc']) {
             Yii::log('[DATABASE_ERROR] La accion ' . $id_accion . ' más dinero del maximo (' . $accion['dinero_acc'] . '/' . $habilidad['dinero_max'] . ').', 'error');
             Yii::app()->user->setFlash('base_datos', 'Error en la base de datos. Pongase en contacto con un administrador.');
             throw new Exception('Error en la BBDD.');
         } elseif ($habilidad['animo_max'] < $accion['animo_acc']) {
             Yii::log('[DATABASE_ERROR] La accion ' . $id_accion . ' más animo del maximo (' . $accion['animo_acc'] . '/' . $habilidad['animo_max'] . ').', 'error');
             Yii::app()->user->setFlash('base_datos', 'Error en la base de datos. Pongase en contacto con un administrador.');
             throw new Exception('Error en la BBDD.');
         } elseif ($habilidad['influencias_max'] < $accion['influencias_acc']) {
             Yii::log('[DATABASE_ERROR] La accion ' . $id_accion . ' más influencia del maximo (' . $accion['influencias_acc'] . '/' . $habilidad['influencias_max'] . ').', 'error');
             Yii::app()->user->setFlash('base_datos', 'Error en la base de datos. Pongase en contacto con un administrador.');
             throw new Exception('Error en la BBDD.');
         }
         Yii::log('[MALICIOUS_REQUEST] El usuario ' . $id_user . ' se ha saltado una validación de seguridad, intentando robar recursos de la accion ' . $id_accion, 'warning');
         Yii::app()->user->setFlash('aviso', 'Se ha registrado un intento de ataque al sistema. De no ser así, póngase en contacto con el administrador. Ten cuidado o acabarás baneado.');
         throw new Exception('El usuario se ha saltado una validación.');
     }
     //6 ) Comprobacion: la participacion es vacia (ignorarla)
     if ($dineroAportado == 0 && $animoAportado == 0 && $influenciasAportadas == 0) {
         Yii::app()->user->setFlash('aporte', 'No has aportado nada a la acción.');
         throw new Exception('No has aportado nada a la acción.');
     }
     // Actualizar los recursos del user
     $recursosUsuario['dinero'] = $dineroUsuario - $dineroAportado;
     $recursosUsuario['animo'] = $animoUsuario - $animoAportado;
     $recursosUsuario['influencias'] = $influenciasUsuario - $influenciasAportadas;
     $recursosUsuario['influencias_bloqueadas'] += $influenciasAportadas;
     $recursosUsuario->save();
     // Actualizar la experiencia acumulada del usuario
     $usuario = Usuarios::model()->findByPk($id_user);
     if ($usuario === null) {
         //Comprobación de seguridad
         Yii::log('[DATABASE_ERROR] La accion ' . $id_accion . ' No se encuentra el usuario (' . $id_user . ').', 'error');
         Yii::app()->user->setFlash('base_datos', 'Error en la base de datos. Pongase en contacto con un administrador.');
         throw new Exception('Error en la BBDD.');
     }
     $exp_ganada = (int) ($dineroAportado * Usuarios::MOD_EXP_DINERO + $animoAportado * Usuarios::MOD_EXP_ANIMO + $influenciasAportadas * Usuarios::MOD_EXP_INFLUENCIAS);
     $usuario->sumarExp($exp_ganada);
     // Actualizar la acciones_grupales
     $accion['dinero_acc'] += $dineroAportado;
     $accion['influencias_acc'] += $influenciasAportadas;
     $accion['animo_acc'] += $animoAportado;
     if ($nuevo_participante) {
         $accion['jugadores_acc'] += 1;
     }
     if ($accion['dinero_acc'] == $habilidad['dinero_max'] && $accion['influencias_acc'] == $habilidad['influencias_max'] && $accion['animo_acc'] == $habilidad['animo_max']) {
         $accion['completada'] = 1;
     }
     // Actualizar la participación
     if ($nuevo_participante) {
         $participacion['dinero_aportado'] = $dineroAportado;
         $participacion['influencias_aportadas'] = $influenciasAportadas;
         $participacion['animo_aportado'] = $animoAportado;
         $participacion->save();
     } else {
         $n = $participacion->updateAll(array('dinero_aportado' => $participacion['dinero_aportado'] + $dineroAportado, 'influencias_aportadas' => $participacion['influencias_aportadas'] + $influenciasAportadas, 'animo_aportado' => $participacion['animo_aportado'] + $animoAportado), "acciones_grupales_id_accion_grupal=:id_accion && usuarios_id_usuario=:id_user", array(':id_accion' => $id_accion, ':id_user' => $id_user));
         if ($n != 1) {
             //Si salta esto es que había más de una participación del mismo usuario en la acción
             Yii::log('[DATABASE_ERROR] El usuario ' . $id_user . ' tiene ' . $n . ' participaciones en la acción ' . $id_accion, 'error');
             Yii::app()->user->setFlash('base_datos', 'Error en la base de datos. Pongase en contacto con un administrador.');
             throw new Exception('Error en la BBDD.');
         }
     }
     // 1) Si la accion esta completada con esa aportacion
     //  - se ejecuta la accion
     //  - bonificacion de experencia a los participantes de la accion
     // 2) Se guardas los cambios en la accion
     if ($accion['completada'] == 1) {
         //Si se ha completado creamos una notificación
         $notificacion = new Notificaciones();
         $notificacion->fecha = time();
         $notificacion->mensaje = Usuarios::model()->findByPk($id_user)->nick . " ha completado la acción " . Habilidades::model()->findByPk($habilidad->id_habilidad)->nombre;
         $notificacion->imagen = "images/iconos/notificaciones/completa_grupal.png";
         $notificacion->save();
         //Enviamos la notificación a la afición
         $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => Usuarios::model()->findByPk($id_user)->equipos_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();
         }
         Yii::import('application.components.Acciones.*');
         $nombreHabilidad = $habilidad->codigo;
         //Llamar al singleton correspondiente y ejecutar dicha acción
         $nombreHabilidad::getInstance()->ejecutar($id_accion);
         // actualizar la exp de todos los participantes
         $participantes = $accion->participaciones;
         $u;
         foreach ($participantes as $p) {
             $u = Usuarios::model()->findByPk($p->usuarios_id_usuario);
             $u->sumarExp(Usuarios::MUCHA_EXP);
         }
     }
     $accion->save();
     if ($accion['completada'] == 1) {
         Yii::app()->user->setFlash('completada', '¡Enhorabuena, has completado la acción¡');
     } else {
         //si se ha aportado algo creamos notivicación
         $participaciones = Participaciones::model()->findAllByAttributes(array('acciones_grupales_id_accion_grupal' => $id_accion));
         //Si soy el unico en participar no creamos la notificacion
         if (count($participaciones) > 1) {
             $notificacion = new Notificaciones();
             $notificacion->fecha = time();
             $notificacion->mensaje = Usuarios::model()->findByPk($id_user)->nick . " ha participado en la acción " . Habilidades::model()->findByPk($habilidad->id_habilidad)->nombre;
             $notificacion->imagen = "images/iconos/notificaciones/participacion_grupal.png";
             $notificacion->save();
             //enviamos notificaciones a los participantes de la acción
             foreach ($participaciones as $participacion) {
                 if ($participacion->usuarios_id_usuario != $id_user) {
                     $usrnotif = new Usrnotif();
                     $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
                     $usrnotif->usuarios_id_usuario = $participacion->usuarios_id_usuario;
                     //$habilidad->id_habilidad;//
                     $usrnotif->save();
                 }
             }
         }
         Yii::app()->user->setFlash('aporte', 'Tu equipo agradece tu generosa contribución.');
     }
 }
 /**
  * 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();
     }
 }