dos errores (mysql y format)
#1

hola, queria que me den una mano.

en mi guardado de datos mysql guardo muchas variables y queria saber como separar el codigo en varias partes asi no queda tan asqueroso visualmente..

tambien tengo un problema en una lista de dialog, nada mas me muestra un solo reporte, no todos..

mysql
Код:
stock Save_Player(playerid)
{
	new query[2048];
	mysql_format(sql, query, sizeof(query), "UPDATE `players` SET `Admin` = '%d', `PosX` = '%f', `PosY` = '%f', `PosZ` = '%f', `Angle` = '%f', `VW` = '%d', `Int` = '%d', `lvl` = '%d', `Money` = '%d', `Skin` = '%d', `Faction` = '%d', `Rank` = '%d', `Health` = '%d', `Armor` = '%d' WHERE `ID` = '%d'", 
		Player[playerid][Admin], Player[playerid][Pos][0], Player[playerid][Pos][1], Player[playerid][Pos][2], Player[playerid][Angle], Player[playerid][VW], Player[playerid][Int], Player[playerid][lvl], Player[playerid][Money], Player[playerid][Skin], Player[playerid][Faction], Player[playerid][Rank], Player[playerid][Health], Player[playerid][Armor], Player[playerid][id]);
        mysql_tquery(sql, query);
        return 1;
}
reportes
Код:
CMD:reports(playerid, params[])
{
	new string[280];
	format(string, sizeof(string), "%s: %s\n", GetNameRolePlay(Report[i][User]), Report[i][Text]);
	ShowPlayerDialog(playerid, REPORTS, DIALOG_STYLE_LIST, "Reportes", string, "Aceptar", "Cerrar");
	return 1;
}
Reply
#2

Bueno, en el primer caso, es fбcil. Query obtiene el valor de lo que hay dentro del primer format, es decir, los datos del jugador ya asignados, si Query es ese valor, simplemente tenйs que crear otro format igual pero con un '%s' adelante junto a una coma, y luego los demбs datos faltantes.

Para que lo entiendas mejor. "Query", son todos los datos del primer format, ya que vos lo asignaste asн, si creas otro format y agregas ese Query al principio, se unirбn los primeros datos con los ъltimos asignados. Lo ъnico que tenйs que hacer es eliminar el 'WHERE `ID` = '%d' del primer format y colocarlo en el ъltimo que harбs o aparte, pero siempre al final.

Por ejemplo:
Код:
stock Save_Player(playerid)
{
        new query[2048];
	mysql_format(sql, query, sizeof(query), "UPDATE `players` SET `Admin` = '%d'", Player[playerid][Admin]);
	mysql_format(sql, query, sizeof(query), "%s, `Money` = '%d' WHERE `ID` = '%d'", query, Player[playerid][Money], Player[playerid][id]);
	mysql_tquery(sql, query);
	return 1;
}
El segundo problema es aъn mбs fбcil que el primero. Para que aparezcan todos los reportes tendrнas que crear un loop desde el reporte inicial hasta el reporte final que te gustarнa que aparezcan, es decir, un repetidor.

Por ejemplo:
Код:
CMD:reports(playerid, params[])
{
	new string[280];
	for(new i = 0; i != 50; i ++)
	{
		format(string, sizeof(string), "%s %s: %s\n", string, GetNameRolePlay(Report[i][User]), Report[i][Text]);
		ShowPlayerDialog(playerid, REPORTS, DIALOG_STYLE_LIST, "Reportes", string, "Aceptar", "Cerrar");
	}
	return 1;
}
En es ejemplo hice que aparezcan los reportes desde el 0 hasta el 50, pero si no se realizaron 50 reportes van a aparecer reportes en blanco. Te recomiendo que crees una variable que verifique que el reporte existe y que se le asigne a un reporte cuando se cree, y cuando el reporte es atendido se borre, para solucionar el problema que te mencionй anteriormente.

Otro posible problema es la cantidad de celdas de string, mientras mбs reportes haya la tendrбs que aumentar, debido a que puede pasar que haya muchos reportes y llegue a un punto que no te va a mostrar mбs.
Reply
#3

muchas gracias, me funciono
Reply
#4

Quote:

CMD:reports(playerid, params[])
{
new string[280];
for(new i = 0; i != 50; i ++)
{
if(Report[i][Text][0] != '\0')
{
format(string, sizeof(string), "%s %s: %s\n", string, GetNameRolePlay(Report[i][User]), Report[i][Text]);
ShowPlayerDialog(playerid, REPORTS, DIALOG_STYLE_LIST, "Reportes", string, "Aceptar", "Cerrar");
}
}
return 1;
}


Chequea si la cadena no esta vacia antes de enviar el dialogo, entonces ignora los reportes en blanco.
Una vez que el reporte fue atendido, haces:
Report[i][Nombre][0] = '\0';
Report[i][Text][0] = '\0';
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)