Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Sistema de Clanes (DINI)

Iniciado por Swarlog, May 13, 2025, 06:38 PM

Tema anterior - Siguiente tema

Swarlog

Información Adicional:

Se trata de un sistema de de clanes, en donde podreis crear vuestro pripio clan, reclutar gente, etc.. Aqui os dejo los comandos del filescript, espero que os guste!

/kill
/registrar [Contraseña]
/login [Contraseña]
/stats [id]
/topplayers
/topclanes
/clan crear [Nombre] [TAG]
/clan entrar
/clan invitar [id]
/clan rechazar
/clan salir
/clan expulsar [id]
/clan info [TAG]
/clan color
/clan colorh [código hexadecimal]

Código:

//==============================================================================
/* # Sistema Registro & Clanes con Tops DINI                                  */
/* # Versión: 0.4.8                                                           */
/* # Autor: Zoutdaxv                                                          */
/* # Fecha: 20/02/2010                                                        */
/* # Actualización: 28/07/2010                                                */
/* # Lenguaje: Castellano Neutro                                              */
/* # Requiere: dini v1.6                                                      */
/* # Créditos:                                                                */
/*	- » RyDeR «: IDEA In Game ColorPicker.                                    */
/*	- Zamaroht:  TDE & Función RGBA.                                          */
//==============================================================================
//============================ <INCLUDE> =======================================
#include <a_samp>
#include <dini>
//==============================================================================
//=========================== <DEFINE> =========================================
//========================== [DIÁLOGOS] ========================================
#define DLG_TOP_PLAYERS 1500
#define DLG_TOP_CLANES 1501
#define DLG_PLY_INFO 1503
#define DLG_CLAN_INFO 1504
//==============================================================================
//=========================== [COLORES] ========================================
#define ROJO 0xAA3333AA
#define NARANJA 0xF97804FF
#define BLANCO 0xEFEFF7AA
#define CELESTE 0x00C8FFFF
#define NICESKY 0x99FFFFAA
//==============================================================================
//======================= [TOPS CONFIGURACIÓN] =================================
#define MAX_DATOS 3000     //NÚMERO DE DATOS QUE SE GUARDARÁN PARA LOS TOPS.
#define MAX_TOP_PLAYERS 10 //LUGARES QUE SE MOSTRARÁN EN EL TOP PLAYERS
#define MAX_TOP_CLANES 10  //LUGARES QUE SE MOSTRARÁN EN EL TOP CLANES
//==============================================================================
//==============================================================================
//========================== <VARIABLES> =======================================
//TOP PLAYERS & TOP CLANES
enum info
{
	NickTOP[32],
	AsesinatosTOP,
	MuertesTOP,
	Float:RatioTOP
};
new TopInfoP[MAX_TOP_PLAYERS+1][info];
new TopInfoC[MAX_TOP_CLANES+1][info];
new TopP[MAX_TOP_PLAYERS+1];
new TopC[MAX_TOP_CLANES+1];
new NOMBRE[MAX_DATOS][32];
new Float:VALOR[MAX_DATOS];
new bool:EnTop[MAX_DATOS];
//Strings diálogos:
new DLG_INFO_STR[2048];
//Si se ponen más lugares en el top players,
//modificar esto, máximo 4096:
new DLG_TOP_PLY_STR[1024];
//Si se ponen más lugares en el top clanes,
//modificar esto, máximo 4096:
new DLG_TOP_CLAN_STR[1024];
//JUGADORES:
new bool:Registrado[MAX_PLAYERS] = {false, ...};
new bool:Ingresado[MAX_PLAYERS] = {false, ...};
new Nickname[MAX_PLAYERS][MAX_PLAYER_NAME];
new Asesinatos[MAX_PLAYERS];
new Muertes[MAX_PLAYERS];
new Float:Ratio[MAX_PLAYERS];
//Combinador de colores:
new bool:CColor[MAX_PLAYERS] = {false, ...};
new CSelec[MAX_PLAYERS] = {1, ...};
new COLORES[MAX_PLAYERS][4];//0 ROJO, 1 VERDE, 2 AZUL, 3 Transparencia
//==============================================================================
//TextDraws Combinador de colores
new Text:NumColor[MAX_PLAYERS];
new Text:Color[MAX_PLAYERS];
new Text:CComb[MAX_PLAYERS];
new Text:Comb[MAX_PLAYERS];
//==============================================================================
//CLANES:
new Clan_TAG[MAX_PLAYERS][4];
new Clan_ID[MAX_PLAYERS];
new Invitacion[MAX_PLAYERS][4];
new bool:EnClan[MAX_PLAYERS];
//==============================================================================
new PlayerColors[200] = {
	0xFF8C1344,0xC715FF44,0x20B2AA44,0xDC143C44,0x6495ED44,0xf0e68c44,0x77889944,
	0xFF149344,0xF4A46044,0xEE82EE44,0xFFD72044,0x8b451344,0x4949A044,0x148b8b44,
	0x14ff7f44,0x556b2f44,0x0FD9FA44,0x10DC2944,0x53408144,0x0495CD44,0xEF6CE844,
	0xBD34DA44,0x247C1B44,0x0C8E5D44,0x635B0344,0xCB7ED344,0x65ADEB44,0x5C1ACC44,
	0xF2F85344,0x11F89144,0x7B39AA44,0x53EB1044,0x54137D44,0x27522244,0xF09F5B44,
	0x3D0A4F44,0x22F76744,0xD6303444,0x9A698044,0xDFB93544,0x3793FA44,0x90239D44,
	0xE9AB2F44,0xAF2FF344,0x057F9444,0xB9851944,0x388EEA44,0x02815144,0xA5504344,
	0x0DE01844,0x93AB1C44,0x95BAF044,0x36997644,0x18F71F44,0x4B898744,0x491B9E44,
	0x829DC744,0xBCE63544,0xCEA6DF44,0x20D4AD44,0x2D74FD44,0x3C1C0D44,0x12D6D444,
	0x48C00044,0x2A51E244,0xE3AC1244,0xFC42A844,0x2FC82744,0x1A30BF44,0xB740C244,
	0x42ACF544,0x2FD9DE44,0xFAFB7144,0x05D1CD44,0xC471BD44,0x94436E44,0xC1F7EC44,
	0xCE79EE44,0xBD1EF244,0x93B7E444,0x3214AA44,0x184D3B44,0xAE4B9944,0x7E49D744,
	0x4C436E44,0xFA24CC44,0xCE76BE44,0xA04E0A44,0x9F945C44,0xDCDE3D44,0x10C9C544,
	0x70524D44,0x0BE47244,0x8A2CD744,0x6152C244,0xCF72A944,0xE5933844,0xEEDC2D44,
	0xD8C76244,0xD8C76244,0xFF8C1344,0xC715FF44,0x20B2AA44,0xDC143C44,0x6495ED44,
	0xf0e68c44,0x77889944,0xFF149344,0xF4A46044,0xEE82EE44,0xFFD72044,0x8b451344,
	0x4949A044,0x148b8b44,0x14ff7f44,0x556b2f44,0x0FD9FA44,0x10DC2944,0x53408144,
	0x0495CD44,0xEF6CE844,0xBD34DA44,0x247C1B44,0x0C8E5D44,0x635B0344,0xCB7ED344,
	0x65ADEB44,0x5C1ACC44,0xF2F85344,0x11F89144,0x7B39AA44,0x53EB1044,0x54137D44,
	0x27522244,0xF09F5B44,0x3D0A4F44,0x22F76744,0xD6303444,0x9A698044,0xDFB93544,
	0x3793FA44,0x90239D44,0xE9AB2F44,0xAF2FF344,0x057F9444,0xB9851944,0x388EEA44,
	0x02815144,0xA5504344,0x0DE01844,0x93AB1C44,0x95BAF044,0x36997644,0x18F71F44,
	0x4B898744,0x491B9E44,0x829DC744,0xBCE63544,0xCEA6DF44,0x20D4AD44,0x2D74FD44,
	0x3C1C0D44,0x12D6D444,0x48C00044,0x2A51E244,0xE3AC1244,0xFC42A844,0x2FC82744,
	0x1A30BF44,0xB740C244,0x42ACF544,0x2FD9DE44,0xFAFB7144,0x05D1CD44,0xC471BD44,
	0x94436E44,0xC1F7EC44,0xCE79EE44,0xBD1EF244,0x93B7E444,0x3214AA44,0x184D3B44,
	0xAE4B9944,0x7E49D744,0x4C436E44,0xFA24CC44,0xCE76BE44,0xA04E0A44,0x9F945C44,
	0xDCDE3D44,0x10C9C544,0x70524D44,0x0BE47244,0x8A2CD744,0x6152C244,0xCF72A944,
	0xE5933844,0xEEDC2D44,0xD8C76244,0xD8C76244
};
//==============================================================================
public OnFilterScriptInit()
{
	new
	    Archivo[64];
	    
	SetTimer("ActualizarListaJugadores", 1500, 0);
	SetTimer("ActualizarTopPlayers", 3500, 0);
	SetTimer("ActualizarTopClanes", 5000, 0);
	
	//Crear Archivos si no existen:
	format(Archivo, sizeof Archivo, "Clan.ini");
	if(!dini_Exists(Archivo)) {
	    dini_Create(Archivo);
	    dini_IntSet(Archivo, "Clan_IDs", 0);
	}
	if(!fexist("Jugadores.txt")) {
	   	new
 			File:file = fopen("Jugadores.txt", io_write);

		fclose(file);
	}
	if(!fexist("Clanes.txt")) {
	   	new
 			File:file = fopen("Clanes.txt", io_write);

		fclose(file);
	}
	print("\n");
	print(" *===========================*");
	print(" | Sistema & Tops DINI 0.4.8 |");
	print(" *===========================*");
	print("\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

public OnPlayerConnect(playerid)
{
	new
		Archivo[64];
		
    GetPlayerName(playerid, Nickname[playerid], MAX_PLAYER_NAME);
	if(strfind(Nickname[playerid], "[", true) != -1 || strfind(Nickname[playerid], "]", true) != -1)
	{
	    SendClientMessage(playerid, ROJO, "Tu nick no puede contener corchetes");
	    return Kick(playerid);
	}
	//Verificar registro:
	format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", Nickname[playerid]);
	if(dini_Exists(Archivo)) Registrado[playerid] = true;
	SetPlayerColor(playerid, PlayerColors[playerid]);
	
	COLORES[playerid][0] = 0;//ROJO
	COLORES[playerid][1] = 0;//VERDE
	COLORES[playerid][2] = 0;//AZUL
	COLORES[playerid][3] = 255;//ALPHA
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	Invitacion[playerid][0] = 0;
	Clan_ID[playerid] = 0;
	Clan_TAG[playerid][0] = 0;
	EnClan[playerid] = false;
	Registrado[playerid] = false;
	Ingresado[playerid] = false;
	Asesinatos[playerid] = 0;
	Muertes[playerid] = 0;
	Ratio[playerid] = 0.0;
	SetPlayerName(playerid, Nickname[playerid]);
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
   	new
		Archivo[64],
		TempMuertes,
		TempAsesinatos;

	Muertes[playerid]++;
	Ratio[playerid] = float(Asesinatos[playerid]) / float(Muertes[playerid]);

    if(IsPlayerConnected(killerid))
    {
	   	Asesinatos[killerid]++;
	   	if(Muertes[killerid] == 0) Ratio[killerid] = float(Asesinatos[playerid]);
	   	else Ratio[killerid] = float(Asesinatos[killerid]) / float(Muertes[killerid]);
    }
	if(IsPlayerConnected(playerid) && Ingresado[playerid] == true)
	{
		format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", Nickname[playerid]);
  		if(dini_Exists(Archivo))
		{
 		    dini_IntSet(Archivo, "Muertes", Muertes[playerid]);
		    dini_FloatSet(Archivo, "Ratio", Ratio[playerid]);
		}
		if(EnClan[playerid] == true)
		{
		    format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
			if(dini_Exists(Archivo))
			{
			    dini_IntSet(Archivo, "Muertes", dini_Int(Archivo, "Muertes")+1);
				dini_FloatSet(Archivo, "Ratio", float(dini_Int(Archivo, "Asesinatos")) / float(dini_Int(Archivo, "Muertes")));
			}
		}
	}
	if(IsPlayerConnected(killerid))
	{
		if(Ingresado[killerid] == true)
		{
			format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", Nickname[killerid]);
	  		if(dini_Exists(Archivo))
			{
			    dini_IntSet(Archivo, "Asesinatos", Asesinatos[killerid]);
			    dini_FloatSet(Archivo, "Ratio", Ratio[killerid]);
			}
			if(EnClan[killerid] == true)
			{
			    format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[killerid]);
				if(dini_Exists(Archivo))
				{
				    TempMuertes = dini_Int(Archivo, "Muertes");
				    TempAsesinatos = dini_Int(Archivo, "Asesinatos");
				    dini_IntSet(Archivo, "Asesinatos", TempAsesinatos+1);
				    if(TempMuertes == 0) dini_FloatSet(Archivo, "Ratio", float(TempAsesinatos));
					else dini_FloatSet(Archivo, "Ratio", float(TempAsesinatos) / float(TempMuertes));
				}
			}
	  	}
	}
	return 1;
}

public OnPlayerText(playerid, text[])
{
	new
	    Nick[MAX_PLAYER_NAME],
		texto[128];
		
	if(text[0] == '!' && EnClan[playerid] == true)
	{
		GetPlayerName(playerid, Nick, sizeof Nick);
	    format(texto, sizeof texto, "%s: %s", Nick, text[1]);
	    for(new i = 0; i < MAX_PLAYERS; i++)
	    {
			if(IsPlayerConnected(i))
			{
    			if(Clan_ID[i] == Clan_ID[playerid])
				{
					SendClientMessage(i, CELESTE, texto);
				}
    		}
	    }
	    return 0;
	}
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	new
	    cmd[20],
		tmp[20],
		tmp2[20],
		tmp3[24],
		string[64],
		Archivo[64],
		Nick[MAX_PLAYER_NAME],
		longitud,
		id,
		File:file,
		idx;

	cmd = strtok(cmdtext, idx);
	
	if(!strcmp("/kill", cmd, true))
	{
	    SetPlayerHealth(playerid, 0.0);
	    return 1;
	}
	if(!strcmp("/registrar", cmd, true))
	{
	    if(Registrado[playerid] ==  true) return SendClientMessage(playerid, ROJO, "Ya estás registrado");
		tmp = strtok(cmdtext, idx);
		longitud =  strlen(tmp);
		if(longitud == 0) return SendClientMessage(playerid, BLANCO, "Uso /registrar [Contraseña]");
		if(longitud < 3 || longitud > 16)
		{
		    return SendClientMessage(playerid, ROJO, "La contraseña debe tener de 3 a 16 caracteres");
		}
		Registrar(playerid, tmp);
		return 1;
	}
	if(!strcmp("/login", cmd, true))
	{
	    if(Registrado[playerid] == false) return SendClientMessage(playerid, ROJO, "No estás registrado");
	    if(Ingresado[playerid] == true) return SendClientMessage(playerid, ROJO, "Ya estás logueado");
		tmp = strtok(cmdtext, idx);
		longitud =  strlen(tmp);
		if(longitud == 0) return SendClientMessage(playerid, BLANCO, "Uso /login [Contraseña]");
		Login(playerid, tmp);
		return 1;
	}
	if(!strcmp(cmd, "/stats", true))
	{
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, BLANCO, "Usa: /stats [id]");
		id = strval(tmp);
	    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, ROJO, "Jugador no conectado");
	    if(Ingresado[id] == false) return SendClientMessage(playerid, ROJO, "Ese jugador no está ingresado");
		format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", Nickname[id]);
		format(DLG_INFO_STR, sizeof DLG_INFO_STR, "~.~");
		if(dini_Exists(Archivo))
		{
			format(DLG_INFO_STR, sizeof DLG_INFO_STR, "Asesinatos: %d\n", dini_Int(Archivo, "Asesinatos"));
		    format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%sMuertes: %d\n", DLG_INFO_STR, dini_Int(Archivo, "Muertes"));
			format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%sRatio: %d\n", DLG_INFO_STR, dini_Float(Archivo, "Ratio"));
			format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%sClan: [%s]", DLG_INFO_STR, dini_Get(Archivo, "Clan"));
		}
		format(string, sizeof string, "Stadísticas de %s (%d)", Nickname[id], id);
		ShowPlayerDialog(playerid, DLG_PLY_INFO, DIALOG_STYLE_MSGBOX, string, DLG_INFO_STR, "Aceptar", "Cancelar");
	    return 1;
	}
	if(!strcmp(cmd, "/Topplayers", true))
	{
		ShowPlayerDialog(playerid, DLG_TOP_PLAYERS, DIALOG_STYLE_LIST, "Top Players", DLG_TOP_PLY_STR, "Aceptar", "Cancelar");
	    return 1;
	}
	if(!strcmp(cmd, "/Topclanes", true))
	{
		ShowPlayerDialog(playerid, DLG_TOP_CLANES, DIALOG_STYLE_LIST, "Top Clanes", DLG_TOP_CLAN_STR, "Aceptar", "Cancelar");
	    return 1;
	}
	if(!strcmp(cmd, "/clan", true))
	{
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, BLANCO, "Usa: /clan [crear, invitar, rechazar, entrar, salir, expulsar, info, color, colorh] [TAG] [Nombre]");
		if(!strcmp(tmp, "crear", true))
		{
			if(Ingresado[playerid] == false) return SendClientMessage(playerid, ROJO, "Necesitas estar logueado para usar este comando");
			//Aquí la condición antes de crear el clan
		    if(EnClan[playerid] == true) return SendClientMessage(playerid, ROJO, "Ya tienes clan");
		    tmp2 = strtok(cmdtext, idx);
			tmp3 = strrest(cmdtext, idx);
			if(!strlen(tmp2) || !strlen(tmp3)) return SendClientMessage(playerid, BLANCO, "Usa: /clan crear [TAG] [Nombre]");
			if(strlen(tmp2) < 1 || strlen(tmp2) > 3) return SendClientMessage(playerid, ROJO, "Sólo de 1 a 3 caracteres");
			if(strlen(tmp3) < 3 || strlen(tmp3) > 24) return SendClientMessage(playerid, ROJO, "Sólo de 3 a 24 caracteres");
	    	if(strfind(tmp2, "[", true) != -1 || strfind(tmp2, "]", true) != -1)
	    	{
				return SendClientMessage(playerid, ROJO, "Sin '[' ']' (corchetes).");
   			}
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", tmp2);
			if(!dini_Exists(Archivo))
			{
			    format(Clan_TAG[playerid], 4, "%s", tmp2);
			    Clan_ID[playerid] = dini_Int("Clan.ini", "Clan_IDs") + 1;
			    dini_IntSet("Clan.ini", "Clan_IDs", Clan_ID[playerid]);
   			    dini_Create(Archivo);
   			    dini_IntSet(Archivo, "ID", Clan_ID[playerid]);
			    dini_Set(Archivo, "Nombre", tmp3);
			    dini_Set(Archivo, "TAG", tmp2);
			    dini_IntSet(Archivo, "Color", 0);
			    dini_Set(Archivo, "Lider", Nickname[playerid]);
       			dini_IntSet(Archivo, "Miembros", 1);
       			dini_IntSet(Archivo, "Asesinatos", 0);
       			dini_IntSet(Archivo, "Muertes", 0);
       			dini_FloatSet(Archivo, "Ratio", 0.0);
       			dini_Set(Archivo, "Miembro_1", Nickname[playerid]);
       			for(new l = 2; l < 21; l++)
   				{
   				    format(string, sizeof string, "Miembro_%d", l);
   					dini_Set(Archivo, string, "<Vacio>");
   				}
			    format(Archivo, sizeof Archivo, "Jugadores/%s.ini", Nickname[playerid]);
			    dini_Set(Archivo, "Clan", Clan_TAG[playerid]);
			    file = fopen("Clanes.txt", io_append);
				format(string, sizeof(string), "%s;\r\n", Clan_TAG[playerid]);
				fwrite(file, string);
				fclose(file);
			    format(Nick, sizeof Nick, "[%s]%s", Clan_TAG[playerid], Nickname[playerid]);
			    SetPlayerName(playerid, Nick);
			    SetPlayerColor(playerid, 0);
			    EnClan[playerid] = true;
		        format(string, sizeof string, "Has creado el clan '%s' TAG: [%s]", tmp3, tmp2);
		        SendClientMessage(playerid, CELESTE, string);
		        SendClientMessage(playerid, NARANJA, "Usa /clan color/colorh para cambiar el color de tu clan");
			} else {
			    SendClientMessage(playerid, ROJO, "El TAG ya está en uso");
			}
			return 1;
		}
 		if(!strcmp(tmp, "invitar", true))
		{
            if(EnClan[playerid] == false) return SendClientMessage(playerid, ROJO, "No tienes clan");
			tmp2 = strtok(cmdtext, idx);
			if(!strlen(tmp2)) return SendClientMessage(playerid, BLANCO, "Usa: /clan invitar [id]");
			id = strval(tmp2);
			if(!IsPlayerConnected(id)) return SendClientMessage(playerid, ROJO, "Jugador no conectado");
			if(Ingresado[id] == false) return SendClientMessage(playerid, ROJO, "El jugador invitado necesita estar logueado");
			if(id == playerid) return SendClientMessage(playerid, ROJO, "No puedes enviarte invitación a ti mismo");
            if(EnClan[id] == true) return SendClientMessage(playerid, ROJO, "Ese jugador ya tiene clan");
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
			if(strcmp(dini_Get(Archivo, "Lider"), Nickname[playerid]) != 0)
				return SendClientMessage(playerid, ROJO, "Necesitas ser el creador del clan para poder invitar");
			format(string, sizeof string, "* %s te ha invitado al clan '%s'", Nickname[playerid], dini_Get(Archivo, "Nombre"));
			SendClientMessage(id, CELESTE, string);
			SendClientMessage(id, NARANJA, "Usa /clan entrar para aceptar la invitación o /clan rechazar para rechazar la invitación.");
			format(string, sizeof string, "* Has invitado a %s ", Nickname[id]);
			SendClientMessage(playerid, CELESTE, string);
			format(Invitacion[id], 4, "%s", Clan_TAG[playerid]);
			return 1;
		}
		if(!strcmp(tmp, "rechazar", true))
		{
		    if(!strlen(Invitacion[playerid])) return SendClientMessage(playerid, ROJO, "No te han invitado a ningun clan");
		   	Invitacion[playerid][0] = 0;
		    return 1;
		}
		if(!strcmp(tmp, "entrar", true))
		{
		    if(!strlen(Invitacion[playerid])) return SendClientMessage(playerid, ROJO, "No te han invitado a ningun clan");
	     	if(EnClan[playerid] == true) return SendClientMessage(playerid, ROJO, "Ya tienes clan");
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", Invitacion[playerid]);
		    if(dini_Exists(Archivo))
			{
	            new
					IDMiembro = 2;
					
			    if(dini_Int(Archivo, "Miembros") == 20) return SendClientMessage(playerid, ROJO, "El clan está lleno");
                dini_IntSet(Archivo, "Miembros", dini_Int(Archivo, "Miembros") + 1);
             	while(IDMiembro < 20)
				{
					format(string, sizeof string, "Miembro_%d", IDMiembro);
				    if(!strcmp(dini_Get(Archivo, string), "<Vacio>", true))
					{
						dini_Set(Archivo, string, Nickname[playerid]);
					    break;
					}
				    IDMiembro++;
				}
				format(Clan_TAG[playerid], 4, Invitacion[playerid]);
			    format(Archivo, sizeof Archivo, "Jugadores/%s.ini", Nickname[playerid]);
			    dini_Set(Archivo, "Clan", Clan_TAG[playerid]);
                format(Nick, sizeof Nick, "[%s]%s", Clan_TAG[playerid], Nickname[playerid]);
                SetPlayerName(playerid, Nick);
                format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
                SetPlayerColor(playerid, dini_Int(Archivo, "Color"));
       			format(string, sizeof string, "* %s has entrado al clan '%s'", dini_Get(Archivo, "Nombre"));
				SendClientMessage(playerid, BLANCO, string);
                Clan_ID[playerid] = dini_Int(Archivo, "ID");
   				format(string, sizeof string, "* %s ha entrado al clan", Nickname[playerid]);
   				for(new i = 0; i < MAX_PLAYERS; i++) {
        			if(i == playerid || !IsPlayerConnected(i)) continue;
					if(Clan_ID[playerid] == Clan_ID[i]) SendClientMessage(i, BLANCO, string);
				}
                EnClan[playerid] = true;
			} else return SendClientMessage(playerid, ROJO, "Ya no existe ese clan");
			return 1;
		}
		if(!strcmp(tmp, "salir", true))
		{
            if(EnClan[playerid] == false) return SendClientMessage(playerid, ROJO, "No tienes clan");
    		format(string, sizeof string, "* %s ha salido del clan", Nickname[playerid]);
			for(new i = 0; i < MAX_PLAYERS; i++) {
       			if(i == playerid || !IsPlayerConnected(i)) continue;
				if(Clan_ID[playerid] == Clan_ID[i]) SendClientMessage(i, BLANCO, string);
			}
			Clan_ID[playerid] = 0;
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
 			file = fopen(Archivo, io_read);
 			while(fread(file, string))
			{
			    idx = strfind(string, Nickname[playerid], true);
				if(idx != -1)
				{
				    strmid(string, string, 0, idx - 1, 16);
				    dini_Set(Archivo, string, "<Vacio>");
				}
			}
			fclose(file);
			dini_IntSet(Archivo, "Miembros", dini_Int(Archivo, "Miembros") - 1);
		    format(string, sizeof string, "* Saliste del clan '%s'", dini_Get(Archivo, "Nombre"));
    		SendClientMessage(playerid, ROJO, string);
    		
    		if(dini_Int(Archivo, "Miembros") == 0)
			{
			    new
			        Linea = 0,
				 	str[16];

				dini_Remove(Archivo);
			    file = fopen("Clanes.txt", io_read);
				format(str, sizeof str, "%s;", Clan_TAG[playerid]);
				while(fread(file, string))
				{
		   	    	Linea++;
			    	if(strfind(string, str, true) == 0)
			    	{
						fdeleteline("Clanes.txt", Linea);
						break;
			    	}
				}
				fclose(file);
				format(string, sizeof string, "Tu clan con el TAG '%s' ha sido borrado por falta de miembros", Clan_TAG[playerid]);
				SendClientMessage(playerid, ROJO, string);
			}
		    format(Archivo, sizeof Archivo, "Jugadores/%s.ini", Nickname[playerid]);
		    dini_Set(Archivo, "Clan", "<Ninguno>");
    		SetPlayerName(playerid, Nickname[playerid]);
		    SetPlayerColor(playerid, PlayerColors[playerid]);
			Clan_TAG[playerid][0] = 0;
			EnClan[playerid] = false;
            return 1;
		}
		if(!strcmp(tmp, "expulsar", true))
		{
            if(EnClan[playerid] == false) return SendClientMessage(playerid, ROJO, "No tienes clan");
      		tmp2 = strtok(cmdtext, idx);
			if(!strlen(tmp2)) return SendClientMessage(playerid, BLANCO, "Usa: /clan expulsar [id]");
			id = strval(tmp2);
			if(!IsPlayerConnected(id)) return SendClientMessage(playerid, ROJO, "Jugador no conectado");
			if(id == playerid) return SendClientMessage(playerid, ROJO, "No puedes expulsarte a ti mismo");
			if(Clan_ID[playerid] != Clan_ID[id]) return SendClientMessage(playerid, ROJO, "Ese jugador no está en tu clan");
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
            if(strcmp(dini_Get(Archivo, "Lider"), Nickname[playerid]) != 0)
				return SendClientMessage(playerid, ROJO, "Necesitas ser el creador del clan para poder expulsar");
			OnPlayerCommandText(id, "/clan salir");
			SendClientMessage(id, ROJO, "Fuiste expulsado del clan");
            return 1;
		}
		if(!strcmp(tmp, "info", true))
		{
		    tmp2 = strtok(cmdtext, idx);
 			if(!strlen(tmp2)) return SendClientMessage(playerid, BLANCO, "Usa: /clan info [TAG]");
 			format(Archivo, sizeof Archivo, "Clanes/%s.ini", tmp2);
 			if(dini_Exists(Archivo))
 			{
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "> ID: %d\n", dini_Int(Archivo, "ID"));
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Color: %d\n", DLG_INFO_STR, dini_Int(Archivo, "Color"));
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Líder: %s\n", DLG_INFO_STR, dini_Get(Archivo, "Lider"));
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Miembros: %d\n", DLG_INFO_STR, dini_Int(Archivo, "Miembros"));
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Asesinatos: %d\n", DLG_INFO_STR, dini_Int(Archivo, "Asesinatos"));
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Muertes: %d\n", DLG_INFO_STR, dini_Int(Archivo, "Muertes"));
				format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Ratio: %0.0f\n", DLG_INFO_STR, dini_Float(Archivo, "Ratio"));
				for(new d = 1; d < 21; d++)
				{
				    format(string, sizeof string, "Miembro_%d", d);
					format(DLG_INFO_STR, sizeof DLG_INFO_STR, "%s> Miembro %d: %s\n", DLG_INFO_STR, d, dini_Get(Archivo, string));
				}
				format(string, sizeof string, "Información '%s' [%s]", dini_Get(Archivo, "Nombre"), dini_Get(Archivo, "TAG"));
		    	ShowPlayerDialog(playerid, DLG_CLAN_INFO, DIALOG_STYLE_MSGBOX, string, DLG_INFO_STR, "Aceptar", "Cancelar");
        	} else return SendClientMessage(playerid, ROJO, "No existe ese clan");
        	return 1;
        }
		if(!strcmp(tmp, "color", true))
		{
			if(EnClan[playerid] == false) return SendClientMessage(playerid, ROJO, "No tienes clan");
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
			if(strcmp(dini_Get(Archivo, "Lider"), Nickname[playerid]) != 0)
				return SendClientMessage(playerid, ROJO, "Necesitas ser el creador del clan para poder cambiar el color");
			if(CColor[playerid] == true) {
				OcultarCombinador(playerid);
				TogglePlayerControllable(playerid, 1);
				CColor[playerid] = false;
				GameTextForPlayer(playerid, "~r~Cancelado", 100, 3);
			} else {
				MostrarCombinador(playerid);
				TogglePlayerControllable(playerid, 0);
				CColor[playerid] = true;
				SendClientMessage(playerid, NICESKY, "Usa /clan color para cancelar");
				GameTextForPlayer(playerid, "Usa ~<~, ~>~, ~u~, ~d~ y ~k~~PED_SPRINT~ ~n~para cambiar el color ~n~y ~k~~PED_FIREWEAPON~ para seleccionar", 20000, 3);
			}
			return 1;
		}
		if(!strcmp(tmp, "colorh", true))
		{
		    if(EnClan[playerid] == false) return SendClientMessage(playerid, ROJO, "No tienes clan");
			if(CColor[playerid] == true) return SendClientMessage(playerid, ROJO, "Cierra primero el combinador de colores.");
			if(strcmp(dini_Get(Archivo, "Lider"), Nickname[playerid]) != 0)
				return SendClientMessage(playerid, ROJO, "Necesitas ser el creador del clan para poder cambiar el color");
		    tmp2 = strtok(cmdtext, idx);
		    longitud = strlen(tmp2);
		    if(!longitud) return SendClientMessage(playerid, BLANCO, "Usa: /clan colorh [Código Hexadecimal]");
			if(longitud > 10) return SendClientMessage(playerid, ROJO, "Demasiado grande");

		    new
				rojo[3] = "00",
				azul[3] = "00",
				verde[3] = "00",
				alfa[3],
				ColorC;

		    if(tmp2[0] == '#')
		    {
				if(!IsAHexNumber(tmp2[1])) return SendClientMessage(playerid, ROJO, "Formato incorrecto. Ejemplo: #FFFFFFFF");
		        format(rojo, sizeof rojo, "%c%c", tmp2[1], tmp2[2]);
		        format(verde, sizeof verde, "%c%c", tmp2[3], tmp2[4]);
		        format(azul, sizeof azul, "%c%c", tmp2[5], tmp2[6]);
				if(tmp2[7] != '\0')
					format(alfa, sizeof alfa, "%c%c", tmp2[7], tmp2[8]);
				else alfa = "FF";
			    ColorC = RGBA(HexToInt(rojo), HexToInt(verde), HexToInt(azul), HexToInt(alfa));
		        format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
		    	dini_IntSet(Archivo, "Color", ColorC);
				for(new i = 0; i < MAX_PLAYERS; i++)
				{
				    if(IsPlayerConnected(i))
						if(Clan_ID[playerid] == Clan_ID[i])
							SetPlayerColor(i, ColorC);
				}
				format(string, sizeof string, "~y~~h~ Color seleccionado~n~~p~#%s%s%s%s", rojo, verde, azul, alfa);
				GameTextForPlayer(playerid, string, 3000, 4);
				return 1;
		    }
		    else if(tmp2[0] == '0' && tmp2[1] == 'x')
		    {
				if(!IsAHexNumber(tmp2[2])) return SendClientMessage(playerid, ROJO, "Formato incorrecto. Ejemplo: 0xFFFFFFFF");
		        format(rojo, sizeof rojo, "%c%c", tmp2[2], tmp2[3]);
		        format(verde, sizeof verde, "%c%c", tmp2[4], tmp2[5]);
		        format(azul, sizeof azul, "%c%c", tmp2[6], tmp2[7]);
				if(tmp2[8] != '\0')
					format(alfa, sizeof alfa, "%c%c", tmp2[8], tmp2[9]);
				else alfa = "FF";

			    ColorC = RGBA(HexToInt(rojo), HexToInt(verde), HexToInt(azul), HexToInt(alfa));
		        format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
		    	dini_IntSet(Archivo, "Color", ColorC);
				for(new i = 0; i < MAX_PLAYERS; i++)
				{
				    if(IsPlayerConnected(i))
						if(Clan_ID[playerid] == Clan_ID[i])
							SetPlayerColor(i, ColorC);
				}
				format(string, sizeof string, "~y~~h~ Color seleccionado~n~~p~0x%s%s%s%s", rojo, verde, azul, alfa);
				GameTextForPlayer(playerid, string, 3000, 4);
				return 1;
		    }
		    if(IsAHexNumber(tmp2))
		    {
		        format(rojo, sizeof rojo, "%c%c", tmp2[0], tmp2[1]);
		        format(verde, sizeof verde, "%c%c", tmp2[2], tmp2[3]);
		        format(azul, sizeof azul, "%c%c", tmp2[4], tmp2[5]);
				if(tmp2[6] != '\0')
					format(alfa, sizeof alfa, "%c%c", tmp2[6], tmp2[7]);
				else alfa = "FF";
			    ColorC = RGBA(HexToInt(rojo), HexToInt(verde), HexToInt(azul), HexToInt(alfa));
		        format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
		    	dini_IntSet(Archivo, "Color", ColorC);
				for(new i = 0; i < MAX_PLAYERS; i++)
				{
				    if(IsPlayerConnected(i))
						if(Clan_ID[playerid] == Clan_ID[i])
							SetPlayerColor(i, ColorC);
				}
				format(string, sizeof string, "~y~~h~ Color seleccionado~n~~p~%s%s%s%s", rojo, verde, azul, alfa);
				GameTextForPlayer(playerid, string, 3000, 4);
				return 1;
			} else return SendClientMessage(playerid, ROJO, "Formato incorrecto. Ejemplo: FFFFFFFF");
		}
        return 1;
	}
	return 0;
}

