Una pregunta (SQLite)
#1

Buenas, mi duda es: їComo hago para continuar un dialogo en el cual ya tengo un Top que llega hasta 10?

Me explico, cuando utilize /top me salen los 10 jugadores con mas score; lo que necesitaria saber es como continuar ese dialogo.

Asi tengo hecha mi funcion para crear los tops

Код:
stock CrearTop(playerid, header[] = "SCORE", refer[] = "USERS")
{
 	new string[128], query[256], str[450];
	new string2[128];
	new DBResult:result;
	new DBResult:result2;
	new DBResult:result3;
	
	new ZQuery[2][256], String[3][256], DialString[450], DialStr[128];
	
	if(!strcmp(refer, "CLANS", false))
	{
	    format(ZQuery[0], 256, "SELECT `CLANNAME` FROM `CLANS` ORDER BY (`CLANKILLS` * 1) DESC limit %d", MAX_TOP_LIMIT);
	    result = db_query(Database, ZQuery[0]);
	    strcat(DialString, "{FFFFFF}Pos\t{FFFFFF}Nombre\t{FFFFFF}Kills\t{FFFFFF}Deaths\n");
	    for(new Qr; Qr < db_num_rows(result); Qr ++)
	    {
	        db_get_field(result, 0, String[0], 256);
	        format(ZQuery[1], 256, "SELECT `CLANKILLS` FROM `CLANS` WHERE `CLANNAME` = '%s'", String[0]);
	        result2 = db_query(Database, ZQuery[1]);
	        db_get_field(result2, 0, String[1], 256);
	        format(ZQuery[1], 256, "SELECT `CLANDEATHS` FROM `CLANS` WHERE `CLANNAME` = '%s'", String[0]);
	        result3 = db_query(Database, ZQuery[1]);
	        db_get_field(result3, 0, String[2], 256);
	        format(DialStr, sizeof DialStr, "{00FF00}%d\t{FFFFFF}%s\t%s\t%s",Qr + 1, String[0], FormatNumber(strval(String[1])), FormatNumber(strval(String[2])), GetTotalMembers(String[0]));
	        format(DialString,sizeof(DialString),"%s%s\n",DialString,DialStr);
	        db_next_row(result);
         	db_free_result(result2);
         	db_free_result(result3);
	    }
	    ShowPlayerDialog(playerid, DIALOGO_TOPS+1, DIALOG_STYLE_TABLIST_HEADERS, "{00FF00}Clanes", DialString, "Atras"," Cerrar");
	    db_free_result(result);
	}
	else if(!strcmp(refer, "USERS", false))
	{
		format(query,sizeof(query),"SELECT `NAME` FROM `%s` ORDER BY (`%s` * 1) DESC limit 10", refer, header);
		result = db_query(Database,query);
		strcat(str, "{FFFFFF}Pos\t{FFFFFF}Nombre\t{FFFFFF}Total\n");
		for(new a;a<db_num_rows(result);a++)
		{
			db_get_field(result,0,string,128);
			format(query,sizeof(query),"SELECT `%s` FROM `%s` WHERE `NAME` = '%s'", header, refer, string);
			result2 = db_query(Database,query);
			db_get_field(result2,0,string2,128);
			if(!strcmp(header, "DINERO", false)) format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t$%s",a+1,string,string2);
			else if(!strcmp(header, "HORAS", false)) format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t%s hs",a+1,string,string2);
			else if(!strcmp(header, "KDR", false)) format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t%s",a+1,string,string2);
			else format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t%s",a+1,string,string2);
			format(str,sizeof(str),"%s%s\n",str,string);
			db_next_row(result);
			db_free_result(result2);
		}
		ShowPlayerDialog(playerid,DIALOGO_TOPS+1, DIALOG_STYLE_TABLIST_HEADERS,"{00FF00}Top Players",str,"Atras"," Cerrar");
		db_free_result(result);
	}
	return 1;
}
Lo que quiero es que cuando apriete +10 (ejemplo de abajo) en el siguiente dialogo me salgan los otros 10 usuarios que siguen

Код:
ShowPlayerDialog(playerid,DIALOGO_TOPS+1, DIALOG_STYLE_TABLIST_HEADERS,"{00FF00}Top Players",str,"+10"," Cerrar");
Espero haberme explicado bien

Gracias de ante mano. Saludos
Reply
#2

Seguramente tendrias un define " MAX_TOP_LIMIT " cambialo a " 10 ".
Reply
#3

Creo que te entiendo, tu quieres mostrar en otro dialogo los que continuan.
Bueno, para eso necesitas volver a realizar la consulta solo que en esta aсadiras la palabra OFFSET seguida de la posicion anterior desde la que recogera los registros, por ejemplo tu dices que quieres desde +10, entonces seria OFFSET 9

Ejemplo de Consulta:
PHP код:
SELECT Campo_NombreCampo_Puntaje FROM Tabla ORDER BY Campo_Puntaje DESC LIMIT 10 OFFSET 9
PD: Obviamente necesitas volver a crear todo el dialogo, solo que con una consulta como la que te mostre anteriormente.
Reply
#4

Esto lo hice yo en mi servidor, como dicen ahi arriba es con OFFSET


Reply
#5

No se necesita necesariamente " OFFSET ", como le dije yo es suficiente, a no ser que borre el " %d", MAX_TOP_LIMIT " y le ponga 5 directamente.
Reply
#6

Quote:
Originally Posted by Speedpro
Посмотреть сообщение
No se necesita necesariamente " OFFSET ", como le dije yo es suficiente, a no ser que borre el " %d", MAX_TOP_LIMIT " y le ponga 5 directamente.
El quiere hacer paginas para ver todos los usuarios lo que tu le estas diciendo es para cambiar el limite solamente
Reply
#7

Ahh, no habia leido bien.
Reply
#8

Yo se que el tema es bastante viejito, pero me sirviу mucho, gracias.

Ahora tengo otra duda, yo logre cargar 10 jugadores mбs, ahora me gustarнa saber si se puede hacer una especie de loop tal y como se muestra en la imagen de adri1, donde claramente no creo que hayas hecho mas de 1000 dialogos como yo lo estoy haciendo

Muchisimas gracias
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)