Se los dejo mбs explicitamente;
- Tengo un guardado de datos manejandolo con el clбsico fread, etc; y quй se guardan cuando es llamada OnPlayerDisconnect.
Ejemplo (para guardar un dato):
pawn Код:
//Tomamos el nombre, lo metemos en una variable y despuйs formateamos todo el archivo de esta forma:
format(var, 256, "Variable1=%i\n", OnlineInfo[playerid][Carid]); fwrite(Archivo, var);
Bien, entonces yo me puse a hacer un 'sistema' vнa dialogo, para modificar el archivo del usuario (Quй tiene que estar ON) y a la vez aplicarle la variable IG (Para quй al desconectarse la variable no se vaya a modificar).
El comando lanzarб un dialogo tipo INPUT para insertar el nombre del usuario (Aquн es donde entra OnDialogResponse, quй esta asн:
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
static Cliente[MAX_PLAYER_NAME], Usuario[MAX_PLAYER_NAME + 5], giveplayerid; //El problema en Giveplayerid
if(dialogid == NombreArchivo)
{
if(!response) return SendClientMessage(playerid, COLOR_RED, "Has salido del menu de Tuning"), true;
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, IncersionCliente, DIALOG_STYLE_INPUT, "|**| Menu de Tuneo |**|"," ЎTienes que insertar el nombre del Dueсo! ", "Seleccionar", "Salir");
strmid(Cliente,inputtext,false,strlen(inputtext),sizeof(Cliente));
format(Usuario, sizeof(Usuario), "%s.ini", Cliente);
giveplayerid = ReturnUser(inputtext);
if (fexist(Usuario))
{
if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, COLOR_RED, "Error: El usuario debe de estar Online"),true;
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_LIST,"|**| Datos |**| Cuenta de Usuario", " Aquн las opciones", "Aceptar", "Salir");
} else if(!fexist(Usuario)) return SendClientMessage(playerid, -1, "Error: Has escrito un nombre erroneo o el Archivo no existe!"), true;
} return true;
}
return true;
}
Como pueden observar ahн, para almacenar la ID del usuario ( Quй es tomada con ReturnUser(inputtext); ) se almacena en la variable llamada 'giveplayerid' (Declarada como variable estбtica).
Bien, hasta aquн todo bien; cuando selecciono otra opciуn de otro dialogo (Por ejemplo, selecciono la opciуn N°1 de la lista) y la modifico asн:
pawn Код:
if(dialogid == 1) {
if(!response) return SendClientMessage(playerid, -1, "_"), true;
if(response) {
switch ( listitem ) {
case 0: {
OnlineInfo[giveplayerid][Carid] = 311;
GuardadoCuentas(giveplayerid);
PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
SendClientMessage(playerid, C_DBlue, "Mensaje bla bla bla");
}
}
}
return true;
}
Eso me asigna la variable como yo quiero y guarda el archivo y tal (ESTANDO giveplayerid como variable Estбtica), el problema viene cuando se quieren modificar 2 o mбs cuentas a la vez, ya quй al ser estбtica esta almacena la ID y al acabar de guardar una cuenta, la ID, como queda almacenada; se le guardan los datos de La cuenta que se esta editando y eso me causa el lio.
Quiero ver como sustituir esa variable (giveplayerid) para que deje de ser estбtica y funcione correctamente al editar 2 o mбs cuentas.
Sн sustituyo Giveplayerid por 'new giveplayerid;' se asigna el id del usuario a editar (para verificar si el usuario esta online o no) pero cuando comienzo a modificar las variables, estas se asignan al ID 0, es como sн la variable se vaciara automбticamente....
Ese es el problema, esa fucking variable...