[Tutorial] Guardar datos sin registro
#1

GUARDAR DATOS SIN REGISTRO
En este simple tutorial les enseсarй a como guardar algъn dato para que al volver a entrar siga teniendo lo mismo, pero sin ser necesario un registro (ya se por comando o por dialogos) es algo muy util al realizar algъn filterscript o similar, lo pondrбn utiliar en donde mбs comodo le queden, tambiйn lo pueden utilizar en GameModes. Lo ъnico que necesitaremos serб el include "dini" que podrбn encontrar por el foro.

PASO 1: Deberemos incluir, valga la redundancia, el include, para que sus funciones puedan ser utilizadas en el GameMode/FilterScripts. Para eso utiliaremos lo siguiente donde estйn los demбs #includes.
pawn Код:
#include <Dini>
PASO 2: Primero que nada deberemos hacer un "new" para averiguar el nombre del jugador. Para eso pondremos lo siguiente debajo de los #includes<>
pawn Код:
new jugadornombre[30];
PASO 3: Ahora nos dirigiremos a OnPlayerConnect, que allн sucede todo cuando el jugador se conecta. Deberemos: Averiguar el nombre del jugador, comprobar si el archivo existe, si no existe crearlo, si existe obtener los datos. Para eso, harйmos lo siguiente:
pawn Код:
GetPlayerName(playerid,jugadornombre,30); // Obtiene el nombre.
if(!dini_Exists(jugadornombre)) // Comprueba si no existe.
dini_Create(jugadornombre); // Lo crea.
else if(dini_Exists(jugadornombre)) // Si no, obtiene los datos.
{
    SetPlayerScore(playerid, dini_Int(jugadornombre,"Score"));// Crea la variable del archivo.
}
PASO 4: En este paso deberemos guardar los datos del jugador en el archivo creado al conectarse. De la siguiente manera. Entonces, utilizaremos el siguiente codigo
pawn Код:
GetPlayerName(playerid,jugadornombre,30); // Obtiene el nombre del jugador.
dini_IntSet(jugadornombre,"Score", GetPlayerScore(playerid)); // Guarda los datos en el archivo.
PASO 5: Acб llega el final, cargar los datos del archivo al jugador. Para eso utilizaremos el siguiente cуdigo en OnPlayerSpawn:
pawn Код:
SetPlayerScore(playerid, dini_Int(jugadornombre,"Score")); // Carga el dato al jugador.
CREDITOS: JackDaniel (Acб [J]ulian.)

PARA: PawnoScripting (Si queres postearlo en algъn otro lado, deberбs pedir permiso por Mensaje Privado)

NOTA:: Si notan algъn error, por favor dнganmelo que seguro fue de despistado, ya que lo hice aquн en el foro.
Reply
#2

esto no es PawnoScrpting xD
bueno el tuto
Reply
#3

voy a ser un poco critico pero buen:
IDEM q benjas, esto no es PawnoScripting.
Dini es lento y viejo, recomiendo el uso de djson o y_ini(archivos) MySQL(database)
eso en un servidor q este montado sobre un windows, si no hay una restriccion previa, podria llegar a causar bugs.
creo q no es muy dificil saber que no hace falta registrar una cuenta para poder guardar archivos, aun que lo q vos haces es registrarla pero sin contraseсa, de modo que por ejemplo cualquier jugador con el nick "Killer" tendran las mismas stats, y compartiran el archivo.
si definis un array para almacenar el nombre de un jugador usa [MAX_PLAYER_NAME] no el espacio directamente, ya que si cambia de version puede llegar a cambiar, y de este modo evitas posibles bugs.
si usas un if, exepto que el codigo sea una sola sentencia y este en la misma linea del if, debes usas brackets ( '{' y '}').
el codigo de OnPlayerSpawn deberias sacarlo, dado que va a setear el score siempre al score inicial y salvo q el score del jugador aumente antes de q se valla, ej: si spawnea y luego se va, su score no cambiara.
el array para almacenar el nombre del jugador esta mal, siempre contendra el nombre del ultimo jugador que ingreso al servidor, arregla eso por favor.
Reply
#4

