Aleatoriedad del mercado y las ofertas recibidas por mis jugadores

Estas aquí:
  • Principal
  • Mercado
  • Aleatoriedad del mercado y las ofertas recibidas por mis jugadores
< Volver
Contenido

¿Tienes dudas sobre cómo funciona este sistema en Biwenger? A continuación vamos a citar al creador de Biwenger sobre varias respuestas que ha dado a este asunto en un tema de nuestro foro:

Actualmente, tanto para crear los nuevos jugadores del mercado como para realizar ofertas, utilizamos la función RAND() de MySQL, que devuelve un valor pseudoaleatorio entre 0 y 1. EL funcionamiento es el siguiente:

  • Para rellenar el mercado con jugadores libres, se crea una consulta que excluye aquellos jugadores poseídos por algún usuario de la liga, y aquellos que ya se encuentran en el mercado. El motor de base de datos ordena aleatoriamente TODOS los jugadores de la liga BBVA que no han sido excluidos, insertando en el mercado tantos como sean necesarios hasta rellenarlo.
  • Respecto a las ofertas, también se crean directamente mediante una consulta en la base de datos, siendo su fórmula la siguiente (siendo la variable price el VM actual del jugador):

###CÓDIGO####
ROUND(price * (((RAND() * 10) + 95)/100))

Como podéis ver, tanto jugadores libres como ofertas del mercado tienen la misma probabilidad de aparecer. Desde mis limitados conocimientos de estadística, veo bastante probable que un jugador (de aproximadamente 700 que hay en la liga BBVA) pueda estar semanas o incluso meses sin aparecer, ya que cada vez que «se lanza la moneda» tiene la misma posibilidad de salir elegido como el que salió hace dos días al mercado. 

Y como muestra de transparencia y de que somos totalmente sinceros con vosotros, os mostramos la sentencia SQL que se encarga de obtener jugadores libres:

####CÓDIGO####
SELECT `player`.`id`
FROM `player`
WHERE
/* Jugadores activos y de la competición */
`player`.`active` = 1 AND `player`.`competitionID` = ID_COMPETICION
/* Jugadores libres */
AND `player`.`id` NOT IN(
SELECT `owner`.`playerID`
FROM `owner`
WHERE `owner`.`leagueID` = ID_LIGA
)

/* Jugadores que no estén ya en el mercado */
AND `player`.`id` NOT IN(
SELECT `market`.`playerID`
FROM `market`
WHERE `market`.`leagueID` = ID_LIGA
)

ORDER BY RAND()
LIMIT 8