public function ejecutar($id_usuario, $id_partido, $id_equipo) { $ret = 0; //Traer el array de efectos parent::ejecutar($id_usuario, $id_partido, $id_equipo); //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } // Cojo el equipo del usuario $equipo = $us->equipos; // Modifico Los factores de ese partido $ret = min($ret, Partidos::aumentar_factores($id_partido, $equipo->id_equipo, "defensivo", Efectos::$datos_acciones['RetransmitirRRSS']['defensivo'])); //Modifico los recursos Del usuario if (Recursos::aumentar_recursos($id_usuario, "animo", Efectos::$datos_acciones['RetransmitirRRSS']['animo']) == 0) { $ret = min($ret, 0); } else { $ret = -1; } // Incorporo un registro a la tabla acciones turno si el usuario aun no esta en ella AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo); //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, "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; }
/** * 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)); }
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; }
/** * 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 getUser($tag) { $user = User::where('tag', $tag)->first(); if (empty($user)) { App::abort(404); } $nombre = Recursos::sanear_string($user->first_name); $apellido = Recursos::sanear_string($user->last_name); $nombre_completo = $nombre . ' ' . $apellido; return $nombre_completo; }
/** * finalizar la accion * * @param int $id_usuario id del usuario * @param int $id_habilidad id de la habilidad usada * @return int 0 si completada con exito ; -1 en caso contrario */ public function finalizar($id_usuario, $id_habilidad) { // TODO $res = parent::finalizar($id_usuario, $id_habilidad); //Restablecer bonus_influencias if (Recursos::quitar_recursos($id_usuario, "bonus_dinero", Efectos::$datos_acciones['ContratarRRPP']['bonus_jugador']['influencias']) == 0) { return min($res, 0); } else { return -1; } }
/** * finalizar la accion * * @param int $id_usuario id del usuario * @param int $id_habilidad id de la habilidad usada * @return int 0 si completada con exito ; -1 en caso contrario */ public function finalizar($id_usuario, $id_habilidad) { //Comprobaciones de parámetros realizadas e influencias devueltas en la llamada al padre. //Cuidado, no dura hasta el prox. partido sino mientras dure el cooldown. $res = parent::finalizar($id_usuario, $id_habilidad); //Restablecer bonus_influencias if (Recursos::quitar_recursos($id_usuario, "bonus_influencias", Efectos::$datos_acciones['ContratarRRPP']['bonus_jugador']['influencias']) == 0) { return min($res, 0); } else { return -1; } }
/** * 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_usuario) { // TODO $ret = 0; //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } //Aumentar animo_max $ret = min($ret, Recursos::aumentar_recursos($id_usuario, "influencias_max", Efectos::$datos_acciones['EscribirBlog']['influencias_max'])); return $ret; }
public function postDeposito() { $email = Input::get('email'); $password = Input::get('password'); $moneda = Input::get('moneda'); $user_id = Input::get('user_id'); $consecutivo = Input::get('consecutivo'); Auth::attempt(array('email' => $email, 'password' => $password)); if (Auth::check()) { setlocale(LC_TIME, "esp"); $fecha = utf8_encode(strftime("%A, %d de %B de %Y, Hora %H:%M")); $fecha_corta = utf8_encode(strftime("%d de %B - %H:%M")); $usuario = User::find($user_id); $porcentaje = $usuario->porcentaje; $moneda_des = $moneda - $moneda * $porcentaje; $deposito = new UserAlcanciaDeposito(); $deposito->user_alcancia_id = $consecutivo; $deposito->moneda = $moneda; $deposito->moneda_des = $moneda_des; $deposito->fecha = $fecha; $deposito->fecha_corta = $fecha_corta; $deposito->save(); $uad = UserAlcancia::find($consecutivo)->transacciones->first(); // si es el primer deposito if (empty($uad)) { $transaccion = new Transacciones(); $transaccion->user_id = $user_id; $transaccion->valor = $moneda_des; $transaccion->tipo = 1; $transaccion->origen = $deposito->userAlcancia->alcancia->ubicacion; // ubicació de la alcancia $transaccion->movimiento = 'Deposito'; $transaccion->user_alcancia_id = $consecutivo; $transaccion->fecha = date('Y-m-d'); $transaccion->estado = 1; $transaccion->save(); } else { $update_transaccion = Transacciones::find($uad->id); $suma_moneda = $update_transaccion->valor + $moneda_des; $update_transaccion->valor = $suma_moneda; $update_transaccion->save(); } $suma = Recursos::getSumaMonedaByUser($user_id); $suma = $suma - $suma * $porcentaje; $suma_total = $usuario->transacciones->sum('valor'); Pusherer::trigger('Canal_moneda' . $usuario->email, 'my_event-' . $usuario->email, array('suma' => $suma_total)); return "Ahorro Guardado Ok"; } else { return "No logueado"; } }
/** * 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_usuario) { //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } //Aumentar dinero $helper = new Helper(); if (Recursos::aumentar_recursos($id_usuario, "dinero_gen", Efectos::$datos_acciones['Ascender']['dinero_gen']) == 0) { return 0; } else { return -1; } }
public function ejecutar($id_usuario) { //Traer el array de efectos parent::ejecutar($id_usuario); //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } //Aumentar ánimo if (Recursos::aumentar_recursos($id_usuario, "animo", Efectos::$datos_acciones['CrearseEspectativas']['animo']) == 0) { return 0; } else { return -1; } }
/** * 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_usuario, $id_partido, $id_equipo) { $ret = 0; //Traer el array de efectos parent::ejecutar($id_usuario, $id_partido, $id_equipo); //Validar usuario $us = Usuarios::model()->findByPk($id_usuario); if ($us === null) { throw new Exception("Usuario incorrecto.", 404); } // Modifico el animo del usuario $ret = min($ret, Recursos::aumentar_recursos($id_usuario, "animo", Efectos::$datos_acciones['DoblarApuesta']['animo'])); // Incorporo un registro a la tabla acciones turno si el usuario aun no esta en ella AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo); //Finalizar función return $ret; }
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(); } }
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; } }
public function getDataGrafica($id) { $query = DB::table('transacciones')->selectRaw('fecha, sum(valor) as sum')->where('user_id', $id)->groupBy('fecha')->orderBy('fecha')->get(); $datos = array(); $prepara = array(); $suma = 0; foreach ($query as $key => $value) { $fechaUTC = Recursos::fechaUTC($value->fecha); $suma = $suma + $value->sum; $datos[] = array($fechaUTC, $suma); $prepara[] = array($suma, $fechaUTC, $value->fecha); } // Logica, para agregar al comienzo del arreglo, un dato 0, el día anterior de un deposito. if ($query) { $fecha_ini = $prepara[0][2]; $ayer = date('Y-m-d', strtotime('-1 day', strtotime($fecha_ini))); $ayer = Recursos::fechaUTC($ayer); $nuevo = array($ayer, 0); array_unshift($datos, $nuevo); } return Response::json(['success' => true, 'datos' => $datos]); }
public function getResultado($user_id) { $portafolio = User::findOrFail($user_id)->portafolio()->get(); return $portafolio; $portafolios = Portafolio::all(); $valor = []; $renta = []; $promedio = []; $portafoliosArray = []; //$hoy = date('2015-07-09'); $hoy = date('Y-m-d'); $fecha_inicio = Recursos::ultimoDiaHabilDesde($hoy, 100); $fecha_inicio_semana = Recursos::ultimoDiaHabilDesde($hoy, 7); $lista_renta = DB::table('rentabilidad')->select('portafolio_id', 'renta', 'fecha')->orderBy('portafolio_id')->get(); foreach ($portafolios as $keyi => $portafolio) { $valor[$portafolio->id] = $portafolio->renta()->whereBetween('fecha', array($fecha_inicio, $hoy))->orderBy('fecha')->get(); $promedio = $portafolio->renta()->whereBetween('fecha', array($fecha_inicio_semana, $hoy))->avg('renta'); $portafoliosArray[$keyi + 1]['promedio'] = $promedio; $portafoliosArray[$keyi + 1]['nombre'] = $portafolio->nombre; $portafoliosArray[$keyi + 1]['id'] = $portafolio->id; //$portafoliosArray[($keyi+1)]['descripcion'] = $portafolio->descripcion; $portafoliosArray[$keyi + 1]['color'] = $colores[$keyi]; //return $promedio; foreach ($valor[$portafolio->id] as $key => $value) { $fecha = $value->fecha; $date = new DateTime($fecha); $date->modify('+1 day'); $fecha = $date->format('Y-m-d'); date_default_timezone_set('UTC'); $fechaUTC = strtotime($fecha) * 1000 - strtotime('02-01-1970 00:00:00') * 1000; //$renta['portafolio'.($keyi+1)][] = array($fechaUTC, floatval(floatval($value->renta))); $portafoliosArray[$keyi + 1]['renta'][] = array($fechaUTC, $value->renta); } } return Response::json(['success' => true, 'portafolios' => $portafoliosArray]); }
/** * 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.'); } }
private function getParametros(Recursos $persona) { $parametros = array(':nombre' => $persona->getNombre(), ':url' => $persona->getUrl(), ':archivosAsociados' => $persona->getArchivosAsociados(), ':fechaRegistro' => date('Y-m-d G:i:s')); return $parametros; }
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; } }
/** * 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; } } }
/** * 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ó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(); } }
/** * Fija los atributos de un nuevo personaje y lo guarda en la base de datos * * Para un personaje fija: * * - Recursos iniciales en funcion del personaje escogido * - nivel inicial (12) * - experencia inicial (7500) * - puntos de desbloqueo de habilidades (7) * * @return void */ public function crearPersonaje() { /* Nivel y Exp */ $this->setAttributes(array('nivel' => 1, 'exp' => 0, 'puntos_desbloqueo' => 3)); $this->setAttributes(array('exp_necesaria' => Usuarios::expNecesaria(1))); /* Recursos */ $rec = new Recursos(); $rec->setAttributes(array('usuarios_id_usuario' => $this->id_usuario)); switch ($this->personaje) { case self::PERSONAJE_ULTRA: $rec->setAttributes(array('dinero' => self::ULTRA_DINERO_INICIO, 'dinero_gen' => self::ULTRA_DINERO_GEN_INICIO, 'influencias' => self::ULTRA_INFLUENCIAS_MAX_INICIO, 'influencias_max' => self::ULTRA_INFLUENCIAS_MAX_INICIO, 'influencias_gen' => self::ULTRA_INFLUENCIAS_GEN_INICIO, 'influencias_bloqueadas' => 0, 'animo' => self::ULTRA_ANIMO_MAX_INICIO, 'animo_max' => self::ULTRA_ANIMO_MAX_INICIO, 'animo_gen' => self::ULTRA_ANIMO_GEN_INICIO)); break; case self::PERSONAJE_MOVEDORA: $rec->setAttributes(array('dinero' => self::ANIMADORA_DINERO_INICIO, 'dinero_gen' => self::ANIMADORA_DINERO_GEN_INICIO, 'influencias' => self::ANIMADORA_INFLUENCIAS_MAX_INICIO, 'influencias_max' => self::ANIMADORA_INFLUENCIAS_MAX_INICIO, 'influencias_gen' => self::ANIMADORA_INFLUENCIAS_GEN_INICIO, 'influencias_bloqueadas' => 0, 'animo' => self::ANIMADORA_ANIMO_MAX_INICIO, 'animo_max' => self::ANIMADORA_ANIMO_MAX_INICIO, 'animo_gen' => self::ANIMADORA_ANIMO_GEN_INICIO)); break; case self::PERSONAJE_EMPRESARIO: $rec->setAttributes(array('dinero' => self::EMPRESARIO_DINERO_INICIO, 'dinero_gen' => self::EMPRESARIO_DINERO_GEN_INICIO, 'influencias' => self::EMPRESARIO_INFLUENCIAS_MAX_INICIO, 'influencias_max' => self::EMPRESARIO_INFLUENCIAS_MAX_INICIO, 'influencias_gen' => self::EMPRESARIO_INFLUENCIAS_GEN_INICIO, 'influencias_bloqueadas' => 0, 'animo' => self::EMPRESARIO_ANIMO_MAX_INICIO, 'animo_max' => self::EMPRESARIO_ANIMO_MAX_INICIO, 'animo_gen' => self::EMPRESARIO_ANIMO_GEN_INICIO)); break; default: break; } $rec->setAttributes(array('ultima_act' => time())); $rec->save(); $this->save(); // EXTRA $this->sumarExp(7500); $this->setAttributes(array('puntos_desbloqueo' => 7)); $recy = $this->recursos; $a = $recy['animo_max']; $i = $recy['influencias_max']; $d = $recy['dinero'] * 5; $recy->setAttributes(array('dinero' => $d, 'animo' => $a, 'influencias' => $i)); $recy->save(); //---- }
/** * * 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(); } }
/** * 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)); }
public static function mapearRecursos(Recursos $persona, array $datos) { if (array_key_exists('Nombre', $datos)) { $persona->setNombre($datos['Nombre']); } if (array_key_exists('URL', $datos)) { $persona->setUrl($datos['URL']); } if (array_key_exists('ArchivosAsosciados', $datos)) { $persona->setArchivosAsociados($datos['ArchivosAsociados']); } }