public OnPlayerUpdate(playerid)
{
	if(CColor[playerid] == true)
	{
	    new
	        keys,
	        updown,
	        leftright,
	        Archivo[64];
	        
	    GetPlayerKeys(playerid, keys, updown, leftright);
	    
	    if(updown < 0) CSelec[playerid]--;//ARRIBA
	    else if(updown > 0) CSelec[playerid]++;//ABAJO
	    if(CSelec[playerid] > 4) CSelec[playerid] = 1;
	    else if(CSelec[playerid] < 1) CSelec[playerid] = 4;
	    if(keys & KEY_FIRE)
	    {
	        new
	            ColorC = RGBA(COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);
	            
	        format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
	    	dini_IntSet(Archivo, "Color", ColorC);
			CColor[playerid] = false;
			OcultarCombinador(playerid);
			for(new i = 0; i < MAX_PLAYERS; i++)
			{
			    if(IsPlayerConnected(i))
					if(Clan_ID[playerid] == Clan_ID[i])
						SetPlayerColor(i, ColorC);
			}
			TogglePlayerControllable(playerid, 1);
			GameTextForPlayer(playerid, "~y~~h~ Color seleccionado", 3000, 4);
	    }
	    if(leftright > 0)//DERECHA
	    {
	        if(CSelec[playerid] == 1)//ROJO
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][0] += 5;
	            else COLORES[playerid][0]++;
	            if(COLORES[playerid][0] > 255) COLORES[playerid][0] = 0;
	        }
	        if(CSelec[playerid] == 2)//VERDE
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][1] += 5;
	            else COLORES[playerid][1]++;
                if(COLORES[playerid][1] > 255) COLORES[playerid][1] = 0;
	        }
	        if(CSelec[playerid] == 3)//AZUL
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][2] += 5;
	            else COLORES[playerid][2]++;
                if(COLORES[playerid][2] > 255) COLORES[playerid][2] = 0;
	        }
	        if(CSelec[playerid] == 4)//ALPHA
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][3] += 5;
	            else COLORES[playerid][3]++;
                if(COLORES[playerid][3] > 255) COLORES[playerid][3] = 0;
	        }
	    
	    }
	    if(leftright < 0)//IZQUIERDA
	    {
	        if(CSelec[playerid] == 1)//ROJO
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][0] -= 5;
                else COLORES[playerid][0]--;
                if(COLORES[playerid][0] < 0) COLORES[playerid][0] = 255;
	        }
	        if(CSelec[playerid] == 2)//VERDE
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][1] -= 5;
                else COLORES[playerid][1]--;
                if(COLORES[playerid][1] < 0) COLORES[playerid][1] = 255;
	        }
	        if(CSelec[playerid] == 3)//AZUL
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][2] -= 5;
                else COLORES[playerid][2]--;
                if(COLORES[playerid][2] < 0) COLORES[playerid][2] = 255;
	        }
	        if(CSelec[playerid] == 4)//ALHPA
	        {
	            if(keys & KEY_SPRINT) COLORES[playerid][3] -= 5;
                else COLORES[playerid][3]--;
                if(COLORES[playerid][3] < 0) COLORES[playerid][3] = 255;
	        }
	    }
	    ActualizarCombinador(playerid);
	}
	return 1;
}

