Cómo llevar un registro del avance de tus jugadores

Autor original: Polectron
Hoy os vengo a presentar un script para llevar, como dice el título, un registro con el avance de los jugadores. Esto es muy útil para comparar el número de personas que descargan el juego con el número de personas que lo empieza, llegan una parte en concreto o inlcuso lo terminan, e incluso para entender cómo se comportan la mayoría de los jugadores y enfocar tu juego más a ese comportamiento. Evidentemente este script requiere conexión a internet para funcionar. Y no estaría de más avisar al usuario de que vas a estar pegado a su nuca viendo cómo juega XD

1. Montar un servidor:

No os preocupéis si esta parte os resulta algo complicada, pronto publicaré un tutorial explicando como configurar un servidor gratuito.

Lo primero que tendréis que hacer es montaros un servidor, podéis tener uno en casa como tengo yo, pagar por uno si lo vais a usar para más cosas, o pillaros uno gratuito en https://es.000webhost.com/ por ejemplo.
Lo siguiente será crear una base de datos, no entraré en detalles sobre cómo hacerla, si habéis podio configurar un servidor podéis hacer esto también, una vez creada la base de datos crearemos en ella una tabla, yo decidí llamarla "registro", pero cambiando las líneas de código apropiadas podéis configurarlo a vuestro gusto.
En fin, creamos una tabla con los valores que queramos meter, en mi caso una id (que siempre es necesaria), el nombre del juegador, su id de entrenador, una etiqueta para saber a que parte han llegado y la fecha.

Aquí tenéis el código .sql para crear la tabla:
Código:
CREATE TABLE `registro` (
  `id` int(11) NOT NULL,
  `player_id` text CHARACTER SET utf8 NOT NULL,
  `player_name` text CHARACTER SET utf8 NOT NULL,
  `type` text CHARACTER SET utf8 NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `info` text CHARACTER SET utf8 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `registro`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `registro`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
COMMIT;
Ahora necesitamos un script en el servidor para recibir los comandos del juego y guardarlos en la base de datos:
Código PHP:
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php

    $MYSQLSERVER = "localhost";
    $USER = "root";
    $PASSWORD = "";
    $DATABASE = "registro";
  
    $mysqli = new mysqli($MYSQLSERVER, $USER, $PASSWORD, $DATABASE);
  
    $mysqli->set_charset("utf8");
  
    if ($mysqli->connect_errno) {
        echo "ERROR DB";
    die('Error de conexión: ' . $mysqli->connect_error);
        exit;
    }

    if(isset($_REQUEST["player_name"])){           
        $stmt = $mysqli->prepare("INSERT INTO registro (player_name, player_id, type, info) VALUES (?,?,?,?)");
        $stmt->bind_param('ssss',$_REQUEST["player_name"],$_REQUEST["player_id"],$_REQUEST["type"],$_REQUEST["info"]);
      
        print_r($_REQUEST);
      
        if (!$stmt->execute()) {
            echo "ERROR SQL";
            exit;
        }
      
        $stmt->close();
    }else{
        $sql = "SELECT * FROM registro";
      
        $stmt = $mysqli->prepare($sql);
      
        if (!$stmt->execute()) {
            echo "ERROR SQL";
            exit;
        }
      
        $result = $stmt->get_result();
      
        ?>
      
        <table border=1>
            <thead>
            <tr>
              <th>Player ID</th>
              <th>Player Name</th>
              <th>Tipo</th>
              <th>Fecha</th>
              <th>Info</th>
            </tr>
            </thead>
            <tbody>
        <?php
        while($row = $result->fetch_assoc())
        {
            ?>
            <tr>
                <td><?php echo $row["player_id"];?></td>
                <td><?php echo $row["player_name"];?></td>
                <td><?php echo $row["type"];?></td>
                <td><?php echo $row["date"];?></td>
                <td><?php echo $row["info"];?></td>
            </tr>
            <?php
        }
        ?>
            </tbody>
        </table>
      
        <?php
        $stmt->close();
    }
  
    $mysqli->close();
  
?>
</body>
</html>

2. Configurando el juego


Teniendo todo esto solo necesitamos un sencillo script de ruby:
Código:
def pbSendStatus(type)
  begin
    data = {"player_id"=>$Trainer.id, "player_name"=>$Trainer.name, "type"=>type, "info"=>pbBuildInfo()}
    response = pbPostData("http://127.0.0.1/registrojugadores.php", data, filename=nil, depth=0)
  rescue Exception
    Kernel.pbMessage("Vaya, ha habido un error.")
  end
end

def pbBuildInfo()
 
  aux = ""
  n_captured = $Trainer.pokedexOwned
  played_time = Graphics.frame_count / Graphics.frame_rate / 60
  n_badges = $Trainer.numbadges
 
  aux += "Tiempo jugado: #{played_time}"
  aux += " Pokemon capturados: #{n_captured}"
  aux += " Medallas: #{n_badges}"
  return aux
end
Usarlo es muy sencillo, y si el jugador no tiene conexión a internet o el servidor está caido salta un error avisando del problema.
Para usarlo, llamamos al script desde un evento y pondremos entre los paréntesis una frase o palabra clave para identificar la entrada en la base de datos.
Algo como esto:

Con esto luego podemos hacer un análisis y determinar si hay mucha gente que deja el juego en cierta parte y así centrarnos en el porqué.

Comentarios