コード例 #1
0
ファイル: Partido.php プロジェクト: rMarinf/JugadorNum12
 public function jugarse()
 {
     switch ($this->turno) {
         case self::PRIMER_TURNO:
             //Turno inicial (preparar partido)
             $this->inicializaEncuentro();
             $this->generaCronicaBase();
             $this->guardaEstado();
             break;
         case self::TURNO_DESCANSO:
             $this->generaEstadoDescanso();
             $this->generaCronicaDescanso();
             $this->guardaEstado();
             break;
         case $this->turno > self::PRIMER_TURNO && $this->turno < self::ULTIMO_TURNO && $this->turno != self::TURNO_DESCANSO:
             //Este apartado incluye el descanso del partido!
             //Turnos de partido
             $this->generar_estado();
             $this->guardaEstado();
             break;
         case self::ULTIMO_TURNO:
             //Turno para generar el estado y crónica finales
             $this->generar_estado();
             $this->generaCronicaUltimoTurno();
             /****/
             $this->finalizaEncuentro();
             /****/
             $this->guardaEstado();
             /****/
             $this->actualizaSiguientePartido($this->id_local);
             $this->actualizaSiguientePartido($this->id_visitante);
             $this->rellenaSiguientePartido($this->id_local);
             $this->rellenaSiguientePartido($this->id_visitante);
             $this->eliminaGrupales($this->id_local);
             $this->eliminaGrupales($this->id_visitante);
             //Creamos una notificación de fin de partido
             $notificacion = new Notificaciones();
             $notificacion->fecha = time();
             $notificacion->mensaje = Equipos::model()->findByPk($this->id_local)->nombre . " " . $this->goles_local . " - " . $this->goles_visitante . " " . Equipos::model()->findByPk($this->id_visitante)->nombre;
             $notificacion->imagen = "images/iconos/notificaciones/partido_terminado.png";
             $notificacion->save();
             //Enviamos la notificación a los interesados
             $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $this->id_local));
             foreach ($componentes as $componente) {
                 $usrnotif = new Usrnotif();
                 $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
                 $usrnotif->usuarios_id_usuario = $componente->id_usuario;
                 $usrnotif->save();
                 //Devuelvo la influencia a los participantes7
                 $componente->recursos->influencias_partido_bloqueadas = 0;
                 $componente->recursos->save();
             }
             $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $this->id_visitante));
             foreach ($componentes as $componente) {
                 $usrnotif = new Usrnotif();
                 $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
                 $usrnotif->usuarios_id_usuario = $componente->id_usuario;
                 $usrnotif->save();
                 //Devuelvo la influencia a los participantes
                 $componente->recursos->influencias_partido_bloqueadas = 0;
                 $componente->recursos->save();
             }
             /****/
             break;
             /*case self::ULTIMO_TURNO:
                 	//Turno para permitir visualizar el fin de partido durante un tiempo extra
                 	//y cambiar los datos del siguiente partido
             		$this->finalizaEncuentro();
             		$this->guardaEstado();
             		$this->actualizaSiguientePartido($this->id_local);
             		$this->actualizaSiguientePartido($this->id_visitante);
             		$this->rellenaSiguientePartido($this->id_local);
             		$this->rellenaSiguientePartido($this->id_visitante);
             		$this->eliminaGrupales($this->id_local);
             		$this->eliminaGrupales($this->id_visitante);
             		//Creamos una notificación de fin de partido
             		$notificacion = new Notificaciones;
             		$notificacion->fecha = time();
             		$notificacion->mensaje = Equipos::model()->findByPk($this->id_local)->nombre . "(local)" . " vs " . Equipos::model()->findByPk($this->id_visitante)->nombre . "(visitante)";
             		$notificacion->imagen = "images/iconos/notificaciones/partido_terminado.png";
             		$notificacion->save();
             		//Enviamos la notificación a los interesados
             		$componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_local));
             		foreach ($componentes as $componente){
             			$usrnotif = new Usrnotif;
             			$usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
             			$usrnotif->usuarios_id_usuario = $componente->id_usuario;
             			$usrnotif->save();
             		}
             		$componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_visitante));
             		foreach ($componentes as $componente){
             			$usrnotif = new Usrnotif;
             			$usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
             			$usrnotif->usuarios_id_usuario = $componente->id_usuario;
             			$usrnotif->save();
             		}
                 	break;*/
         /*case self::ULTIMO_TURNO:
             	//Turno para permitir visualizar el fin de partido durante un tiempo extra
             	//y cambiar los datos del siguiente partido
         		$this->finalizaEncuentro();
         		$this->guardaEstado();
         		$this->actualizaSiguientePartido($this->id_local);
         		$this->actualizaSiguientePartido($this->id_visitante);
         		$this->rellenaSiguientePartido($this->id_local);
         		$this->rellenaSiguientePartido($this->id_visitante);
         		$this->eliminaGrupales($this->id_local);
         		$this->eliminaGrupales($this->id_visitante);
         		//Creamos una notificación de fin de partido
         		$notificacion = new Notificaciones;
         		$notificacion->fecha = time();
         		$notificacion->mensaje = Equipos::model()->findByPk($this->id_local)->nombre . "(local)" . " vs " . Equipos::model()->findByPk($this->id_visitante)->nombre . "(visitante)";
         		$notificacion->imagen = "images/iconos/notificaciones/partido_terminado.png";
         		$notificacion->save();
         		//Enviamos la notificación a los interesados
         		$componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_local));
         		foreach ($componentes as $componente){
         			$usrnotif = new Usrnotif;
         			$usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
         			$usrnotif->usuarios_id_usuario = $componente->id_usuario;
         			$usrnotif->save();
         		}
         		$componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_visitante));
         		foreach ($componentes as $componente){
         			$usrnotif = new Usrnotif;
         			$usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
         			$usrnotif->usuarios_id_usuario = $componente->id_usuario;
         			$usrnotif->save();
         		}
             	break;*/
         default:
             // No debería llegar aquí
             echo "Jodimos algo";
     }
 }