forward ActualizarCombinador(playerid);
public ActualizarCombinador(playerid)
{
	new
		str[128],
		ColorS = RGBA(COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);

	if(CSelec[playerid] == 1) {
		format(str, sizeof str, "~w~>~r~ ROJO   ~<~ %03d ~>~ ~n~~g~ VERDE ~<~ %03d ~>~ ~n~~b~ AZUL   ~<~ %03d ~>~ ~n~~w~ ALPHA ~<~ %03d ~>~",
		COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);
	}
	if(CSelec[playerid] == 2) {
		format(str, sizeof str, "~r~ ROJO   ~<~ %03d ~>~ ~n~~w~>~g~ VERDE ~<~ %03d ~>~ ~n~~b~ AZUL   ~<~ %03d ~>~ ~n~~w~ ALPHA ~<~ %03d ~>~",
		COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);
	}
	if(CSelec[playerid] == 3) {
		format(str, sizeof str, "~r~ ROJO   ~<~ %03d ~>~ ~n~~g~ VERDE ~<~ %03d ~>~ ~n~~w~>~b~ AZUL   ~<~ %03d ~>~ ~n~~w~ ALPHA ~<~ %03d ~>~",
		COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);
	}
	if(CSelec[playerid] == 4) {
		format(str, sizeof str, "~r~ ROJO   ~<~ %03d ~>~ ~n~~g~ VERDE ~<~ %03d ~>~ ~n~~b~ AZUL   ~<~ %03d ~>~ ~n~~w~>~w~ ALPHA ~<~ %03d ~>~",
		COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);
	}
	TextDrawSetString(Comb[playerid], str);
	
	format(str, sizeof str, "~y~0x%02x%02x%02x%02x", COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);
	TextDrawSetString(NumColor[playerid], str);
	
	TextDrawHideForPlayer(playerid, Color[playerid]);
	TextDrawBoxColor(Color[playerid], ColorS);
	TextDrawShowForPlayer(playerid, Color[playerid]);
}

forward MostrarCombinador(playerid);
public MostrarCombinador(playerid)
{
	NumColor[playerid] = TextDrawCreate(9.000000, 237.000000, "~y~0x00000000");
	TextDrawBackgroundColor(NumColor[playerid], 255);
	TextDrawFont(NumColor[playerid], 1);
	TextDrawLetterSize(NumColor[playerid], 0.500000, 1.000000);
	TextDrawColor(NumColor[playerid], -1);
	TextDrawSetOutline(NumColor[playerid], 0);
	TextDrawSetProportional(NumColor[playerid], 1);
	TextDrawSetShadow(NumColor[playerid], 1);
	TextDrawUseBox(NumColor[playerid], 1);
	TextDrawBoxColor(NumColor[playerid], 1684300900);
	TextDrawTextSize(NumColor[playerid], 153.000000, 0.000000);

	Color[playerid] = TextDrawCreate(9.000000, 255.000000, "BOX");
	TextDrawBackgroundColor(Color[playerid], 0);
	TextDrawFont(Color[playerid], 1);
	TextDrawLetterSize(Color[playerid], 1.630000, 2.099999);
	TextDrawColor(Color[playerid], 0);
	TextDrawSetProportional(Color[playerid], 1);
	TextDrawUseBox(Color[playerid], 1);
	TextDrawBoxColor(Color[playerid], 0);
	TextDrawTextSize(Color[playerid], 153.000000, 0.000000);

	CComb[playerid] = TextDrawCreate(9.000000, 283.000000, "BOX");
	TextDrawBackgroundColor(CComb[playerid], 0);
	TextDrawFont(CComb[playerid], 1);
	TextDrawLetterSize(CComb[playerid], 1.630000, 5.100001);
	TextDrawColor(CComb[playerid], 0);
	TextDrawSetOutline(CComb[playerid], 0);
	TextDrawSetProportional(CComb[playerid], 1);
	TextDrawSetShadow(CComb[playerid], 1);
	TextDrawUseBox(CComb[playerid], 1);
	TextDrawBoxColor(CComb[playerid], 1684300900);
	TextDrawTextSize(CComb[playerid], 153.000000, 0.000000);

	Comb[playerid] = TextDrawCreate(9.000000, 280.000000, "~r~ ROJO   ~<~ 255 ~>~ ~n~~g~ VERDE ~<~ 255 ~>~ ~n~~b~ AZUL   ~<~ 255 ~>~ ~n~~w~ ALPHA ~<~ 255 ~>~");
	TextDrawBackgroundColor(Comb[playerid], 255);
	TextDrawFont(Comb[playerid], 2);
	TextDrawLetterSize(Comb[playerid], 0.400000, 1.400000);
	TextDrawColor(Comb[playerid], -1);
	TextDrawSetOutline(Comb[playerid], 0);
	TextDrawSetProportional(Comb[playerid], 1);
	TextDrawSetShadow(Comb[playerid], 1);

	TextDrawShowForPlayer(playerid, NumColor[playerid]);
	TextDrawShowForPlayer(playerid, Color[playerid]);
	TextDrawShowForPlayer(playerid, CComb[playerid]);
	TextDrawShowForPlayer(playerid, Comb[playerid]);
}

