/** * 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)); }
/** * Ejecutar la accion * * @param int $id_usuario id del usuario que realiza la accion * @throws \Exception usuario no encontrado * @return int 0 si completada con exito ; -1 en caso contrario */ public function ejecutar($id_accion) { // TODO $ret = 0; //COmpruebo si la accion existe $accGrup = AccionesGrupales::model()->findByPk($id_accion); if ($accGrup === null) { throw new Exception("Accion grupal inexistente.", 404); } $creador = $accGrup->usuarios; $equipo = $creador->equipos; $sigPartido = $equipo->sigPartido; //1.- Añadir bonificación al partido $ret = min($ret, Equipos::aumentar_recursos_equipo($equipo->id_equipo, "aforo_base", Efectos::$datos_acciones['FinanciarPelicula']['aforo_base'])); $ret = min($ret, Partidos::aumentar_factores($sigPartido->id_partido, $equipo->id_equipo, "nivel", Efectos::$datos_acciones['FinanciarPelicula']['nivel_equipo'])); //2.- Dar bonificación al creador $ret = min($ret, Recursos::aumentar_recursos($creador->id_usuario, "animo_gen", Efectos::$datos_acciones['FinanciarPelicula']['bonus_creador']['animo_gen'])); $ret = min($ret, Recursos::aumentar_recursos($creador->id_usuario, "dinero_gen", Efectos::$datos_acciones['FinanciarPelicula']['bonus_creador']['dinero_gen'])); //3.- Devolver influencias $participantes = $accGrup->participaciones; foreach ($participantes as $participacion) { $infAportadas = $participacion->influencias_aportadas; $usuario = $participacion->usuarios_id_usuario; //if (Recursos::aumentar_recursos($usuario,"influencias",$infAportadas) == 0) { if (Recursos::disminuir_influencias_bloqueadas($usuario, $infAportadas) == 0) { $ret = min($ret, 0); } else { $ret = -1; } } //4.- Finalizar funciónK return $ret; }
public function ejecutar($id_accion) { $ret = 0; $accGrup = AccionesGrupales::model()->findByPk($id_accion); if ($accGrup === null) { throw new Exception("Accion grupal inexistente.", 404); } $creador = $accGrup->usuarios; $equipo = $creador->equipos; $sigPartido = $equipo->sigPartido; //1.- Añadir bonificación al partido $ret = min($ret, Partidos::aumentar_factores($sigPartido->id_partido, $equipo->id_equipo, "nivel", Efectos::$datos_acciones['IncentivoEconomico']['nivel_equipo'])); $ret = min($ret, Partidos::aumentar_factores($sigPartido->id_partido, $equipo->id_equipo, "moral", Efectos::$datos_acciones['IncentivoEconomico']['moral'])); //2.- Dar bonificación al creador $ret = min($ret, Recursos::aumentar_recursos($creador->id_usuario, "influencias", Efectos::$datos_acciones['IncentivoEconomico']['bonus_creador']['influencias'])); //3.- Devolver influencias $participantes = $accGrup->participaciones; foreach ($participantes as $participacion) { $infAportadas = $participacion->influencias_aportadas; $usuario = $participacion->usuarios_id_usuario; //if (Recursos::aumentar_recursos($usuario,"influencias",$infAportadas) == 0) if (Recursos::disminuir_influencias_bloqueadas($usuario, $infAportadas) == 0) { $ret = min($ret, 0); } else { $ret = -1; } } //Finalizar función return $ret; }
public function ejecutar($id_accion) { $ret = 0; $accGrup = AccionesGrupales::model()->findByPk($id_accion); if ($accGrup === null) { throw new Exception("Accion grupal inexistente.", 404); } $creador = $accGrup->usuarios; $equipo = $creador->equipos; $sigPartido = $equipo->sigPartido; //1.- Añadir bonificación al partido $ret = min($ret, Partidos::aumentar_factores($sigPartido->id_partido, $equipo->id_equipo, 'ambiente', Efectos::$datos_acciones['Pintarse']['ambiente'])); $ret = min($ret, Partidos::aumentar_factores($sigPartido->id_partido, $equipo->id_equipo, "moral", Efectos::$datos_acciones['Pintarse']['moral'])); $ret = min($ret, Partidos::aumentar_factores($sigPartido->id_partido, $equipo->id_equipo, "ofensivo", Efectos::$datos_acciones['Pintarse']['ofensivo'])); //2.- Dar bonificación al creador $ret = min($ret, Recursos::aumentar_recursos($creador->id_usuario, 'animo', Efectos::$datos_acciones['Pintarse']['bonus_creador']['animo'])); //3.- Devolver influencias y dar animo de la accion $participantes = $accGrup->participaciones; foreach ($participantes as $participacion) { $infAportadas = $participacion->influencias_aportadas; $usuario = $participacion->usuarios_id_usuario; $ret = min($ret, Recursos::aumentar_recursos($usuario, "animo", Efectos::$datos_acciones['Pintarse']['animo'])); //$ret = min($ret,Recursos::aumentar_recursos($usuario,"influencias",$infAportadas)); $ret = min($ret, Recursos::disminuir_influencias_bloqueadas($usuario, $infAportadas)); } //Finalizar función return $ret; }
public function eliminaGrupales($id_equipo) { $grupales = AccionesGrupales::model()->findAllByAttributes(array('equipos_id_equipo' => $id_equipo, 'completada' => 1)); foreach ($grupales as $gp) { Participaciones::model()->deleteAllByAttributes(array('acciones_grupales_id_accion_grupal' => $gp->id_accion_grupal)); AccionesGrupales::model()->deleteByPk($gp->id_accion_grupal); } }
/** * Cambiar la aficion a la que pertenece un usuario * * Actualiza la tabla <usuarios> y <equipos> * * Las acciones grupales en las que participaba el usuario en el equipo original se * quedan intactas; el creador de la accion podra si quiere, eliminar esas aportaciones * * > El id del jugador y el equipo al que pertence se recogen de la variable de sesion * * @param int $id_nuevo_equipo id del nuevo equipo al que cambia el jugador * * @route jugadorNum12/equipos/cambiar/{$id_nuevo_equipo} * @redirect jugadorNum12/equipos/ver/{$id_equipo_nuevo} * @return void */ public function actionCambiar($id_nuevo_equipo) { /* Actualizar datos de usuario (recuros,individuales y grupales) */ Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent); /* Fin de actualización */ //Coger id de usuario $id_usuario = Yii::app()->user->usIdent; $modeloUsuario = Usuarios::model()->findByPk($id_usuario); $modeloEquipo = Equipos::model()->findByPk($id_nuevo_equipo); //Si el id del nuevo equipo corresponde con el mismo en el que estaba error //Si el id nuevo no corresponde a ningun equipo tambien devuelve error if ($id_nuevo_equipo == $modeloUsuario->equipos_id_equipo) { Yii::app()->user->setFlash('equipo_actual', 'Tienes que cambiarte a un equipo diferente al actual.'); $this->redirect(array('equipos/ver/', 'id_equipo' => $id_nuevo_equipo)); } else { if ($modeloEquipo === null) { Yii::app()->user->setFlash('equipo', 'No existe el equipo al que quiere cambiarse.'); } else { //Coger de <<acciones_grupales>> todos los registros con id_usuario $acciones_grupales = AccionesGrupales::model()->findAllByAttributes(array('usuarios_id_usuario' => $id_usuario)); foreach ($acciones_grupales as $accion_grupal) { AccionesGrupales::finalizaGrupal($accion_grupal->id_accion_grupal, true); } /*ATENCION las acciones en las que el participa ya se encarga el usuario que las creo de borrarlas sino le interesa tener ese aportacion de recursos*/ //Una vez devueltos los recursos a la gente que participo en las acciones que creo el usuario //cambio el id del equipo al que pertenece y guardo el modelo modificado $modeloUsuario = Usuarios::model()->findByPk($id_usuario); $modeloUsuario->setAttributes(array('equipos_id_equipo' => $id_nuevo_equipo)); $modeloUsuario->save(); //Cambiar variable de sesion Yii::app()->user->setState('usAfic', $id_nuevo_equipo); $this->redirect(array('equipos/ver/', 'id_equipo' => $id_nuevo_equipo)); } } }
/** * Muestra la informacion previa a un partido. * * 1 Si el partido ya se jugo, mostrar la cronica (resultado) de ese partido * 2 Si el partido no se ha jugado aún y no es el partido próximo mostrar: * - fecha y hora * - equipos que jugarán * 3 Si el partido es el próximo partido del equipo, mostrar: * - fecha y hora * - ambiente para el partido * - equipo local y visitante * - detalles de ambos equipos (aforo previsto, nivel de los equipos) * - acciones completadas por las aficiones * * @param int $id_partido id del partido sobre el que se consulta la previa * * @route jugadorNum12/partidos/previa/{$id_partido} * @redirect jugadorNum12/partidos/index si se intenta asistir a un partido posterior al siguiente * * @return void */ public function actionPrevia($id_partido) { /* Actualizar datos de usuario (recuros,individuales y grupales) */ Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent); /* Fin de actualización */ //Saco la informacion del partido $modeloPartidos = Partidos::model()->findByPk($id_partido); //Saco la información de los equipos para mostrar el nombre en la vista $modeloEquipoLocal = Equipos::model()->findByPk($modeloPartidos->equipos_id_equipo_1); $modeloEquipoVisitante = Equipos::model()->findByPk($modeloPartidos->equipos_id_equipo_2); //Saco la información de las acciones grupales previstas para el partido por el equipo local $modeloGrupalesLocal = AccionesGrupales::model()->findAllByAttributes(array('equipos_id_equipo' => $modeloPartidos->equipos_id_equipo_1)); //Saco la información de las acciones grupales previstas para el partido por el equipo visitante $modeloGrupalesVisitante = AccionesGrupales::model()->findAllByAttributes(array('equipos_id_equipo' => $modeloPartidos->equipos_id_equipo_2)); //Obtener hora actual,de momento 130 porque no estan ajustadas las horas en la tabla $hora_actual = 130; //Obtener el equipo del usuario $id_usuario = Yii::app()->user->usIdent; $id_equipo = Usuarios::model()->findByPk($id_usuario)->equipos_id_equipo; //Obtener el partido a consultar y //el siguiente partido del equipo del usuario $modeloPartido = Partidos::model()->findByPk($id_partido); $modeloSigPartido = Equipos::model()->findByPk(Yii::app()->user->usAfic)->sigPartido; //Si el partido se encuentra en su ultimo turno muestro la cronica ///Sino muestro la previa del partido, si es el siguiente que juega el equipo //Sino cumple ninguna de esas condiciones muestro que no tengo informacion Yii::import('application.components.Partido'); $ultimo_turno = Partido::ULTIMO_TURNO; if ($modeloPartido->turno == $ultimo_turno + 1) { // Cargar css de previa //$uri = Yii::app()->request->baseUrl.'/less/infopartido.less'; //Yii::app()->clientScript->registerLinkTag('stylesheet/less', 'text/css', $uri); //si el partido se jugo, obtener cronica $this->render('cronica', array('modeloP' => $modeloPartidos, 'modeloL' => $modeloEquipoLocal, 'modeloV' => $modeloEquipoVisitante)); } elseif ($id_partido == $modeloSigPartido->id_partido && $modeloSigPartido->turno == 0) { // Cargar css de previa //$uri = Yii::app()->request->baseUrl.'/less/infopartido.less'; //Yii::app()->clientScript->registerLinkTag('stylesheet/less', 'text/css', $uri); //si el partido no se ha jugado y es el siguiente partido del equipo del usuario //Renderizo la vista que me muestra la previa $this->render('previa', array('modeloP' => $modeloPartidos, 'modeloL' => $modeloEquipoLocal, 'modeloV' => $modeloEquipoVisitante, 'modeloGL' => $modeloGrupalesLocal, 'modeloGV' => $modeloGrupalesVisitante)); } else { //no se puede asistir a un partido que esta despues del siguiente partido Yii::app()->user->setFlash('Partido', 'No hay informacion acerca del partido'); $this->redirect(array('partidos/index')); } }
/** * 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); }
/** * 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']; }
/** * Devuelve los recursos de las acciones grupales a los participantes * * Selecciona las acciones grupales finalizadas sin éxito y devuelve los recursos a sus * participantes y creador. * * @route JugadorNum12/scripts/finalizaGrupales * * @throws \Exception excepcion interna * @return void */ public function actionFinalizaGrupales() { //Traer acciones y Helper Yii::import('application.components.Acciones.*'); $tiempo = time(); $busqueda = new CDbCriteria(); $busqueda->addCondition(':bTiempo >= finalizacion'); $busqueda->addCondition('completada = :bCompletada'); $busqueda->params = array(':bTiempo' => $tiempo, ':bCompletada' => 0); $grupales = AccionesGrupales::model()->findAll($busqueda); //Iterar sobre las acciones grupales resultantes de la búsqueda foreach ($grupales as $gp) { $transaction = Yii::app()->db->beginTransaction(); try { //Tomar participaciones $participantes = Participaciones::model()->findAllByAttributes(array('acciones_grupales_id_accion_grupal' => $gp->id_accion_grupal)); //Recorro todos los participantes devolviendoles sus recursos. //Esto incluye el creador de la acción. foreach ($participantes as $participante) { //Cojo el dinero,influencia y animo aportado por el usuario $dinero = $participante->dinero_aportado; $influencia = $participante->influencias_aportadas; $animo = $participante->animo_aportado; //Utilizo el helper para ingresarle al usuario los recursos Recursos::aumentar_recursos($participante->usuarios_id_usuario, 'dinero', $dinero); Recursos::aumentar_recursos($participante->usuarios_id_usuario, 'animo', $animo); Recursos::aumentar_recursos($participante->usuarios_id_usuario, 'influencias', $influencia); //Eliminar ese modelo Participaciones::model()->deleteAllByAttributes(array('acciones_grupales_id_accion_grupal' => $gp->id_accion_grupal, 'usuarios_id_usuario' => $participante->usuarios_id_usuario)); } //Borro esa accion grupal iniciada por el usuario que quiere cambiar de equipo AccionesGrupales::model()->deleteByPk($gp->id_accion_grupal); //Finalizar transacción con éxito $transaction->commit(); } catch (Exception $ex) { //Rollback de la transacción en caso de error $transaction->rollback(); throw $ex; } } }
/** * 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 = AccionesGrupales::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }