Si quieres saber cuanto tiempo demora en ejecutarse el cуdigo ese que publicaste, cбmbialo por este:
pawn Код:
new tick = GetTickCount();
new DBResult:result, query[256], nombremiembro[30], string[100 * MAX_PLAYER_NAME];
format(query,sizeof(query),"SELECT * FROM `USERS` WHERE `clan` = '%d' LIMIT 100", ClanSeleccionado[playerid]);
result = db_query(base,query);
for(new a;a<db_num_rows(result);a++)
{
db_get_field_assoc(result, "nombre", nombremiembro, 30);
format(string, sizeof(string), "%s%s\n",string, nombremiembro);
db_next_row(result);
}
db_free_result(result);
ShowPlayerDialog(playerid, D_NADA, DIALOG_STYLE_LIST, "Todos los miembros", string, "Cerrar", "");
printf("Demorу %d milisegundos en ejecutarse.", GetTickCount()-tick);
De todas formas, puedes utilizar un mйtodo de optimizaciуn en cuanto a procesador, pero ocupa mas memoria RAM; aunque eso en SA-MP prбcticamente no importa ya que un script por mucho cуdigo que tenga no superarб los 15mb de RAM que utiliza. Y esto, es nada en comparaciуn a lo normal que tienen los computadores hoy en dнa.
Cual es ese mйtodo? Generar las cadenas solo una vez, y mostrar lo generado... Osea:
pawn Код:
#define MAXIMO_CLANES 64 // Nъmero mбximo de clanes que soporta el servidor
#define MAXIMO_CLAN_MIEMBROS 128 // Nъmero mбximo de miembros que podrб tener cada clan
//#define MAX_PLAYER_NAME 24 // Longitud mбxima que tendrбn los nombres de usuarios
#define DIALOGO_MIEMBROS_CLAN 1001
enum _@dialogosClanes
{
iclan_clanid,
iclan_clandialog[MAXIMO_CLAN_MIEMBROS*MAX_PLAYER_NAME],
}
new infoClanes[MAXIMO_CLANES][_@dialogosClanes];
stock showPlayerClanDialog(playerid, cclanid = -1, ccelda = -1)
{
// Obtener la celda que ocupa el clan
new celda = ccelda == -1 ? celdaClanDialog(cclanid) : ccelda;
// Saber si ya ha sido cargado el clan
if(!infoClanes[celda][iclan_clanDialog][0])
// Si no ha sido cargado el diбlogo de clanes
actualizarClanDialog(.ccelda = celda);
// Muestra el diбlogo
return ShowPlayerDialog(playerid, DIALOGO_MIEMBROS_CLAN, DIALOG_STYLE_LIST, "Miembros del clan...", infoClanes[celda][iclan_clanDialog], "Cerrar", "");
}
stock celdaClanDialog(cclanid)
{
// Recorrido por todos los clanes
for(new i = 0; i < MAXIMO_CLANES; i++)
// Encontrу el clan
if(infoClanes[i][iclan_clanid] == cclanid) return i;
// No hay clan con dicho ID
return -1;
}
stock actualizarClanDialog(cclanid = -1, ccelda = -1)
{
// Obtener el ID del clan
new clanid = cclanid == -1 ? infoClanes[ccelda][iclan_clanid] : cclanid;
// Contenedores
new
query[52+12]; // Query
// Forma la consulta
format(query, sizeof(query),"SELECT * FROM `USERS` WHERE `clan` = '%d' LIMIT "#MAXIMO_CLAN_MIEMBROS, clanid);
// Envia la query
new DBResult:resultado = db_query(base, query);
// Ocurriу un error durante la ejecuciуn de la query
if(!resultado) return false;
// Obtener los resultados encontrados
new encontrados = db_num_rows(resultado);
// Contenedores
new
nombreMiembro[MAX_PLAYER_NAME],
nuevaLinea[MAX_PLAYER_NAME+4];
// Celda que ocupa el clan
new celda = ccelda == -1 ? celdaClanDialog(clanid) : ccelda;
// Reinicia el contenido del diбlogo
infoClanes[celda][iclan_clanDialog][0] = EOS;
// Encontrу miembros
if(encontrados)
{
// Recorrido por los resultados
for(new i = 0; i < encontrados; i++)
{
// Obtener el nombre del miembro
db_get_field_assoc(resultado, "nombre", nombreMiembro, sizeof nombreMiembro);
// Forma la nueva lнnea
format(nuevaLinea, sizeof nuevaLinea, "%s\n", nombreMiembro);
// Concatena la nueva lнnea al diбlogo final
strcat(infoClanes[celda][iclan_clanDialog], nuevaLinea, MAXIMO_CLAN_MIEMBROS*MAX_PLAYER_NAME);
// Siguiente resultado
db_next_row(resultado);
}
}
// No tiene miembros el clan
else
{
//
format(infoClanes[celda][iclan_clanDialog], MAXIMO_CLAN_MIEMBROS*MAX_PLAYER_NAME, "Este clan no tiene miembros.");
}
// Libera resultados de la consulta
db_free_result(result);
return true;
}
Donde muestras el diбlogo con la funciуn "showPlayerClanDialog" de la forma:
pawn Код:
showPlayerClanDialog(playerid, .cclanid = 16);
Y cada vez que ingresa o sale algun miembro del clan, debes usar "actualizarClanDialog", de la misma forma:
pawn Код:
actualizarClanDialog(.cclanid = 16);
Para la prueba de velocidad, debes usar esto:
pawn Код:
new tick = GetTickCount();
showPlayerClanDialog(playerid, .cclanid = 16);
printf("Demorу %d milisegundos.", GetTickCount()-tick);
Muestra los resultados.