forward OcultarCombinador(playerid);
public OcultarCombinador(playerid)
{
	TextDrawHideForPlayer(playerid, NumColor[playerid]);
	TextDrawHideForPlayer(playerid, Color[playerid]);
	TextDrawHideForPlayer(playerid, CComb[playerid]);
	TextDrawHideForPlayer(playerid, Comb[playerid]);

	TextDrawDestroy(NumColor[playerid]);
	TextDrawDestroy(Color[playerid]);
	TextDrawDestroy(CComb[playerid]);
	TextDrawDestroy(Comb[playerid]);
	
	COLORES[playerid][0] = 0;//ROJO
	COLORES[playerid][1] = 0;//VERDE
	COLORES[playerid][2] = 0;//AZUL
	COLORES[playerid][3] = 255;//ALPHA
}

forward ActualizarListaJugadores();
public ActualizarListaJugadores()
{
	new
	    File:file,
	    bool:Existe = false,
	    string[128],
	    str[32];

	for(new i = 0; i < MAX_PLAYERS; i++)
	{
	    if(IsPlayerConnected(i))
	    {
			if(Ingresado[i] == true)
			{
				format(str, sizeof(str), "%s;", Nickname[i]);
				file = fopen("Jugadores.txt", io_read);
				while(fread(file, string))
				{
	    			if(strfind(string, str, true) == 0)
	    			{
						Existe = true;
	    			}
				}
				fclose(file);
				if(Existe == false)
				{
					file = fopen("Jugadores.txt", io_append);
					format(string, sizeof(string), "%s;\r\n", Nickname[i]);
					fwrite(file, string);
					fclose(file);
				}
			}
		}
		Existe = false;
	}
}