Quote:
Originally Posted by benjas09
Посмотреть сообщение
esto no es PawnoScrpting xD
bueno el tuto
Ya sй, pero yo no lo hice para aquн, lo hice para allб, por eso pongo que fuй para allб, sуlo lo posteй aquн.

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
voy a ser un poco critico pero buen:
IDEM q benjas, esto no es PawnoScripting.
Dini es lento y viejo, recomiendo el uso de djson o y_ini(archivos) MySQL(database)
eso en un servidor q este montado sobre un windows, si no hay una restriccion previa, podria llegar a causar bugs.
creo q no es muy dificil saber que no hace falta registrar una cuenta para poder guardar archivos, aun que lo q vos haces es registrarla pero sin contraseсa, de modo que por ejemplo cualquier jugador con el nick "Killer" tendran las mismas stats, y compartiran el archivo.
si definis un array para almacenar el nombre de un jugador usa [MAX_PLAYER_NAME] no el espacio directamente, ya que si cambia de version puede llegar a cambiar, y de este modo evitas posibles bugs.
si usas un if, exepto que el codigo sea una sola sentencia y este en la misma linea del if, debes usas brackets ( '{' y '}').
el codigo de OnPlayerSpawn deberias sacarlo, dado que va a setear el score siempre al score inicial y salvo q el score del jugador aumente antes de q se valla, ej: si spawnea y luego se va, su score no cambiara.
el array para almacenar el nombre del jugador esta mal, siempre contendra el nombre del ultimo jugador que ingreso al servidor, arregla eso por favor.
Cuando tenga un ratito, que estoy liado, lo arreglo.
Reply
#5

Vos hisiste asi:

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
[...]
pawn Код:
new jugadornombre[30];
[...]
pawn Код:
GetPlayerName(playerid,jugadornombre,30); // Obtiene el nombre.
if(!dini_Exists(jugadornombre)) // Comprueba si no existe.
dini_Create(jugadornombre); // Lo crea.
else if(dini_Exists(jugadornombre)) // Si no, obtiene los datos.
{
    SetPlayerScore(playerid, dini_Int(jugadornombre,"Score"));// Crea la variable del archivo.
}
[...]
pawn Код:
GetPlayerName(playerid,jugadornombre,30); // Obtiene el nombre del jugador.
dini_IntSet(jugadornombre,"Score", GetPlayerScore(playerid)); // Guarda los datos en el archivo.
[...]
pawn Код:
SetPlayerScore(playerid, dini_Int(jugadornombre,"Score")); // Carga el dato al jugador.
[...]
____________________

Lo que te convendrнa hacer es:

[...]
pawn Код:
new jugadornombre[MAX_PLAYERS][MAX_PLAYER_NAME];
[...]
pawn Код:
GetPlayerName(playerid,jugadornombre[playerid],MAX_PLAYER_NAME);
if(!dini_Exists(jugadornombre[playerid]))
dini_Create(jugadornombre[playerid]);
else if(dini_Exists(jugadornombre[playerid]))
{
    SetPlayerScore(playerid, dini_Int(jugadornombre[playerid],"Score"));
}
[...]
pawn Код:
// GetPlayerName(playerid,jugadornombre[playerid],MAX_PLAYER_NAME); // esto es medio al pe' xq ya lo hiciste antes.
dini_IntSet(jugadornombre[playerid],"Score", GetPlayerScore(playerid));
[...]
pawn Код:
SetPlayerScore(playerid, dini_Int(jugadornombre[playerid],"Score"));
[...]

____________________

y una pregunta .. xq "score" y no "puntos" o algo similar... xq esta en ingles??
Reply
#6

Quote:
Originally Posted by cocolabush
Посмотреть сообщение
Vos hisiste asi:y una pregunta .. xq "score" y no "puntos" o algo similar... xq esta en ingles??
Porque me gusta mas Score, que puntos.
Reply
#7

{OFF TOPIC}

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Porque me gusta mas Score, que puntos.
ta ... solo queria saber... yo antes hacia todo en ingles... pero me di cuenta que es como darle el credito a "ellos" cuando lo publicas...
Reply
#8

Juli, solo una cosa, el nombre que puede tener un jugador como maxнmo es 24 + es caracter nulo, en total 25, si pones 30, estarнas desperdiciando 5 bytes, que aca no es mucho, pero imaginate en un GM de 25 mil lineas..

Y como te dijieron antes, te convendrнa utilizar djson o y_ini, son mбs rapidos.

En fin, buen tuto, por cierto, soy Fede..

Un saludo
Reply
#9

Quote:
Originally Posted by The_Moddler
Посмотреть сообщение
Juli, solo una cosa, el nombre que puede tener un jugador como maxнmo es 24 + es caracter nulo, en total 25, si pones 30, estarнas desperdiciando 5 bytes, que aca no es mucho, pero imaginate en un GM de 25 mil lineas..

Y como te dijieron antes, te convendrнa utilizar djson o y_ini, son mбs rapidos.

En fin, buen tuto, por cierto, soy Fede..

Un saludo
A pesar que es verdad lo de reducir los arrays, peores son los RP que invaden todo SA-MP que por poco no usan 256 para una sola letra.
Reply
#10

eso no viene al caso, y ademas es el bug mas chico de ese codigo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)