/** * 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; } } }
/** * 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.'); } }