forward ActualizarTopClanes();
public ActualizarTopClanes()
{
	new
	    File:file,
	    Archivo[64],
	    string[128],
	    Linea,
	    Lugar,
	    Float:MAX_VALOR = -1.0;

	//EXTRAER DATOS DEL ARCHIVO "Clanes.txt"
	file = fopen("Clanes.txt", io_read);
	while(fread(file, string))
	{
	    new
	        v = strfind(string, ";", true);
	        
		strmid(NOMBRE[Linea], string, 0, v, 24);
		format(Archivo, sizeof Archivo, "Clanes/%s.ini", NOMBRE[Linea]);
		if(dini_Exists(Archivo))
		{
		    VALOR[Linea] = dini_Float(Archivo, "Ratio");
		}
	    Linea++;
	}
	fclose(file);
	//SACAR LUGARES Y GUARDARLOS
	Lugar = 1;
	while(Lugar < MAX_TOP_CLANES+1)
	{
		for(new i = 0; i < MAX_DATOS; i++)
		{
		    if(EnTop[i] == false)
		    {
				if(VALOR[i] > MAX_VALOR)
				{
					MAX_VALOR = VALOR[i];
					TopC[Lugar] = i;
				}
		    }
		}
		strmid(TopInfoC[Lugar][NickTOP], NOMBRE[TopC[Lugar]], 0, strlen(NOMBRE[TopC[Lugar]]), 24);
		format(Archivo, sizeof Archivo, "Clanes/%s.ini", TopInfoC[Lugar][NickTOP]);
		TopInfoC[Lugar][AsesinatosTOP] =  dini_Int(Archivo, "Asesinatos");
		TopInfoC[Lugar][MuertesTOP] = dini_Int(Archivo, "Muertes");
		TopInfoC[Lugar][RatioTOP] = dini_Float(Archivo, "Ratio");
		EnTop[TopC[Lugar]] = true;
		MAX_VALOR = -1;
	    Lugar++;
	}
	//RESETEAR DATOS:
	for(new s = 0; s < MAX_DATOS; s++)
	{
		EnTop[s] = false;
		NOMBRE[s][0] = 0;
		VALOR[s] = 0.0;
	}
	//GUARDAR DATOS EN UNA CADENA DE CARACTERES
	format(DLG_TOP_CLAN_STR, sizeof DLG_TOP_CLAN_STR, "");
	Lugar = 1;
	while(Lugar < MAX_TOP_CLANES+1)
	{
	    if(strlen(TopInfoP[Lugar][NickTOP])) {
			format(DLG_TOP_CLAN_STR, sizeof DLG_TOP_CLAN_STR,
			"%s| %2d | A: %6d | M: %6d | A/M: %0.1f| Clan: %s \n",
			DLG_TOP_CLAN_STR, Lugar, TopInfoC[Lugar][AsesinatosTOP], TopInfoC[Lugar][MuertesTOP],
			TopInfoC[Lugar][RatioTOP], TopInfoC[Lugar][NickTOP]);
		}
		Lugar++;
	}
//	print(DLG_TOP_CLAN_STR); //DEBUG
	SetTimer("ActualizarTopClanes", 62000, 0);
}

