Lo que intentas hacer es casi igual a la forma en que guardas las estadнsticas del jugador al desconectarse:
- Obtienes el nombre del jugador y verificas si tiene una cuenta.
- Si tiene una, actualizas los datos previos del jugador. Si no, no haces nada.
pawn Код:
new nombre[MAX_PLAYER_NAME], cuenta[60];
//Obtenemos el nombre del jugador...
GetPlayerName(playerid, nombre, sizeof(nombre));
//Formateamos la variable 'cuenta' con el directorio donde se encuentra la cuenta del jugador...
format(cuenta, sizeof(cuenta), "Cuentas\\%s.ini", nombre);
//Verificamos si la cuenta del jugador existe, usando la variable que formateamos.
if(fexist(cuenta))
{
//La cuenta existe, actualizamos los datos previos de la cuenta del jugador con los nuevos.
//Abrimos el archivo de la cuenta del jugador.
new INI:archivo = INI_Open(cuenta);
//Actualizamos los datos previos.
INI_WriteInt(archivo, "Dinero", GetPlayerMoney(playerid));
INI_WriteInt(archivo, "Score", GetPlayerScore(playerid));
INI_WriteInt(archivo, "Nivel", Nivel[playerid]);
//Cerramos el archivo.
INI_Close(archivo);
}
else
{
//La cuenta no existe, no hacemos nada.
return 0;
}
Ahora, supongamos que quieres hacer un comando para cambiar el nivel de un jugador desconectado. Lo que tienes que hacer es exactamente lo mismo que en el ejemplo de arriba:
- Obtener el nombre del jugador... verificar si su cuenta existe... y finalmente, actualizar los datos previos por los nuevos.
pawn Код:
CMD:cambiarnivel(playerid, params[])
{
new cuenta[60], nombre[MAX_PLAYER_NAME], nivel;
//Obtenemos el nombre del jugador y el nivel al que se le desea cambiar...
if(sscanf(params, "s[24]i", nombre, nivel))
{
//Los datos encontrados en los parбmetros del comando no son los que esperabamos,
//enviamos un mensaje mostrando como se usa el comando y no hacemos nada.
SendClientMessage(playerid, -1, "USO: /cambiarnivel <nombre del jugador> <nivel>");
return 0;
}
//Formateamos la variable 'cuenta' con el directorio donde se encuentra la cuenta del jugador...
format(cuenta, sizeof(cuenta), "Cuentas\\%s.ini", nombre);
//Verificamos si la cuenta del jugador existe.
if(fexist(cuenta))
{
//La cuenta del jugador existe, actualizamos los datos previos.
//Abrimos el archivo de la cuenta del jugador.
new INI:archivo = INI_Open(cuenta);
//Actualizamos el nivel del jugador por el deseado.
INI_WriteInt(archivo, "Nivel", nivel);
//Cerramos el archivo.
INI_Close(archivo);
}
else
{
//La cuenta del jugador no existe, enviamos error y no hacemos nada.
SendClientMessage(playerid, -1, "ERROR: ЎLa cuenta del jugador especificado no existe!");
return 0;
}
return 1;
}