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;
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 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, "moral", Efectos::$datos_acciones['CorearEstadio']['moral']));
     // 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;
 }
Example #4
0
 private function bonifAnimo($equipo, $bonus)
 {
     /*$bonifParticipante = 3;
       $bonifNoParticipante = 1*/
     try {
         $participantes = AccionesTurno::model()->findAllByAttributes(array('equipos_id_equipo' => $equipo, 'partidos_id_partido' => $this->id_partido));
         $usuarios = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $equipo));
         $bonusAmbiente = $bonus * (pow(1.5, $this->ambiente + 1) / (4 + 0.7 * $this->ambiente));
         //(1.5^(a+1))/(4+.7*a)
         foreach ($usuarios as $user) {
             //Esta bonificacion se le da a todos
             $rec = $user->recursos;
             $rec['animo'] = min(round($bonusAmbiente + $rec['animo']), $rec['animo_max']);
             $rec->save();
         }
         foreach ($participantes as $participante) {
             //Esta se le da solo a los participantes
             $user = $participante->usuarios;
             $rec = $user->recursos;
             $rec['animo'] = min(round(3 * $bonusAmbiente + $rec['animo']), $rec['animo_max']);
             $rec->save();
         }
     } catch (Exception $exc) {
         throw new Exception("Error al generar la bonificacion al animo de final de partido", 1);
     }
 }
Example #5
0
 /**
  * Usar accion en el partido
  *
  * Incorpora la accion, busca la participacion y suma influencia a la accion y
  * 
  * @param $participacion
  * @param int $cantidad
  * @return void
  */
 public static function usarPartido($id_usuario, $id_equipo, $id_partido, $habilidad, $res)
 {
     // Importar acciones
     Yii::import('application.components.Acciones.*');
     // Restar recursos
     $res['dinero'] -= $habilidad['dinero'];
     $res['animo'] -= $habilidad['animo'];
     $res['influencias'] -= $habilidad['influencias'];
     $res['influencias_partido_bloqueadas'] += $habilidad['influencias'];
     $res->save();
     //Incorporo la accion si ese usuario aun no ha participado
     AccionesTurno::incorporarAccion($id_usuario, $id_partido, $id_equipo);
     $participacion = AccionesTurno::buscarParticipacion($id_usuario, $id_partido, $id_equipo);
     //Sumo la influencia de esta accion a la que tenga acumulada
     AccionesTurno::sumarInfluencia($participacion, $habilidad->influencias);
     //Tomar nombre de habilidad para instanciación dinámica
     $nombreHabilidad = $habilidad->codigo;
     //echo '<pre>'.die(var_dump($id_partido)).'</pre>' ;
     //Llamar al singleton correspondiente y ejecutar dicha acción
     $nombreHabilidad::getInstance()->ejecutar($id_usuario, $id_partido, $id_equipo);
 }
 /**
  * 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();
     }
 }