forward ActualizarTopPlayers();
public ActualizarTopPlayers()
{
	new
	    File:file,
	    Archivo[64],
	    string[128],
	    Linea,
	    Lugar,
	    Float:MAX_VALOR = -1.0;

	//EXTRAER DATOS DEL ARCHIVO "Jugadores.txt"
	file = fopen("Jugadores.txt", io_read);
	while(fread(file, string))
	{
	    new
	        v = strfind(string, ";", true);
	        
	    strmid(NOMBRE[Linea], string, 0, v, 24);
		format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", NOMBRE[Linea]);
		if(dini_Exists(Archivo))
		{
			VALOR[Linea] = dini_Float(Archivo, "Ratio");
		}
	    Linea++;
	}
	fclose(file);
	//SACAR LUGARES Y GUARDARLOS
	Lugar = 1;
	while(Lugar < MAX_TOP_PLAYERS+1)
	{
		for(new i = 0; i < MAX_DATOS; i++)
		{
		    if(EnTop[i] == false)
		    {
				if(VALOR[i] > MAX_VALOR)
				{
					MAX_VALOR = VALOR[i];
					TopP[Lugar] = i;
				}
		    }
		}
		strmid(TopInfoP[Lugar][NickTOP], NOMBRE[TopP[Lugar]], 0, strlen(NOMBRE[TopP[Lugar]]), 24);
		format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", TopInfoP[Lugar][NickTOP]);
		TopInfoP[Lugar][AsesinatosTOP] =  dini_Int(Archivo, "Asesinatos");
		TopInfoP[Lugar][MuertesTOP] = dini_Int(Archivo, "Muertes");
		TopInfoP[Lugar][RatioTOP] = dini_Float(Archivo, "Ratio");
		EnTop[TopP[Lugar]] = true;
		MAX_VALOR = -1;
	    Lugar++;
	}
	//RESETEAR DATOS:
	for(new s = 0; s < MAX_DATOS; s++)
	{
		EnTop[s] = false;
		NOMBRE[s][0] = 0;
		VALOR[s] = 0.0;
	}
	//GUARDAR DATOS EN UNA CADENA DE CARACTERES
	format(DLG_TOP_PLY_STR, sizeof(DLG_TOP_PLY_STR),"");
	Lugar = 1;
	while(Lugar < MAX_TOP_PLAYERS+1)
	{
	    if(strlen(TopInfoP[Lugar][NickTOP])) {
			format(DLG_TOP_PLY_STR, sizeof(DLG_TOP_PLY_STR),
			"%s| %2d | A: %6d | M: %6d | A/M: %0.1f| Nick: %s \n",
			DLG_TOP_PLY_STR, Lugar, TopInfoP[Lugar][AsesinatosTOP], TopInfoP[Lugar][MuertesTOP],
			TopInfoP[Lugar][RatioTOP], TopInfoP[Lugar][NickTOP]);
		}
		Lugar++;
	}
//	print(DLG_TOP_PLY_STR); //DEBUG
	SetTimer("ActualizarTopPlayers", 60000, 0);
	SetTimer("ActualizarListaJugadores", 10000, 0);
}