コード例 #2
0
 /**
  * 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'];
 }
コード例 #3
-1
ファイル: Usuarios.php プロジェクト: rMarinf/JugadorNum12
 /** 
  * Suma la experiencia indicada al jugador
  *
  * Si el jugador sube de nivel, actualiza los valores de:
  *
  *  - indicadores de recursos
  *  - nivel
  *  - exp_necesaria
  *  - puntos_desbloqueo
  * 
  * > La funcion contempla la posibilidad de subir varios niveles de golpe
  * 
  * @param int $exp  experencia a sumar al jugador
  * @return boolean  indicador si el jugador ha subido de nivel (true si el jugador ha subido)
  */
 public function sumarExp($exp)
 {
     /* Experencia acumulada */
     $exp_acc = $this->exp + $exp;
     $this->setAttributes(array('exp' => $exp_acc));
     /* Comprobar si subimos de nivel */
     if ($exp_acc >= $this->exp_necesaria) {
         $nivel_actual = $this->nivel;
         $nivel_inicial = $nivel_actual;
         $exp_sig_nivel = $this->exp_necesaria;
         $puntos_desbloqueo = $this->puntos_desbloqueo;
         /* Posible subir varios niveles */
         while ($exp_acc >= $exp_sig_nivel) {
             $nivel_actual = $nivel_actual + 1;
             $puntos_desbloqueo += 1;
             Yii::app()->user->setFlash('nivel', 'Enhorabuena, has subido de nivel. Ahora tienes nivel ' . $nivel_actual);
             $exp_sig_nivel = Usuarios::expNecesaria($nivel_actual);
             //Creamos una notificacion para el nivel y otra para los puntos de desbloqueo
             $notificacionNivel = new Notificaciones();
             $notificacionNivel->fecha = time();
             $notificacionNivel->mensaje = " Enhorabuena, has subido de nivel. Ahora tienes nivel " . $nivel_actual;
             $notificacionNivel->imagen = "images/iconos/notificaciones/nivel.png";
             $notificacionNivel->save();
             $notificacionPuntos = new Notificaciones();
             $notificacionPuntos->fecha = time();
             $notificacionPuntos->mensaje = " Tus puntos de desbloqueo han aumentado. Ahora tienes " . $puntos_desbloqueo;
             $notificacionPuntos->imagen = "images/iconos/notificaciones/puntos_desbloqueo.png";
             $notificacionPuntos->save();
             //Guardamos las notificaciones en ursnotif
             $usrnotif = new Usrnotif();
             $usrnotif->notificaciones_id_notificacion = $notificacionNivel->id_notificacion;
             $usrnotif->usuarios_id_usuario = $this->id_usuario;
             $usrnotif->save();
             $usrnotifPuntos = new Usrnotif();
             $usrnotifPuntos->notificaciones_id_notificacion = $notificacionPuntos->id_notificacion;
             $usrnotifPuntos->usuarios_id_usuario = $this->id_usuario;
             $usrnotifPuntos->save();
         }
         /* Obtener los nuevos valores de los atributos del personaje:
          * ritmo de generacion de recursos 
          * valores maximos de los recursos */
         $nuevos_atributos = $this->actualizarAtributos($nivel_inicial, $nivel_actual);
         /* Guardamos los nuevos atributos del usuario */
         $this->setAttributes(array('nivel' => $nivel_actual, 'exp_necesaria' => $exp_sig_nivel, 'puntos_desbloqueo' => $puntos_desbloqueo));
         $this->recursos->setAttributes(array('dinero_gen' => $nuevos_atributos['dinero_gen'], 'animo_gen' => $nuevos_atributos['animo_gen'], 'influencias_gen' => $nuevos_atributos['influencias_gen'], 'animo_max' => $nuevos_atributos['animo_max'], 'influencias_max' => $nuevos_atributos['influencias_max'], 'influencias_bloqueadas' => $nuevos_atributos['influencias_bloqueadas']));
         $this->save();
         $this->recursos->save();
         return true;
     } else {
         /* No aumentamos de nivel: guardamos la nueva exp acumulada */
         $this->save();
         return false;
     }
 }