stock Registrar(playerid, pass[])
{
	new
		Archivo[64],
		str[128];

	format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", NickName(playerid));
	if(!dini_Exists(Archivo))
	{
		dini_Create(Archivo);
		dini_Set(Archivo, "Contrasena", pass);
		dini_IntSet(Archivo, "Asesinatos", 0);
		dini_IntSet(Archivo, "Muertes", 0);
		dini_FloatSet(Archivo, "Ratio", 0.0);
		dini_Set(Archivo, "Clan", "<Ninguno>");
    	format(str, sizeof(str), "Nick '%s' registrado. Contrasena: '%s' ", NickName(playerid), pass);
    	SendClientMessage(playerid, NICESKY, str);
   		Registrado[playerid] = true;
    	SendClientMessage(playerid, NARANJA, "Ahora usa /login [contraseña]");
	}
}

stock Login(playerid, pass[])
{
	new
		Archivo[64],
		Nick[MAX_PLAYER_NAME];

	format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", NickName(playerid));
  	if(dini_Exists(Archivo))
	{
		if(!strcmp(dini_Get(Archivo, "Contrasena"), pass, false))
		{
		    strmid(Nickname[playerid], NickName(playerid), 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
			Asesinatos[playerid] = dini_Int(Archivo, "Asesinatos");
			Muertes[playerid] = dini_Int(Archivo, "Muertes");
			Ratio[playerid] = dini_Float(Archivo, "Ratio");
			Ingresado[playerid] = true;
			format(Archivo, sizeof Archivo, "Clanes/%s.ini", dini_Get(Archivo, "Clan"));
			if(dini_Exists(Archivo))
			{
			    format(Clan_TAG[playerid], 4, dini_Get(Archivo, "TAG"));
                format(Nick, sizeof Nick, "[%s]%s", Clan_TAG[playerid], Nickname[playerid]);
                SetPlayerName(playerid, Nick);
       		    SetPlayerColor(playerid, dini_Int(Archivo, "Color"));
       		    Clan_ID[playerid] = dini_Int(Archivo, "ID");
       		    EnClan[playerid] = true;
			}
			SendClientMessage(playerid, NICESKY, "Logueado Correctamente");
		} else SendClientMessage(playerid, ROJO, "Contraseña Incorrecta");
	}
}

stock NickName(playerid)
{
	new
	    NickP[MAX_PLAYER_NAME];

	GetPlayerName(playerid, NickP, sizeof NickP);
	return NickP;
}

//Por Zamaroht
stock RGBA(red, green, blue, alpha)
{
	return (red * 16777216) + (green * 65536) + (blue * 256) + alpha;
}

//Por Zoutdaxv
stock IsAHexNumber(string[])
{
	new
	    longitud = strlen(string);

	if(longitud == 0) return false;
	
	for(new s = 0; s < longitud; s++)
	{
		if(string[s] < 48 || string[s] > 57 && string[s] < 65 || string[s] > 70)
		{
			return false;
		}
	}
	return true;
}

//Por Dracoblue
stock HexToInt(string[])
{
  	if(string[0] == 0) return 0;

  	new
		i = strlen(string),
  		cur = 1,
 		res = 0;

  	for( ; i > 0; i--)
	{
    	if(string[i-1] < 58) res = res + cur * (string[i-1] - 48);
		else res = res + cur * (string[i-1] - 55);
    	cur = cur * 16;
  	}
  	return res;
}

stock fdeleteline(filename[], Line)
{
	new
	    string[256],
	    temp[64],
	    File:file,
	    File:filetemp,
	    fline = 1;

    if(!fexist(filename)) return 0;

    format(temp, sizeof temp, "%s.tmp", filename);
    filetemp = fopen(temp, io_write);
    file = fopen(filename, io_read);

    while(fread(file, string))
    {
		if(fline == Line) continue;
		fwrite(filetemp, string);
   		fline++;
    }

    fclose(file);
    fclose(filetemp);

    file = fopen(filename, io_write);
    filetemp = fopen(temp, io_read);

    while(fread(filetemp, string))
    {
        fwrite(file, string);
    }

    fclose(file);
    fclose(filetemp);
    fremove(temp);
	return 1;
}

stock strtok(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
		index++;
	}

	new offset = index;
	new result[20];
	while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}
	result[index - offset] = EOS;
	return result;
}

stock strrest(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
		index++;
	}
	new offset = index;
	new result[24];
	while ((index < length) && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}
	result[index - offset] = EOS;
	return result;
}